@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
243 lines (241 loc) • 7.09 kB
JavaScript
import { __name } from './chunk-43IZMM3W.js';
import { isAbsolutePath } from '@stryke/path/is-file';
import { joinPaths } from '@stryke/path/join-paths';
import { isFunction } from '@stryke/type-checks/is-function';
var FILE_PREFIX = "file://";
function toFilePath(pathOrUrl) {
if (!pathOrUrl) {
throw new Error("No Path or URL provided to Virtual File System");
}
let result = pathOrUrl.toString();
if (result.startsWith(FILE_PREFIX)) {
result = result.slice(FILE_PREFIX.length);
}
return result;
}
__name(toFilePath, "toFilePath");
var FS_METHODS = [
"mkdir",
"mkdirSync",
"rmdir",
"rmdirSync",
"unlink",
"unlinkSync",
"existsSync",
"realpathSync",
"writeFileSync",
"readFileSync",
"readdirSync",
"createWriteStream",
"WriteStream",
"createReadStream",
"ReadStream"
];
var FS_PROMISE_METHODS = [
"mkdir",
"rm",
"rmdir",
"unlink",
"writeFile",
"readFile",
"readdir",
"stat",
"lstat"
];
function cloneFS(originalFS) {
const clonedFS = {
...originalFS,
promises: {
...originalFS.promises ?? {}
}
};
for (const method of FS_METHODS) {
if (originalFS[method]) {
clonedFS[method] = originalFS[method];
}
}
originalFS.promises ??= {};
for (const method of FS_PROMISE_METHODS) {
if (originalFS.promises[method]) {
clonedFS.promises ??= {};
clonedFS.promises[method] = originalFS.promises[method];
clonedFS[method] = originalFS.promises[method];
}
}
for (const prop in clonedFS) {
if (isFunction(clonedFS[prop])) {
clonedFS[prop] = clonedFS[prop].bind(originalFS);
if (isFunction(clonedFS.promises[prop])) {
clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
}
}
}
for (const prop in clonedFS.promises) {
if (isFunction(clonedFS.promises[prop])) {
clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
}
}
return clonedFS;
}
__name(cloneFS, "cloneFS");
function patchFS(originalFS, vfs) {
const clonedFS = cloneFS(originalFS);
originalFS.mkdirSync = vfs.mkdirSync.bind(vfs);
originalFS.mkdir = vfs.mkdir.bind(vfs);
originalFS.promises.mkdir = vfs.mkdir.bind(vfs);
originalFS.unlinkSync = vfs.unlinkSync.bind(vfs);
originalFS.promises.rm = vfs.rm.bind(vfs);
originalFS.promises.unlink = vfs.unlink.bind(vfs);
originalFS.existsSync = vfs.existsSync.bind(vfs);
originalFS.realpathSync = vfs.realpathSync.bind(vfs);
originalFS.writeFileSync = vfs.writeFileSync.bind(vfs);
originalFS.promises.writeFile = vfs.writeFile.bind(vfs);
originalFS.readFileSync = vfs.readFileSync.bind(vfs);
originalFS.promises.readFile = vfs.readFile.bind(vfs);
originalFS.readdirSync = vfs.readdirSync.bind(vfs);
originalFS.promises.readdir = vfs.readdir.bind(vfs);
Object.defineProperty(originalFS, "statSync", {
value: vfs.statSync.bind(vfs)
});
originalFS.stat = vfs.statSync.bind(vfs);
originalFS.promises.stat = vfs.stat.bind(vfs);
Object.defineProperty(originalFS, "lstatSync", {
value: vfs.lstatSync.bind(vfs)
});
originalFS.lstat = vfs.lstatSync.bind(vfs);
originalFS.promises.lstat = vfs.lstat.bind(vfs);
return () => {
originalFS.mkdirSync = clonedFS.mkdirSync;
originalFS.mkdir = clonedFS.mkdir;
originalFS.promises.mkdir = clonedFS.promises.mkdir;
originalFS.unlinkSync = clonedFS.unlinkSync;
originalFS.promises.rm = clonedFS.promises.rm;
originalFS.promises.unlink = clonedFS.promises.unlink;
originalFS.existsSync = clonedFS.existsSync;
originalFS.realpathSync = clonedFS.realpathSync;
originalFS.writeFileSync = clonedFS.writeFileSync;
originalFS.promises.writeFile = clonedFS.promises.writeFile;
originalFS.readFileSync = clonedFS.readFileSync;
originalFS.promises.readFile = clonedFS.promises.readFile;
originalFS.readdirSync = clonedFS.readdirSync;
originalFS.promises.readdir = clonedFS.promises.readdir;
Object.defineProperty(originalFS, "statSync", {
value: clonedFS.statSync
});
originalFS.stat = clonedFS.stat;
originalFS.promises.stat = clonedFS.promises.stat;
Object.defineProperty(originalFS, "lstatSync", {
value: clonedFS.lstatSync
});
originalFS.lstat = clonedFS.lstat;
originalFS.promises.lstat = clonedFS.promises.lstat;
};
}
__name(patchFS, "patchFS");
var FILENAME_LOWERCASE_REGEX = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g;
function toLowerCase(x) {
return x.toLowerCase();
}
__name(toLowerCase, "toLowerCase");
function toFileNameLowerCase(x) {
return FILENAME_LOWERCASE_REGEX.test(x) ? x.replace(FILENAME_LOWERCASE_REGEX, toLowerCase) : x;
}
__name(toFileNameLowerCase, "toFileNameLowerCase");
function checkAbsolute(request, vfs) {
if (!isAbsolutePath(request)) {
return false;
}
if (vfs.pathExistsSync(request)) {
return request;
}
const result = checkVariants(request, vfs);
if (result) {
return result;
}
return false;
}
__name(checkAbsolute, "checkAbsolute");
function checkRelative(context, request, vfs, options = {}) {
const file = options.parentPath ? joinPaths(options.parentPath, request) : request;
if (vfs.pathExistsSync(file)) {
return file;
}
const result = checkVariants(request, vfs, options.parentPath);
if (result) {
return result;
}
return false;
}
__name(checkRelative, "checkRelative");
function checkVariants(request, vfs, parentPath) {
const path = parentPath ? joinPaths(parentPath, request) : request;
let file = checkExtensions(path, vfs);
if (file) {
return file;
}
file = checkIndex(path, vfs);
if (file) {
return file;
}
return false;
}
__name(checkVariants, "checkVariants");
function checkIndex(request, vfs) {
let file = joinPaths(request, "index");
if (vfs.fileExistsSync(file)) {
return file;
}
file = checkExtensions(file, vfs);
if (file) {
return file;
}
return false;
}
__name(checkIndex, "checkIndex");
function checkExtensions(request, vfs) {
let file = `${request}.ts`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.mts`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.cts`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.tsx`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.js`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.mjs`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.cjs`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.jsx`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.json`;
if (vfs.fileExistsSync(file)) {
return file;
}
file = `${request}.d.ts`;
if (vfs.fileExistsSync(file)) {
return file;
}
return false;
}
__name(checkExtensions, "checkExtensions");
export { FILE_PREFIX, checkAbsolute, checkExtensions, checkIndex, checkRelative, checkVariants, cloneFS, patchFS, toFileNameLowerCase, toFilePath };
//# sourceMappingURL=chunk-2OSZJ6ND.js.map
//# sourceMappingURL=chunk-2OSZJ6ND.js.map