UNPKG

@storm-stack/core

Version:

A build toolkit and runtime used by Storm Software in TypeScript applications

243 lines (241 loc) 7.09 kB
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