UNPKG

@sebastianwessel/quickjs

Version:

A typescript package to execute JavaScript and TypeScript code in a WebAssembly QuickJS sandbox

184 lines (183 loc) 7.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createVirtualFileSystem = void 0; const node_fs_1 = require("node:fs"); const node_path_1 = require("node:path"); const memfs_1 = require("memfs"); const assert_js_1 = __importDefault(require("./modules/assert.js")); const buffer_js_1 = __importDefault(require("./modules/buffer.js")); const events_js_1 = __importDefault(require("./modules/events.js")); const fs_js_1 = __importDefault(require("./modules/fs.js")); const fs_promises_js_1 = __importDefault(require("./modules/fs_promises.js")); const module_js_1 = __importDefault(require("./modules/module.js")); const headers_js_1 = __importDefault(require("./modules/nodeCompatibility/headers.js")); const request_js_1 = __importDefault(require("./modules/nodeCompatibility/request.js")); const response_js_1 = __importDefault(require("./modules/nodeCompatibility/response.js")); const path_js_1 = __importDefault(require("./modules/path.js")); const process_js_1 = __importDefault(require("./modules/process.js")); const punycode_js_1 = __importDefault(require("./modules/punycode.js")); const querystring_js_1 = __importDefault(require("./modules/querystring.js")); const string_decoder_js_1 = __importDefault(require("./modules/string_decoder.js")); const timers_js_1 = __importDefault(require("./modules/timers.js")); const timers_promises_js_1 = __importDefault(require("./modules/timers_promises.js")); const url_js_1 = __importDefault(require("./modules/url.js")); const util_js_1 = __importDefault(require("./modules/util.js")); /** * Create the virtual file system for the sandbox * Creates a node_modules folder with packages and ensures the src folder * * @param runtimeOptions * @returns filesystem fs and volume vol */ const createVirtualFileSystem = (runtimeOptions = {}) => { const customFileSystem = runtimeOptions.mountFs; // setup node_modules folder const virtualFS = { '/': { ...customFileSystem, src: { // biome-ignore lint/complexity/useLiteralKeys: <explanation> ...(customFileSystem?.['src'] ? customFileSystem?.['src'] : {}), }, node_modules: { ...runtimeOptions?.nodeModules, '@node_compatibility': { headers: headers_js_1.default, request: request_js_1.default, response: response_js_1.default, }, assert: { 'index.js': assert_js_1.default, }, async_hooks: { 'index.js': "throw new Error('module async_hooks not implemented')", }, buffer: { 'index.js': buffer_js_1.default, }, child_process: { 'index.js': "throw new Error('module child_process not implemented')", }, cluster: { 'index.js': "throw new Error('module cluster not implemented')", }, console: { 'index.js': "throw new Error('module console not implemented')", }, crypto: { 'index.js': "throw new Error('module crypto not implemented')", }, dgram: { 'index.js': "throw new Error('module dgram not implemented')", }, dns: { 'index.js': "throw new Error('module dns not implemented')", }, domain: { 'index.js': "throw new Error('module domain not implemented')", }, events: { 'index.js': events_js_1.default, }, fs: { 'index.js': fs_js_1.default, promises: { 'index.js': fs_promises_js_1.default, }, }, http: { 'index.js': "throw new Error('module http not implemented')", }, http2: { 'index.js': "throw new Error('module http2 not implemented')", }, https: { 'index.js': "throw new Error('module https not implemented')", }, inspector: { 'index.js': "throw new Error('module inspector not implemented')", }, module: { 'index.js': module_js_1.default, }, net: { 'index.js': "throw new Error('module net not implemented')", }, os: { 'index.js': "throw new Error('module os not implemented')", }, path: { 'index.js': path_js_1.default, }, perf_hooks: { 'index.js': "throw new Error('module perf_hooks not implemented')", }, process: { 'index.js': process_js_1.default, }, punycode: { 'index.js': punycode_js_1.default, }, querystring: { 'index.js': querystring_js_1.default, }, readline: { 'index.js': "throw new Error('module readline not implemented')", }, repl: { 'index.js': "throw new Error('module repl not implemented')", }, stream: { 'index.js': "throw new Error('module stream not implemented')", }, string_decoder: { 'index.js': string_decoder_js_1.default, }, timers: { 'index.js': timers_js_1.default, promises: { 'index.js': timers_promises_js_1.default, }, }, tls: { 'index.js': "throw new Error('module tls not implemented')", }, trace_events: { 'index.js': "throw new Error('module trace_events not implemented')", }, tty: { 'index.js': "throw new Error('module tty not implemented')", }, url: { 'index.js': url_js_1.default, }, util: { 'index.js': util_js_1.default, }, v8: { 'index.js': "throw new Error('module v8 not implemented')", }, vm: { 'index.js': "throw new Error('module vm not implemented')", }, worker_threads: { 'index.js': "throw new Error('module worker_threads not implemented')", }, zlib: { 'index.js': "throw new Error('module zlib not implemented')", }, }, }, }; if (runtimeOptions.enableTestUtils) { virtualFS['/'].node_modules.test = { 'index.js': (0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, 'modules', 'build', 'test-lib.js')), }; } const { vol, fs } = (0, memfs_1.memfs)(virtualFS, '/'); return { vol, fs }; }; exports.createVirtualFileSystem = createVirtualFileSystem;