@ricsam/isolate 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +254 -0
- package/dist/cjs/bridge/diagnostics.cjs +2 -2
- package/dist/cjs/bridge/diagnostics.cjs.map +1 -1
- package/dist/cjs/bridge/legacy-adapters.cjs +2 -2
- package/dist/cjs/bridge/legacy-adapters.cjs.map +1 -1
- package/dist/cjs/bridge/request-context.cjs +2 -2
- package/dist/cjs/bridge/request-context.cjs.map +1 -1
- package/dist/cjs/bridge/runtime-bindings.cjs +2 -2
- package/dist/cjs/bridge/runtime-bindings.cjs.map +1 -1
- package/dist/cjs/browser/browser-runtime.cjs +2 -2
- package/dist/cjs/browser/browser-runtime.cjs.map +1 -1
- package/dist/cjs/daemon.cjs +2 -2
- package/dist/cjs/daemon.cjs.map +1 -1
- package/dist/cjs/files/index.cjs +2 -2
- package/dist/cjs/files/index.cjs.map +1 -1
- package/dist/cjs/host/create-isolate-host.cjs +4 -4
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/index.cjs +2 -2
- package/dist/cjs/host/index.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/internal/client/connection.cjs +2 -2
- package/dist/cjs/internal/client/connection.cjs.map +1 -1
- package/dist/cjs/internal/client/index.cjs +2 -2
- package/dist/cjs/internal/client/index.cjs.map +1 -1
- package/dist/cjs/internal/client/types.cjs +2 -2
- package/dist/cjs/internal/client/types.cjs.map +1 -1
- package/dist/cjs/internal/console/index.cjs +2 -2
- package/dist/cjs/internal/console/index.cjs.map +1 -1
- package/dist/cjs/internal/console/utils.cjs +2 -2
- package/dist/cjs/internal/console/utils.cjs.map +1 -1
- package/dist/cjs/internal/core/index.cjs +2 -2
- package/dist/cjs/internal/core/index.cjs.map +1 -1
- package/dist/cjs/internal/crypto/index.cjs +2 -2
- package/dist/cjs/internal/crypto/index.cjs.map +1 -1
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs +2 -2
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +1 -1
- package/dist/cjs/internal/daemon/connection.cjs +2 -2
- package/dist/cjs/internal/daemon/connection.cjs.map +1 -1
- package/dist/cjs/internal/daemon/daemon.cjs +2 -2
- package/dist/cjs/internal/daemon/daemon.cjs.map +1 -1
- package/dist/cjs/internal/daemon/index.cjs +2 -2
- package/dist/cjs/internal/daemon/index.cjs.map +1 -1
- package/dist/cjs/internal/daemon/runtime-pool.cjs +2 -2
- package/dist/cjs/internal/daemon/runtime-pool.cjs.map +1 -1
- package/dist/cjs/internal/daemon/types.cjs +2 -2
- package/dist/cjs/internal/daemon/types.cjs.map +1 -1
- package/dist/cjs/internal/encoding/index.cjs +2 -2
- package/dist/cjs/internal/encoding/index.cjs.map +1 -1
- package/dist/cjs/internal/fetch/consistency/origins.cjs +2 -2
- package/dist/cjs/internal/fetch/consistency/origins.cjs.map +1 -1
- package/dist/cjs/internal/fetch/index.cjs +2 -2
- package/dist/cjs/internal/fetch/index.cjs.map +1 -1
- package/dist/cjs/internal/fetch/stream-state.cjs +2 -2
- package/dist/cjs/internal/fetch/stream-state.cjs.map +1 -1
- package/dist/cjs/internal/fs/index.cjs +2 -2
- package/dist/cjs/internal/fs/index.cjs.map +1 -1
- package/dist/cjs/internal/fs/node-adapter.cjs +2 -2
- package/dist/cjs/internal/fs/node-adapter.cjs.map +1 -1
- package/dist/cjs/internal/module-loader/bundle.cjs +2 -2
- package/dist/cjs/internal/module-loader/bundle.cjs.map +1 -1
- package/dist/cjs/internal/module-loader/index.cjs +2 -2
- package/dist/cjs/internal/module-loader/index.cjs.map +1 -1
- package/dist/cjs/internal/module-loader/mappings.cjs +2 -2
- package/dist/cjs/internal/module-loader/mappings.cjs.map +1 -1
- package/dist/cjs/internal/module-loader/resolve.cjs +2 -2
- package/dist/cjs/internal/module-loader/resolve.cjs.map +1 -1
- package/dist/cjs/internal/module-loader/strip-types.cjs +2 -2
- package/dist/cjs/internal/module-loader/strip-types.cjs.map +1 -1
- package/dist/cjs/internal/path/index.cjs +2 -2
- package/dist/cjs/internal/path/index.cjs.map +1 -1
- package/dist/cjs/internal/playwright/client.cjs +2 -2
- package/dist/cjs/internal/playwright/client.cjs.map +1 -1
- package/dist/cjs/internal/playwright/handler.cjs +2 -2
- package/dist/cjs/internal/playwright/handler.cjs.map +1 -1
- package/dist/cjs/internal/playwright/index.cjs +2 -2
- package/dist/cjs/internal/playwright/index.cjs.map +1 -1
- package/dist/cjs/internal/playwright/types.cjs +2 -2
- package/dist/cjs/internal/playwright/types.cjs.map +1 -1
- package/dist/cjs/internal/protocol/codec.cjs +2 -2
- package/dist/cjs/internal/protocol/codec.cjs.map +1 -1
- package/dist/cjs/internal/protocol/framing.cjs +2 -2
- package/dist/cjs/internal/protocol/framing.cjs.map +1 -1
- package/dist/cjs/internal/protocol/index.cjs +2 -2
- package/dist/cjs/internal/protocol/index.cjs.map +1 -1
- package/dist/cjs/internal/protocol/marshalValue.cjs +2 -2
- package/dist/cjs/internal/protocol/marshalValue.cjs.map +1 -1
- package/dist/cjs/internal/protocol/serialization.cjs +2 -2
- package/dist/cjs/internal/protocol/serialization.cjs.map +1 -1
- package/dist/cjs/internal/protocol/types.cjs +2 -2
- package/dist/cjs/internal/protocol/types.cjs.map +1 -1
- package/dist/cjs/internal/runtime/index.cjs +2 -2
- package/dist/cjs/internal/runtime/index.cjs.map +1 -1
- package/dist/cjs/internal/server/index.cjs +2 -2
- package/dist/cjs/internal/server/index.cjs.map +1 -1
- package/dist/cjs/internal/test-environment/index.cjs +2 -2
- package/dist/cjs/internal/test-environment/index.cjs.map +1 -1
- package/dist/cjs/internal/timers/index.cjs +2 -2
- package/dist/cjs/internal/timers/index.cjs.map +1 -1
- package/dist/cjs/internal/transform/index.cjs +2 -2
- package/dist/cjs/internal/transform/index.cjs.map +1 -1
- package/dist/cjs/internal/typecheck/index.cjs +2 -2
- package/dist/cjs/internal/typecheck/index.cjs.map +1 -1
- package/dist/cjs/internal/typecheck/isolate-types.cjs +2 -2
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +1 -1
- package/dist/cjs/internal/typecheck/typecheck.cjs +2 -2
- package/dist/cjs/internal/typecheck/typecheck.cjs.map +1 -1
- package/dist/cjs/modules/index.cjs +2 -2
- package/dist/cjs/modules/index.cjs.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/runtime/script-runtime.cjs +2 -2
- package/dist/cjs/runtime/script-runtime.cjs.map +1 -1
- package/dist/cjs/server/app-server.cjs +2 -2
- package/dist/cjs/server/app-server.cjs.map +1 -1
- package/dist/cjs/testing/integration-helpers.cjs +2 -2
- package/dist/cjs/testing/integration-helpers.cjs.map +1 -1
- package/dist/cjs/typecheck/index.cjs +2 -2
- package/dist/cjs/typecheck/index.cjs.map +1 -1
- package/dist/cjs/types.cjs +2 -2
- package/dist/cjs/types.cjs.map +1 -1
- package/dist/mjs/bridge/diagnostics.mjs +2 -2
- package/dist/mjs/bridge/diagnostics.mjs.map +1 -1
- package/dist/mjs/bridge/legacy-adapters.mjs +2 -2
- package/dist/mjs/bridge/legacy-adapters.mjs.map +1 -1
- package/dist/mjs/bridge/request-context.mjs +2 -2
- package/dist/mjs/bridge/request-context.mjs.map +1 -1
- package/dist/mjs/bridge/runtime-bindings.mjs +2 -2
- package/dist/mjs/bridge/runtime-bindings.mjs.map +1 -1
- package/dist/mjs/browser/browser-runtime.mjs +2 -2
- package/dist/mjs/browser/browser-runtime.mjs.map +1 -1
- package/dist/mjs/daemon.mjs +2 -2
- package/dist/mjs/daemon.mjs.map +1 -1
- package/dist/mjs/files/index.mjs +2 -2
- package/dist/mjs/files/index.mjs.map +1 -1
- package/dist/mjs/host/create-isolate-host.mjs +3 -3
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/index.mjs +2 -2
- package/dist/mjs/host/index.mjs.map +1 -1
- package/dist/mjs/index.mjs +2 -2
- package/dist/mjs/index.mjs.map +1 -1
- package/dist/mjs/internal/client/connection.mjs +2 -2
- package/dist/mjs/internal/client/connection.mjs.map +1 -1
- package/dist/mjs/internal/client/index.mjs +2 -2
- package/dist/mjs/internal/client/index.mjs.map +1 -1
- package/dist/mjs/internal/client/types.mjs +1 -1
- package/dist/mjs/internal/client/types.mjs.map +1 -1
- package/dist/mjs/internal/console/index.mjs +2 -2
- package/dist/mjs/internal/console/index.mjs.map +1 -1
- package/dist/mjs/internal/console/utils.mjs +2 -2
- package/dist/mjs/internal/console/utils.mjs.map +1 -1
- package/dist/mjs/internal/core/index.mjs +2 -2
- package/dist/mjs/internal/core/index.mjs.map +1 -1
- package/dist/mjs/internal/crypto/index.mjs +2 -2
- package/dist/mjs/internal/crypto/index.mjs.map +1 -1
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs +2 -2
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +1 -1
- package/dist/mjs/internal/daemon/connection.mjs +2 -2
- package/dist/mjs/internal/daemon/connection.mjs.map +1 -1
- package/dist/mjs/internal/daemon/daemon.mjs +2 -2
- package/dist/mjs/internal/daemon/daemon.mjs.map +1 -1
- package/dist/mjs/internal/daemon/index.mjs +2 -2
- package/dist/mjs/internal/daemon/index.mjs.map +1 -1
- package/dist/mjs/internal/daemon/runtime-pool.mjs +2 -2
- package/dist/mjs/internal/daemon/runtime-pool.mjs.map +1 -1
- package/dist/mjs/internal/daemon/types.mjs +1 -1
- package/dist/mjs/internal/daemon/types.mjs.map +1 -1
- package/dist/mjs/internal/encoding/index.mjs +2 -2
- package/dist/mjs/internal/encoding/index.mjs.map +1 -1
- package/dist/mjs/internal/fetch/consistency/origins.mjs +2 -2
- package/dist/mjs/internal/fetch/consistency/origins.mjs.map +1 -1
- package/dist/mjs/internal/fetch/index.mjs +2 -2
- package/dist/mjs/internal/fetch/index.mjs.map +1 -1
- package/dist/mjs/internal/fetch/stream-state.mjs +2 -2
- package/dist/mjs/internal/fetch/stream-state.mjs.map +1 -1
- package/dist/mjs/internal/fs/index.mjs +2 -2
- package/dist/mjs/internal/fs/index.mjs.map +1 -1
- package/dist/mjs/internal/fs/node-adapter.mjs +2 -2
- package/dist/mjs/internal/fs/node-adapter.mjs.map +1 -1
- package/dist/mjs/internal/module-loader/bundle.mjs +2 -2
- package/dist/mjs/internal/module-loader/bundle.mjs.map +1 -1
- package/dist/mjs/internal/module-loader/index.mjs +2 -2
- package/dist/mjs/internal/module-loader/index.mjs.map +1 -1
- package/dist/mjs/internal/module-loader/mappings.mjs +2 -2
- package/dist/mjs/internal/module-loader/mappings.mjs.map +1 -1
- package/dist/mjs/internal/module-loader/resolve.mjs +2 -2
- package/dist/mjs/internal/module-loader/resolve.mjs.map +1 -1
- package/dist/mjs/internal/module-loader/strip-types.mjs +2 -2
- package/dist/mjs/internal/module-loader/strip-types.mjs.map +1 -1
- package/dist/mjs/internal/path/index.mjs +2 -2
- package/dist/mjs/internal/path/index.mjs.map +1 -1
- package/dist/mjs/internal/playwright/client.mjs +2 -2
- package/dist/mjs/internal/playwright/client.mjs.map +1 -1
- package/dist/mjs/internal/playwright/handler.mjs +2 -2
- package/dist/mjs/internal/playwright/handler.mjs.map +1 -1
- package/dist/mjs/internal/playwright/index.mjs +2 -2
- package/dist/mjs/internal/playwright/index.mjs.map +1 -1
- package/dist/mjs/internal/playwright/types.mjs +2 -2
- package/dist/mjs/internal/playwright/types.mjs.map +1 -1
- package/dist/mjs/internal/protocol/codec.mjs +2 -2
- package/dist/mjs/internal/protocol/codec.mjs.map +1 -1
- package/dist/mjs/internal/protocol/framing.mjs +2 -2
- package/dist/mjs/internal/protocol/framing.mjs.map +1 -1
- package/dist/mjs/internal/protocol/index.mjs +2 -2
- package/dist/mjs/internal/protocol/index.mjs.map +1 -1
- package/dist/mjs/internal/protocol/marshalValue.mjs +2 -2
- package/dist/mjs/internal/protocol/marshalValue.mjs.map +1 -1
- package/dist/mjs/internal/protocol/serialization.mjs +2 -2
- package/dist/mjs/internal/protocol/serialization.mjs.map +1 -1
- package/dist/mjs/internal/protocol/types.mjs +2 -2
- package/dist/mjs/internal/protocol/types.mjs.map +1 -1
- package/dist/mjs/internal/runtime/index.mjs +2 -2
- package/dist/mjs/internal/runtime/index.mjs.map +1 -1
- package/dist/mjs/internal/server/index.mjs +2 -2
- package/dist/mjs/internal/server/index.mjs.map +1 -1
- package/dist/mjs/internal/test-environment/index.mjs +2 -2
- package/dist/mjs/internal/test-environment/index.mjs.map +1 -1
- package/dist/mjs/internal/timers/index.mjs +2 -2
- package/dist/mjs/internal/timers/index.mjs.map +1 -1
- package/dist/mjs/internal/transform/index.mjs +2 -2
- package/dist/mjs/internal/transform/index.mjs.map +1 -1
- package/dist/mjs/internal/typecheck/index.mjs +2 -2
- package/dist/mjs/internal/typecheck/index.mjs.map +1 -1
- package/dist/mjs/internal/typecheck/isolate-types.mjs +2 -2
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +1 -1
- package/dist/mjs/internal/typecheck/typecheck.mjs +2 -2
- package/dist/mjs/internal/typecheck/typecheck.mjs.map +1 -1
- package/dist/mjs/modules/index.mjs +2 -2
- package/dist/mjs/modules/index.mjs.map +1 -1
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/runtime/script-runtime.mjs +2 -2
- package/dist/mjs/runtime/script-runtime.mjs.map +1 -1
- package/dist/mjs/server/app-server.mjs +2 -2
- package/dist/mjs/server/app-server.mjs.map +1 -1
- package/dist/mjs/testing/integration-helpers.mjs +2 -2
- package/dist/mjs/testing/integration-helpers.mjs.map +1 -1
- package/dist/mjs/typecheck/index.mjs +2 -2
- package/dist/mjs/typecheck/index.mjs.map +1 -1
- package/dist/mjs/types.mjs +1 -1
- package/dist/mjs/types.mjs.map +1 -1
- package/package.json +46 -38
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import ivm from \"isolated-vm\";\nimport { setupCore, clearAllInstanceState } from \"../core/index.cjs\";\n\nexport { clearAllInstanceState };\n\n// ============================================================================\n// FileSystemHandler Interface\n// ============================================================================\n\nexport interface FileSystemHandler {\n /** Get or create a file handle at the given path */\n getFileHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void>;\n\n /** Get or create a directory handle at the given path */\n getDirectoryHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void>;\n\n /** Remove a file or directory at the given path */\n removeEntry(\n path: string,\n options?: { recursive?: boolean }\n ): Promise<void>;\n\n /** List contents of a directory */\n readDirectory(\n path: string\n ): Promise<Array<{ name: string; kind: \"file\" | \"directory\" }>>;\n\n /** Read file content */\n readFile(\n path: string\n ): Promise<{ data: Uint8Array; size: number; lastModified: number; type: string }>;\n\n /** Write data to a file */\n writeFile(\n path: string,\n data: Uint8Array,\n position?: number\n ): Promise<void>;\n\n /** Truncate a file to a specific size */\n truncateFile(path: string, size: number): Promise<void>;\n\n /** Get file metadata without reading content */\n getFileMetadata(\n path: string\n ): Promise<{ size: number; lastModified: number; type: string }>;\n}\n\nexport interface FsOptions {\n /** Get a file system handler for the given path */\n getDirectory(path: string): Promise<FileSystemHandler>;\n}\n\nexport interface FsHandle {\n dispose(): void;\n}\n\n// ============================================================================\n// Instance State Management\n// ============================================================================\n\nconst instanceStateMap = new WeakMap<ivm.Context, Map<number, unknown>>();\nlet nextInstanceId = 1;\n\nfunction getInstanceStateMapForContext(\n context: ivm.Context\n): Map<number, unknown> {\n let map = instanceStateMap.get(context);\n if (!map) {\n map = new Map();\n instanceStateMap.set(context, map);\n }\n return map;\n}\n\n// ============================================================================\n// State Types\n// ============================================================================\n\ninterface DirectoryHandleState {\n instanceId: number;\n path: string; // Path within handler's root, e.g., \"/\" or \"/subdir\"\n name: string; // Directory name, e.g., \"\" for root or \"subdir\"\n handler: FileSystemHandler; // Handler for this directory tree\n}\n\ninterface FileHandleState {\n instanceId: number;\n path: string; // Path within handler's root, e.g., \"/file.txt\"\n name: string; // File name, e.g., \"file.txt\"\n handler: FileSystemHandler; // Handler for this file\n}\n\ninterface WritableStreamState {\n instanceId: number;\n filePath: string; // Path to the file being written\n position: number; // Current write position (for seek)\n buffer: Uint8Array[]; // Buffered writes before close\n closed: boolean; // Whether stream has been closed\n handler: FileSystemHandler; // Handler for this stream\n}\n\n// ============================================================================\n// FileSystemDirectoryHandle Implementation\n// ============================================================================\n\nfunction setupFileSystemDirectoryHandle(\n context: ivm.Context,\n stateMap: Map<number, unknown>\n): void {\n const global = context.global;\n\n // Property getters\n global.setSync(\n \"__FileSystemDirectoryHandle_get_name\",\n new ivm.Callback((instanceId: number) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n return state?.name ?? \"\";\n })\n );\n\n global.setSync(\n \"__FileSystemDirectoryHandle_get_path\",\n new ivm.Callback((instanceId: number) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n return state?.path ?? \"/\";\n })\n );\n\n // getFileHandle - async reference\n const getFileHandleRef = new ivm.Reference(\n async (instanceId: number, name: string, optionsJson: string) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]Directory handle not found\");\n }\n\n const options = JSON.parse(optionsJson) as { create?: boolean };\n const childPath = state.path === \"/\" ? `/${name}` : `${state.path}/${name}`;\n\n try {\n await state.handler.getFileHandle(childPath, options);\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n\n // Create file handle state with parent's handler\n const fileInstanceId = nextInstanceId++;\n const fileState: FileHandleState = {\n instanceId: fileInstanceId,\n path: childPath,\n name,\n handler: state.handler,\n };\n stateMap.set(fileInstanceId, fileState);\n\n return JSON.stringify({ instanceId: fileInstanceId });\n }\n );\n global.setSync(\"__FileSystemDirectoryHandle_getFileHandle_ref\", getFileHandleRef);\n\n // getDirectoryHandle - async reference\n const getDirectoryHandleRef = new ivm.Reference(\n async (instanceId: number, name: string, optionsJson: string) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]Directory handle not found\");\n }\n\n const options = JSON.parse(optionsJson) as { create?: boolean };\n const childPath = state.path === \"/\" ? `/${name}` : `${state.path}/${name}`;\n\n try {\n await state.handler.getDirectoryHandle(childPath, options);\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n\n // Create directory handle state with parent's handler\n const dirInstanceId = nextInstanceId++;\n const dirState: DirectoryHandleState = {\n instanceId: dirInstanceId,\n path: childPath,\n name,\n handler: state.handler,\n };\n stateMap.set(dirInstanceId, dirState);\n\n return JSON.stringify({ instanceId: dirInstanceId });\n }\n );\n global.setSync(\"__FileSystemDirectoryHandle_getDirectoryHandle_ref\", getDirectoryHandleRef);\n\n // removeEntry - async reference\n const removeEntryRef = new ivm.Reference(\n async (instanceId: number, name: string, optionsJson: string) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]Directory handle not found\");\n }\n\n const options = JSON.parse(optionsJson) as { recursive?: boolean };\n const childPath = state.path === \"/\" ? `/${name}` : `${state.path}/${name}`;\n\n try {\n await state.handler.removeEntry(childPath, options);\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n }\n );\n global.setSync(\"__FileSystemDirectoryHandle_removeEntry_ref\", removeEntryRef);\n\n // readDirectory - async reference (for entries/keys/values)\n const readDirectoryRef = new ivm.Reference(async (instanceId: number) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]Directory handle not found\");\n }\n\n try {\n const entries = await state.handler.readDirectory(state.path);\n\n // Create handle states for each entry and return with instance IDs\n const result = entries.map((entry) => {\n const entryId = nextInstanceId++;\n const entryPath = state.path === \"/\" ? `/${entry.name}` : `${state.path}/${entry.name}`;\n\n if (entry.kind === \"file\") {\n const fileState: FileHandleState = {\n instanceId: entryId,\n path: entryPath,\n name: entry.name,\n handler: state.handler,\n };\n stateMap.set(entryId, fileState);\n } else {\n const dirState: DirectoryHandleState = {\n instanceId: entryId,\n path: entryPath,\n name: entry.name,\n handler: state.handler,\n };\n stateMap.set(entryId, dirState);\n }\n\n return {\n name: entry.name,\n kind: entry.kind,\n instanceId: entryId,\n };\n });\n\n return JSON.stringify(result);\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n });\n global.setSync(\"__FileSystemDirectoryHandle_readDirectory_ref\", readDirectoryRef);\n\n // isSameEntry - sync callback\n global.setSync(\n \"__FileSystemDirectoryHandle_isSameEntry\",\n new ivm.Callback((id1: number, id2: number) => {\n const state1 = stateMap.get(id1) as DirectoryHandleState | undefined;\n const state2 = stateMap.get(id2) as DirectoryHandleState | undefined;\n if (!state1 || !state2) return false;\n return state1.path === state2.path;\n })\n );\n\n // resolve - async reference\n const resolveRef = new ivm.Reference(\n async (instanceId: number, descendantId: number) => {\n const state = stateMap.get(instanceId) as DirectoryHandleState | undefined;\n const descendantState = stateMap.get(descendantId) as\n | DirectoryHandleState\n | FileHandleState\n | undefined;\n\n if (!state || !descendantState) {\n return \"null\";\n }\n\n // Check if descendant is actually a descendant\n const basePath = state.path === \"/\" ? \"\" : state.path;\n if (!descendantState.path.startsWith(basePath + \"/\") && descendantState.path !== state.path) {\n return \"null\";\n }\n\n // Build path components\n const relativePath = descendantState.path.slice(basePath.length);\n const components = relativePath.split(\"/\").filter((c) => c.length > 0);\n\n return JSON.stringify(components);\n }\n );\n global.setSync(\"__FileSystemDirectoryHandle_resolve_ref\", resolveRef);\n\n // Inject FileSystemDirectoryHandle class\n const directoryHandleCode = `\n(function() {\n const _directoryHandleInstanceIds = new WeakMap();\n\n function __decodeError(err) {\n if (!(err instanceof Error)) return err;\n const match = err.message.match(/^\\\\[(TypeError|RangeError|NotFoundError|TypeMismatchError|InvalidModificationError|Error)\\\\](.*)$/);\n if (match) {\n if (['NotFoundError', 'TypeMismatchError', 'InvalidModificationError'].includes(match[1])) {\n return new DOMException(match[2], match[1]);\n }\n const ErrorType = globalThis[match[1]] || Error;\n return new ErrorType(match[2]);\n }\n return err;\n }\n\n class FileSystemDirectoryHandle {\n constructor(path, name) {\n // Internal construction from instance ID\n if (typeof path === 'number' && name === null) {\n _directoryHandleInstanceIds.set(this, path);\n return;\n }\n const instanceId = __FileSystemDirectoryHandle_construct(path, name);\n _directoryHandleInstanceIds.set(this, instanceId);\n }\n\n static _fromInstanceId(instanceId) {\n return new FileSystemDirectoryHandle(instanceId, null);\n }\n\n _getInstanceId() {\n return _directoryHandleInstanceIds.get(this);\n }\n\n get kind() {\n return 'directory';\n }\n\n get name() {\n return __FileSystemDirectoryHandle_get_name(this._getInstanceId());\n }\n\n async getFileHandle(name, options = {}) {\n try {\n const resultJson = await __FileSystemDirectoryHandle_getFileHandle_ref.apply(\n undefined,\n [this._getInstanceId(), name, JSON.stringify(options)],\n { result: { promise: true, copy: true } }\n );\n const result = JSON.parse(resultJson);\n return FileSystemFileHandle._fromInstanceId(result.instanceId);\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async getDirectoryHandle(name, options = {}) {\n try {\n const resultJson = await __FileSystemDirectoryHandle_getDirectoryHandle_ref.apply(\n undefined,\n [this._getInstanceId(), name, JSON.stringify(options)],\n { result: { promise: true, copy: true } }\n );\n const result = JSON.parse(resultJson);\n return FileSystemDirectoryHandle._fromInstanceId(result.instanceId);\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async removeEntry(name, options = {}) {\n try {\n await __FileSystemDirectoryHandle_removeEntry_ref.apply(\n undefined,\n [this._getInstanceId(), name, JSON.stringify(options)],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async *entries() {\n let entriesJson;\n try {\n entriesJson = await __FileSystemDirectoryHandle_readDirectory_ref.apply(\n undefined,\n [this._getInstanceId()],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n const entries = JSON.parse(entriesJson);\n for (const entry of entries) {\n if (entry.kind === 'file') {\n yield [entry.name, FileSystemFileHandle._fromInstanceId(entry.instanceId)];\n } else {\n yield [entry.name, FileSystemDirectoryHandle._fromInstanceId(entry.instanceId)];\n }\n }\n }\n\n async *keys() {\n for await (const [name] of this.entries()) {\n yield name;\n }\n }\n\n async *values() {\n for await (const [, handle] of this.entries()) {\n yield handle;\n }\n }\n\n [Symbol.asyncIterator]() {\n return this.entries();\n }\n\n async isSameEntry(other) {\n if (!(other instanceof FileSystemDirectoryHandle)) {\n return false;\n }\n return __FileSystemDirectoryHandle_isSameEntry(\n this._getInstanceId(),\n other._getInstanceId()\n );\n }\n\n async resolve(possibleDescendant) {\n try {\n const resultJson = await __FileSystemDirectoryHandle_resolve_ref.apply(\n undefined,\n [this._getInstanceId(), possibleDescendant._getInstanceId()],\n { result: { promise: true, copy: true } }\n );\n return resultJson === 'null' ? null : JSON.parse(resultJson);\n } catch (err) {\n throw __decodeError(err);\n }\n }\n }\n\n globalThis.FileSystemDirectoryHandle = FileSystemDirectoryHandle;\n})();\n`;\n\n context.evalSync(directoryHandleCode);\n}\n\n// ============================================================================\n// FileSystemFileHandle Implementation\n// ============================================================================\n\nfunction setupFileSystemFileHandle(\n context: ivm.Context,\n stateMap: Map<number, unknown>\n): void {\n const global = context.global;\n\n // Property getters\n global.setSync(\n \"__FileSystemFileHandle_get_name\",\n new ivm.Callback((instanceId: number) => {\n const state = stateMap.get(instanceId) as FileHandleState | undefined;\n return state?.name ?? \"\";\n })\n );\n\n global.setSync(\n \"__FileSystemFileHandle_get_path\",\n new ivm.Callback((instanceId: number) => {\n const state = stateMap.get(instanceId) as FileHandleState | undefined;\n return state?.path ?? \"\";\n })\n );\n\n // getFile - async reference\n const getFileRef = new ivm.Reference(async (instanceId: number) => {\n const state = stateMap.get(instanceId) as FileHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]File handle not found\");\n }\n\n try {\n const fileData = await state.handler.readFile(state.path);\n return JSON.stringify({\n name: state.name,\n data: Array.from(fileData.data),\n size: fileData.size,\n lastModified: fileData.lastModified,\n type: fileData.type,\n });\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n });\n global.setSync(\"__FileSystemFileHandle_getFile_ref\", getFileRef);\n\n // createWritable - async reference\n const createWritableRef = new ivm.Reference(\n async (instanceId: number, _optionsJson: string) => {\n const state = stateMap.get(instanceId) as FileHandleState | undefined;\n if (!state) {\n throw new Error(\"[NotFoundError]File handle not found\");\n }\n\n // Create writable stream state with handler reference\n const streamInstanceId = nextInstanceId++;\n const streamState: WritableStreamState = {\n instanceId: streamInstanceId,\n filePath: state.path,\n position: 0,\n buffer: [],\n closed: false,\n handler: state.handler,\n };\n stateMap.set(streamInstanceId, streamState);\n\n return streamInstanceId;\n }\n );\n global.setSync(\"__FileSystemFileHandle_createWritable_ref\", createWritableRef);\n\n // isSameEntry - sync callback\n global.setSync(\n \"__FileSystemFileHandle_isSameEntry\",\n new ivm.Callback((id1: number, id2: number) => {\n const state1 = stateMap.get(id1) as FileHandleState | undefined;\n const state2 = stateMap.get(id2) as FileHandleState | undefined;\n if (!state1 || !state2) return false;\n return state1.path === state2.path;\n })\n );\n\n // Inject FileSystemFileHandle class\n const fileHandleCode = `\n(function() {\n const _fileHandleInstanceIds = new WeakMap();\n\n function __decodeError(err) {\n if (!(err instanceof Error)) return err;\n const match = err.message.match(/^\\\\[(TypeError|RangeError|NotFoundError|TypeMismatchError|InvalidModificationError|Error)\\\\](.*)$/);\n if (match) {\n if (['NotFoundError', 'TypeMismatchError', 'InvalidModificationError'].includes(match[1])) {\n return new DOMException(match[2], match[1]);\n }\n const ErrorType = globalThis[match[1]] || Error;\n return new ErrorType(match[2]);\n }\n return err;\n }\n\n class FileSystemFileHandle {\n constructor(path, name) {\n // Internal construction from instance ID\n if (typeof path === 'number' && name === null) {\n _fileHandleInstanceIds.set(this, path);\n return;\n }\n const instanceId = __FileSystemFileHandle_construct(path, name);\n _fileHandleInstanceIds.set(this, instanceId);\n }\n\n static _fromInstanceId(instanceId) {\n return new FileSystemFileHandle(instanceId, null);\n }\n\n _getInstanceId() {\n return _fileHandleInstanceIds.get(this);\n }\n\n get kind() {\n return 'file';\n }\n\n get name() {\n return __FileSystemFileHandle_get_name(this._getInstanceId());\n }\n\n async getFile() {\n try {\n const metadataJson = await __FileSystemFileHandle_getFile_ref.apply(\n undefined,\n [this._getInstanceId()],\n { result: { promise: true, copy: true } }\n );\n const metadata = JSON.parse(metadataJson);\n // Create File object from metadata and content\n const content = new Uint8Array(metadata.data);\n return new File([content], metadata.name, {\n type: metadata.type,\n lastModified: metadata.lastModified\n });\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async createWritable(options = {}) {\n try {\n const streamId = await __FileSystemFileHandle_createWritable_ref.apply(\n undefined,\n [this._getInstanceId(), JSON.stringify(options)],\n { result: { promise: true, copy: true } }\n );\n return FileSystemWritableFileStream._fromInstanceId(streamId);\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async isSameEntry(other) {\n if (!(other instanceof FileSystemFileHandle)) {\n return false;\n }\n return __FileSystemFileHandle_isSameEntry(\n this._getInstanceId(),\n other._getInstanceId()\n );\n }\n }\n\n globalThis.FileSystemFileHandle = FileSystemFileHandle;\n})();\n`;\n\n context.evalSync(fileHandleCode);\n}\n\n// ============================================================================\n// FileSystemWritableFileStream Implementation\n// ============================================================================\n\nfunction setupFileSystemWritableFileStream(\n context: ivm.Context,\n stateMap: Map<number, unknown>\n): void {\n const global = context.global;\n\n // write - async reference\n const writeRef = new ivm.Reference(\n async (instanceId: number, bytesJson: string, position: number | null) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n if (!state) {\n throw new Error(\"[InvalidStateError]Stream not found\");\n }\n if (state.closed) {\n throw new Error(\"[InvalidStateError]Stream is closed\");\n }\n\n const bytes = JSON.parse(bytesJson) as number[];\n const data = new Uint8Array(bytes);\n\n // Update position if specified\n if (position !== null) {\n state.position = position;\n }\n\n // Write to handler\n try {\n await state.handler.writeFile(state.filePath, data, state.position);\n state.position += data.length;\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n }\n );\n global.setSync(\"__FileSystemWritableFileStream_write_ref\", writeRef);\n\n // seek - sync callback\n global.setSync(\n \"__FileSystemWritableFileStream_seek\",\n new ivm.Callback((instanceId: number, position: number) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n if (!state) {\n throw new Error(\"[InvalidStateError]Stream not found\");\n }\n if (state.closed) {\n throw new Error(\"[InvalidStateError]Stream is closed\");\n }\n state.position = position;\n })\n );\n\n // truncate - async reference\n const truncateRef = new ivm.Reference(async (instanceId: number, size: number) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n if (!state) {\n throw new Error(\"[InvalidStateError]Stream not found\");\n }\n if (state.closed) {\n throw new Error(\"[InvalidStateError]Stream is closed\");\n }\n\n try {\n await state.handler.truncateFile(state.filePath, size);\n // Adjust position if it's beyond the new size\n if (state.position > size) {\n state.position = size;\n }\n } catch (err) {\n if (err instanceof Error) {\n throw new Error(err.message);\n }\n throw err;\n }\n });\n global.setSync(\"__FileSystemWritableFileStream_truncate_ref\", truncateRef);\n\n // close - async reference\n const closeRef = new ivm.Reference(async (instanceId: number) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n if (!state) {\n throw new Error(\"[InvalidStateError]Stream not found\");\n }\n if (state.closed) {\n throw new Error(\"[InvalidStateError]Stream is already closed\");\n }\n\n state.closed = true;\n });\n global.setSync(\"__FileSystemWritableFileStream_close_ref\", closeRef);\n\n // abort - async reference\n const abortRef = new ivm.Reference(async (instanceId: number, _reason: string | null) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n if (!state) {\n throw new Error(\"[InvalidStateError]Stream not found\");\n }\n\n state.closed = true;\n state.buffer = []; // Discard any buffered data\n });\n global.setSync(\"__FileSystemWritableFileStream_abort_ref\", abortRef);\n\n // locked - sync callback\n global.setSync(\n \"__FileSystemWritableFileStream_get_locked\",\n new ivm.Callback((instanceId: number) => {\n const state = stateMap.get(instanceId) as WritableStreamState | undefined;\n return state ? !state.closed : false;\n })\n );\n\n // Inject FileSystemWritableFileStream class\n const writableStreamCode = `\n(function() {\n const _writableStreamInstanceIds = new WeakMap();\n\n function __decodeError(err) {\n if (!(err instanceof Error)) return err;\n const match = err.message.match(/^\\\\[(TypeError|RangeError|InvalidStateError|NotFoundError|Error)\\\\](.*)$/);\n if (match) {\n if (['InvalidStateError', 'NotFoundError'].includes(match[1])) {\n return new DOMException(match[2], match[1]);\n }\n const ErrorType = globalThis[match[1]] || Error;\n return new ErrorType(match[2]);\n }\n return err;\n }\n\n class FileSystemWritableFileStream {\n constructor(instanceId) {\n _writableStreamInstanceIds.set(this, instanceId);\n }\n\n static _fromInstanceId(instanceId) {\n return new FileSystemWritableFileStream(instanceId);\n }\n\n _getInstanceId() {\n return _writableStreamInstanceIds.get(this);\n }\n\n async write(data) {\n try {\n // Handle different data types\n let writeData;\n let position = null;\n let type = 'write';\n\n if (data && typeof data === 'object' && !ArrayBuffer.isView(data) &&\n !(data instanceof Blob) && !(data instanceof ArrayBuffer) &&\n !Array.isArray(data) && typeof data.type === 'string') {\n // WriteParams object: { type, data, position, size }\n type = data.type || 'write';\n if (type === 'seek') {\n return this.seek(data.position);\n }\n if (type === 'truncate') {\n return this.truncate(data.size);\n }\n writeData = data.data;\n position = data.position ?? null;\n } else {\n writeData = data;\n }\n\n // Convert data to bytes array for transfer\n let bytes;\n if (typeof writeData === 'string') {\n bytes = Array.from(new TextEncoder().encode(writeData));\n } else if (writeData instanceof Blob) {\n const buffer = await writeData.arrayBuffer();\n bytes = Array.from(new Uint8Array(buffer));\n } else if (writeData instanceof ArrayBuffer) {\n bytes = Array.from(new Uint8Array(writeData));\n } else if (ArrayBuffer.isView(writeData)) {\n bytes = Array.from(new Uint8Array(writeData.buffer, writeData.byteOffset, writeData.byteLength));\n } else if (Array.isArray(writeData)) {\n bytes = writeData;\n } else {\n throw new TypeError('Invalid data type for write');\n }\n\n await __FileSystemWritableFileStream_write_ref.apply(\n undefined,\n [this._getInstanceId(), JSON.stringify(bytes), position],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n seek(position) {\n try {\n __FileSystemWritableFileStream_seek(this._getInstanceId(), position);\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async truncate(size) {\n try {\n await __FileSystemWritableFileStream_truncate_ref.apply(\n undefined,\n [this._getInstanceId(), size],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async close() {\n try {\n await __FileSystemWritableFileStream_close_ref.apply(\n undefined,\n [this._getInstanceId()],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n async abort(reason) {\n try {\n await __FileSystemWritableFileStream_abort_ref.apply(\n undefined,\n [this._getInstanceId(), reason ? String(reason) : null],\n { result: { promise: true, copy: true } }\n );\n } catch (err) {\n throw __decodeError(err);\n }\n }\n\n get locked() {\n return __FileSystemWritableFileStream_get_locked(this._getInstanceId());\n }\n\n getWriter() {\n const stream = this;\n let released = false;\n let closedResolve;\n let closedReject;\n const closedPromise = new Promise((resolve, reject) => {\n closedResolve = resolve;\n closedReject = reject;\n });\n\n return {\n get closed() {\n return closedPromise;\n },\n get desiredSize() {\n return 1;\n },\n get ready() {\n return Promise.resolve();\n },\n async write(chunk) {\n if (released) {\n return Promise.reject(new TypeError('Writer has been released'));\n }\n try {\n await stream.write(chunk);\n return Promise.resolve();\n } catch (err) {\n return Promise.reject(err);\n }\n },\n async close() {\n if (released) {\n return Promise.reject(new TypeError('Writer has been released'));\n }\n try {\n await stream.close();\n closedResolve();\n return Promise.resolve();\n } catch (err) {\n closedReject(err);\n return Promise.reject(err);\n }\n },\n async abort(reason) {\n if (released) {\n return Promise.reject(new TypeError('Writer has been released'));\n }\n try {\n await stream.abort(reason);\n closedReject(reason || new Error('Stream aborted'));\n return Promise.resolve();\n } catch (err) {\n return Promise.reject(err);\n }\n },\n releaseLock() {\n released = true;\n }\n };\n }\n }\n\n globalThis.FileSystemWritableFileStream = FileSystemWritableFileStream;\n})();\n`;\n\n context.evalSync(writableStreamCode);\n}\n\n// ============================================================================\n// Global getDirectory(path) Implementation\n// ============================================================================\n\nfunction setupGetDirectoryGlobal(\n context: ivm.Context,\n stateMap: Map<number, unknown>,\n options: FsOptions\n): void {\n const global = context.global;\n\n // getDirectory - async reference that creates directory handle at specified path\n const getDirectoryRef = new ivm.Reference(async (path: string) => {\n // Get handler for this path from the options factory\n const handler = await options.getDirectory(path);\n\n const instanceId = nextInstanceId++;\n // Path is \"/\" since handler is rooted at the requested path\n const state: DirectoryHandleState = {\n instanceId,\n path: \"/\",\n name: path.split(\"/\").filter(Boolean).pop() || \"\",\n handler,\n };\n stateMap.set(instanceId, state);\n return instanceId;\n });\n global.setSync(\"__getDirectory_ref\", getDirectoryRef);\n\n // Inject global getDirectory (async)\n const getDirectoryCode = `\n(function() {\n globalThis.getDirectory = async function(path) {\n const instanceId = await __getDirectory_ref.apply(\n undefined,\n [path],\n { result: { promise: true, copy: true } }\n );\n return FileSystemDirectoryHandle._fromInstanceId(instanceId);\n };\n})();\n`;\n context.evalSync(getDirectoryCode);\n}\n\n// ============================================================================\n// Main Setup Function\n// ============================================================================\n\n/**\n * Setup File System Access API in an isolated-vm context\n *\n * Provides an OPFS-compatible FileSystemDirectoryHandle API\n *\n * @example\n * const handle = await setupFs(context, {\n * getDirectory: async (path) => {\n * // Return a FileSystemHandler rooted at the given path\n * return createNodeFileSystemHandler(`./data${path}`);\n * }\n * });\n *\n * await context.eval(`\n * const root = await getDirectory(\"/uploads\");\n * const fileHandle = await root.getFileHandle(\"test.txt\", { create: true });\n * const writable = await fileHandle.createWritable();\n * await writable.write(\"hello world\");\n * await writable.close();\n * `);\n */\nexport async function setupFs(\n context: ivm.Context,\n options: FsOptions\n): Promise<FsHandle> {\n // Setup core APIs first (Blob, File, AbortController, Streams, etc.)\n await setupCore(context);\n\n const stateMap = getInstanceStateMapForContext(context);\n\n // Setup FileSystemDirectoryHandle\n setupFileSystemDirectoryHandle(context, stateMap);\n\n // Setup FileSystemFileHandle\n setupFileSystemFileHandle(context, stateMap);\n\n // Setup FileSystemWritableFileStream\n setupFileSystemWritableFileStream(context, stateMap);\n\n // Setup global getDirectory(path)\n setupGetDirectoryGlobal(context, stateMap, options);\n\n return {\n dispose() {\n // Clear state for this context\n stateMap.clear();\n },\n };\n}\n\n// Export node adapter\nexport { createNodeFileSystemHandler } from \"./node-adapter.cjs\";\nexport type { NodeFileSystemHandlerOptions } from \"./node-adapter.cjs\";\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "ADBCB5895F0DF93F64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -60,7 +60,7 @@ var __export = (target, all) => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// src/internal/fs/node-adapter.ts
|
|
64
64
|
var exports_node_adapter = {};
|
|
65
65
|
__export(exports_node_adapter, {
|
|
66
66
|
createNodeFileSystemHandler: () => createNodeFileSystemHandler
|
|
@@ -251,4 +251,4 @@ function createNodeFileSystemHandler(rootPath, options) {
|
|
|
251
251
|
};
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
-
//# debugId=
|
|
254
|
+
//# debugId=CA19569668F9E3B864756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import * as nodeFs from \"node:fs\";\nimport * as nodePath from \"node:path\";\nimport { lookup as mimeLookup } from \"mime-types\";\nimport type { FileSystemHandler } from \"./index.cjs\";\n\nexport interface NodeFileSystemHandlerOptions {\n /** Custom fs module (e.g., memfs for testing). Defaults to Node.js fs */\n fs?: typeof nodeFs;\n}\n\n/**\n * Create a FileSystemHandler backed by the Node.js filesystem\n *\n * @param rootPath - Absolute path to the root directory for the sandbox\n * @param options - Optional configuration\n * @returns FileSystemHandler implementation\n *\n * @example\n * import { createNodeFileSystemHandler } from \"./index.cjs\";\n *\n * const handler = createNodeFileSystemHandler(\"/tmp/sandbox\");\n *\n * // Use with createRuntime\n * const runtime = await createRuntime({\n * fs: { handler }\n * });\n */\nexport function createNodeFileSystemHandler(\n rootPath: string,\n options?: NodeFileSystemHandlerOptions\n): FileSystemHandler {\n const fs = options?.fs ?? nodeFs;\n const fsPromises = fs.promises;\n\n // Resolve the root path to ensure it's absolute\n const resolvedRoot = nodePath.resolve(rootPath);\n\n /**\n * Map a virtual path to a real filesystem path\n * Virtual paths always start with \"/\" and are relative to rootPath\n */\n function toRealPath(virtualPath: string): string {\n // Normalize the virtual path\n const normalized = nodePath.normalize(virtualPath);\n // Join with root, handling the leading slash\n const relativePath = normalized.startsWith(\"/\")\n ? normalized.slice(1)\n : normalized;\n return nodePath.join(resolvedRoot, relativePath);\n }\n\n /**\n * Map Node.js errors to DOMException-style error messages\n */\n function mapError(err: unknown, operation: string): Error {\n if (!(err instanceof Error)) {\n return new Error(`[Error]${operation} failed`);\n }\n\n const nodeError = err as NodeJS.ErrnoException;\n\n switch (nodeError.code) {\n case \"ENOENT\":\n return new Error(`[NotFoundError]${operation}: path not found`);\n case \"EISDIR\":\n return new Error(\n `[TypeMismatchError]${operation}: expected file but found directory`\n );\n case \"ENOTDIR\":\n return new Error(\n `[TypeMismatchError]${operation}: expected directory but found file`\n );\n case \"ENOTEMPTY\":\n return new Error(\n `[InvalidModificationError]${operation}: directory not empty`\n );\n case \"EEXIST\":\n return new Error(`[InvalidModificationError]${operation}: already exists`);\n case \"EACCES\":\n case \"EPERM\":\n return new Error(`[NotAllowedError]${operation}: permission denied`);\n default:\n return new Error(`[Error]${operation}: ${nodeError.message}`);\n }\n }\n\n /**\n * Get MIME type for a file based on extension\n */\n function getMimeType(filePath: string): string {\n const result = mimeLookup(filePath);\n return result || \"application/octet-stream\";\n }\n\n return {\n async getFileHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void> {\n const realPath = toRealPath(path);\n\n try {\n const stats = await fsPromises.stat(realPath);\n if (stats.isDirectory()) {\n throw new Error(\n \"[TypeMismatchError]getFileHandle: expected file but found directory\"\n );\n }\n // File exists and is a file - success\n } catch (err) {\n const nodeError = err as NodeJS.ErrnoException;\n if (nodeError.code === \"ENOENT\") {\n if (options?.create) {\n // Create empty file\n await fsPromises.writeFile(realPath, \"\");\n return;\n }\n throw new Error(\"[NotFoundError]getFileHandle: file not found\");\n }\n throw mapError(err, \"getFileHandle\");\n }\n },\n\n async getDirectoryHandle(\n path: string,\n options?: { create?: boolean }\n ): Promise<void> {\n const realPath = toRealPath(path);\n\n try {\n const stats = await fsPromises.stat(realPath);\n if (!stats.isDirectory()) {\n throw new Error(\n \"[TypeMismatchError]getDirectoryHandle: expected directory but found file\"\n );\n }\n // Directory exists - success\n } catch (err) {\n const nodeError = err as NodeJS.ErrnoException;\n if (nodeError.code === \"ENOENT\") {\n if (options?.create) {\n // Create directory\n await fsPromises.mkdir(realPath, { recursive: true });\n return;\n }\n throw new Error(\n \"[NotFoundError]getDirectoryHandle: directory not found\"\n );\n }\n throw mapError(err, \"getDirectoryHandle\");\n }\n },\n\n async removeEntry(\n path: string,\n options?: { recursive?: boolean }\n ): Promise<void> {\n const realPath = toRealPath(path);\n\n try {\n const stats = await fsPromises.stat(realPath);\n\n if (stats.isDirectory()) {\n if (options?.recursive) {\n // Use rm with recursive for non-empty directories\n await fsPromises.rm(realPath, { recursive: true });\n } else {\n // Try rmdir for empty directories (will fail if not empty)\n await fsPromises.rmdir(realPath);\n }\n } else {\n // Use unlink for files\n await fsPromises.unlink(realPath);\n }\n } catch (err) {\n throw mapError(err, \"removeEntry\");\n }\n },\n\n async readDirectory(\n path: string\n ): Promise<Array<{ name: string; kind: \"file\" | \"directory\" }>> {\n const realPath = toRealPath(path);\n\n try {\n const entries = await fsPromises.readdir(realPath, {\n withFileTypes: true,\n });\n\n return entries.map((entry) => ({\n name: entry.name,\n kind: entry.isDirectory() ? (\"directory\" as const) : (\"file\" as const),\n }));\n } catch (err) {\n throw mapError(err, \"readDirectory\");\n }\n },\n\n async readFile(\n path: string\n ): Promise<{\n data: Uint8Array;\n size: number;\n lastModified: number;\n type: string;\n }> {\n const realPath = toRealPath(path);\n\n try {\n const [data, stats] = await Promise.all([\n fsPromises.readFile(realPath),\n fsPromises.stat(realPath),\n ]);\n\n if (stats.isDirectory()) {\n throw new Error(\n \"[TypeMismatchError]readFile: expected file but found directory\"\n );\n }\n\n return {\n data: new Uint8Array(data),\n size: stats.size,\n lastModified: stats.mtimeMs,\n type: getMimeType(realPath),\n };\n } catch (err) {\n if (err instanceof Error && err.message.startsWith(\"[\")) {\n throw err;\n }\n throw mapError(err, \"readFile\");\n }\n },\n\n async writeFile(\n path: string,\n data: Uint8Array,\n position?: number\n ): Promise<void> {\n const realPath = toRealPath(path);\n\n try {\n // Check file exists first (matches WHATWG semantics where file must exist via getFileHandle)\n await fsPromises.access(realPath);\n\n if (position !== undefined) {\n // Position-based write - need to use r+ to preserve existing content\n const fh = await fsPromises.open(realPath, \"r+\");\n try {\n await fh.write(data, 0, data.length, position);\n } finally {\n await fh.close();\n }\n } else {\n // Replace entire content\n const fh = await fsPromises.open(realPath, 'w');\n try {\n await fh.writeFile(data);\n } finally {\n await fh.close();\n }\n }\n } catch (err) {\n throw mapError(err, \"writeFile\");\n }\n },\n\n async truncateFile(path: string, size: number): Promise<void> {\n const realPath = toRealPath(path);\n\n try {\n await fsPromises.truncate(realPath, size);\n } catch (err) {\n throw mapError(err, \"truncateFile\");\n }\n },\n\n async getFileMetadata(\n path: string\n ): Promise<{ size: number; lastModified: number; type: string }> {\n const realPath = toRealPath(path);\n\n try {\n const stats = await fsPromises.stat(realPath);\n\n if (stats.isDirectory()) {\n throw new Error(\n \"[TypeMismatchError]getFileMetadata: expected file but found directory\"\n );\n }\n\n return {\n size: stats.size,\n lastModified: stats.mtimeMs,\n type: getMimeType(realPath),\n };\n } catch (err) {\n if (err instanceof Error && err.message.startsWith(\"[\")) {\n throw err;\n }\n throw mapError(err, \"getFileMetadata\");\n }\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "CA19569668F9E3B864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -60,7 +60,7 @@ var __export = (target, all) => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// src/internal/module-loader/bundle.ts
|
|
64
64
|
var exports_bundle = {};
|
|
65
65
|
__export(exports_bundle, {
|
|
66
66
|
getNodeBuiltinShimCode: () => getNodeBuiltinShimCode,
|
|
@@ -479,4 +479,4 @@ function clearBundleCache() {
|
|
|
479
479
|
bundleCache.clear();
|
|
480
480
|
}
|
|
481
481
|
|
|
482
|
-
//# debugId=
|
|
482
|
+
//# debugId=0B3ADDC12296866164756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { builtinModules, createRequire } from \"node:module\";\nimport { rollup, type Plugin } from \"rollup\";\nimport * as nodeResolveModule from \"@rollup/plugin-node-resolve\";\nimport * as commonjsModule from \"@rollup/plugin-commonjs\";\nimport * as jsonModule from \"@rollup/plugin-json\";\nimport * as replaceModule from \"@rollup/plugin-replace\";\nimport { detectFormat, parseSpecifier } from \"./resolve.cjs\";\nimport { processTypeScript, isTypeScriptFile } from \"./strip-types.cjs\";\nimport type { RollupCommonJSOptions } from \"@rollup/plugin-commonjs\";\nimport type { RollupJsonOptions } from \"@rollup/plugin-json\";\nimport type { RollupReplaceOptions } from \"@rollup/plugin-replace\";\n\n// Handle CJS default exports\nconst nodeResolve = ((nodeResolveModule as any).default ||\n nodeResolveModule) as (typeof nodeResolveModule)[\"nodeResolve\"];\nconst commonjs = ((commonjsModule as any).default || commonjsModule) as (\n options?: RollupCommonJSOptions\n) => Plugin;\nconst json = ((jsonModule as any).default || jsonModule) as (\n options?: RollupJsonOptions\n) => Plugin;\nconst replace = ((replaceModule as any).default || replaceModule) as (\n options?: RollupReplaceOptions\n) => Plugin;\n\nconst commonjsInteropOptions = {\n // External package imports are resolved by later loader calls as ESM bundles,\n // so CommonJS requires need ESM-aware interop instead of default-import assumptions.\n esmExternals: true,\n requireReturnsDefault: \"auto\",\n} satisfies RollupCommonJSOptions;\n\nconst PACKAGE_ENTRY_WRAPPER_PREFIX = \"\\0package-entry-wrapper:\";\nconst INVALID_FUNCTION_EXPORT_NAMES = new Set([\n \"arguments\",\n \"caller\",\n \"length\",\n \"name\",\n \"prototype\",\n]);\n\n/**\n * Set of Node.js built-in module names (e.g. \"fs\", \"path\", \"crypto\").\n */\nconst nodeBuiltins = new Set(builtinModules);\n\n/**\n * Check if a specifier refers to a Node.js built-in module.\n * Handles bare names (\"fs\"), subpaths (\"fs/promises\"), and node: prefix (\"node:fs\").\n */\nfunction isNodeBuiltin(source: string): boolean {\n const name = source.startsWith(\"node:\") ? source.slice(5) : source;\n const topLevel = name.split(\"/\")[0]!;\n return nodeBuiltins.has(topLevel);\n}\n\nconst NODE_BUILTIN_SHIM_PREFIX = \"\\0node-builtin-shim:\";\n\nexport function getNodeBuiltinShimCode(source: string): string {\n if (source === \"ws\" || source === \"node:ws\") {\n return `\nconst WebSocketShim = globalThis.WebSocket;\n\nif (!WebSocketShim) {\n throw new Error(\"The isolate runtime does not provide a global WebSocket implementation.\");\n}\n\nexport { WebSocketShim as WebSocket };\nexport default WebSocketShim;\n`;\n }\n\n return \"export default {};\\n\";\n}\n\n/**\n * Rollup plugin that provides empty shims for Node.js built-in modules.\n * Place after nodeResolve — acts as a catch-all for builtins that the\n * package's browser field didn't map to false.\n */\nfunction shimNodeBuiltinsPlugin(): Plugin {\n return {\n name: \"shim-node-builtins\",\n resolveId(source) {\n if (isNodeBuiltin(source)) {\n return { id: `${NODE_BUILTIN_SHIM_PREFIX}${source}`, moduleSideEffects: false };\n }\n return null;\n },\n load(id) {\n if (id.startsWith(NODE_BUILTIN_SHIM_PREFIX)) {\n return getNodeBuiltinShimCode(id.slice(NODE_BUILTIN_SHIM_PREFIX.length));\n }\n return null;\n },\n };\n}\n\nfunction isValidEsmIdentifier(name: string): boolean {\n return /^[$A-Z_a-z][$\\w]*$/.test(name);\n}\n\nfunction resolvePackageImportPath(specifier: string, rootDir: string): string | null {\n const resolver = createRequire(path.join(rootDir, \"__isolate_module_loader__.js\"));\n\n let resolvedRequirePath: string;\n try {\n resolvedRequirePath = resolver.resolve(specifier);\n } catch {\n return null;\n }\n\n const { packageName, subpath } = parseSpecifier(specifier);\n const packageJsonPath = findPackageJsonPath(resolvedRequirePath, packageName);\n if (!packageJsonPath) {\n return resolvedRequirePath;\n }\n\n let packageJson: Record<string, unknown>;\n try {\n packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as Record<string, unknown>;\n } catch {\n return resolvedRequirePath;\n }\n\n const packageRoot = path.dirname(packageJsonPath);\n const exportPath = resolveImportEntryFromPackageJson(packageJson, subpath);\n\n if (exportPath) {\n return path.resolve(packageRoot, exportPath);\n }\n\n if (!subpath) {\n const moduleEntry = packageJson.module;\n if (typeof moduleEntry === \"string\") {\n return path.resolve(packageRoot, moduleEntry);\n }\n\n const browserEntry = packageJson.browser;\n if (typeof browserEntry === \"string\") {\n return path.resolve(packageRoot, browserEntry);\n }\n }\n\n return resolvedRequirePath;\n}\n\nfunction findPackageJsonPath(resolvedPath: string, packageName: string): string | null {\n let currentDir = path.dirname(resolvedPath);\n let matchedPackageJsonPath: string | null = null;\n\n while (true) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as { name?: string };\n if (packageJson.name === packageName) {\n // Keep walking upward: published packages often include nested\n // dist/cjs or dist/mjs package.json files with the same name, but the\n // real package root higher up contains the export map we need.\n matchedPackageJsonPath = packageJsonPath;\n }\n } catch {\n // Keep walking upward if a parent package.json is malformed.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return matchedPackageJsonPath;\n }\n currentDir = parentDir;\n }\n}\n\nfunction resolveImportEntryFromPackageJson(\n packageJson: Record<string, unknown>,\n subpath: string\n): string | null {\n const exportsField = packageJson.exports;\n if (exportsField === undefined) {\n return null;\n }\n\n const exportKey = subpath ? `.${subpath}` : \".\";\n\n if (isConditionalExportsObject(exportsField)) {\n if (exportKey !== \".\") {\n return null;\n }\n return pickImportTarget(exportsField);\n }\n\n if (typeof exportsField === \"object\" && exportsField !== null && !Array.isArray(exportsField)) {\n const target = (exportsField as Record<string, unknown>)[exportKey];\n return target === undefined ? null : pickImportTarget(target);\n }\n\n return exportKey === \".\" ? pickImportTarget(exportsField) : null;\n}\n\nfunction isConditionalExportsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\"\n && value !== null\n && !Array.isArray(value)\n && Object.keys(value).every((key) => !key.startsWith(\".\"));\n}\n\nfunction pickImportTarget(value: unknown): string | null {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const target = pickImportTarget(item);\n if (target) {\n return target;\n }\n }\n return null;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n const record = value as Record<string, unknown>;\n\n for (const key of [\"browser\", \"import\", \"module\", \"default\"]) {\n if (key in record) {\n const target = pickImportTarget(record[key]);\n if (target) {\n return target;\n }\n }\n }\n\n for (const nestedValue of Object.values(record)) {\n const target = pickImportTarget(nestedValue);\n if (target) {\n return target;\n }\n }\n\n return null;\n}\n\nfunction getCommonJsNamedExports(specifier: string, rootDir: string): string[] {\n const resolvedHostPath = resolvePackageImportPath(specifier, rootDir);\n if (!resolvedHostPath) {\n return [];\n }\n\n let code: string;\n try {\n code = fs.readFileSync(resolvedHostPath, \"utf-8\");\n } catch {\n return [];\n }\n\n if (detectFormat(resolvedHostPath, code) !== \"cjs\") {\n return [];\n }\n\n let moduleExports: unknown;\n try {\n moduleExports = createRequire(resolvedHostPath)(resolvedHostPath);\n } catch {\n return [];\n }\n\n if (moduleExports == null || (typeof moduleExports !== \"object\" && typeof moduleExports !== \"function\")) {\n return [];\n }\n\n const names = new Set([\n ...Object.keys(moduleExports),\n ...Object.getOwnPropertyNames(moduleExports),\n ]);\n\n names.delete(\"default\");\n names.delete(\"__esModule\");\n\n if (typeof moduleExports === \"function\") {\n for (const name of INVALID_FUNCTION_EXPORT_NAMES) {\n names.delete(name);\n }\n }\n\n return [...names].filter(isValidEsmIdentifier).sort();\n}\n\nfunction packageEntryWrapperPlugin(specifier: string, namedExports: string[]): Plugin {\n const wrapperId = `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`;\n\n return {\n name: \"package-entry-wrapper\",\n resolveId(source) {\n if (source === wrapperId) {\n return wrapperId;\n }\n return null;\n },\n load(id) {\n if (id !== wrapperId) {\n return null;\n }\n\n const namedExportLines = namedExports.map(\n (name) => `export const ${name} = __packageDefault.${name};`\n );\n\n return [\n `import __packageDefault from ${JSON.stringify(specifier)};`,\n \"export default __packageDefault;\",\n ...namedExportLines,\n ].join(\"\\n\");\n },\n };\n}\n\n/**\n * Cache for bundled npm packages. Key includes specifier + resolution root.\n */\nconst bundleCache = new Map<string, { code: string }>();\n\n/**\n * In-flight bundle promises to avoid duplicate concurrent bundles.\n */\nconst bundlesInFlight = new Map<string, Promise<{ code: string }>>();\n\n/**\n * Create a Rollup plugin that externalizes all bare specifiers that don't\n * belong to the current package. Internal files of the package are inlined;\n * other npm packages remain as import statements.\n */\nfunction externalizeDepsPlugin(currentPackageName: string): Plugin {\n return {\n name: \"externalize-deps\",\n resolveId(source, importer) {\n // Don't externalize the entry point\n if (!importer) return null;\n\n // Don't externalize relative imports (internal to the package)\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n\n // Don't externalize Node.js builtins — let nodeResolve handle them\n // via the package's browser field (e.g. \"fs\": false → empty module)\n if (isNodeBuiltin(source)) return null;\n\n // Check if this is a different npm package\n const { packageName } = parseSpecifier(source);\n if (packageName !== currentPackageName) {\n return { id: source, external: true };\n }\n\n // Same package — let Rollup resolve it normally\n return null;\n },\n };\n}\n\n/**\n * Bundle a bare specifier (npm package) using Rollup.\n *\n * Each unique bare specifier gets its own bundle with:\n * - node-resolve with browser conditions\n * - commonjs conversion\n * - json support\n * - process.env.NODE_ENV replacement\n * - External deps (other npm packages) left as import statements\n *\n * Results are cached permanently (npm packages are static).\n */\nexport async function bundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const cacheKey = `${specifier}\\0${rootDir}`;\n\n // Check cache\n const cached = bundleCache.get(cacheKey);\n if (cached) return cached;\n\n // Check in-flight\n const inFlight = bundlesInFlight.get(cacheKey);\n if (inFlight) return inFlight;\n\n const promise = doBundleSpecifier(specifier, rootDir);\n bundlesInFlight.set(cacheKey, promise);\n\n try {\n const result = await promise;\n bundleCache.set(cacheKey, result);\n return result;\n } finally {\n bundlesInFlight.delete(cacheKey);\n }\n}\n\nasync function doBundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const { packageName } = parseSpecifier(specifier);\n const namedExports = getCommonJsNamedExports(specifier, rootDir);\n const input = namedExports.length > 0\n ? `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`\n : specifier;\n\n const bundle = await rollup({\n input,\n // Disable tree-shaking: we're creating a virtual module that must faithfully\n // expose all package exports. We can't predict which ones user code will import.\n // Without this, exports like AWS SDK's ConverseStreamOutput (a namespace with\n // a visit() helper that nothing inside the bundle references) get dropped.\n treeshake: false,\n plugins: [\n packageEntryWrapperPlugin(specifier, namedExports),\n externalizeDepsPlugin(packageName),\n nodeResolve({ browser: true, rootDir }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Create a Rollup plugin that externalizes ALL bare specifiers.\n * Used for module aliases where the host file's relative imports are bundled\n * but npm package dependencies are left as external imports.\n */\nfunction externalizeAllBareSpecifiersPlugin(): Plugin {\n return {\n name: \"externalize-all-bare-specifiers\",\n resolveId(source, importer) {\n if (!importer) return null;\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n // Don't externalize Node.js builtins — let nodeResolve/shim handle them\n if (isNodeBuiltin(source)) return null;\n return { id: source, external: true };\n },\n };\n}\n\n/**\n * Create a Rollup transform plugin that strips TypeScript types.\n */\nfunction stripTypeScriptPlugin(): Plugin {\n return {\n name: \"strip-typescript\",\n transform(code, id) {\n if (isTypeScriptFile(id)) {\n return { code: processTypeScript(code, id), map: null };\n }\n return null;\n },\n };\n}\n\nconst TS_EXTENSIONS = [\".ts\", \".tsx\", \".mts\", \".cts\"];\n\n/**\n * Bundle a host file using Rollup, inlining its relative imports.\n *\n * - Uses the host file path as Rollup input\n * - Externalizes ALL bare specifiers (npm packages)\n * - Strips TypeScript via processTypeScript\n * - Shares the bundleCache/bundlesInFlight (no key collision since file paths start with `/`)\n *\n * Results are cached permanently.\n */\nexport async function bundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const cached = bundleCache.get(hostFilePath);\n if (cached) return cached;\n\n const inFlight = bundlesInFlight.get(hostFilePath);\n if (inFlight) return inFlight;\n\n const promise = doBundleHostFile(hostFilePath);\n bundlesInFlight.set(hostFilePath, promise);\n\n try {\n const result = await promise;\n bundleCache.set(hostFilePath, result);\n return result;\n } finally {\n bundlesInFlight.delete(hostFilePath);\n }\n}\n\nasync function doBundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const rootDir = path.dirname(hostFilePath);\n\n const bundle = await rollup({\n input: hostFilePath,\n treeshake: false,\n plugins: [\n externalizeAllBareSpecifiersPlugin(),\n stripTypeScriptPlugin(),\n nodeResolve({\n browser: true,\n rootDir,\n extensions: [\".mjs\", \".js\", \".json\", \".node\", ...TS_EXTENSIONS],\n }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Clear the bundle cache. Useful for testing.\n */\nexport function clearBundleCache(): void {\n bundleCache.clear();\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "0B3ADDC12296866164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -60,7 +60,7 @@ var __export = (target, all) => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// src/internal/module-loader/index.ts
|
|
64
64
|
var exports_module_loader = {};
|
|
65
65
|
__export(exports_module_loader, {
|
|
66
66
|
virtualToHost: () => import_mappings2.virtualToHost,
|
|
@@ -237,4 +237,4 @@ function exists(filePath) {
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
//# debugId=
|
|
240
|
+
//# debugId=46F8055BE16B42FB64756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport type {\n ModuleLoaderCallback,\n ModuleLoaderResult,\n} from \"../protocol/index.cjs\";\nimport {\n parseMappings,\n virtualToHost,\n findNodeModulesMapping,\n findModuleAlias,\n type MappingConfig,\n type PathMapping,\n} from \"./mappings.cjs\";\nimport {\n resolveFilePath,\n parseSpecifier,\n isBareSpecifier,\n} from \"./resolve.cjs\";\nimport { bundleSpecifier, bundleHostFile } from \"./bundle.cjs\";\nimport { isTypeScriptFile, processTypeScript } from \"./strip-types.cjs\";\n\nexport { parseMappings, virtualToHost, findNodeModulesMapping, findModuleAlias } from \"./mappings.cjs\";\nexport type { MappingConfig, PathMapping } from \"./mappings.cjs\";\nexport { resolveFilePath, detectFormat, parseSpecifier, isBareSpecifier } from \"./resolve.cjs\";\nexport { bundleSpecifier, bundleHostFile, clearBundleCache } from \"./bundle.cjs\";\nexport { isTypeScriptFile, processTypeScript } from \"./strip-types.cjs\";\n\n/**\n * Create a module loader callback that handles common patterns:\n * - Mapping host filesystem paths to virtual isolate paths\n * - Bundling npm packages with Rollup (ESM-first, browser conditions)\n * - Reading user files directly from the host filesystem\n *\n * Each npm package subpath is bundled independently and cached as static.\n *\n * @example\n * ```typescript\n * import { defaultModuleLoader } from './index.cjs';\n *\n * const loader = defaultModuleLoader(\n * { from: '/host/project/node_modules', to: '/node_modules' },\n * { from: '/host/project/src/entry.ts', to: '/app/entry.ts' }\n * );\n *\n * const runtime = await createRuntime({\n * moduleLoader: loader,\n * });\n * ```\n */\nexport function defaultModuleLoader(\n ...paths: MappingConfig[]\n): ModuleLoaderCallback {\n const mappings = parseMappings(paths);\n const nodeModulesMapping = findNodeModulesMapping(mappings);\n const importerHostPathByVirtualPath = new Map<string, string>();\n\n const loader: ModuleLoaderCallback = async (\n moduleName: string,\n importer: { path: string; resolveDir: string },\n ): Promise<ModuleLoaderResult> => {\n // A. Bare specifiers: module aliases or npm packages\n if (isBareSpecifier(moduleName)) {\n const alias = findModuleAlias(moduleName, mappings);\n if (alias) {\n return handleModuleAlias(alias, importerHostPathByVirtualPath);\n }\n return handleBareSpecifier(\n moduleName,\n importer,\n nodeModulesMapping,\n mappings,\n importerHostPathByVirtualPath,\n );\n }\n\n // B. Relative/absolute paths: user files or intra-package files\n return handlePathSpecifier(\n moduleName,\n importer,\n mappings,\n importerHostPathByVirtualPath,\n );\n };\n\n return loader;\n}\n\n/**\n * Handle bare specifiers (npm packages) by bundling with Rollup.\n */\nasync function handleBareSpecifier(\n specifier: string,\n importer: { path: string; resolveDir: string },\n nodeModulesMapping: PathMapping | undefined,\n mappings: PathMapping[],\n importerHostPathByVirtualPath: Map<string, string>,\n): Promise<ModuleLoaderResult> {\n if (!nodeModulesMapping) {\n throw new Error(\n `Cannot resolve bare specifier \"${specifier}\": no node_modules mapping configured. ` +\n `Add a mapping like { from: '/path/to/node_modules', to: '/node_modules' }.`\n );\n }\n\n const importerHostPath = resolveImporterHostPath(\n importer,\n mappings,\n importerHostPathByVirtualPath,\n );\n const fallbackImporterHostPath = path.join(\n path.dirname(nodeModulesMapping.hostBase),\n \"__isolate_module_loader__.js\",\n );\n const effectiveImporterHostPath = importerHostPath ?? fallbackImporterHostPath;\n const importerResolutionPath = toRealPath(effectiveImporterHostPath);\n const resolvedHostPath = resolveBareSpecifierWithNode(\n specifier,\n importerResolutionPath,\n );\n\n if (!resolvedHostPath) {\n throw new Error(\n `Cannot resolve bare specifier \"${specifier}\" from importer \"${importer.path}\" ` +\n `(host importer: ${effectiveImporterHostPath}).`\n );\n }\n\n const rootDir = path.dirname(importerResolutionPath);\n\n const { code } = await bundleSpecifier(specifier, rootDir);\n\n const { packageName, subpath } = parseSpecifier(specifier);\n const filename = subpath\n ? `${packageName}${subpath}.bundled.js`\n .split(\"/\")\n .pop()!\n : `${packageName}.bundled.js`\n .split(\"/\")\n .pop()!;\n\n const result: ModuleLoaderResult = {\n code,\n filename,\n resolveDir: nodeModulesMapping.virtualMount,\n static: true,\n };\n\n // Keep host importer context so transitive bare imports resolve like Node:\n // from the importing package location (realpath by default).\n registerImporterHostPath(result, toRealPath(resolvedHostPath), importerHostPathByVirtualPath);\n\n return result;\n}\n\n/**\n * Handle module alias specifiers by bundling the host file with Rollup.\n */\nasync function handleModuleAlias(\n alias: PathMapping,\n importerHostPathByVirtualPath: Map<string, string>,\n): Promise<ModuleLoaderResult> {\n const { code } = await bundleHostFile(alias.hostBase);\n\n // Sanitize the alias name into a filename (e.g. \"@/custom-module\" -> \"custom-module.bundled.js\")\n const filename = alias.to\n .replace(/^@[^/]*\\//, \"\") // strip scope prefix\n .replace(/[^a-zA-Z0-9_.-]/g, \"-\") // replace non-safe chars\n + \".bundled.js\";\n\n const result: ModuleLoaderResult = {\n code,\n filename,\n resolveDir: \"/\",\n };\n\n registerImporterHostPath(result, toRealPath(alias.hostBase), importerHostPathByVirtualPath);\n\n return result;\n}\n\n/**\n * Handle relative/absolute path specifiers by resolving to host files.\n */\nasync function handlePathSpecifier(\n specifier: string,\n importer: { path: string; resolveDir: string },\n mappings: PathMapping[],\n importerHostPathByVirtualPath: Map<string, string>,\n): Promise<ModuleLoaderResult> {\n // Resolve virtual path relative to importer's resolveDir\n let virtualPath: string;\n if (specifier.startsWith(\"/\")) {\n virtualPath = specifier;\n } else {\n virtualPath = path.posix.normalize(\n path.posix.join(importer.resolveDir, specifier)\n );\n }\n\n // Map virtual path -> host path\n const hostBasePath = virtualToHost(virtualPath, mappings);\n if (!hostBasePath) {\n throw new Error(\n `Cannot resolve \"${specifier}\" (virtual: ${virtualPath}): no mapping matches this path. ` +\n `Importer: ${importer.path}`\n );\n }\n\n // Probe extensions and index files\n const resolvedHostPath = resolveFilePath(hostBasePath);\n if (!resolvedHostPath) {\n throw new Error(\n `Cannot resolve \"${specifier}\" (host: ${hostBasePath}): file not found after extension probing. ` +\n `Importer: ${importer.path}`\n );\n }\n\n // Read the file\n let code = fs.readFileSync(resolvedHostPath, \"utf-8\");\n\n // Process TypeScript files: strip types, elide unused imports, add placeholders\n let resolvedFilename = path.basename(resolvedHostPath);\n if (isTypeScriptFile(resolvedHostPath)) {\n code = processTypeScript(code, resolvedHostPath);\n // Change extension to .js so V8 treats it as JavaScript\n resolvedFilename = resolvedFilename.replace(/\\.(tsx?|mts|cts)$/, \".js\");\n }\n // The host file may have a different name (due to extension probing), so rebuild virtual path\n const hostDir = path.dirname(resolvedHostPath);\n\n // Map the resolved host directory back to a virtual path for resolveDir\n // We need to find which mapping contains this host path\n let virtualDir: string | null = null;\n for (const mapping of mappings) {\n if (mapping.isGlob) {\n if (hostDir === mapping.hostBase || hostDir.startsWith(mapping.hostBase + \"/\")) {\n const relativePart = hostDir.slice(mapping.hostBase.length);\n virtualDir = mapping.virtualMount + relativePart;\n break;\n }\n } else {\n const mappedHostDir = path.dirname(mapping.hostBase);\n if (hostDir === mappedHostDir) {\n virtualDir = path.posix.dirname(mapping.virtualMount);\n break;\n }\n }\n }\n\n if (!virtualDir) {\n // Fallback: use the importer's resolveDir combined with the specifier's directory\n virtualDir = path.posix.dirname(virtualPath);\n }\n\n const result: ModuleLoaderResult = {\n code,\n filename: resolvedFilename,\n resolveDir: virtualDir,\n // User files are NOT static — they can change between evaluations\n };\n\n registerImporterHostPath(result, toRealPath(resolvedHostPath), importerHostPathByVirtualPath);\n\n return result;\n}\n\nfunction resolveImporterHostPath(\n importer: { path: string; resolveDir: string },\n mappings: PathMapping[],\n importerHostPathByVirtualPath: Map<string, string>,\n): string | null {\n const cached = importerHostPathByVirtualPath.get(importer.path);\n if (cached) {\n return cached;\n }\n\n const mappedHostPath = virtualToHost(importer.path, mappings);\n if (!mappedHostPath) {\n return null;\n }\n\n const resolvedMappedPath = resolveFilePath(mappedHostPath);\n if (resolvedMappedPath) {\n return resolvedMappedPath;\n }\n\n if (exists(mappedHostPath)) {\n return mappedHostPath;\n }\n\n return null;\n}\n\nfunction resolveBareSpecifierWithNode(\n specifier: string,\n importerHostPath: string,\n): string | null {\n try {\n const req = createRequire(importerHostPath);\n return req.resolve(specifier);\n } catch {\n return null;\n }\n}\n\nfunction registerImporterHostPath(\n moduleResult: ModuleLoaderResult,\n hostPath: string,\n importerHostPathByVirtualPath: Map<string, string>,\n): void {\n const virtualModulePath = path.posix.join(\n moduleResult.resolveDir,\n moduleResult.filename,\n );\n importerHostPathByVirtualPath.set(virtualModulePath, hostPath);\n}\n\nfunction toRealPath(inputPath: string): string {\n try {\n return fs.realpathSync(inputPath);\n } catch {\n return inputPath;\n }\n}\n\nfunction exists(filePath: string): boolean {\n try {\n fs.accessSync(filePath);\n return true;\n } catch {\n return false;\n }\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "46F8055BE16B42FB64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -36,7 +36,7 @@ var __export = (target, all) => {
|
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//
|
|
39
|
+
// src/internal/module-loader/mappings.ts
|
|
40
40
|
var exports_mappings = {};
|
|
41
41
|
__export(exports_mappings, {
|
|
42
42
|
virtualToHost: () => virtualToHost,
|
|
@@ -117,4 +117,4 @@ function findModuleAlias(specifier, mappings) {
|
|
|
117
117
|
return mappings.find((m) => m.isModuleAlias && m.to === specifier);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
//# debugId=
|
|
120
|
+
//# debugId=EF2971DD05B91B6464756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import path from \"node:path\";\n\nexport interface PathMapping {\n /** Original 'from' path (host) */\n from: string;\n /** Original 'to' path (virtual) */\n to: string;\n /** Whether this is a glob pattern */\n isGlob: boolean;\n /** For globs: the base path before the glob (host-side) */\n hostBase: string;\n /** For globs: the virtual mount point */\n virtualMount: string;\n /** Whether the host base ends with node_modules */\n isNodeModules: boolean;\n /** Whether this mapping is a module alias (to doesn't start with '/') */\n isModuleAlias: boolean;\n}\n\nexport interface MappingConfig {\n from: string;\n to: string;\n}\n\n/**\n * Parse {from, to} pairs into structured PathMapping objects.\n *\n * - Glob patterns (contain `*`): extract base path before glob -> prefix mapping\n * - Direct file paths (no glob): 1:1 mapping\n * - Node modules detection: if base path ends with `node_modules`, flag as isNodeModules\n */\nexport function parseMappings(configs: MappingConfig[]): PathMapping[] {\n return configs.map((config) => {\n const isGlob = config.from.includes(\"*\");\n const isModuleAlias = !config.to.startsWith(\"/\");\n\n if (isModuleAlias && isGlob) {\n throw new Error(\n `Module alias \"${config.to}\" cannot use a glob pattern in \"from\" (\"${config.from}\"). ` +\n `Module aliases must map a single host file.`\n );\n }\n\n let hostBase: string;\n if (isGlob) {\n // Extract base path before the first glob segment\n const parts = config.from.split(\"/\");\n const baseSegments: string[] = [];\n for (const part of parts) {\n if (part.includes(\"*\")) break;\n baseSegments.push(part);\n }\n hostBase = baseSegments.join(\"/\");\n } else {\n hostBase = config.from;\n }\n\n // Normalize trailing slashes\n hostBase = hostBase.replace(/\\/+$/, \"\");\n const virtualMount = isModuleAlias ? config.to : config.to.replace(/\\/+$/, \"\");\n\n const isNodeModules = hostBase.endsWith(\"/node_modules\") || hostBase === \"node_modules\";\n\n return {\n from: config.from,\n to: config.to,\n isGlob,\n hostBase,\n virtualMount,\n isNodeModules,\n isModuleAlias,\n };\n });\n}\n\n/**\n * Map a virtual path to a host path using the configured mappings.\n * Returns null if no mapping matches.\n */\nexport function virtualToHost(virtualPath: string, mappings: PathMapping[]): string | null {\n for (const mapping of mappings) {\n if (mapping.isGlob) {\n // Prefix matching: virtual path must start with the virtual mount\n if (virtualPath === mapping.virtualMount || virtualPath.startsWith(mapping.virtualMount + \"/\")) {\n const relativePart = virtualPath.slice(mapping.virtualMount.length);\n return mapping.hostBase + relativePart;\n }\n } else {\n // Direct file mapping\n if (virtualPath === mapping.virtualMount) {\n return mapping.hostBase;\n }\n }\n }\n return null;\n}\n\n/**\n * Map a host path to a virtual path using the configured mappings.\n * Returns null if no mapping matches.\n */\nexport function hostToVirtual(hostPath: string, mappings: PathMapping[]): string | null {\n for (const mapping of mappings) {\n if (mapping.isGlob) {\n if (hostPath === mapping.hostBase || hostPath.startsWith(mapping.hostBase + \"/\")) {\n const relativePart = hostPath.slice(mapping.hostBase.length);\n return mapping.virtualMount + relativePart;\n }\n } else {\n if (hostPath === mapping.hostBase) {\n return mapping.virtualMount;\n }\n }\n }\n return null;\n}\n\n/**\n * Find the node_modules mapping (if any).\n */\nexport function findNodeModulesMapping(mappings: PathMapping[]): PathMapping | undefined {\n return mappings.find((m) => m.isNodeModules);\n}\n\n/**\n * Find a module alias mapping that matches the given bare specifier.\n * Returns undefined if no module alias matches.\n */\nexport function findModuleAlias(specifier: string, mappings: PathMapping[]): PathMapping | undefined {\n return mappings.find((m) => m.isModuleAlias && m.to === specifier);\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAAS,aAAa,CAAC,SAAyC;AAAA,EACrE,OAAO,QAAQ,IAAI,CAAC,WAAW;AAAA,IAC7B,MAAM,SAAS,OAAO,KAAK,SAAS,GAAG;AAAA,IACvC,MAAM,gBAAgB,CAAC,OAAO,GAAG,WAAW,GAAG;AAAA,IAE/C,IAAI,iBAAiB,QAAQ;AAAA,MAC3B,MAAM,IAAI,MACR,iBAAiB,OAAO,6CAA6C,OAAO,aAC5E,6CACF;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI,QAAQ;AAAA,MAEV,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG;AAAA,MACnC,MAAM,eAAyB,CAAC;AAAA,MAChC,WAAW,QAAQ,OAAO;AAAA,QACxB,IAAI,KAAK,SAAS,GAAG;AAAA,UAAG;AAAA,QACxB,aAAa,KAAK,IAAI;AAAA,MACxB;AAAA,MACA,WAAW,aAAa,KAAK,GAAG;AAAA,IAClC,EAAO;AAAA,MACL,WAAW,OAAO;AAAA;AAAA,IAIpB,WAAW,SAAS,QAAQ,QAAQ,EAAE;AAAA,IACtC,MAAM,eAAe,gBAAgB,OAAO,KAAK,OAAO,GAAG,QAAQ,QAAQ,EAAE;AAAA,IAE7E,MAAM,gBAAgB,SAAS,SAAS,eAAe,KAAK,aAAa;AAAA,IAEzE,OAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,IAAI,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,GACD;AAAA;AAOI,SAAS,aAAa,CAAC,aAAqB,UAAwC;AAAA,EACzF,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI,QAAQ,QAAQ;AAAA,MAElB,IAAI,gBAAgB,QAAQ,gBAAgB,YAAY,WAAW,QAAQ,eAAe,GAAG,GAAG;AAAA,QAC9F,MAAM,eAAe,YAAY,MAAM,QAAQ,aAAa,MAAM;AAAA,QAClE,OAAO,QAAQ,WAAW;AAAA,MAC5B;AAAA,IACF,EAAO;AAAA,MAEL,IAAI,gBAAgB,QAAQ,cAAc;AAAA,QACxC,OAAO,QAAQ;AAAA,MACjB;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO;AAAA;AAOF,SAAS,aAAa,CAAC,UAAkB,UAAwC;AAAA,EACtF,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI,QAAQ,QAAQ;AAAA,MAClB,IAAI,aAAa,QAAQ,YAAY,SAAS,WAAW,QAAQ,WAAW,GAAG,GAAG;AAAA,QAChF,MAAM,eAAe,SAAS,MAAM,QAAQ,SAAS,MAAM;AAAA,QAC3D,OAAO,QAAQ,eAAe;AAAA,MAChC;AAAA,IACF,EAAO;AAAA,MACL,IAAI,aAAa,QAAQ,UAAU;AAAA,QACjC,OAAO,QAAQ;AAAA,MACjB;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,sBAAsB,CAAC,UAAkD;AAAA,EACvF,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,aAAa;AAAA;AAOtC,SAAS,eAAe,CAAC,WAAmB,UAAkD;AAAA,EACnG,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,SAAS;AAAA;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "EF2971DD05B91B6464756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -60,7 +60,7 @@ var __export = (target, all) => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// src/internal/module-loader/resolve.ts
|
|
64
64
|
var exports_resolve = {};
|
|
65
65
|
__export(exports_resolve, {
|
|
66
66
|
resolveFilePath: () => resolveFilePath,
|
|
@@ -174,4 +174,4 @@ function isDirectory(p) {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
//# debugId=
|
|
177
|
+
//# debugId=A471F9C1EDA796C564756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import fs from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Extensions to probe for module resolution, in order of priority.\n */\nconst EXTENSIONS = [\n \".tsx\",\n \".jsx\",\n \".ts\",\n \".mjs\",\n \".js\",\n \".cjs\",\n \".json\",\n];\n\n/**\n * Resolve a file path with extension probing, index fallback, and browser variant probing.\n * Returns the resolved absolute path, or null if not found.\n */\nexport function resolveFilePath(basePath: string): string | null {\n // Try exact path first\n if (isFile(basePath)) return basePath;\n\n // Try browser variant (e.g., file.browser.ts before file.ts)\n const dir = path.dirname(basePath);\n const ext = path.extname(basePath);\n const nameWithoutExt = path.basename(basePath, ext);\n\n if (ext) {\n // Has extension — try browser variant\n const browserPath = path.join(dir, `${nameWithoutExt}.browser${ext}`);\n if (isFile(browserPath)) return browserPath;\n\n // Exact extension didn't work and file doesn't exist\n return null;\n }\n\n // No extension — probe extensions\n for (const probeExt of EXTENSIONS) {\n // Try browser variant first\n const browserPath = path.join(dir, `${nameWithoutExt}.browser${probeExt}`);\n if (isFile(browserPath)) return browserPath;\n\n const probePath = basePath + probeExt;\n if (isFile(probePath)) return probePath;\n }\n\n // Try as directory with index file\n if (isDirectory(basePath)) {\n for (const probeExt of EXTENSIONS) {\n const browserIndex = path.join(basePath, `index.browser${probeExt}`);\n if (isFile(browserIndex)) return browserIndex;\n\n const indexPath = path.join(basePath, `index${probeExt}`);\n if (isFile(indexPath)) return indexPath;\n }\n }\n\n return null;\n}\n\n/**\n * Detect the format of a file based on its extension and content.\n */\nexport function detectFormat(filePath: string, code: string): \"cjs\" | \"esm\" | \"json\" {\n const ext = path.extname(filePath);\n\n if (ext === \".json\") return \"json\";\n if (ext === \".cjs\") return \"cjs\";\n if (ext === \".mjs\") return \"esm\";\n\n // Heuristic: check for CJS patterns vs ESM patterns\n if (hasESMSyntax(code)) return \"esm\";\n if (hasCJSSyntax(code)) return \"cjs\";\n\n // Default to ESM\n return \"esm\";\n}\n\n/**\n * Check if code has ES module syntax.\n */\nfunction hasESMSyntax(code: string): boolean {\n // import ... from or export ...\n return /\\b(import\\s+|export\\s+(default\\s+|{|const\\s|let\\s|var\\s|function\\s|class\\s|async\\s))/m.test(code);\n}\n\n/**\n * Check if code has CommonJS syntax.\n */\nfunction hasCJSSyntax(code: string): boolean {\n return /\\b(module\\.exports|exports\\.\\w+\\s*=|require\\s*\\()/m.test(code);\n}\n\n/**\n * Parse a bare specifier into package name and subpath.\n *\n * Examples:\n * \"lodash\" -> { packageName: \"lodash\", subpath: \"\" }\n * \"lodash/chunk\" -> { packageName: \"lodash\", subpath: \"/chunk\" }\n * \"@scope/pkg\" -> { packageName: \"@scope/pkg\", subpath: \"\" }\n * \"@scope/pkg/sub/path\" -> { packageName: \"@scope/pkg\", subpath: \"/sub/path\" }\n */\nexport function parseSpecifier(specifier: string): { packageName: string; subpath: string } {\n if (specifier.startsWith(\"@\")) {\n // Scoped package: @scope/name or @scope/name/subpath\n const slashIndex = specifier.indexOf(\"/\");\n if (slashIndex === -1) {\n return { packageName: specifier, subpath: \"\" };\n }\n const secondSlash = specifier.indexOf(\"/\", slashIndex + 1);\n if (secondSlash === -1) {\n return { packageName: specifier, subpath: \"\" };\n }\n return {\n packageName: specifier.slice(0, secondSlash),\n subpath: specifier.slice(secondSlash),\n };\n }\n\n // Non-scoped: name or name/subpath\n const slashIndex = specifier.indexOf(\"/\");\n if (slashIndex === -1) {\n return { packageName: specifier, subpath: \"\" };\n }\n return {\n packageName: specifier.slice(0, slashIndex),\n subpath: specifier.slice(slashIndex),\n };\n}\n\n/**\n * Check if a specifier is a bare specifier (npm package name, not relative/absolute).\n */\nexport function isBareSpecifier(specifier: string): boolean {\n return !specifier.startsWith(\".\") && !specifier.startsWith(\"/\");\n}\n\nfunction isFile(p: string): boolean {\n try {\n return fs.statSync(p).isFile();\n } catch {\n return false;\n }\n}\n\nfunction isDirectory(p: string): boolean {\n try {\n return fs.statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "A471F9C1EDA796C564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -60,7 +60,7 @@ var __export = (target, all) => {
|
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// src/internal/module-loader/strip-types.ts
|
|
64
64
|
var exports_strip_types = {};
|
|
65
65
|
__export(exports_strip_types, {
|
|
66
66
|
processTypeScript: () => processTypeScript,
|
|
@@ -233,4 +233,4 @@ function escapeRegExp(s) {
|
|
|
233
233
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
//# debugId=
|
|
236
|
+
//# debugId=75403F6CC109485464756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import Module from \"node:module\";\nimport path from \"node:path\";\n\ntype StripTypeScriptTypesFn = NonNullable<typeof Module.stripTypeScriptTypes>;\ntype TsLoader = \"ts\" | \"tsx\";\ntype BunTranspilerLike = {\n transformSync(code: string, options?: { loader?: TsLoader }): string;\n};\ntype BunGlobalLike = {\n Transpiler?: new (options: { loader: TsLoader }) => BunTranspilerLike;\n};\n\nlet _stripTypeScriptTypes: StripTypeScriptTypesFn | undefined;\nconst bunTranspilerCache: Partial<Record<TsLoader, BunTranspilerLike>> = {};\n\nfunction getStripTypeScriptTypes(): StripTypeScriptTypesFn | undefined {\n const strip = Module.stripTypeScriptTypes;\n if (typeof strip !== \"function\") {\n _stripTypeScriptTypes = undefined;\n return undefined;\n }\n\n if (_stripTypeScriptTypes !== strip) {\n _stripTypeScriptTypes = strip;\n }\n\n return _stripTypeScriptTypes;\n}\n\nfunction getBunTranspiler(loader: TsLoader): BunTranspilerLike | undefined {\n const cached = bunTranspilerCache[loader];\n if (cached) return cached;\n\n const bunGlobal = (globalThis as { Bun?: BunGlobalLike }).Bun;\n if (!bunGlobal?.Transpiler) {\n return undefined;\n }\n\n const transpiler = new bunGlobal.Transpiler({ loader });\n bunTranspilerCache[loader] = transpiler;\n return transpiler;\n}\n\nfunction transpileWithBunFallback(code: string, filename: string): string | null {\n const loader: TsLoader = path.extname(filename) === \".tsx\" ? \"tsx\" : \"ts\";\n const transpiler = getBunTranspiler(loader);\n if (!transpiler) {\n return null;\n }\n\n return transpiler.transformSync(code, { loader });\n}\n\nconst TS_EXTENSIONS = new Set([\".ts\", \".tsx\", \".mts\", \".cts\"]);\n\n/**\n * Check if a file path is a TypeScript file that needs type processing.\n */\nexport function isTypeScriptFile(filePath: string): boolean {\n return TS_EXTENSIONS.has(path.extname(filePath));\n}\n\n/**\n * Process a TypeScript file for isolate use:\n *\n * 1. Strip TypeScript types\n * 2. Elide import specifiers no longer referenced in the code body\n * (handles: `import { SomeType } from 'pkg'` where SomeType was only\n * used in type positions — the import survives stripping but the\n * usage doesn't, so V8 demands an export that doesn't exist in the bundle)\n * 3. Add placeholder exports for type-only export names\n * (handles: `export interface Foo {}` disappears after stripping,\n * but other files may `import { Foo }` from this module)\n *\n * Returns valid JavaScript.\n */\nexport function processTypeScript(code: string, filename: string): string {\n // Find type-only export names BEFORE stripping\n const typeExportNames = findTypeOnlyExports(code);\n\n // Prefer Node's native strip API when available.\n // Fall back to Bun.Transpiler for Bun-hosted callbacks.\n const stripTypes = getStripTypeScriptTypes();\n let stripped: string;\n if (stripTypes) {\n try {\n stripped = stripTypes(code, {\n mode: \"transform\",\n sourceMap: false,\n });\n } catch {\n stripped = stripTypes(code, {\n mode: \"strip\",\n });\n }\n } else {\n const bunTranspiled = transpileWithBunFallback(code, filename);\n if (bunTranspiled === null) {\n throw new Error(\n \"TypeScript processing is unavailable in this runtime. \" +\n \"Requires Node.js >= 22.7.0 (Module.stripTypeScriptTypes) \" +\n \"or Bun.Transpiler.\"\n );\n }\n stripped = bunTranspiled;\n }\n\n // Elide unused import specifiers\n stripped = elideUnusedImports(stripped);\n\n // Add placeholder exports for type-only names not already value-exported\n if (typeExportNames.length > 0) {\n const needsPlaceholder = typeExportNames.filter(\n (name) => !isValueExported(name, stripped),\n );\n if (needsPlaceholder.length > 0) {\n const vars = needsPlaceholder.map((n) => `var ${n} = undefined;`).join(\" \");\n stripped += \"\\n\" + vars + \"\\nexport { \" + needsPlaceholder.join(\", \") + \" };\\n\";\n }\n }\n\n return stripped;\n}\n\n// ─── Import elision ──────────────────────────────────────────────────────────\n\n/**\n * Named import regex (handles single-line and multi-line).\n * Captures: [1] optional default part, [2] specifier list, [3] module path\n */\nconst NAMED_IMPORT_RE =\n /import\\s+([\\w$]+\\s*,\\s*)?\\{([\\s\\S]*?)\\}\\s*from\\s*['\"]([^'\"]+)['\"];?/g;\n\nfunction getImportedLocalName(specifier: string): string {\n const trimmed = specifier.trim();\n const asMatch = trimmed.match(/^(.+?)\\s+as\\s+([A-Za-z_$][\\w$]*)$/);\n return asMatch ? asMatch[2]! : trimmed;\n}\n\nfunction createImportedNameReferenceRegex(localName: string): RegExp {\n const escaped = escapeRegExp(localName);\n return new RegExp(`(?<![\\\\w$])${escaped}(?![\\\\w$])`);\n}\n\n/**\n * After type stripping, imported names that were only used in type positions\n * are unreferenced in the code body. Remove them from import statements\n * so V8's module linker doesn't demand them from the resolved module.\n */\nfunction elideUnusedImports(code: string): string {\n // Collect all named-import regions\n const entries: Array<{\n fullMatch: string;\n start: number;\n end: number;\n defaultPart: string;\n specifiers: string[];\n modulePath: string;\n }> = [];\n\n NAMED_IMPORT_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = NAMED_IMPORT_RE.exec(code)) !== null) {\n entries.push({\n fullMatch: m[0],\n start: m.index,\n end: m.index + m[0].length,\n defaultPart: m[1] ?? \"\",\n specifiers: m[2]!\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0),\n modulePath: m[3]!,\n });\n }\n\n if (entries.length === 0) return code;\n\n // Build \"body\" = code with all import declarations blanked out\n let body = code;\n for (let i = entries.length - 1; i >= 0; i--) {\n const { start, end } = entries[i]!;\n body = body.slice(0, start) + \" \".repeat(end - start) + body.slice(end);\n }\n\n // Process imports in reverse order to preserve string indices\n let result = code;\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i]!;\n const kept: string[] = [];\n\n for (const spec of entry.specifiers) {\n // \"A as B\" → local name is B; \"A\" → local name is A\n const localName = getImportedLocalName(spec);\n\n // Keep if referenced anywhere in the body as a whole word\n if (createImportedNameReferenceRegex(localName).test(body)) {\n kept.push(spec);\n }\n }\n\n // Nothing changed for this import\n if (kept.length === entry.specifiers.length) continue;\n\n let replacement: string;\n if (kept.length === 0 && !entry.defaultPart) {\n // All named specifiers gone, no default → remove entire import\n replacement = \"\";\n } else if (kept.length === 0) {\n // Default import survives, named specifiers all gone\n const def = entry.defaultPart.replace(/\\s*,\\s*$/, \"\").trim();\n replacement = `import ${def} from '${entry.modulePath}';`;\n } else {\n replacement = `import ${entry.defaultPart}{ ${kept.join(\", \")} } from '${entry.modulePath}';`;\n }\n\n result = result.slice(0, entry.start) + replacement + result.slice(entry.end);\n }\n\n return result;\n}\n\n// ─── Type-only export placeholders ───────────────────────────────────────────\n\n/**\n * Find export names that are type-only (will vanish after stripping).\n */\nfunction findTypeOnlyExports(code: string): string[] {\n const names = new Set<string>();\n let m: RegExpExecArray | null;\n\n // export interface Name / export interface Name<T>\n const iface = /\\bexport\\s+interface\\s+(\\w+)/g;\n while ((m = iface.exec(code)) !== null) names.add(m[1]!);\n\n // export type Name = ... / export type Name<T> = ...\n // (but NOT `export type { ... }`)\n const alias = /\\bexport\\s+type\\s+(\\w+)\\s*[=<]/g;\n while ((m = alias.exec(code)) !== null) names.add(m[1]!);\n\n // export type { A, B } / export type { A } from './mod.cjs'\n const reExport = /\\bexport\\s+type\\s*\\{([^}]+)\\}/g;\n while ((m = reExport.exec(code)) !== null) {\n for (const item of m[1]!.split(\",\")) {\n const trimmed = item.trim();\n const asMatch = trimmed.match(/\\w+\\s+as\\s+(\\w+)/);\n if (asMatch) names.add(asMatch[1]!);\n else if (/^\\w+$/.test(trimmed)) names.add(trimmed);\n }\n }\n\n return [...names];\n}\n\n/**\n * Check if a name is still exported as a runtime value in the stripped code.\n */\nfunction isValueExported(name: string, code: string): boolean {\n const e = escapeRegExp(name);\n if (new RegExp(`\\\\bexport\\\\s+(?:var|let|const|function|class|async\\\\s+function)\\\\s+${e}\\\\b`).test(code)) return true;\n if (new RegExp(`\\\\bexport\\\\s*\\\\{[^}]*\\\\b${e}\\\\b[^}]*\\\\}`).test(code)) return true;\n if (name === \"default\" && /\\bexport\\s+default\\b/.test(code)) return true;\n return false;\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "75403F6CC109485464756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -36,7 +36,7 @@ var __export = (target, all) => {
|
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//
|
|
39
|
+
// src/internal/path/index.ts
|
|
40
40
|
var exports_path = {};
|
|
41
41
|
__export(exports_path, {
|
|
42
42
|
setupPath: () => setupPath
|
|
@@ -500,4 +500,4 @@ async function setupPath(context, options) {
|
|
|
500
500
|
};
|
|
501
501
|
}
|
|
502
502
|
|
|
503
|
-
//# debugId=
|
|
503
|
+
//# debugId=8C96A4F69072855264756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import type ivm from \"isolated-vm\";\n\nexport interface PathOptions {\n /** Current working directory for path.resolve(). Defaults to \"/\" */\n cwd?: string;\n}\n\nexport interface PathHandle {\n dispose(): void;\n}\n\n/**\n * Generate the path module code with optional cwd configuration.\n */\nfunction generatePathCode(cwd: string): string {\n return `\n(function() {\n const sep = '/';\n const delimiter = ':';\n\n /**\n * Normalize a path by resolving '.' and '..' segments and removing redundant separators\n */\n function normalize(p) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n if (p.length === 0) {\n return '.';\n }\n\n const isAbsolutePath = p.charCodeAt(0) === 47; // '/'\n const trailingSlash = p.charCodeAt(p.length - 1) === 47; // '/'\n\n // Split by separator and filter empty segments\n const segments = p.split('/');\n const result = [];\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n\n // Skip empty segments (from consecutive slashes) and '.'\n if (segment === '' || segment === '.') {\n continue;\n }\n\n if (segment === '..') {\n // For absolute paths, don't go above root\n // For relative paths, keep '..' if we can't go up further\n if (result.length > 0 && result[result.length - 1] !== '..') {\n result.pop();\n } else if (!isAbsolutePath) {\n result.push('..');\n }\n } else {\n result.push(segment);\n }\n }\n\n let normalized = result.join('/');\n\n if (isAbsolutePath) {\n normalized = '/' + normalized;\n }\n\n if (trailingSlash && normalized.length > 1 && !normalized.endsWith('/')) {\n normalized += '/';\n }\n\n if (!normalized) {\n return isAbsolutePath ? '/' : '.';\n }\n\n return normalized;\n }\n\n /**\n * Join path segments together and normalize the result\n */\n function join(...segments) {\n if (segments.length === 0) {\n return '.';\n }\n\n let joined = '';\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (typeof segment !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof segment);\n }\n if (segment.length > 0) {\n if (joined.length === 0) {\n joined = segment;\n } else {\n joined += '/' + segment;\n }\n }\n }\n\n if (joined.length === 0) {\n return '.';\n }\n\n return normalize(joined);\n }\n\n /**\n * Get the directory name of a path\n */\n function dirname(p) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n if (p.length === 0) {\n return '.';\n }\n\n const isAbsolutePath = p.charCodeAt(0) === 47;\n let end = -1;\n let matchedSlash = true;\n\n for (let i = p.length - 1; i >= 1; i--) {\n if (p.charCodeAt(i) === 47) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n matchedSlash = false;\n }\n }\n\n if (end === -1) {\n return isAbsolutePath ? '/' : '.';\n }\n\n if (isAbsolutePath && end === 1) {\n return '/';\n }\n\n return p.slice(0, end);\n }\n\n /**\n * Get the last portion of a path, optionally removing a suffix\n */\n function basename(p, ext) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('ext must be a string');\n }\n\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n\n for (let i = p.length - 1; i >= 0; i--) {\n if (p.charCodeAt(i) === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (matchedSlash) {\n end = i + 1;\n matchedSlash = false;\n }\n }\n }\n\n if (end === -1) {\n return '';\n }\n\n const base = p.slice(start, end);\n\n if (ext !== undefined && base.endsWith(ext)) {\n return base.slice(0, base.length - ext.length);\n }\n\n return base;\n }\n\n /**\n * Get the extension of a path\n */\n function extname(p) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let preDotState = 0;\n\n for (let i = p.length - 1; i >= 0; i--) {\n const code = p.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46) { // '.'\n if (startDot === -1) {\n startDot = i;\n } else if (preDotState !== 1) {\n preDotState = 1;\n }\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n preDotState === 0 ||\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)) {\n return '';\n }\n\n return p.slice(startDot, end);\n }\n\n /**\n * Check if a path is absolute\n */\n function isAbsolute(p) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n return p.length > 0 && p.charCodeAt(0) === 47;\n }\n\n /**\n * Resolve a sequence of paths to an absolute path\n */\n function resolve(...segments) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n\n for (let i = segments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n let path;\n if (i >= 0) {\n path = segments[i];\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof path);\n }\n } else {\n // Use configured cwd\n path = ${JSON.stringify(cwd)};\n }\n\n if (path.length === 0) {\n continue;\n }\n\n if (resolvedPath.length > 0) {\n resolvedPath = path + '/' + resolvedPath;\n } else {\n resolvedPath = path;\n }\n resolvedAbsolute = path.charCodeAt(0) === 47;\n }\n\n resolvedPath = normalize(resolvedPath);\n\n // Remove trailing slash unless it's just root\n if (resolvedPath.length > 1 && resolvedPath.endsWith('/')) {\n resolvedPath = resolvedPath.slice(0, -1);\n }\n\n if (resolvedAbsolute) {\n return resolvedPath.length > 0 ? resolvedPath : '/';\n }\n\n return resolvedPath.length > 0 ? resolvedPath : '.';\n }\n\n /**\n * Get the relative path from 'from' to 'to'\n */\n function relative(from, to) {\n if (typeof from !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof from);\n }\n if (typeof to !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof to);\n }\n\n if (from === to) {\n return '';\n }\n\n from = resolve(from);\n to = resolve(to);\n\n if (from === to) {\n return '';\n }\n\n const fromParts = from.split('/').filter(Boolean);\n const toParts = to.split('/').filter(Boolean);\n\n // Find common prefix\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] !== toParts[i]) {\n break;\n }\n commonLength++;\n }\n\n // Build relative path\n const upCount = fromParts.length - commonLength;\n const result = [];\n\n for (let i = 0; i < upCount; i++) {\n result.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n result.push(toParts[i]);\n }\n\n return result.join('/');\n }\n\n /**\n * Parse a path into its components\n */\n function parse(p) {\n if (typeof p !== 'string') {\n throw new TypeError('Path must be a string. Received ' + typeof p);\n }\n\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n\n if (p.length === 0) {\n return ret;\n }\n\n const isAbsolutePath = p.charCodeAt(0) === 47;\n if (isAbsolutePath) {\n ret.root = '/';\n }\n\n let start = isAbsolutePath ? 1 : 0;\n let end = -1;\n let matchedSlash = true;\n let startDot = -1;\n let preDotState = 0;\n\n // Get base and dir\n for (let i = p.length - 1; i >= start; i--) {\n const code = p.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (matchedSlash) {\n end = i + 1;\n matchedSlash = false;\n }\n\n if (code === 46) { // '.'\n if (startDot === -1) {\n startDot = i;\n } else if (preDotState !== 1) {\n preDotState = 1;\n }\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n }\n\n if (end !== -1) {\n ret.base = p.slice(start, end);\n\n // Determine extension\n if (startDot !== -1 && startDot >= start &&\n preDotState !== 0 &&\n !(preDotState === 1 && startDot === end - 1 && startDot === start + 1)) {\n ret.ext = p.slice(startDot, end);\n ret.name = p.slice(start, startDot);\n } else {\n ret.name = ret.base;\n }\n }\n\n if (start > (isAbsolutePath ? 1 : 0)) {\n ret.dir = p.slice(0, start - 1);\n } else if (isAbsolutePath) {\n ret.dir = '/';\n }\n\n return ret;\n }\n\n /**\n * Format a path object into a path string\n */\n function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError(\"Parameter 'pathObject' must be an object, not \" + typeof pathObject);\n }\n\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base ||\n ((pathObject.name || '') + (pathObject.ext || ''));\n\n if (!dir) {\n return base;\n }\n\n if (dir === pathObject.root) {\n return dir + base;\n }\n\n return dir + '/' + base;\n }\n\n // Create path object with posix namespace (for compatibility)\n const pathModule = {\n sep,\n delimiter,\n normalize,\n join,\n dirname,\n basename,\n extname,\n isAbsolute,\n resolve,\n relative,\n parse,\n format,\n };\n\n // posix is the same as the main module since we only support POSIX\n pathModule.posix = pathModule;\n\n globalThis.path = pathModule;\n})();\n`;\n}\n\n/**\n * Setup path utilities in an isolated-vm context\n *\n * Provides path manipulation utilities similar to Node.js path module\n * Uses POSIX-style paths only (always uses '/' as separator)\n *\n * @example\n * const handle = await setupPath(context, { cwd: \"/home/user\" });\n * await context.eval(\\`\n * const joined = path.join(\"/foo\", \"bar\", \"baz\");\n * const dir = path.dirname(\"/foo/bar/baz.txt\");\n * const resolved = path.resolve(\"relative\"); // Uses configured cwd\n * \\`);\n */\nexport async function setupPath(\n context: ivm.Context,\n options?: PathOptions\n): Promise<PathHandle> {\n const cwd = options?.cwd ?? \"/\";\n const pathCode = generatePathCode(cwd);\n context.evalSync(pathCode);\n return {\n dispose() {\n // No resources to cleanup for pure JS injection\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,SAAS,gBAAgB,CAAC,KAAqB;AAAA,EAC7C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAyPQ,KAAK,UAAU,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsNnC,eAAsB,SAAS,CAC7B,SACA,SACqB;AAAA,EACrB,MAAM,MAAM,SAAS,OAAO;AAAA,EAC5B,MAAM,WAAW,iBAAiB,GAAG;AAAA,EACrC,QAAQ,SAAS,QAAQ;AAAA,EACzB,OAAO;AAAA,IACL,OAAO,GAAG;AAAA,EAGZ;AAAA;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "8C96A4F69072855264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -36,7 +36,7 @@ var __export = (target, all) => {
|
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//
|
|
39
|
+
// src/internal/playwright/client.ts
|
|
40
40
|
var exports_client = {};
|
|
41
41
|
__export(exports_client, {
|
|
42
42
|
getDefaultPlaywrightHandlerMetadata: () => import_handler.getDefaultPlaywrightHandlerMetadata,
|
|
@@ -46,4 +46,4 @@ __export(exports_client, {
|
|
|
46
46
|
module.exports = __toCommonJS(exports_client);
|
|
47
47
|
var import_handler = require("./handler.cjs");
|
|
48
48
|
|
|
49
|
-
//# debugId=
|
|
49
|
+
//# debugId=074A4B0BA48AFF2564756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * Client-safe exports for ./index.ts\n * This module can be imported without loading isolated-vm\n */\n\n// Re-export types from types.ts\nexport type {\n NetworkRequestInfo,\n NetworkResponseInfo,\n BrowserConsoleLogEntry,\n PageErrorInfo,\n RequestFailureInfo,\n DefaultPlaywrightHandler,\n DefaultPlaywrightHandlerMetadata,\n DefaultPlaywrightHandlerOptions,\n PlaywrightSetupOptions,\n PlaywrightHandle,\n PlaywrightCallback,\n} from \"./types.cjs\";\n\nexport type { PlaywrightOperation, PlaywrightResult, PlaywrightEvent, PlaywrightFileData } from \"../protocol/index.cjs\";\n\n// Re-export handler functions\nexport {\n createPlaywrightHandler,\n defaultPlaywrightHandler,\n getDefaultPlaywrightHandlerMetadata,\n} from \"./handler.cjs\";\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,IAJP;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "074A4B0BA48AFF2564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -36,7 +36,7 @@ var __export = (target, all) => {
|
|
|
36
36
|
});
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//
|
|
39
|
+
// src/internal/playwright/handler.ts
|
|
40
40
|
var exports_handler = {};
|
|
41
41
|
__export(exports_handler, {
|
|
42
42
|
getLocator: () => getLocator,
|
|
@@ -1413,4 +1413,4 @@ function getDefaultPlaywrightHandlerMetadata(handler) {
|
|
|
1413
1413
|
return handler[import_types.DEFAULT_PLAYWRIGHT_HANDLER_META];
|
|
1414
1414
|
}
|
|
1415
1415
|
|
|
1416
|
-
//# debugId=
|
|
1416
|
+
//# debugId=1EA18A56C336D40464756E2164756E21
|