UNPKG

@storm-stack/core

Version:

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

257 lines (253 loc) 8.48 kB
'use strict'; 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;