@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
257 lines (253 loc) • 8.48 kB
JavaScript
var chunkA43FUIC2_cjs = require('./chunk-A43FUIC2.cjs');
var isType = require('@stryke/path/is-type');
var joinPaths = require('@stryke/path/join-paths');
var isFunction = require('@stryke/type-checks/is-function');
// src/base/vfs/helpers.ts
chunkA43FUIC2_cjs.init_cjs_shims();
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;
}
chunkA43FUIC2_cjs.__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.isFunction(clonedFS[prop])) {
clonedFS[prop] = clonedFS[prop].bind(originalFS);
if (isFunction.isFunction(clonedFS.promises[prop])) {
clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
}
}
}
for (const prop in clonedFS.promises) {
if (isFunction.isFunction(clonedFS.promises[prop])) {
clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
}
}
return clonedFS;
}
chunkA43FUIC2_cjs.__name(cloneFS, "cloneFS");
function patchFS(originalFS, vfs) {
const clonedFS = cloneFS(originalFS);
originalFS.mkdirSync = (file, options) => vfs.mkdirSync(toFilePath(file), options);
originalFS.mkdir = (file, options, callback) => vfs.mkdir(toFilePath(file), options, callback);
originalFS.promises.mkdir = async (file, options) => vfs.mkdir(toFilePath(file), options);
originalFS.unlinkSync = (file) => vfs.unlinkSync(toFilePath(file));
originalFS.promises.rm = async (file, options) => vfs.rm(toFilePath(file), options);
originalFS.promises.unlink = async (file) => vfs.unlink(toFilePath(file));
originalFS.existsSync = (file) => vfs.existsSync(toFilePath(file));
Object.defineProperty(originalFS, "realpathSync", {
value: /* @__PURE__ */ chunkA43FUIC2_cjs.__name((file, options) => vfs.realpathSync(toFilePath(file), options), "value")
});
originalFS.writeFileSync = (file, data, options) => vfs.writeFileSync(toFilePath(file), data, options);
originalFS.promises.writeFile = async (file, data, options) => vfs.writeFile(toFilePath(file), data, options);
originalFS.readFileSync = (file, options) => vfs.readFileSync(toFilePath(file), options);
originalFS.promises.readFile = (file, options) => vfs.readFile(toFilePath(file), options);
originalFS.readdirSync = (file, options) => vfs.readdirSync(toFilePath(file), options);
originalFS.promises.readdir = (file, options) => vfs.readdir(toFilePath(file), options);
Object.defineProperty(originalFS, "statSync", {
value: /* @__PURE__ */ chunkA43FUIC2_cjs.__name((file, options) => vfs.statSync(toFilePath(file), options), "value")
});
originalFS.stat = (file, options) => vfs.statSync(toFilePath(file), options);
originalFS.promises.stat = (file, options) => vfs.stat(toFilePath(file), options);
Object.defineProperty(originalFS, "lstatSync", {
value: /* @__PURE__ */ chunkA43FUIC2_cjs.__name((file, options) => vfs.lstatSync(toFilePath(file), options), "value")
});
originalFS.lstat = (file, options) => vfs.lstatSync(toFilePath(file), options);
originalFS.promises.lstat = (file, options) => vfs.lstat(toFilePath(file), options);
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;
};
}
chunkA43FUIC2_cjs.__name(patchFS, "patchFS");
var FILENAME_LOWERCASE_REGEX = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g;
function toLowerCase(x) {
return x.toLowerCase();
}
chunkA43FUIC2_cjs.__name(toLowerCase, "toLowerCase");
function toFileNameLowerCase(x) {
return FILENAME_LOWERCASE_REGEX.test(x) ? x.replace(FILENAME_LOWERCASE_REGEX, toLowerCase) : x;
}
chunkA43FUIC2_cjs.__name(toFileNameLowerCase, "toFileNameLowerCase");
function checkAbsolute(request, vfs) {
if (!isType.isAbsolutePath(request)) {
return false;
}
if (vfs.pathExistsSync(request)) {
return request;
}
const result = checkVariants(request, vfs);
if (result) {
return result;
}
return false;
}
chunkA43FUIC2_cjs.__name(checkAbsolute, "checkAbsolute");
function checkRelative(context, request, vfs, options = {}) {
const file = options.parentPath ? joinPaths.joinPaths(options.parentPath, request) : request;
if (vfs.pathExistsSync(file)) {
return file;
}
const result = checkVariants(request, vfs, options.parentPath);
if (result) {
return result;
}
return false;
}
chunkA43FUIC2_cjs.__name(checkRelative, "checkRelative");
function checkVariants(request, vfs, parentPath) {
const path = parentPath ? joinPaths.joinPaths(parentPath, request) : request;
let file = checkExtensions(path, vfs);
if (file) {
return file;
}
file = checkIndex(path, vfs);
if (file) {
return file;
}
return false;
}
chunkA43FUIC2_cjs.__name(checkVariants, "checkVariants");
function checkIndex(request, vfs) {
let file = joinPaths.joinPaths(request, "index");
if (vfs.fileExistsSync(file)) {
return file;
}
file = checkExtensions(file, vfs);
if (file) {
return file;
}
return false;
}
chunkA43FUIC2_cjs.__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;
}
chunkA43FUIC2_cjs.__name(checkExtensions, "checkExtensions");
exports.FILE_PREFIX = FILE_PREFIX;
exports.checkAbsolute = checkAbsolute;
exports.checkExtensions = checkExtensions;
exports.checkIndex = checkIndex;
exports.checkRelative = checkRelative;
exports.checkVariants = checkVariants;
exports.cloneFS = cloneFS;
exports.patchFS = patchFS;
exports.toFileNameLowerCase = toFileNameLowerCase;
exports.toFilePath = toFilePath;
;