@run0/jiki 0.1.0
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/dist/browser-bundle.d.ts +40 -0
- package/dist/builtins.d.ts +22 -0
- package/dist/code-transform.d.ts +7 -0
- package/dist/config/cdn.d.ts +13 -0
- package/dist/container.d.ts +101 -0
- package/dist/dev-server.d.ts +69 -0
- package/dist/errors.d.ts +19 -0
- package/dist/frameworks/code-transforms.d.ts +32 -0
- package/dist/frameworks/next-api-handler.d.ts +72 -0
- package/dist/frameworks/next-dev-server.d.ts +141 -0
- package/dist/frameworks/next-html-generator.d.ts +36 -0
- package/dist/frameworks/next-route-resolver.d.ts +19 -0
- package/dist/frameworks/next-shims.d.ts +78 -0
- package/dist/frameworks/remix-dev-server.d.ts +47 -0
- package/dist/frameworks/sveltekit-dev-server.d.ts +43 -0
- package/dist/frameworks/vite-dev-server.d.ts +50 -0
- package/dist/fs-errors.d.ts +36 -0
- package/dist/index.cjs +14916 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.mjs +14898 -0
- package/dist/index.mjs.map +1 -0
- package/dist/kernel.d.ts +48 -0
- package/dist/memfs.d.ts +144 -0
- package/dist/metrics.d.ts +78 -0
- package/dist/module-resolver.d.ts +60 -0
- package/dist/network-interceptor.d.ts +71 -0
- package/dist/npm/cache.d.ts +76 -0
- package/dist/npm/index.d.ts +60 -0
- package/dist/npm/lockfile-reader.d.ts +32 -0
- package/dist/npm/pnpm.d.ts +18 -0
- package/dist/npm/registry.d.ts +45 -0
- package/dist/npm/resolver.d.ts +39 -0
- package/dist/npm/sync-installer.d.ts +18 -0
- package/dist/npm/tarball.d.ts +4 -0
- package/dist/npm/workspaces.d.ts +46 -0
- package/dist/persistence.d.ts +94 -0
- package/dist/plugin.d.ts +156 -0
- package/dist/polyfills/assert.d.ts +30 -0
- package/dist/polyfills/child_process.d.ts +116 -0
- package/dist/polyfills/chokidar.d.ts +18 -0
- package/dist/polyfills/crypto.d.ts +49 -0
- package/dist/polyfills/events.d.ts +28 -0
- package/dist/polyfills/fs.d.ts +82 -0
- package/dist/polyfills/http.d.ts +147 -0
- package/dist/polyfills/module.d.ts +29 -0
- package/dist/polyfills/net.d.ts +53 -0
- package/dist/polyfills/os.d.ts +91 -0
- package/dist/polyfills/path.d.ts +96 -0
- package/dist/polyfills/perf_hooks.d.ts +21 -0
- package/dist/polyfills/process.d.ts +99 -0
- package/dist/polyfills/querystring.d.ts +15 -0
- package/dist/polyfills/readdirp.d.ts +18 -0
- package/dist/polyfills/readline.d.ts +32 -0
- package/dist/polyfills/stream.d.ts +106 -0
- package/dist/polyfills/stubs.d.ts +737 -0
- package/dist/polyfills/tty.d.ts +25 -0
- package/dist/polyfills/url.d.ts +41 -0
- package/dist/polyfills/util.d.ts +61 -0
- package/dist/polyfills/v8.d.ts +43 -0
- package/dist/polyfills/vm.d.ts +76 -0
- package/dist/polyfills/worker-threads.d.ts +77 -0
- package/dist/polyfills/ws.d.ts +32 -0
- package/dist/polyfills/zlib.d.ts +87 -0
- package/dist/runtime-helpers.d.ts +4 -0
- package/dist/runtime-interface.d.ts +39 -0
- package/dist/sandbox.d.ts +69 -0
- package/dist/server-bridge.d.ts +55 -0
- package/dist/shell-commands.d.ts +2 -0
- package/dist/shell.d.ts +101 -0
- package/dist/transpiler.d.ts +47 -0
- package/dist/type-checker.d.ts +57 -0
- package/dist/types/package-json.d.ts +17 -0
- package/dist/utils/binary-encoding.d.ts +4 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/safe-path.d.ts +6 -0
- package/dist/worker-runtime.d.ts +34 -0
- package/package.json +59 -0
- package/src/browser-bundle.ts +498 -0
- package/src/builtins.ts +222 -0
- package/src/code-transform.ts +183 -0
- package/src/config/cdn.ts +17 -0
- package/src/container.ts +343 -0
- package/src/dev-server.ts +322 -0
- package/src/errors.ts +604 -0
- package/src/frameworks/code-transforms.ts +667 -0
- package/src/frameworks/next-api-handler.ts +366 -0
- package/src/frameworks/next-dev-server.ts +1252 -0
- package/src/frameworks/next-html-generator.ts +585 -0
- package/src/frameworks/next-route-resolver.ts +521 -0
- package/src/frameworks/next-shims.ts +1084 -0
- package/src/frameworks/remix-dev-server.ts +163 -0
- package/src/frameworks/sveltekit-dev-server.ts +197 -0
- package/src/frameworks/vite-dev-server.ts +370 -0
- package/src/fs-errors.ts +118 -0
- package/src/index.ts +188 -0
- package/src/kernel.ts +381 -0
- package/src/memfs.ts +1006 -0
- package/src/metrics.ts +140 -0
- package/src/module-resolver.ts +511 -0
- package/src/network-interceptor.ts +143 -0
- package/src/npm/cache.ts +172 -0
- package/src/npm/index.ts +377 -0
- package/src/npm/lockfile-reader.ts +105 -0
- package/src/npm/pnpm.ts +108 -0
- package/src/npm/registry.ts +120 -0
- package/src/npm/resolver.ts +339 -0
- package/src/npm/sync-installer.ts +217 -0
- package/src/npm/tarball.ts +136 -0
- package/src/npm/workspaces.ts +255 -0
- package/src/persistence.ts +235 -0
- package/src/plugin.ts +293 -0
- package/src/polyfills/assert.ts +164 -0
- package/src/polyfills/child_process.ts +535 -0
- package/src/polyfills/chokidar.ts +52 -0
- package/src/polyfills/crypto.ts +433 -0
- package/src/polyfills/events.ts +178 -0
- package/src/polyfills/fs.ts +297 -0
- package/src/polyfills/http.ts +478 -0
- package/src/polyfills/module.ts +97 -0
- package/src/polyfills/net.ts +123 -0
- package/src/polyfills/os.ts +108 -0
- package/src/polyfills/path.ts +169 -0
- package/src/polyfills/perf_hooks.ts +30 -0
- package/src/polyfills/process.ts +349 -0
- package/src/polyfills/querystring.ts +66 -0
- package/src/polyfills/readdirp.ts +72 -0
- package/src/polyfills/readline.ts +80 -0
- package/src/polyfills/stream.ts +610 -0
- package/src/polyfills/stubs.ts +600 -0
- package/src/polyfills/tty.ts +43 -0
- package/src/polyfills/url.ts +97 -0
- package/src/polyfills/util.ts +173 -0
- package/src/polyfills/v8.ts +62 -0
- package/src/polyfills/vm.ts +111 -0
- package/src/polyfills/worker-threads.ts +189 -0
- package/src/polyfills/ws.ts +73 -0
- package/src/polyfills/zlib.ts +244 -0
- package/src/runtime-helpers.ts +83 -0
- package/src/runtime-interface.ts +46 -0
- package/src/sandbox.ts +178 -0
- package/src/server-bridge.ts +473 -0
- package/src/service-worker.ts +153 -0
- package/src/shell-commands.ts +708 -0
- package/src/shell.ts +795 -0
- package/src/transpiler.ts +282 -0
- package/src/type-checker.ts +241 -0
- package/src/types/package-json.ts +17 -0
- package/src/utils/binary-encoding.ts +38 -0
- package/src/utils/hash.ts +24 -0
- package/src/utils/safe-path.ts +38 -0
- package/src/worker-runtime.ts +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/utils/binary-encoding.ts","../src/fs-errors.ts","../src/persistence.ts","../src/memfs.ts","../src/utils/hash.ts","../src/polyfills/path.ts","../src/polyfills/events.ts","../src/polyfills/stream.ts","../src/polyfills/fs.ts","../src/polyfills/process.ts","../src/polyfills/child_process.ts","../src/polyfills/chokidar.ts","../src/polyfills/readdirp.ts","../src/polyfills/module.ts","../src/polyfills/http.ts","../src/polyfills/net.ts","../src/polyfills/url.ts","../src/polyfills/querystring.ts","../src/polyfills/util.ts","../src/polyfills/tty.ts","../src/polyfills/os.ts","../src/polyfills/crypto.ts","../src/polyfills/zlib.ts","../src/polyfills/assert.ts","../src/polyfills/readline.ts","../src/polyfills/v8.ts","../src/polyfills/vm.ts","../src/polyfills/perf_hooks.ts","../src/polyfills/ws.ts","../src/transpiler.ts","../src/polyfills/stubs.ts","../src/polyfills/worker-threads.ts","../src/builtins.ts","../src/config/cdn.ts","../src/frameworks/code-transforms.ts","../src/code-transform.ts","../src/runtime-helpers.ts","../src/module-resolver.ts","../src/kernel.ts","../src/npm/registry.ts","../src/npm/resolver.ts","../src/npm/tarball.ts","../src/npm/cache.ts","../src/npm/lockfile-reader.ts","../src/npm/index.ts","../src/npm/pnpm.ts","../src/shell-commands.ts","../src/shell.ts","../src/npm/sync-installer.ts","../src/plugin.ts","../src/worker-runtime.ts","../src/sandbox.ts","../src/metrics.ts","../src/network-interceptor.ts","../src/container.ts","../src/npm/workspaces.ts","../src/type-checker.ts","../src/utils/safe-path.ts","../src/dev-server.ts","../src/frameworks/next-shims.ts","../src/frameworks/next-html-generator.ts","../src/frameworks/next-route-resolver.ts","../src/frameworks/next-api-handler.ts","../src/frameworks/next-dev-server.ts","../src/frameworks/vite-dev-server.ts","../src/frameworks/sveltekit-dev-server.ts","../src/frameworks/remix-dev-server.ts","../src/server-bridge.ts","../src/browser-bundle.ts","../src/errors.ts"],"sourcesContent":["const CHUNK = 8192;\n\nexport function uint8ToBase64(bytes: Uint8Array): string {\n const parts: string[] = [];\n for (let i = 0; i < bytes.length; i += CHUNK) {\n parts.push(\n String.fromCharCode.apply(null, Array.from(bytes.subarray(i, i + CHUNK))),\n );\n }\n return btoa(parts.join(\"\"));\n}\n\nexport function base64ToUint8(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function uint8ToHex(bytes: Uint8Array): string {\n const hex = new Array(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n hex[i] = bytes[i].toString(16).padStart(2, \"0\");\n }\n return hex.join(\"\");\n}\n\nexport function uint8ToBinaryString(bytes: Uint8Array): string {\n const parts: string[] = [];\n for (let i = 0; i < bytes.length; i += CHUNK) {\n parts.push(\n String.fromCharCode.apply(null, Array.from(bytes.subarray(i, i + CHUNK))),\n );\n }\n return parts.join(\"\");\n}\n","export interface NodeError extends Error {\n code: string;\n errno: number;\n syscall: string;\n path?: string;\n}\n\nexport type ErrorCode =\n | \"ENOENT\"\n | \"ENOTDIR\"\n | \"EISDIR\"\n | \"EEXIST\"\n | \"ENOTEMPTY\"\n | \"ELOOP\"\n | \"EINVAL\"\n | \"EPERM\";\n\nconst ERRORS: Record<string, { errno: number; text: string }> = {\n ENOENT: { errno: -2, text: \"no such file or directory\" },\n ENOTDIR: { errno: -20, text: \"not a directory\" },\n EISDIR: { errno: -21, text: \"is a directory\" },\n EEXIST: { errno: -17, text: \"file already exists\" },\n ENOTEMPTY: { errno: -39, text: \"directory not empty\" },\n ELOOP: { errno: -40, text: \"too many levels of symbolic links\" },\n EINVAL: { errno: -22, text: \"invalid argument\" },\n EPERM: { errno: -1, text: \"operation not permitted\" },\n};\n\nexport function createNodeError(\n code: ErrorCode,\n syscall: string,\n path: string,\n message?: string,\n): NodeError {\n const info = ERRORS[code];\n const e = new Error(\n message || `[${code}] ${syscall}: ${info.text} (${path})`,\n ) as NodeError;\n e.code = code;\n e.errno = info.errno;\n e.syscall = syscall;\n e.path = path;\n return e;\n}\n\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n size: number;\n mode: number;\n mtime: Date;\n atime: Date;\n ctime: Date;\n birthtime: Date;\n mtimeMs: number;\n atimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n nlink: number;\n uid: number;\n gid: number;\n dev: number;\n ino: number;\n rdev: number;\n blksize: number;\n blocks: number;\n}\n\nlet inoSeq = 1;\n\nfunction modeForType(type: \"file\" | \"directory\" | \"symlink\"): number {\n if (type === \"directory\") return 0o755;\n if (type === \"symlink\") return 0o777;\n return 0o644;\n}\n\nexport function buildStats(\n type: \"file\" | \"directory\" | \"symlink\",\n size: number,\n mtime: number,\n ino?: number,\n): Stats {\n const ts = mtime;\n const id = ino ?? inoSeq++;\n const m = modeForType(type);\n return {\n isFile: () => type === \"file\",\n isDirectory: () => type === \"directory\",\n isSymbolicLink: () => type === \"symlink\",\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n size,\n mode: m,\n mtime: new Date(ts),\n atime: new Date(ts),\n ctime: new Date(ts),\n birthtime: new Date(ts),\n mtimeMs: ts,\n atimeMs: ts,\n ctimeMs: ts,\n birthtimeMs: ts,\n nlink: 1,\n uid: 1000,\n gid: 1000,\n dev: 0,\n ino: id,\n rdev: 0,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n };\n}\n","/**\n * Persistence layer for MemFS.\n *\n * Provides a `PersistenceAdapter` interface and an `IndexedDBAdapter`\n * implementation that synchronises the in-memory filesystem to IndexedDB.\n *\n * Writes are fire-and-forget — they never block the synchronous VFS API.\n * Mutations are batched and flushed via microtask debounce (~100 ms) so\n * rapid consecutive writes result in a single IndexedDB transaction.\n *\n * @example\n * ```ts\n * const adapter = new IndexedDBAdapter('my-project');\n * const vfs = new MemFS({ persistence: adapter });\n * await vfs.hydrate(); // load persisted state\n * vfs.writeFileSync('/hello.txt', 'world'); // auto-persisted\n * ```\n */\n\nimport type { FSNode } from \"./memfs\";\n\n// ---------------------------------------------------------------------------\n// Public interface\n// ---------------------------------------------------------------------------\n\n/** Serialised form of a single filesystem entry stored in the adapter. */\nexport interface PersistedEntry {\n path: string;\n type: \"file\" | \"directory\" | \"symlink\";\n /** File content as Uint8Array. Only set for type === \"file\". */\n content?: Uint8Array;\n /** Symlink target. Only set for type === \"symlink\". */\n target?: string;\n mtime: number;\n}\n\n/**\n * Backend-agnostic interface for persisting MemFS state.\n * Implement this to plug in any storage backend (IndexedDB, OPFS,\n * localStorage, etc.).\n */\nexport interface PersistenceAdapter {\n /** Persist a single entry (upsert by path). */\n save(entry: PersistedEntry): void;\n /** Delete a persisted entry by path. */\n delete(path: string): void;\n /** Load all persisted entries. */\n loadAll(): Promise<PersistedEntry[]>;\n /** Delete all persisted entries. */\n clear(): Promise<void>;\n /** Flush any pending writes immediately. Returns when the flush completes. */\n flush(): Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// IndexedDB adapter\n// ---------------------------------------------------------------------------\n\n/** Options for the IndexedDB adapter. */\nexport interface IndexedDBAdapterOptions {\n /** IndexedDB database name. Defaults to `\"jiki-vfs\"`. */\n dbName?: string;\n /** Object store name. Defaults to `\"files\"`. */\n storeName?: string;\n /** Batch flush interval in milliseconds. Defaults to 100. */\n flushIntervalMs?: number;\n}\n\n/**\n * Persists MemFS entries to IndexedDB.\n *\n * Mutations are batched into a queue and flushed periodically (default\n * every 100 ms) in a single readwrite transaction for performance.\n */\nexport class IndexedDBAdapter implements PersistenceAdapter {\n private dbName: string;\n private storeName: string;\n private flushIntervalMs: number;\n private db: IDBDatabase | null = null;\n private queue: Array<\n { type: \"save\"; entry: PersistedEntry } | { type: \"delete\"; path: string }\n > = [];\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n private flushPromise: Promise<void> | null = null;\n\n constructor(options: IndexedDBAdapterOptions = {}) {\n this.dbName = options.dbName ?? \"jiki-vfs\";\n this.storeName = options.storeName ?? \"files\";\n this.flushIntervalMs = options.flushIntervalMs ?? 100;\n }\n\n private async openDB(): Promise<IDBDatabase> {\n if (this.db) return this.db;\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName, { keyPath: \"path\" });\n }\n };\n request.onsuccess = () => {\n this.db = request.result;\n resolve(this.db);\n };\n request.onerror = () => reject(request.error);\n });\n }\n\n save(entry: PersistedEntry): void {\n this.queue.push({ type: \"save\", entry });\n this.scheduleFlush();\n }\n\n delete(path: string): void {\n this.queue.push({ type: \"delete\", path });\n this.scheduleFlush();\n }\n\n async loadAll(): Promise<PersistedEntry[]> {\n const db = await this.openDB();\n return new Promise<PersistedEntry[]>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const request = store.getAll();\n request.onsuccess = () => resolve(request.result as PersistedEntry[]);\n request.onerror = () => reject(request.error);\n });\n }\n\n async clear(): Promise<void> {\n const db = await this.openDB();\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n const request = store.clear();\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n }\n\n async flush(): Promise<void> {\n if (this.flushTimer !== null) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.queue.length === 0) return;\n\n const batch = this.queue.splice(0);\n const db = await this.openDB();\n\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n\n for (const op of batch) {\n if (op.type === \"save\") {\n store.put(op.entry);\n } else {\n store.delete(op.path);\n }\n }\n\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n }\n\n private scheduleFlush(): void {\n if (this.flushTimer !== null) return;\n this.flushTimer = setTimeout(() => {\n this.flushTimer = null;\n this.flushPromise = this.flush().catch(err => {\n console.error(\"[jiki:persistence] flush failed:\", err);\n });\n }, this.flushIntervalMs);\n }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory adapter (for testing and non-browser environments)\n// ---------------------------------------------------------------------------\n\n/**\n * In-memory adapter that stores entries in a `Map`.\n * Useful for tests and server-side usage where IndexedDB is unavailable.\n */\nexport class InMemoryAdapter implements PersistenceAdapter {\n private store = new Map<string, PersistedEntry>();\n\n save(entry: PersistedEntry): void {\n this.store.set(entry.path, entry);\n }\n\n delete(path: string): void {\n this.store.delete(path);\n }\n\n async loadAll(): Promise<PersistedEntry[]> {\n return Array.from(this.store.values());\n }\n\n async clear(): Promise<void> {\n this.store.clear();\n }\n\n async flush(): Promise<void> {\n // No-op — writes are synchronous in memory.\n }\n\n /** Return the number of stored entries (test helper). */\n get size(): number {\n return this.store.size;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helper: convert FSNode ↔ PersistedEntry\n// ---------------------------------------------------------------------------\n\n/** Convert an FSNode at the given path to a PersistedEntry. */\nexport function nodeToEntry(path: string, node: FSNode): PersistedEntry {\n const entry: PersistedEntry = {\n path,\n type: node.type,\n mtime: node.mtime,\n };\n if (node.type === \"file\" && node.content) {\n entry.content = node.content;\n }\n if (node.type === \"symlink\" && node.target) {\n entry.target = node.target;\n }\n return entry;\n}\n","import type { VFSSnapshot, VFSFileEntry } from \"./runtime-interface\";\nimport { uint8ToBase64, base64ToUint8 } from \"./utils/binary-encoding\";\nimport {\n createNodeError,\n buildStats,\n type NodeError,\n type Stats,\n type ErrorCode,\n} from \"./fs-errors\";\nimport {\n nodeToEntry,\n type PersistenceAdapter,\n type PersistedEntry,\n} from \"./persistence\";\nimport type { SandboxGuard } from \"./sandbox\";\n\nexport { createNodeError, type NodeError, type Stats };\n\nlet _nodeInoSeq = 1;\n\nexport interface FSNode {\n type: \"file\" | \"directory\" | \"symlink\";\n content?: Uint8Array;\n children?: Map<string, FSNode>;\n target?: string;\n mtime: number;\n ino: number;\n}\n\ntype ChangeListener = (path: string, content: string) => void;\ntype DeleteListener = (path: string) => void;\ntype AnyListener = ChangeListener | DeleteListener;\n\nexport type WatchEventType = \"change\" | \"rename\";\nexport type WatchListener = (\n eventType: WatchEventType,\n filename: string | null,\n) => void;\n\nexport interface FSWatcher {\n close(): void;\n ref(): this;\n unref(): this;\n}\n\ninterface WatcherEntry {\n listener: WatchListener;\n recursive: boolean;\n closed: boolean;\n}\n\n// ---- Path helpers (consolidated into an object) ----\n\nconst pops = {\n normalize(p: string): string {\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n const parts = p.split(\"/\").filter(Boolean);\n const out: string[] = [];\n for (const seg of parts) {\n if (seg === \"..\") out.pop();\n else if (seg !== \".\") out.push(seg);\n }\n return \"/\" + out.join(\"/\");\n },\n\n segments(p: string): string[] {\n return pops.normalize(p).split(\"/\").filter(Boolean);\n },\n\n parent(p: string): string {\n const norm = pops.normalize(p);\n const idx = norm.lastIndexOf(\"/\");\n return idx <= 0 ? \"/\" : norm.slice(0, idx);\n },\n\n name(p: string): string {\n const norm = pops.normalize(p);\n return norm.slice(norm.lastIndexOf(\"/\") + 1);\n },\n};\n\n// ---- Snapshot serialization (standalone functions) ----\n\nfunction serializeTree(path: string, node: FSNode, acc: VFSFileEntry[]): void {\n if (node.type === \"file\") {\n acc.push({\n path,\n type: \"file\",\n content: node.content?.length ? uint8ToBase64(node.content) : \"\",\n });\n } else if (node.type === \"symlink\") {\n acc.push({ path, type: \"symlink\", target: node.target });\n } else if (node.type === \"directory\") {\n acc.push({ path, type: \"directory\" });\n if (node.children) {\n for (const [childName, childNode] of node.children) {\n const childPath =\n path === \"/\" ? `/${childName}` : `${path}/${childName}`;\n serializeTree(childPath, childNode, acc);\n }\n }\n }\n}\n\nfunction deserializeInto(vfs: MemFS, snapshot: VFSSnapshot): void {\n const ordered = snapshot.files\n .map((e, i) => ({ e, depth: e.path.split(\"/\").length, i }))\n .sort((a, b) => a.depth - b.depth || a.i - b.i)\n .map(x => x.e);\n\n for (const entry of ordered) {\n if (entry.path === \"/\") continue;\n switch (entry.type) {\n case \"directory\":\n vfs.mkdirSync(entry.path, { recursive: true });\n break;\n case \"symlink\":\n if (entry.target) vfs.symlinkSync(entry.target, entry.path);\n break;\n case \"file\": {\n const dir = entry.path.substring(0, entry.path.lastIndexOf(\"/\")) || \"/\";\n if (dir !== \"/\" && !vfs.existsSync(dir))\n vfs.mkdirSync(dir, { recursive: true });\n const bytes = entry.content\n ? base64ToUint8(entry.content)\n : new Uint8Array(0);\n vfs.putFile(entry.path, bytes, false);\n break;\n }\n }\n }\n}\n\n/** Options for MemFS construction. */\nexport interface MemFSOptions {\n /** Optional persistence adapter. When provided, filesystem mutations are\n * automatically persisted to the backend. */\n persistence?: PersistenceAdapter;\n /** Optional sandbox guard. When provided, all write operations are\n * checked against resource limits and path restrictions. */\n sandbox?: SandboxGuard;\n}\n\nexport class MemFS {\n private root: FSNode;\n private enc = new TextEncoder();\n private dec = new TextDecoder();\n private watchers = new Map<string, Set<WatcherEntry>>();\n private eventSubs = new Map<string, Set<AnyListener>>();\n private nodeIndex = new Map<string, FSNode>();\n private symlinkLimit = 20;\n private fdCounter = 3; // 0,1,2 reserved for stdin/stdout/stderr\n private fdMap = new Map<number, { path: string; flags: string }>();\n /** Persistence adapter (if configured). */\n private persistence?: PersistenceAdapter;\n /** Sandbox guard (if configured). */\n private sandboxGuard?: SandboxGuard;\n\n constructor(options?: MemFSOptions) {\n this.root = {\n type: \"directory\",\n children: new Map(),\n mtime: Date.now(),\n ino: _nodeInoSeq++,\n };\n this.nodeIndex.set(\"/\", this.root);\n this.persistence = options?.persistence;\n this.sandboxGuard = options?.sandbox;\n }\n\n /**\n * Rehydrate the VFS from the persistence adapter.\n * Call this once during initialisation (e.g. in `Container.init()`) to\n * restore previously persisted state.\n */\n async hydrate(): Promise<number> {\n if (!this.persistence) return 0;\n const entries = await this.persistence.loadAll();\n // Sort by path depth so parents are created before children.\n entries.sort((a, b) => a.path.split(\"/\").length - b.path.split(\"/\").length);\n\n let count = 0;\n for (const entry of entries) {\n if (entry.path === \"/\") continue;\n try {\n switch (entry.type) {\n case \"directory\":\n if (!this.existsSync(entry.path)) {\n this.mkdirSync(entry.path, { recursive: true });\n }\n break;\n case \"symlink\":\n if (entry.target && !this.existsSync(entry.path)) {\n this.symlinkSync(entry.target, entry.path);\n }\n break;\n case \"file\": {\n const dir =\n entry.path.substring(0, entry.path.lastIndexOf(\"/\")) || \"/\";\n if (dir !== \"/\" && !this.existsSync(dir)) {\n this.mkdirSync(dir, { recursive: true });\n }\n const bytes = entry.content ?? new Uint8Array(0);\n // Use putFile with notify=false to avoid triggering watchers\n // and persistence hooks during hydration.\n this.putFile(entry.path, bytes, false);\n break;\n }\n }\n count++;\n } catch {\n // Skip entries that fail to hydrate (e.g. corrupted data).\n }\n }\n return count;\n }\n\n /**\n * Flush any pending persistence writes immediately.\n * Useful before page unload or when you need to guarantee data is saved.\n */\n async flushPersistence(): Promise<void> {\n if (this.persistence) await this.persistence.flush();\n }\n\n /** Queue a node for persistence (fire-and-forget). */\n private persist(path: string, node: FSNode): void {\n if (this.persistence) this.persistence.save(nodeToEntry(path, node));\n }\n\n /** Queue a path deletion for persistence (fire-and-forget). */\n private unpersist(path: string): void {\n if (this.persistence) this.persistence.delete(path);\n }\n\n /** Queue deletion of a path and all its descendants. */\n private unpersistTree(path: string): void {\n if (!this.persistence) return;\n this.persistence.delete(path);\n // Also delete descendants based on nodeIndex keys.\n const prefix = path === \"/\" ? \"/\" : path + \"/\";\n for (const key of this.nodeIndex.keys()) {\n if (key.startsWith(prefix)) this.persistence.delete(key);\n }\n }\n\n // ---- Event subscription ----\n\n on(event: \"change\", listener: ChangeListener): this;\n on(event: \"delete\", listener: DeleteListener): this;\n on(event: string, listener: AnyListener): this {\n if (!this.eventSubs.has(event)) this.eventSubs.set(event, new Set());\n this.eventSubs.get(event)!.add(listener);\n return this;\n }\n\n off(event: \"change\", listener: ChangeListener): this;\n off(event: \"delete\", listener: DeleteListener): this;\n off(event: string, listener: AnyListener): this {\n this.eventSubs.get(event)?.delete(listener);\n return this;\n }\n\n private fire(event: \"change\", path: string, content: string): void;\n private fire(event: \"delete\", path: string): void;\n private fire(event: string, ...args: unknown[]): void {\n const subs = this.eventSubs.get(event);\n if (!subs) return;\n for (const fn of subs) {\n try {\n (fn as (...a: unknown[]) => void)(...args);\n } catch (err) {\n console.error(\"VFS event listener error:\", err);\n }\n }\n }\n\n // ---- Snapshot ----\n\n toSnapshot(): VFSSnapshot {\n const entries: VFSFileEntry[] = [];\n serializeTree(\"/\", this.root, entries);\n return { files: entries };\n }\n\n static fromSnapshot(snapshot: VFSSnapshot): MemFS {\n const fs = new MemFS();\n deserializeInto(fs, snapshot);\n return fs;\n }\n\n // ---- Export ----\n\n export(\n path: string,\n _options?: { format?: \"json\" },\n ): Record<string, unknown> {\n const node = this.followLinks(path);\n if (!node || node.type !== \"directory\")\n throw createNodeError(\"ENOTDIR\", \"export\", path);\n return this.treeToJson(path, node);\n }\n\n private treeToJson(path: string, node: FSNode): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (!node.children) return out;\n for (const [name, child] of node.children) {\n switch (child.type) {\n case \"file\":\n out[name] = {\n file: {\n contents: this.dec.decode(child.content || new Uint8Array(0)),\n },\n };\n break;\n case \"directory\":\n out[name] = { directory: this.treeToJson(`${path}/${name}`, child) };\n break;\n case \"symlink\":\n out[name] = { file: { symlink: child.target } };\n break;\n }\n }\n return out;\n }\n\n // ---- Node traversal ----\n\n private lookupDirect(path: string): FSNode | undefined {\n const norm = pops.normalize(path);\n const cached = this.nodeIndex.get(norm);\n if (cached) return cached;\n const segs = pops.segments(path);\n let cur = this.root;\n for (const seg of segs) {\n if (cur.type !== \"directory\" || !cur.children) return undefined;\n const next = cur.children.get(seg);\n if (!next) return undefined;\n cur = next;\n }\n this.nodeIndex.set(norm, cur);\n return cur;\n }\n\n private followLinks(path: string, depth = 0): FSNode | undefined {\n if (depth >= this.symlinkLimit)\n throw createNodeError(\"ELOOP\", \"stat\", path);\n\n // Fast path: direct lookup works when no intermediate symlinks exist\n const direct = this.lookupDirect(path);\n if (direct) {\n if (direct.type === \"symlink\" && direct.target) {\n const dest = direct.target.startsWith(\"/\")\n ? direct.target\n : pops.normalize(pops.parent(path) + \"/\" + direct.target);\n return this.followLinks(dest, depth + 1);\n }\n return direct;\n }\n\n // Slow path: walk segment by segment, resolving symlinks at each component\n const segs = pops.segments(path);\n let cur = this.root;\n for (let i = 0; i < segs.length; i++) {\n if (cur.type !== \"directory\" || !cur.children) return undefined;\n const next = cur.children.get(segs[i]);\n if (!next) return undefined;\n if (next.type === \"symlink\" && next.target) {\n const builtSoFar = \"/\" + segs.slice(0, i + 1).join(\"/\");\n const dest = next.target.startsWith(\"/\")\n ? next.target\n : pops.normalize(pops.parent(builtSoFar) + \"/\" + next.target);\n const remaining = segs.slice(i + 1);\n const full =\n remaining.length > 0 ? dest + \"/\" + remaining.join(\"/\") : dest;\n return this.followLinks(full, depth + 1);\n }\n cur = next;\n }\n return cur;\n }\n\n private ensureDir(path: string): FSNode {\n const segs = pops.segments(path);\n let cur = this.root;\n let built = \"\";\n for (const seg of segs) {\n built += \"/\" + seg;\n if (!cur.children) cur.children = new Map();\n let child = cur.children.get(seg);\n if (!child) {\n child = {\n type: \"directory\",\n children: new Map(),\n mtime: Date.now(),\n ino: _nodeInoSeq++,\n };\n cur.children.set(seg, child);\n this.nodeIndex.set(built, child);\n } else if (child.type === \"symlink\" && child.target) {\n const resolved = this.followLinks(built);\n if (resolved && resolved.type === \"directory\") {\n child = resolved;\n } else {\n throw createNodeError(\"ENOTDIR\", \"mkdir\", path);\n }\n } else if (child.type !== \"directory\") {\n throw createNodeError(\"ENOTDIR\", \"mkdir\", path);\n }\n cur = child;\n }\n return cur;\n }\n\n private dropIndex(path: string): void {\n const prefix = pops.normalize(path);\n const fullPrefix = prefix === \"/\" ? \"/\" : prefix + \"/\";\n this.nodeIndex.delete(prefix);\n for (const key of this.nodeIndex.keys()) {\n if (key === prefix || key.startsWith(fullPrefix))\n this.nodeIndex.delete(key);\n }\n }\n\n // ---- Core FS operations ----\n\n existsSync(path: string): boolean {\n return this.followLinks(path) !== undefined;\n }\n\n statSync(path: string): Stats {\n const node = this.followLinks(path);\n if (!node) throw createNodeError(\"ENOENT\", \"stat\", path);\n return this.toStats(node);\n }\n\n lstatSync(path: string): Stats {\n const node = this.lookupDirect(path);\n if (!node) throw createNodeError(\"ENOENT\", \"lstat\", path);\n return this.toStats(node);\n }\n\n private toStats(node: FSNode): Stats {\n const sz = node.type === \"file\" ? node.content?.length || 0 : 0;\n return buildStats(node.type, sz, node.mtime, node.ino);\n }\n\n readFileSync(path: string): Uint8Array;\n readFileSync(path: string, encoding: \"utf8\" | \"utf-8\"): string;\n readFileSync(path: string, encoding?: \"utf8\" | \"utf-8\"): Uint8Array | string {\n const node = this.followLinks(path);\n if (!node) throw createNodeError(\"ENOENT\", \"open\", path);\n if (node.type !== \"file\") throw createNodeError(\"EISDIR\", \"read\", path);\n const raw = node.content || new Uint8Array(0);\n return encoding === \"utf8\" || encoding === \"utf-8\"\n ? this.dec.decode(raw)\n : raw;\n }\n\n writeFileSync(path: string, data: string | Uint8Array): void {\n this.putFile(path, data, true);\n }\n\n putFile(path: string, data: string | Uint8Array, notify: boolean): void {\n const norm = pops.normalize(path);\n const dir = pops.parent(norm);\n const base = pops.name(norm);\n if (!base) throw createNodeError(\"EISDIR\", \"write\", path);\n\n const bytes = typeof data === \"string\" ? this.enc.encode(data) : data;\n\n // Enforce sandbox at the VFS level so all callers are checked.\n if (this.sandboxGuard?.isActive && notify) {\n this.sandboxGuard.checkWrite(norm, bytes.length);\n }\n\n const parent = this.ensureDir(dir);\n const existed = parent.children!.has(base);\n\n const fileNode: FSNode = {\n type: \"file\",\n content: bytes,\n mtime: Date.now(),\n ino: _nodeInoSeq++,\n };\n parent.children!.set(base, fileNode);\n this.nodeIndex.set(norm, fileNode);\n\n if (notify) {\n if (this.sandboxGuard?.isActive && !existed) {\n this.sandboxGuard.trackWrite(bytes.length);\n }\n this.signalWatchers(norm, existed ? \"change\" : \"rename\");\n this.fire(\n \"change\",\n norm,\n typeof data === \"string\" ? data : this.dec.decode(data),\n );\n this.persist(norm, fileNode);\n }\n }\n\n // ---- Symlink ----\n\n symlinkSync(target: string, linkPath: string): void {\n const norm = pops.normalize(linkPath);\n const dir = pops.parent(norm);\n const base = pops.name(norm);\n if (!base) throw createNodeError(\"EEXIST\", \"symlink\", linkPath);\n\n const parent = this.ensureDir(dir);\n if (parent.children!.has(base))\n throw createNodeError(\"EEXIST\", \"symlink\", linkPath);\n const node: FSNode = {\n type: \"symlink\",\n target,\n mtime: Date.now(),\n ino: _nodeInoSeq++,\n };\n parent.children!.set(base, node);\n this.nodeIndex.set(norm, node);\n this.persist(norm, node);\n }\n\n readlinkSync(path: string): string {\n const node = this.lookupDirect(path);\n if (!node) throw createNodeError(\"ENOENT\", \"readlink\", path);\n if (node.type !== \"symlink\")\n throw createNodeError(\"EINVAL\", \"readlink\", path);\n return node.target!;\n }\n\n mkdirSync(path: string, options?: { recursive?: boolean }): void {\n const norm = pops.normalize(path);\n if (options?.recursive) {\n this.ensureDir(norm);\n return;\n }\n const dir = pops.parent(norm);\n const base = pops.name(norm);\n if (!base) {\n // Normalized to \"/\" — root already exists, nothing to do\n if (norm === \"/\") return;\n // Empty filename from malformed path\n throw createNodeError(\"ENOENT\", \"mkdir\", path);\n }\n\n const parent = this.followLinks(dir);\n if (!parent) throw createNodeError(\"ENOENT\", \"mkdir\", dir);\n if (parent.type !== \"directory\")\n throw createNodeError(\"ENOTDIR\", \"mkdir\", dir);\n if (parent.children!.has(base))\n throw createNodeError(\"EEXIST\", \"mkdir\", path);\n const newDir: FSNode = {\n type: \"directory\",\n children: new Map(),\n mtime: Date.now(),\n ino: _nodeInoSeq++,\n };\n parent.children!.set(base, newDir);\n this.nodeIndex.set(norm, newDir);\n }\n\n readdirSync(path: string): string[];\n readdirSync(\n path: string,\n options: { withFileTypes: true },\n ): {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isSymbolicLink(): boolean;\n }[];\n readdirSync(path: string, options?: { withFileTypes?: boolean }): unknown {\n const node = this.followLinks(path);\n if (!node) throw createNodeError(\"ENOENT\", \"scandir\", path);\n if (node.type !== \"directory\")\n throw createNodeError(\"ENOTDIR\", \"scandir\", path);\n const names = Array.from(node.children!.keys());\n if (!options?.withFileTypes) return names;\n return names.map(n => {\n const child = node.children!.get(n)!;\n return {\n name: n,\n isFile: () => child.type === \"file\",\n isDirectory: () => child.type === \"directory\",\n isSymbolicLink: () => child.type === \"symlink\",\n };\n });\n }\n\n unlinkSync(path: string): void {\n const norm = pops.normalize(path);\n const dir = pops.parent(norm);\n const base = pops.name(norm);\n const parent = this.followLinks(dir);\n if (!parent || parent.type !== \"directory\")\n throw createNodeError(\"ENOENT\", \"unlink\", path);\n const target = parent.children!.get(base);\n if (!target) throw createNodeError(\"ENOENT\", \"unlink\", path);\n if (target.type === \"directory\")\n throw createNodeError(\"EISDIR\", \"unlink\", path);\n const targetSize =\n target.type === \"file\" ? (target.content?.length ?? 0) : 0;\n parent.children!.delete(base);\n this.nodeIndex.delete(norm);\n this.signalWatchers(norm, \"rename\");\n this.fire(\"delete\", norm);\n this.unpersist(norm);\n if (this.sandboxGuard?.isActive) this.sandboxGuard.trackDelete(targetSize);\n }\n\n rmdirSync(path: string, options?: { recursive?: boolean }): void {\n const norm = pops.normalize(path);\n const dir = pops.parent(norm);\n const base = pops.name(norm);\n if (!base) throw createNodeError(\"EPERM\", \"rmdir\", path);\n\n const parent = this.followLinks(dir);\n if (!parent || parent.type !== \"directory\")\n throw createNodeError(\"ENOENT\", \"rmdir\", path);\n const target = parent.children!.get(base);\n if (!target) throw createNodeError(\"ENOENT\", \"rmdir\", path);\n if (target.type !== \"directory\")\n throw createNodeError(\"ENOTDIR\", \"rmdir\", path);\n\n if (options?.recursive) {\n this.unpersistTree(norm);\n parent.children!.delete(base);\n this.dropIndex(norm);\n return;\n }\n if (target.children!.size > 0)\n throw createNodeError(\"ENOTEMPTY\", \"rmdir\", path);\n parent.children!.delete(base);\n this.nodeIndex.delete(norm);\n this.unpersist(norm);\n }\n\n rmSync(\n path: string,\n options?: { recursive?: boolean; force?: boolean },\n ): void {\n const norm = pops.normalize(path);\n try {\n const node = this.followLinks(norm);\n if (!node) {\n if (options?.force) return;\n throw createNodeError(\"ENOENT\", \"rm\", path);\n }\n if (node.type === \"directory\") {\n if (!options?.recursive) throw createNodeError(\"EISDIR\", \"rm\", path);\n this.rmdirSync(path, { recursive: true });\n } else {\n this.unlinkSync(path);\n }\n } catch (e) {\n if (options?.force && (e as NodeError).code === \"ENOENT\") return;\n throw e;\n }\n }\n\n renameSync(oldPath: string, newPath: string): void {\n const normOld = pops.normalize(oldPath);\n const normNew = pops.normalize(newPath);\n const oldDir = pops.parent(normOld);\n const oldBase = pops.name(normOld);\n const newDir = pops.parent(normNew);\n const newBase = pops.name(normNew);\n\n const oldParent = this.followLinks(oldDir);\n if (!oldParent || oldParent.type !== \"directory\")\n throw createNodeError(\"ENOENT\", \"rename\", oldPath);\n const node = oldParent.children!.get(oldBase);\n if (!node) throw createNodeError(\"ENOENT\", \"rename\", oldPath);\n\n const newParent = this.ensureDir(newDir);\n oldParent.children!.delete(oldBase);\n newParent.children!.set(newBase, node);\n this.dropIndex(normOld);\n this.nodeIndex.set(normNew, node);\n this.signalWatchers(normOld, \"rename\");\n this.signalWatchers(normNew, \"rename\");\n this.unpersist(normOld);\n this.persist(normNew, node);\n }\n\n copyFileSync(src: string, dest: string): void {\n const raw = this.readFileSync(src);\n this.writeFileSync(dest, new Uint8Array(raw));\n }\n\n utimesSync(path: string, _atime: number | Date, mtime: number | Date): void {\n const node = this.followLinks(path);\n if (!node) throw createNodeError(\"ENOENT\", \"utimes\", path);\n node.mtime = typeof mtime === \"number\" ? mtime : mtime.getTime();\n }\n\n accessSync(path: string, _mode?: number): void {\n if (!this.existsSync(path)) throw createNodeError(\"ENOENT\", \"access\", path);\n }\n\n realpathSync(path: string): string {\n const norm = pops.normalize(path);\n if (!this.existsSync(norm))\n throw createNodeError(\"ENOENT\", \"realpath\", path);\n return norm;\n }\n\n // ---- File descriptor APIs ----\n\n openSync(path: string, flags: string | number = \"r\"): number {\n const norm = pops.normalize(path);\n const flagStr = typeof flags === \"number\" ? \"r\" : flags;\n if (flagStr === \"r\" || flagStr === \"r+\") {\n // File must exist for reading\n this.readFileSync(norm); // throws ENOENT if missing\n }\n if (flagStr === \"w\" || flagStr === \"w+\" || flagStr === \"a\") {\n // Create file if it doesn't exist\n if (!this.existsSync(norm)) {\n this.writeFileSync(norm, \"\");\n }\n }\n const fd = this.fdCounter++;\n this.fdMap.set(fd, { path: norm, flags: flagStr });\n return fd;\n }\n\n closeSync(fd: number): void {\n if (!this.fdMap.has(fd)) {\n throw new Error(`EBADF: bad file descriptor, close`);\n }\n this.fdMap.delete(fd);\n }\n\n readSync(\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null,\n ): number {\n const entry = this.fdMap.get(fd);\n if (!entry) throw new Error(`EBADF: bad file descriptor, read`);\n const content = this.readFileSync(entry.path) as Uint8Array;\n const pos = position ?? 0;\n const end = Math.min(pos + length, content.length);\n const bytesRead = end - pos;\n buffer.set(content.subarray(pos, end), offset);\n return bytesRead;\n }\n\n writeSync(\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null,\n ): number {\n const entry = this.fdMap.get(fd);\n if (!entry) throw new Error(`EBADF: bad file descriptor, write`);\n const existing = this.existsSync(entry.path)\n ? (this.readFileSync(entry.path) as Uint8Array)\n : new Uint8Array(0);\n const pos = position ?? existing.length;\n const newLen = Math.max(existing.length, pos + length);\n const result = new Uint8Array(newLen);\n result.set(existing);\n result.set(buffer.subarray(offset, offset + length), pos);\n this.writeFileSync(entry.path, result);\n return length;\n }\n\n fstatSync(fd: number): Stats {\n const entry = this.fdMap.get(fd);\n if (!entry) throw new Error(`EBADF: bad file descriptor, fstat`);\n return this.statSync(entry.path);\n }\n\n // ---- Async wrappers ----\n\n readFile(\n path: string,\n optionsOrCb?:\n | { encoding?: string }\n | ((err: Error | null, data?: Uint8Array | string) => void),\n cb?: (err: Error | null, data?: Uint8Array | string) => void,\n ): void {\n const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n const opts = typeof optionsOrCb === \"object\" ? optionsOrCb : undefined;\n try {\n const data = opts?.encoding\n ? this.readFileSync(path, opts.encoding as \"utf8\")\n : this.readFileSync(path);\n if (callback) setTimeout(() => callback(null, data), 0);\n } catch (err) {\n if (callback) setTimeout(() => callback(err as Error), 0);\n }\n }\n\n stat(path: string, cb: (err: Error | null, stats?: Stats) => void): void {\n try {\n cb(null, this.statSync(path));\n } catch (err) {\n cb(err as Error);\n }\n }\n\n lstat(path: string, cb: (err: Error | null, stats?: Stats) => void): void {\n try {\n cb(null, this.lstatSync(path));\n } catch (err) {\n cb(err as Error);\n }\n }\n\n readdir(\n path: string,\n optionsOrCb?:\n | { withFileTypes?: boolean }\n | ((err: Error | null, files?: string[]) => void),\n cb?: (err: Error | null, files?: unknown) => void,\n ): void {\n const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n const opts = typeof optionsOrCb === \"object\" ? optionsOrCb : undefined;\n try {\n const files = opts?.withFileTypes\n ? this.readdirSync(path, { withFileTypes: true })\n : this.readdirSync(path);\n if (callback) setTimeout(() => callback(null, files as string[]), 0);\n } catch (err) {\n if (callback) setTimeout(() => callback(err as Error), 0);\n }\n }\n\n realpath(\n path: string,\n cb: (err: Error | null, resolved?: string) => void,\n ): void {\n try {\n cb(null, this.realpathSync(path));\n } catch (err) {\n cb(err as Error);\n }\n }\n\n access(\n path: string,\n modeOrCb?: number | ((err: Error | null) => void),\n cb?: (err: Error | null) => void,\n ): void {\n const callback = typeof modeOrCb === \"function\" ? modeOrCb : cb;\n try {\n this.accessSync(path);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err) {\n if (callback) setTimeout(() => callback(err as Error), 0);\n }\n }\n\n // ---- File watching ----\n\n watch(\n filename: string,\n optionsOrListener?:\n | { persistent?: boolean; recursive?: boolean; encoding?: string }\n | WatchListener,\n listener?: WatchListener,\n ): FSWatcher {\n const norm = pops.normalize(filename);\n let opts: { recursive?: boolean } = {};\n let actualListener: WatchListener | undefined;\n\n if (typeof optionsOrListener === \"function\") {\n actualListener = optionsOrListener;\n } else if (optionsOrListener) {\n opts = optionsOrListener;\n actualListener = listener;\n } else {\n actualListener = listener;\n }\n\n const entry: WatcherEntry = {\n listener: actualListener || (() => {}),\n recursive: opts.recursive || false,\n closed: false,\n };\n\n if (!this.watchers.has(norm)) this.watchers.set(norm, new Set());\n this.watchers.get(norm)!.add(entry);\n\n const handle: FSWatcher = {\n close: () => {\n entry.closed = true;\n const bucket = this.watchers.get(norm);\n if (bucket) {\n bucket.delete(entry);\n if (bucket.size === 0) this.watchers.delete(norm);\n }\n },\n ref: () => handle,\n unref: () => handle,\n };\n return handle;\n }\n\n private signalWatchers(changedPath: string, kind: WatchEventType): void {\n const norm = pops.normalize(changedPath);\n const leaf = pops.name(norm);\n\n for (const [watchPath, bucket] of this.watchers) {\n if (watchPath === norm) {\n for (const w of bucket) {\n if (!w.closed) {\n try {\n w.listener(kind, leaf);\n } catch {}\n }\n }\n continue;\n }\n\n if (!norm.startsWith(watchPath + \"/\") && watchPath !== \"/\") continue;\n\n const isDirectChild = pops.parent(norm) === watchPath;\n const rel =\n norm === watchPath\n ? \"\"\n : norm.slice((watchPath === \"/\" ? 0 : watchPath.length) + 1);\n\n for (const w of bucket) {\n if (w.closed) continue;\n if (w.recursive || isDirectChild) {\n try {\n w.listener(kind, rel);\n } catch {}\n }\n }\n }\n }\n\n // ---- Stream helpers ----\n\n createReadStream(path: string): {\n on: (event: string, cb: (...args: unknown[]) => void) => unknown;\n pipe: (dest: unknown) => unknown;\n } {\n const self = this;\n const subs: Record<string, ((...args: unknown[]) => void)[]> = {};\n const stream = {\n on(ev: string, cb: (...args: unknown[]) => void) {\n (subs[ev] ??= []).push(cb);\n return stream;\n },\n pipe(dest: unknown) {\n return dest;\n },\n };\n setTimeout(() => {\n try {\n const data = self.readFileSync(path);\n subs[\"data\"]?.forEach(cb => cb(data));\n subs[\"end\"]?.forEach(cb => cb());\n } catch (err) {\n subs[\"error\"]?.forEach(cb => cb(err));\n }\n }, 0);\n return stream;\n }\n\n createWriteStream(path: string): {\n write: (data: string | Uint8Array) => boolean;\n end: (data?: string | Uint8Array) => void;\n on: (event: string, cb: (...args: unknown[]) => void) => unknown;\n } {\n const self = this;\n const parts: Uint8Array[] = [];\n const subs: Record<string, ((...args: unknown[]) => void)[]> = {};\n const encoder = new TextEncoder();\n return {\n write(data: string | Uint8Array): boolean {\n parts.push(typeof data === \"string\" ? encoder.encode(data) : data);\n return true;\n },\n end(data?: string | Uint8Array): void {\n if (data)\n parts.push(typeof data === \"string\" ? encoder.encode(data) : data);\n const total = parts.reduce((s, c) => s + c.length, 0);\n const merged = new Uint8Array(total);\n let off = 0;\n for (const chunk of parts) {\n merged.set(chunk, off);\n off += chunk.length;\n }\n self.writeFileSync(path, merged);\n subs[\"finish\"]?.forEach(cb => cb());\n subs[\"close\"]?.forEach(cb => cb());\n },\n on(ev: string, cb: (...args: unknown[]) => void) {\n (subs[ev] ??= []).push(cb);\n return this;\n },\n };\n }\n}\n","/**\n * FNV-1a hash producing a 64-bit result (two 32-bit halves).\n * Returns base36 string (~12 chars). Much lower collision probability\n * than the previous 32-bit djb2 (~6 chars).\n */\nexport function simpleHash(str: string): string {\n // FNV-1a 64-bit offset basis and prime (split into high/low 32-bit)\n let h0 = 0x811c9dc5; // low 32 bits of offset basis\n let h1 = 0xcbf29ce4; // high 32 bits of offset basis\n\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n // XOR with byte\n h0 ^= c;\n // Multiply by FNV prime 0x00000100000001B3\n // Using schoolbook multiplication for two 32-bit halves\n const lo = Math.imul(h0, 0x01b3) >>> 0;\n const hi = (Math.imul(h1, 0x01b3) + Math.imul(h0, 0x0100)) >>> 0;\n h0 = lo;\n h1 = hi;\n }\n\n return (h1 >>> 0).toString(36) + (h0 >>> 0).toString(36);\n}\n","export const sep = \"/\";\nexport const delimiter = \":\";\n\nexport function normalize(path: string): string {\n if (!path) return \".\";\n const isAbs = path.startsWith(\"/\");\n const parts = path.split(\"/\").filter(Boolean);\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === \"..\") {\n if (resolved.length > 0 && resolved[resolved.length - 1] !== \"..\")\n resolved.pop();\n else if (!isAbs) resolved.push(\"..\");\n } else if (part !== \".\") {\n resolved.push(part);\n }\n }\n let result = resolved.join(\"/\");\n if (isAbs) result = \"/\" + result;\n return result || \".\";\n}\n\nexport function join(...paths: string[]): string {\n if (paths.length === 0) return \".\";\n return normalize(paths.filter(Boolean).join(\"/\"));\n}\n\nexport function resolve(...paths: string[]): string {\n let resolvedPath = \"\";\n for (let i = paths.length - 1; i >= 0 && !resolvedPath.startsWith(\"/\"); i--) {\n const p = paths[i];\n if (!p) continue;\n resolvedPath = p + (resolvedPath ? \"/\" + resolvedPath : \"\");\n }\n if (!resolvedPath.startsWith(\"/\")) {\n const cwd =\n (typeof globalThis !== \"undefined\" && globalThis.process?.cwd?.()) || \"/\";\n resolvedPath = cwd + (resolvedPath ? \"/\" + resolvedPath : \"\");\n }\n return normalize(resolvedPath);\n}\n\nexport function isAbsolute(path: string): boolean {\n return path.startsWith(\"/\");\n}\n\nexport function dirname(path: string): string {\n if (!path) return \".\";\n const n = normalize(path);\n const last = n.lastIndexOf(\"/\");\n if (last === -1) return \".\";\n if (last === 0) return \"/\";\n return n.slice(0, last);\n}\n\nexport function basename(path: string, ext?: string): string {\n if (!path) return \"\";\n const n = normalize(path);\n let base = n.slice(n.lastIndexOf(\"/\") + 1);\n if (ext && base.endsWith(ext)) base = base.slice(0, -ext.length);\n return base;\n}\n\nexport function extname(path: string): string {\n const base = basename(path);\n const dotIndex = base.lastIndexOf(\".\");\n if (dotIndex <= 0) return \"\";\n return base.slice(dotIndex);\n}\n\nexport function relative(from: string, to: string): string {\n from = resolve(from);\n to = resolve(to);\n if (from === to) return \"\";\n const fromParts = from.split(\"/\").filter(Boolean);\n const toParts = to.split(\"/\").filter(Boolean);\n let common = 0;\n for (let i = 0; i < Math.min(fromParts.length, toParts.length); i++) {\n if (fromParts[i] !== toParts[i]) break;\n common++;\n }\n return (\n [\n ...Array(fromParts.length - common).fill(\"..\"),\n ...toParts.slice(common),\n ].join(\"/\") || \".\"\n );\n}\n\nexport function parse(path: string): {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n} {\n const n = normalize(path);\n const dir = dirname(n);\n const base = basename(n);\n const ext = extname(n);\n return {\n root: isAbsolute(n) ? \"/\" : \"\",\n dir,\n base,\n ext,\n name: base.slice(0, base.length - ext.length),\n };\n}\n\nexport function format(obj: {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}): string {\n const dir = obj.dir || obj.root || \"\";\n const base = obj.base || (obj.name || \"\") + (obj.ext || \"\");\n if (!dir) return base;\n if (dir === obj.root) return dir + base;\n return dir + \"/\" + base;\n}\n\nexport const posix = {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n dirname,\n basename,\n extname,\n relative,\n parse,\n format,\n};\n/** @note win32 uses posix implementation — Windows paths not supported in browser */\nexport const win32 = {\n sep: \"\\\\\",\n delimiter: \";\",\n normalize,\n join,\n resolve,\n isAbsolute,\n dirname,\n basename,\n extname,\n relative,\n parse,\n format,\n};\n\nexport default {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n dirname,\n basename,\n extname,\n relative,\n parse,\n format,\n posix,\n win32,\n};\n","export type EventListener = (...args: any[]) => void;\n\ninterface EventData {\n events: Map<string, EventListener[]>;\n maxListeners: number;\n}\n\nconst store = new WeakMap<object, EventData>();\n\nfunction getData(self: object): EventData {\n let data = store.get(self);\n if (!data) {\n data = { events: new Map(), maxListeners: 10 };\n store.set(self, data);\n }\n return data;\n}\n\nexport class EventEmitter {\n on(event: string, listener: EventListener): this {\n return this.addListener(event, listener);\n }\n\n addListener(event: string, listener: EventListener): this {\n const { events } = getData(this);\n if (!events.has(event)) events.set(event, []);\n events.get(event)!.push(listener);\n return this;\n }\n\n once(event: string, listener: EventListener): this {\n const wrapper = (...args: unknown[]) => {\n this.removeListener(event, wrapper);\n listener.apply(this, args);\n };\n return this.addListener(event, wrapper);\n }\n\n off(event: string, listener: EventListener): this {\n return this.removeListener(event, listener);\n }\n\n removeListener(event: string, listener: EventListener): this {\n const listeners = getData(this).events.get(event);\n if (listeners) {\n const idx = listeners.indexOf(listener);\n if (idx !== -1) listeners.splice(idx, 1);\n }\n return this;\n }\n\n removeAllListeners(event?: string): this {\n const { events } = getData(this);\n if (event) events.delete(event);\n else events.clear();\n return this;\n }\n\n emit(event: string, ...args: unknown[]): boolean {\n const listeners = getData(this).events.get(event);\n if (!listeners || listeners.length === 0) {\n if (event === \"error\") {\n const err = args[0];\n throw err instanceof Error ? err : new Error(\"Unhandled error event\");\n }\n return false;\n }\n for (const listener of [...listeners]) {\n try {\n listener.apply(this, args);\n } catch (err) {\n console.error(\"Event listener error:\", err);\n }\n }\n return true;\n }\n\n listeners(event: string): EventListener[] {\n return [...(getData(this).events.get(event) || [])];\n }\n rawListeners(event: string): EventListener[] {\n return this.listeners(event);\n }\n listenerCount(event: string): number {\n return getData(this).events.get(event)?.length || 0;\n }\n eventNames(): string[] {\n return [...getData(this).events.keys()];\n }\n\n setMaxListeners(n: number): this {\n getData(this).maxListeners = n;\n return this;\n }\n getMaxListeners(): number {\n return getData(this).maxListeners;\n }\n\n prependListener(event: string, listener: EventListener): this {\n const { events } = getData(this);\n if (!events.has(event)) events.set(event, []);\n events.get(event)!.unshift(listener);\n return this;\n }\n\n prependOnceListener(event: string, listener: EventListener): this {\n const wrapper = (...args: unknown[]) => {\n this.removeListener(event, wrapper);\n listener.apply(this, args);\n };\n return this.prependListener(event, wrapper);\n }\n\n static listenerCount(emitter: EventEmitter, event: string): number {\n return emitter.listenerCount(event);\n }\n\n static once(emitter: EventEmitter, event: string): Promise<unknown[]> {\n return new Promise((resolve, reject) => {\n const onEvent: EventListener = (...args) => {\n emitter.removeListener(\"error\", onError);\n resolve(args);\n };\n const onError: EventListener = (...args) => {\n emitter.removeListener(event, onEvent);\n reject(args[0]);\n };\n emitter.once(event, onEvent);\n if (event !== \"error\") {\n emitter.once(\"error\", onError);\n }\n });\n }\n}\n\nconst events = EventEmitter as typeof EventEmitter & {\n EventEmitter: typeof EventEmitter;\n once: (emitter: EventEmitter, event: string) => Promise<unknown[]>;\n on: (emitter: EventEmitter, event: string) => AsyncIterable<unknown[]>;\n getEventListeners: (emitter: EventEmitter, event: string) => EventListener[];\n listenerCount: (emitter: EventEmitter, event: string) => number;\n};\n\nevents.EventEmitter = EventEmitter;\nevents.once = async (\n emitter: EventEmitter,\n event: string,\n): Promise<unknown[]> => {\n return new Promise((resolve, reject) => {\n const onEvent: EventListener = (...args) => {\n emitter.removeListener(\"error\", onError);\n resolve(args);\n };\n const onError: EventListener = (...args) => {\n emitter.removeListener(event, onEvent);\n reject(args[0]);\n };\n emitter.once(event, onEvent);\n emitter.once(\"error\", onError);\n });\n};\nevents.on = (emitter: EventEmitter, event: string) => {\n const iterator = {\n async next() {\n return new Promise<{ value: unknown[]; done: boolean }>(resolve => {\n emitter.once(event, (...args) => resolve({ value: args, done: false }));\n });\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n return iterator as AsyncIterable<unknown[]>;\n};\nevents.getEventListeners = (emitter, event) => emitter.listeners(event);\nevents.listenerCount = (emitter, event) => emitter.listenerCount(event);\n\nexport default events;\n","import { EventEmitter } from \"./events\";\n\nconst BUFFER_POOL_SIZE = 8192;\n\nexport class BufferImpl extends Uint8Array {\n static alloc(size: number, fill?: number): BufferImpl {\n const buf = new BufferImpl(size);\n if (fill !== undefined) buf.fill(fill);\n return buf;\n }\n static allocUnsafe(size: number): BufferImpl {\n return new BufferImpl(size);\n }\n static allocUnsafeSlow(size: number): BufferImpl {\n return new BufferImpl(size);\n }\n static override from(\n data:\n | string\n | ArrayBuffer\n | ArrayLike<number>\n | Uint8Array\n | Iterable<number>,\n encoding?: string | ((v: any, k: number) => number),\n thisArg?: any,\n ): BufferImpl {\n if (typeof data === \"string\") {\n if (encoding === \"base64\") {\n const binary = atob(data);\n const buf = new BufferImpl(binary.length);\n for (let i = 0; i < binary.length; i++) buf[i] = binary.charCodeAt(i);\n return buf;\n }\n if (encoding === \"hex\") {\n const buf = new BufferImpl(data.length / 2);\n for (let i = 0; i < data.length; i += 2)\n buf[i / 2] = parseInt(data.substring(i, i + 2), 16);\n return buf;\n }\n return new BufferImpl(new TextEncoder().encode(data));\n }\n if (data instanceof ArrayBuffer) return new BufferImpl(data);\n if (data instanceof Uint8Array) return new BufferImpl(data);\n if (Array.isArray(data)) return new BufferImpl(data);\n if (typeof (data as any)[Symbol.iterator] === \"function\")\n return new BufferImpl(Array.from(data as Iterable<number>));\n return new BufferImpl(data as ArrayLike<number>);\n }\n static concat(\n list: (Uint8Array | BufferImpl)[],\n totalLength?: number,\n ): BufferImpl {\n const len = totalLength ?? list.reduce((s, b) => s + b.length, 0);\n const result = new BufferImpl(len);\n let offset = 0;\n for (const buf of list) {\n const remaining = len - offset;\n if (remaining <= 0) break;\n const toCopy = buf.length <= remaining ? buf : buf.subarray(0, remaining);\n result.set(toCopy, offset);\n offset += toCopy.length;\n }\n return result;\n }\n static isBuffer(obj: unknown): obj is BufferImpl {\n return obj instanceof BufferImpl || obj instanceof Uint8Array;\n }\n static isEncoding(encoding: string): boolean {\n return [\n \"utf8\",\n \"utf-8\",\n \"ascii\",\n \"latin1\",\n \"binary\",\n \"base64\",\n \"hex\",\n \"ucs2\",\n \"ucs-2\",\n \"utf16le\",\n ].includes(encoding);\n }\n static byteLength(str: string, encoding?: string): number {\n if (encoding === \"base64\") return Math.ceil((str.length * 3) / 4);\n if (encoding === \"hex\") return str.length / 2;\n return new TextEncoder().encode(str).length;\n }\n\n toString(encoding?: string, start?: number, end?: number): string {\n const slice = this.subarray(start || 0, end || this.length);\n if (encoding === \"base64\") {\n let binary = \"\";\n for (let i = 0; i < slice.length; i += BUFFER_POOL_SIZE) {\n binary += String.fromCharCode.apply(\n null,\n Array.from(slice.subarray(i, i + BUFFER_POOL_SIZE)),\n );\n }\n return btoa(binary);\n }\n if (encoding === \"hex\") {\n return Array.from(slice)\n .map(b => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n if (encoding === \"latin1\" || encoding === \"binary\") {\n return Array.from(slice)\n .map(b => String.fromCharCode(b))\n .join(\"\");\n }\n return new TextDecoder().decode(slice);\n }\n\n write(\n string: string,\n offset?: number,\n length?: number,\n encoding?: string,\n ): number {\n const bytes = BufferImpl.from(string, encoding);\n const start = offset || 0;\n const count = Math.min(\n bytes.length,\n length ?? this.length - start,\n this.length - start,\n );\n this.set(bytes.subarray(0, count), start);\n return count;\n }\n\n copy(\n target: Uint8Array,\n targetStart = 0,\n sourceStart = 0,\n sourceEnd = this.length,\n ): number {\n const slice = this.subarray(sourceStart, sourceEnd);\n const count = Math.min(slice.length, target.length - targetStart);\n target.set(slice.subarray(0, count), targetStart);\n return count;\n }\n\n equals(other: Uint8Array): boolean {\n if (this.length !== other.length) return false;\n for (let i = 0; i < this.length; i++) {\n if (this[i] !== other[i]) return false;\n }\n return true;\n }\n\n compare(other: Uint8Array): number {\n const len = Math.min(this.length, other.length);\n for (let i = 0; i < len; i++) {\n if (this[i] < other[i]) return -1;\n if (this[i] > other[i]) return 1;\n }\n if (this.length < other.length) return -1;\n if (this.length > other.length) return 1;\n return 0;\n }\n\n readUInt8(offset: number): number {\n return this[offset];\n }\n readUInt16BE(offset: number): number {\n return (this[offset] << 8) | this[offset + 1];\n }\n readUInt16LE(offset: number): number {\n return this[offset] | (this[offset + 1] << 8);\n }\n readUInt32BE(offset: number): number {\n return (\n ((this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3]) >>>\n 0\n );\n }\n readUInt32LE(offset: number): number {\n return (\n (this[offset] |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)) >>>\n 0\n );\n }\n readInt8(offset: number): number {\n const v = this[offset];\n return v > 127 ? v - 256 : v;\n }\n readInt16BE(offset: number): number {\n const v = this.readUInt16BE(offset);\n return v > 32767 ? v - 65536 : v;\n }\n readInt16LE(offset: number): number {\n const v = this.readUInt16LE(offset);\n return v > 32767 ? v - 65536 : v;\n }\n readInt32BE(offset: number): number {\n return (\n (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3]\n );\n }\n readInt32LE(offset: number): number {\n return (\n this[offset] |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n );\n }\n\n writeUInt8(value: number, offset: number): number {\n this[offset] = value & 0xff;\n return offset + 1;\n }\n writeUInt16BE(value: number, offset: number): number {\n this[offset] = (value >> 8) & 0xff;\n this[offset + 1] = value & 0xff;\n return offset + 2;\n }\n writeUInt16LE(value: number, offset: number): number {\n this[offset] = value & 0xff;\n this[offset + 1] = (value >> 8) & 0xff;\n return offset + 2;\n }\n writeUInt32BE(value: number, offset: number): number {\n this[offset] = (value >>> 24) & 0xff;\n this[offset + 1] = (value >>> 16) & 0xff;\n this[offset + 2] = (value >>> 8) & 0xff;\n this[offset + 3] = value & 0xff;\n return offset + 4;\n }\n writeUInt32LE(value: number, offset: number): number {\n this[offset] = value & 0xff;\n this[offset + 1] = (value >>> 8) & 0xff;\n this[offset + 2] = (value >>> 16) & 0xff;\n this[offset + 3] = (value >>> 24) & 0xff;\n return offset + 4;\n }\n\n readFloatBE(offset: number): number {\n return new DataView(\n this.buffer,\n this.byteOffset,\n this.byteLength,\n ).getFloat32(offset, false);\n }\n readFloatLE(offset: number): number {\n return new DataView(\n this.buffer,\n this.byteOffset,\n this.byteLength,\n ).getFloat32(offset, true);\n }\n readDoubleBE(offset: number): number {\n return new DataView(\n this.buffer,\n this.byteOffset,\n this.byteLength,\n ).getFloat64(offset, false);\n }\n readDoubleLE(offset: number): number {\n return new DataView(\n this.buffer,\n this.byteOffset,\n this.byteLength,\n ).getFloat64(offset, true);\n }\n writeFloatBE(value: number, offset: number): number {\n new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat32(\n offset,\n value,\n false,\n );\n return offset + 4;\n }\n writeFloatLE(value: number, offset: number): number {\n new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat32(\n offset,\n value,\n true,\n );\n return offset + 4;\n }\n writeDoubleBE(value: number, offset: number): number {\n new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat64(\n offset,\n value,\n false,\n );\n return offset + 8;\n }\n writeDoubleLE(value: number, offset: number): number {\n new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat64(\n offset,\n value,\n true,\n );\n return offset + 8;\n }\n\n toJSON(): { type: \"Buffer\"; data: number[] } {\n return { type: \"Buffer\", data: Array.from(this) };\n }\n\n slice(start?: number, end?: number): BufferImpl {\n const sliced = super.slice(start, end);\n return new BufferImpl(sliced);\n }\n}\n\nexport class Readable extends EventEmitter {\n readable = true;\n readableEnded = false;\n readableFlowing: boolean | null = null;\n private _buffer: unknown[] = [];\n private _ended = false;\n\n readableHighWaterMark = 16;\n\n read(_size?: number): unknown {\n return this._buffer.shift() || null;\n }\n\n push(chunk: unknown): boolean {\n if (chunk === null) {\n this._ended = true;\n this.readableEnded = true;\n this.emit(\"end\");\n return false;\n }\n this._buffer.push(chunk);\n if (this.readableFlowing) {\n while (this._buffer.length > 0) {\n this.emit(\"data\", this._buffer.shift());\n }\n }\n return this._buffer.length < this.readableHighWaterMark;\n }\n\n on(event: string, listener: (...args: unknown[]) => void): this {\n super.on(event, listener);\n if (event === \"data\" && this.readableFlowing === null) {\n this.readableFlowing = true;\n // Flush any buffered data\n while (this._buffer.length > 0 && this.readableFlowing) {\n this.emit(\"data\", this._buffer.shift());\n }\n }\n return this;\n }\n\n pipe<T extends Writable>(dest: T): T {\n this.on(\"data\", chunk => dest.write(chunk as string | Uint8Array));\n this.on(\"end\", () => dest.end?.());\n return dest;\n }\n\n unpipe(_dest?: Writable): this {\n return this;\n }\n pause(): this {\n this.readableFlowing = false;\n return this;\n }\n resume(): this {\n if (!this.readableFlowing) {\n this.readableFlowing = true;\n // Flush buffered chunks\n while (this._buffer.length > 0 && this.readableFlowing) {\n this.emit(\"data\", this._buffer.shift());\n }\n if (this.readableEnded && this._buffer.length === 0) {\n this.emit(\"end\");\n }\n }\n return this;\n }\n destroy(): this {\n this.readable = false;\n this.emit(\"close\");\n return this;\n }\n setEncoding(_enc: string): this {\n return this;\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<unknown> {\n const self = this;\n return {\n next(): Promise<IteratorResult<unknown>> {\n return new Promise(resolve => {\n if (self._ended) {\n resolve({ value: undefined, done: true });\n return;\n }\n const chunk = self.read();\n if (chunk !== null) {\n resolve({ value: chunk, done: false });\n return;\n }\n const onData = (data: unknown) => {\n self.removeListener(\"end\", onEnd);\n resolve({ value: data, done: false });\n };\n const onEnd = () => {\n self.removeListener(\"data\", onData);\n resolve({ value: undefined, done: true });\n };\n self.once(\"data\", onData);\n self.once(\"end\", onEnd);\n });\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n }\n}\n\nexport class Writable extends EventEmitter {\n writable = true;\n writableEnded = false;\n writableFinished = false;\n\n write(\n chunk: string | Uint8Array,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): boolean {\n const callback = typeof encodingOrCb === \"function\" ? encodingOrCb : cb;\n this._write(\n chunk,\n typeof encodingOrCb === \"string\" ? encodingOrCb : \"utf8\",\n callback || (() => {}),\n );\n return true;\n }\n\n _write(_chunk: unknown, _encoding: string, callback: () => void): void {\n callback();\n }\n\n end(\n chunkOrCb?: unknown,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n if (typeof chunkOrCb === \"function\") {\n cb = chunkOrCb as () => void;\n } else if (chunkOrCb != null) {\n this.write(chunkOrCb as string | Uint8Array, encodingOrCb as string);\n }\n this.writableEnded = true;\n this.writableFinished = true;\n this.emit(\"finish\");\n this.emit(\"close\");\n if (cb) cb();\n if (typeof encodingOrCb === \"function\") encodingOrCb();\n return this;\n }\n\n destroy(): this {\n this.writable = false;\n this.emit(\"close\");\n return this;\n }\n}\n\nexport class Duplex extends Readable {\n writable = true;\n writableEnded = false;\n writableFinished = false;\n\n write(\n chunk: string | Uint8Array,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): boolean {\n const callback = typeof encodingOrCb === \"function\" ? encodingOrCb : cb;\n this._write(\n chunk,\n typeof encodingOrCb === \"string\" ? encodingOrCb : \"utf8\",\n callback || (() => {}),\n );\n return true;\n }\n\n _write(_chunk: unknown, _encoding: string, callback: () => void): void {\n callback();\n }\n\n end(\n chunkOrCb?: unknown,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n if (typeof chunkOrCb === \"function\") {\n cb = chunkOrCb as () => void;\n } else if (chunkOrCb != null) {\n this.write(chunkOrCb as string | Uint8Array, encodingOrCb as string);\n }\n this.writableEnded = true;\n this.writableFinished = true;\n this.emit(\"finish\");\n this.emit(\"close\");\n if (cb) cb();\n if (typeof encodingOrCb === \"function\") encodingOrCb();\n return this;\n }\n}\n\nexport class Transform extends Duplex {\n _transform(\n chunk: unknown,\n _encoding: string,\n callback: (err?: Error | null, data?: unknown) => void,\n ): void {\n callback(null, chunk);\n }\n\n _write(chunk: unknown, encoding: string, callback: () => void): void {\n this._transform(chunk, encoding, (err, data) => {\n if (data != null) this.push(data);\n if (err) this.emit(\"error\", err);\n callback();\n });\n }\n}\n\nexport class PassThrough extends Transform {}\n\nexport function pipeline(...args: unknown[]): unknown {\n const cb =\n typeof args[args.length - 1] === \"function\"\n ? (args.pop() as (err?: Error) => void)\n : undefined;\n const streams = args as (Readable | Writable | Transform)[];\n let current: unknown = streams[0];\n for (let i = 1; i < streams.length; i++) {\n current = (current as Readable).pipe(streams[i] as Writable);\n }\n if (cb) {\n const last = streams[streams.length - 1];\n (last as EventEmitter).on(\"finish\", () => cb());\n (last as EventEmitter).on(\"error\", err => cb(err as Error));\n }\n return current;\n}\n\nexport function finished(\n stream: unknown,\n cb: (err?: Error) => void,\n): () => void {\n const s = stream as EventEmitter;\n const onFinish = () => {\n cleanup();\n cb();\n };\n const onError = (err: Error) => {\n cleanup();\n cb(err);\n };\n const onEnd = () => {\n cleanup();\n cb();\n };\n const cleanup = () => {\n s.removeListener(\"finish\", onFinish);\n s.removeListener(\"error\", onError);\n s.removeListener(\"end\", onEnd);\n };\n s.on(\"finish\", onFinish);\n s.on(\"error\", onError);\n s.on(\"end\", onEnd);\n return cleanup;\n}\n\nexport { BufferImpl as Buffer };\n\nexport const bufferModule = { Buffer: BufferImpl };\n\nexport class Stream extends EventEmitter {\n pipe<T extends Writable>(dest: T): T {\n this.on(\"data\", (chunk: unknown) =>\n dest.write(chunk as string | Uint8Array),\n );\n this.on(\"end\", () => dest.end?.());\n return dest;\n }\n}\n\nconst streamModule = Object.assign(Stream, {\n Readable,\n Writable,\n Duplex,\n Transform,\n PassThrough,\n pipeline,\n finished,\n Stream,\n Buffer: BufferImpl,\n});\n\nexport default streamModule;\n","import type { MemFS, Stats } from \"../memfs\";\nimport * as pathShim from \"./path\";\nimport { BufferImpl } from \"./stream\";\n\nexport interface FsShim {\n readFileSync: (\n path: string,\n encoding?: string | { encoding?: string },\n ) => string | Uint8Array;\n writeFileSync: (path: string, data: string | Uint8Array) => void;\n existsSync: (path: string) => boolean;\n mkdirSync: (path: string, options?: { recursive?: boolean }) => void;\n readdirSync: (path: string, options?: { withFileTypes?: boolean }) => unknown;\n statSync: (path: string) => Stats;\n lstatSync: (path: string) => Stats;\n unlinkSync: (path: string) => void;\n rmdirSync: (path: string, options?: { recursive?: boolean }) => void;\n rmSync: (\n path: string,\n options?: { recursive?: boolean; force?: boolean },\n ) => void;\n renameSync: (old: string, n: string) => void;\n copyFileSync: (src: string, dest: string) => void;\n accessSync: (path: string, mode?: number) => void;\n realpathSync: (path: string) => string;\n symlinkSync: (target: string, linkPath: string) => void;\n readlinkSync: (path: string) => string;\n chmodSync: (path: string, mode: number) => void;\n chownSync: (path: string, uid: number, gid: number) => void;\n lchmodSync: (path: string, mode: number) => void;\n lchownSync: (path: string, uid: number, gid: number) => void;\n openSync: (path: string, flags?: string | number) => number;\n closeSync: (fd: number) => void;\n readSync: (\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null,\n ) => number;\n writeSync: (\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null,\n ) => number;\n fstatSync: (fd: number) => Stats;\n watch: MemFS[\"watch\"];\n createReadStream: MemFS[\"createReadStream\"];\n createWriteStream: MemFS[\"createWriteStream\"];\n readFile: MemFS[\"readFile\"];\n stat: MemFS[\"stat\"];\n lstat: MemFS[\"lstat\"];\n readdir: MemFS[\"readdir\"];\n realpath: MemFS[\"realpath\"];\n access: MemFS[\"access\"];\n promises: {\n readFile: (\n path: string,\n encoding?: string | { encoding?: string },\n ) => Promise<string | Uint8Array>;\n writeFile: (path: string, data: string | Uint8Array) => Promise<void>;\n mkdir: (path: string, options?: { recursive?: boolean }) => Promise<void>;\n readdir: (\n path: string,\n options?: { withFileTypes?: boolean },\n ) => Promise<unknown>;\n stat: (path: string) => Promise<Stats>;\n lstat: (path: string) => Promise<Stats>;\n unlink: (path: string) => Promise<void>;\n rmdir: (path: string, options?: { recursive?: boolean }) => Promise<void>;\n rm: (\n path: string,\n options?: { recursive?: boolean; force?: boolean },\n ) => Promise<void>;\n rename: (old: string, n: string) => Promise<void>;\n access: (path: string, mode?: number) => Promise<void>;\n realpath: (path: string) => Promise<string>;\n copyFile: (src: string, dest: string) => Promise<void>;\n symlink: (target: string, linkPath: string) => Promise<void>;\n readlink: (path: string) => Promise<string>;\n chmod: (path: string, mode: number) => Promise<void>;\n chown: (path: string, uid: number, gid: number) => Promise<void>;\n lchmod: (path: string, mode: number) => Promise<void>;\n lchown: (path: string, uid: number, gid: number) => Promise<void>;\n };\n constants: Record<string, number>;\n}\n\nexport function createFsShim(vfs: MemFS, getCwd: () => string): FsShim {\n const resolvePath = (p: string): string => {\n if (typeof p !== \"string\") p = String(p);\n if (p.startsWith(\"file://\")) p = p.replace(/^file:\\/\\//, \"\");\n return pathShim.isAbsolute(p) ? p : pathShim.resolve(getCwd(), p);\n };\n\n const parseEncoding = (\n enc?: string | { encoding?: string },\n ): string | undefined => {\n if (typeof enc === \"string\") return enc;\n if (enc && typeof enc === \"object\") return enc.encoding;\n return undefined;\n };\n\n const shim: FsShim = {\n readFileSync(path, encoding?) {\n const enc = parseEncoding(encoding);\n if (enc) return vfs.readFileSync(resolvePath(path), enc as \"utf8\");\n const raw = vfs.readFileSync(resolvePath(path));\n return raw instanceof Uint8Array ? BufferImpl.from(raw) : raw;\n },\n writeFileSync(path, data) {\n vfs.writeFileSync(resolvePath(path), data);\n },\n existsSync(path) {\n return vfs.existsSync(resolvePath(path));\n },\n mkdirSync(path, opts?) {\n vfs.mkdirSync(resolvePath(path), opts);\n },\n readdirSync(path, opts?) {\n if (opts?.withFileTypes)\n return vfs.readdirSync(resolvePath(path), { withFileTypes: true });\n return vfs.readdirSync(resolvePath(path));\n },\n statSync(path) {\n return vfs.statSync(resolvePath(path));\n },\n lstatSync(path) {\n return vfs.lstatSync(resolvePath(path));\n },\n unlinkSync(path) {\n vfs.unlinkSync(resolvePath(path));\n },\n rmdirSync(path, opts?) {\n vfs.rmdirSync(resolvePath(path), opts);\n },\n rmSync(path, opts?) {\n vfs.rmSync(resolvePath(path), opts);\n },\n renameSync(old, n) {\n vfs.renameSync(resolvePath(old), resolvePath(n));\n },\n copyFileSync(src, dest) {\n vfs.copyFileSync(resolvePath(src), resolvePath(dest));\n },\n accessSync(path, mode?) {\n vfs.accessSync(resolvePath(path), mode);\n },\n realpathSync: Object.assign(\n (path: string) => vfs.realpathSync(resolvePath(path)),\n { native: (path: string) => vfs.realpathSync(resolvePath(path)) },\n ),\n symlinkSync(target, linkPath) {\n vfs.symlinkSync(target, resolvePath(linkPath));\n },\n readlinkSync(path) {\n return vfs.readlinkSync(resolvePath(path));\n },\n chmodSync(path: string, _mode: number) {\n console.warn(\n `[jiki] fs.chmodSync('${resolvePath(path)}') is a no-op — file permissions not supported in browser runtime`,\n );\n },\n chownSync(path: string, _uid: number, _gid: number) {\n console.warn(\n `[jiki] fs.chownSync('${resolvePath(path)}') is a no-op — file ownership not supported in browser runtime`,\n );\n },\n lchmodSync(path: string, _mode: number) {\n console.warn(\n `[jiki] fs.lchmodSync('${resolvePath(path)}') is a no-op — file permissions not supported in browser runtime`,\n );\n },\n lchownSync(path: string, _uid: number, _gid: number) {\n console.warn(\n `[jiki] fs.lchownSync('${resolvePath(path)}') is a no-op — file ownership not supported in browser runtime`,\n );\n },\n openSync(path, flags?) {\n return vfs.openSync(resolvePath(path), flags);\n },\n closeSync(fd) {\n vfs.closeSync(fd);\n },\n readSync(fd, buffer, offset, length, position) {\n return vfs.readSync(fd, buffer, offset, length, position);\n },\n writeSync(fd, buffer, offset, length, position) {\n return vfs.writeSync(fd, buffer, offset, length, position);\n },\n fstatSync(fd) {\n return vfs.fstatSync(fd);\n },\n watch: vfs.watch.bind(vfs),\n createReadStream: vfs.createReadStream.bind(vfs),\n createWriteStream: vfs.createWriteStream.bind(vfs),\n readFile: vfs.readFile.bind(vfs),\n stat: vfs.stat.bind(vfs),\n lstat: vfs.lstat.bind(vfs),\n readdir: vfs.readdir.bind(vfs),\n realpath: vfs.realpath.bind(vfs),\n access: vfs.access.bind(vfs),\n promises: {\n async readFile(path, encoding?) {\n const enc = parseEncoding(encoding);\n if (enc) return vfs.readFileSync(resolvePath(path), enc as \"utf8\");\n const raw = vfs.readFileSync(resolvePath(path));\n return raw instanceof Uint8Array ? BufferImpl.from(raw) : raw;\n },\n async writeFile(path, data) {\n vfs.writeFileSync(resolvePath(path), data);\n },\n async mkdir(path, opts?) {\n vfs.mkdirSync(resolvePath(path), opts);\n },\n async readdir(path, opts?) {\n if (opts?.withFileTypes)\n return vfs.readdirSync(resolvePath(path), { withFileTypes: true });\n return vfs.readdirSync(resolvePath(path));\n },\n async stat(path) {\n return vfs.statSync(resolvePath(path));\n },\n async lstat(path) {\n return vfs.lstatSync(resolvePath(path));\n },\n async unlink(path) {\n vfs.unlinkSync(resolvePath(path));\n },\n async rmdir(path, opts?) {\n vfs.rmdirSync(resolvePath(path), opts);\n },\n async rm(path, opts?) {\n vfs.rmSync(resolvePath(path), opts);\n },\n async rename(old, n) {\n vfs.renameSync(resolvePath(old), resolvePath(n));\n },\n async access(path, mode?) {\n vfs.accessSync(resolvePath(path), mode);\n },\n async realpath(path) {\n return vfs.realpathSync(resolvePath(path));\n },\n async copyFile(src, dest) {\n vfs.copyFileSync(resolvePath(src), resolvePath(dest));\n },\n async symlink(target, linkPath) {\n vfs.symlinkSync(target, resolvePath(linkPath));\n },\n async readlink(path) {\n return vfs.readlinkSync(resolvePath(path));\n },\n async chmod(path: string, _mode: number) {\n console.warn(\n `[jiki] fs.promises.chmod('${resolvePath(path)}') is a no-op — file permissions not supported in browser runtime`,\n );\n },\n async chown(path: string, _uid: number, _gid: number) {\n console.warn(\n `[jiki] fs.promises.chown('${resolvePath(path)}') is a no-op — file ownership not supported in browser runtime`,\n );\n },\n async lchmod(path: string, _mode: number) {\n console.warn(\n `[jiki] fs.promises.lchmod('${resolvePath(path)}') is a no-op — file permissions not supported in browser runtime`,\n );\n },\n async lchown(path: string, _uid: number, _gid: number) {\n console.warn(\n `[jiki] fs.promises.lchown('${resolvePath(path)}') is a no-op — file ownership not supported in browser runtime`,\n );\n },\n },\n constants: {\n F_OK: 0,\n R_OK: 4,\n W_OK: 2,\n X_OK: 1,\n O_RDONLY: 0,\n O_WRONLY: 1,\n O_RDWR: 2,\n O_CREAT: 64,\n O_EXCL: 128,\n O_TRUNC: 512,\n O_APPEND: 1024,\n S_IFMT: 61440,\n S_IFREG: 32768,\n S_IFDIR: 16384,\n S_IFLNK: 40960,\n },\n };\n\n return shim;\n}\n","import { EventEmitter, EventListener } from \"./events\";\n\nexport interface ProcessEnv {\n [key: string]: string | undefined;\n}\n\ninterface ProcessStream {\n isTTY: boolean;\n on: (event: string, listener: EventListener) => ProcessStream;\n once: (event: string, listener: EventListener) => ProcessStream;\n off: (event: string, listener: EventListener) => ProcessStream;\n emit: (event: string, ...args: unknown[]) => boolean;\n addListener: (event: string, listener: EventListener) => ProcessStream;\n removeListener: (event: string, listener: EventListener) => ProcessStream;\n removeAllListeners: (event?: string) => ProcessStream;\n setMaxListeners: (n: number) => ProcessStream;\n getMaxListeners: () => number;\n listenerCount: (event: string) => number;\n listeners: (event: string) => EventListener[];\n rawListeners: (event: string) => EventListener[];\n prependListener: (event: string, listener: EventListener) => ProcessStream;\n prependOnceListener: (\n event: string,\n listener: EventListener,\n ) => ProcessStream;\n eventNames: () => string[];\n pause?: () => ProcessStream;\n resume?: () => ProcessStream;\n setEncoding?: (encoding: string) => ProcessStream;\n}\n\ninterface ProcessWritableStream extends ProcessStream {\n write: (\n data: string | Buffer,\n encoding?: string,\n callback?: () => void,\n ) => boolean;\n end?: (data?: string, callback?: () => void) => void;\n}\n\ninterface ProcessReadableStream extends ProcessStream {\n read?: (size?: number) => string | Buffer | null;\n setRawMode?: (mode: boolean) => ProcessReadableStream;\n}\n\nexport interface Process {\n env: ProcessEnv;\n cwd: () => string;\n chdir: (directory: string) => void;\n platform: string;\n arch: string;\n version: string;\n versions: { node: string; v8: string; uv: string };\n argv: string[];\n argv0: string;\n execPath: string;\n execArgv: string[];\n pid: number;\n ppid: number;\n exit: (code?: number) => never;\n nextTick: (\n callback: (...args: unknown[]) => void,\n ...args: unknown[]\n ) => void;\n stdout: ProcessWritableStream;\n stderr: ProcessWritableStream;\n stdin: ProcessReadableStream;\n hrtime: { (time?: [number, number]): [number, number]; bigint: () => bigint };\n memoryUsage: () => {\n rss: number;\n heapTotal: number;\n heapUsed: number;\n external: number;\n arrayBuffers: number;\n };\n uptime: () => number;\n cpuUsage: () => { user: number; system: number };\n on: (event: string, listener: EventListener) => Process;\n once: (event: string, listener: EventListener) => Process;\n off: (event: string, listener: EventListener) => Process;\n emit: (event: string, ...args: unknown[]) => boolean;\n addListener: (event: string, listener: EventListener) => Process;\n removeListener: (event: string, listener: EventListener) => Process;\n removeAllListeners: (event?: string) => Process;\n listeners: (event: string) => EventListener[];\n listenerCount: (event: string) => number;\n prependListener: (event: string, listener: EventListener) => Process;\n prependOnceListener: (event: string, listener: EventListener) => Process;\n eventNames: () => string[];\n setMaxListeners: (n: number) => Process;\n getMaxListeners: () => number;\n send?: (\n message: unknown,\n callback?: (error: Error | null) => void,\n ) => boolean;\n connected?: boolean;\n _cwdCallCount?: number;\n}\n\nfunction createProcessStream(\n isWritable: boolean,\n writeImpl?: (data: string) => boolean,\n): ProcessWritableStream & ProcessReadableStream {\n const emitter = new EventEmitter();\n const stream: ProcessWritableStream & ProcessReadableStream = {\n isTTY: false,\n on(event, listener) {\n emitter.on(event, listener);\n return stream;\n },\n once(event, listener) {\n emitter.once(event, listener);\n return stream;\n },\n off(event, listener) {\n emitter.off(event, listener);\n return stream;\n },\n emit(event, ...args) {\n return emitter.emit(event, ...args);\n },\n addListener(event, listener) {\n emitter.addListener(event, listener);\n return stream;\n },\n removeListener(event, listener) {\n emitter.removeListener(event, listener);\n return stream;\n },\n removeAllListeners(event?) {\n emitter.removeAllListeners(event);\n return stream;\n },\n setMaxListeners(n) {\n emitter.setMaxListeners(n);\n return stream;\n },\n getMaxListeners() {\n return emitter.getMaxListeners();\n },\n listenerCount(event) {\n return emitter.listenerCount(event);\n },\n listeners(event) {\n return emitter.listeners(event);\n },\n rawListeners(event) {\n return emitter.rawListeners(event);\n },\n prependListener(event, listener) {\n emitter.prependListener(event, listener);\n return stream;\n },\n prependOnceListener(event, listener) {\n emitter.prependOnceListener(event, listener);\n return stream;\n },\n eventNames() {\n return emitter.eventNames();\n },\n pause() {\n return stream;\n },\n resume() {\n return stream;\n },\n setEncoding() {\n return stream;\n },\n write(data, _encoding?, callback?) {\n if (callback) queueMicrotask(callback);\n return true;\n },\n end(_data?, callback?) {\n if (callback) queueMicrotask(callback);\n },\n read() {\n return null;\n },\n setRawMode() {\n return stream;\n },\n };\n if (isWritable && writeImpl) {\n stream.write = (data, _encoding?, callback?) => {\n const result = writeImpl(\n typeof data === \"string\" ? data : data.toString(),\n );\n if (callback) queueMicrotask(callback);\n return result;\n };\n }\n return stream;\n}\n\nexport function createProcess(options?: {\n cwd?: string;\n env?: ProcessEnv;\n onExit?: (code: number) => void;\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n}): Process {\n let currentDir = options?.cwd || \"/\";\n const env: ProcessEnv = {\n NODE_ENV: \"development\",\n PATH: \"/usr/local/bin:/usr/bin:/bin:/node_modules/.bin\",\n HOME: \"/\",\n ...options?.env,\n };\n const emitter = new EventEmitter();\n const startTime = Date.now();\n\n const proc: Process = {\n env,\n cwd() {\n return currentDir;\n },\n chdir(dir) {\n currentDir = dir.startsWith(\"/\") ? dir : currentDir + \"/\" + dir;\n },\n platform: \"linux\",\n /** Set to 'wasm32' to indicate browser-based WebAssembly runtime */\n arch: \"wasm32\",\n version: \"v20.0.0\",\n versions: { node: \"20.0.0\", v8: \"11.3.244.8\", uv: \"1.44.2\" },\n argv: [\"node\", \"/index.js\"],\n argv0: \"node\",\n execPath: \"/usr/local/bin/node\",\n execArgv: [],\n pid: 1,\n ppid: 0,\n // process.exit() emits 'beforeExit' and 'exit' events before throwing\n // to halt execution. In a real Node.js process, 'beforeExit' fires when\n // the event loop drains. In the browser runtime, we emit it synchronously\n // before 'exit' as a best-effort approximation. The throw after events\n // is intentional — it stops execution in the browser environment where\n // we cannot actually terminate the process.\n exit(code = 0) {\n if (!(proc as any)._exiting) {\n (proc as any)._exiting = true;\n emitter.emit(\"beforeExit\", code);\n emitter.emit(\"exit\", code);\n options?.onExit?.(code);\n }\n throw new Error(`Process exited with code ${code}`);\n },\n nextTick(cb, ...args) {\n queueMicrotask(() => cb(...args));\n },\n stdout: createProcessStream(true, d => {\n options?.onStdout?.(d) ?? console.log(d);\n return true;\n }) as ProcessWritableStream,\n stderr: createProcessStream(true, d => {\n options?.onStderr?.(d) ?? console.error(d);\n return true;\n }) as ProcessWritableStream,\n stdin: Object.assign(createProcessStream(false), {\n /** Buffer for pending input data. */\n _buffer: [] as string[],\n /** Push data into stdin (called by Container.sendInput). */\n _push(data: string): void {\n (proc.stdin as any)._buffer.push(data);\n proc.stdin.emit(\"data\", data);\n },\n read(): string | null {\n const buf = (proc.stdin as any)._buffer;\n return buf.length > 0 ? buf.shift() : null;\n },\n }) as ProcessReadableStream,\n hrtime: Object.assign(\n function hrtime(time?: [number, number]): [number, number] {\n const now = performance.now();\n const s = Math.floor(now / 1000);\n const ns = Math.floor((now % 1000) * 1e6);\n if (time) return [s - time[0], ns - time[1]];\n return [s, ns];\n },\n { bigint: (): bigint => BigInt(Math.floor(performance.now() * 1e6)) },\n ),\n connected: false,\n send: (_message: unknown, _callback?: (error: Error | null) => void) =>\n false,\n memoryUsage: () => ({\n rss: 50 * 1024 * 1024,\n heapTotal: 30 * 1024 * 1024,\n heapUsed: 20 * 1024 * 1024,\n external: 1024 * 1024,\n arrayBuffers: 0,\n }),\n uptime: () => (Date.now() - startTime) / 1000,\n cpuUsage: () => ({ user: 0, system: 0 }),\n on(event, listener) {\n emitter.on(event, listener);\n return proc;\n },\n once(event, listener) {\n emitter.once(event, listener);\n return proc;\n },\n off(event, listener) {\n emitter.off(event, listener);\n return proc;\n },\n emit(event, ...args) {\n return emitter.emit(event, ...args);\n },\n addListener(event, listener) {\n emitter.addListener(event, listener);\n return proc;\n },\n removeListener(event, listener) {\n emitter.removeListener(event, listener);\n return proc;\n },\n removeAllListeners(event?) {\n emitter.removeAllListeners(event);\n return proc;\n },\n listeners(event) {\n return emitter.listeners(event);\n },\n listenerCount(event) {\n return emitter.listenerCount(event);\n },\n prependListener(event, listener) {\n emitter.prependListener(event, listener);\n return proc;\n },\n prependOnceListener(event, listener) {\n emitter.prependOnceListener(event, listener);\n return proc;\n },\n eventNames() {\n return emitter.eventNames();\n },\n setMaxListeners(n) {\n emitter.setMaxListeners(n);\n return proc;\n },\n getMaxListeners() {\n return emitter.getMaxListeners();\n },\n };\n return proc;\n}\n\nexport const process = createProcess();\nexport default process;\n","import { EventEmitter } from \"./events\";\nimport type { MemFS } from \"../memfs\";\n\nlet _vfs: MemFS | null = null;\nlet _runtimeFactory:\n | ((vfs: MemFS, options?: Record<string, unknown>) => KernelLike)\n | null = null;\n\ninterface KernelLike {\n runFile: (path: string) => unknown;\n getProcess: () => ProcessLike;\n}\n\ninterface ProcessLike {\n argv: string[];\n exit: (code?: number) => never;\n connected?: boolean;\n send?: (\n message: unknown,\n callback?: (error: Error | null) => void,\n ) => boolean;\n stdout: {\n isTTY?: boolean;\n emit: (event: string, ...args: unknown[]) => void;\n };\n stderr: {\n isTTY?: boolean;\n emit: (event: string, ...args: unknown[]) => void;\n };\n stdin: {\n isTTY?: boolean;\n setRawMode?: (mode: boolean) => unknown;\n emit: (event: string, ...args: unknown[]) => void;\n };\n on: (event: string, listener: (...args: unknown[]) => void) => unknown;\n once: (event: string, listener: (...args: unknown[]) => void) => unknown;\n emit: (event: string, ...args: unknown[]) => boolean;\n listeners: (event: string) => ((...args: unknown[]) => void)[];\n}\n\n// Patch Object.defineProperty to force configurable: true on globalThis properties.\n// Only applied in browser environments where all forks share globalThis.\n// Libraries like vitest define non-configurable properties (e.g. __vitest_index__)\n// that need to be configurable for re-runs in our shared-global environment.\nlet _definePropertyPatched = false;\nexport function patchDefineProperty(): void {\n if (_definePropertyPatched) return;\n _definePropertyPatched = true;\n const _realDefineProperty = Object.defineProperty;\n Object.defineProperty = function (\n target: object,\n key: PropertyKey,\n descriptor: PropertyDescriptor,\n ): object {\n if (target === globalThis && descriptor && !descriptor.configurable) {\n descriptor = { ...descriptor, configurable: true };\n }\n return _realDefineProperty.call(Object, target, key, descriptor) as object;\n } as typeof Object.defineProperty;\n}\n\nlet _activeForkedChildren = 0;\nlet _onForkedChildExit: (() => void) | null = null;\n\nexport function getActiveForkedChildren(): number {\n return _activeForkedChildren;\n}\nexport function setOnForkedChildExit(\n cb: (() => void) | null,\n): (() => void) | null {\n const prev = _onForkedChildExit;\n _onForkedChildExit = cb;\n return prev;\n}\n\n// Streaming callbacks for long-running commands (e.g. vitest watch)\nlet _streamStdout: ((data: string) => void) | null = null;\nlet _streamStderr: ((data: string) => void) | null = null;\nlet _abortSignal: AbortSignal | null = null;\n\nexport function setStreamingCallbacks(opts: {\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n signal?: AbortSignal;\n}): void {\n _streamStdout = opts.onStdout || null;\n _streamStderr = opts.onStderr || null;\n _abortSignal = opts.signal || null;\n}\n\nexport function clearStreamingCallbacks(): void {\n _streamStdout = null;\n _streamStderr = null;\n _abortSignal = null;\n}\n\nexport function getStreamingState() {\n return {\n streamStdout: _streamStdout,\n streamStderr: _streamStderr,\n abortSignal: _abortSignal,\n };\n}\n\n// Reference to stdin of the currently running node process for interactive input\nlet _activeProcessStdin: {\n emit: (event: string, ...args: unknown[]) => void;\n} | null = null;\n\nexport function sendStdin(data: string): void {\n if (_activeProcessStdin) {\n _activeProcessStdin.emit(\"data\", data);\n for (const ch of data) {\n _activeProcessStdin.emit(\"keypress\", ch, {\n sequence: ch,\n name: ch,\n ctrl: false,\n meta: false,\n shift: false,\n });\n }\n }\n}\n\nexport function setActiveProcessStdin(\n stdin: { emit: (event: string, ...args: unknown[]) => void } | null,\n): void {\n _activeProcessStdin = stdin;\n}\n\nexport function initChildProcess(\n vfs: MemFS,\n runtimeFactory?: (\n vfs: MemFS,\n options?: Record<string, unknown>,\n ) => KernelLike,\n): void {\n _vfs = vfs;\n if (runtimeFactory) _runtimeFactory = runtimeFactory;\n}\n\nexport class ChildProcess extends EventEmitter {\n pid: number;\n exitCode: number | null = null;\n signalCode: string | null = null;\n killed = false;\n connected = false;\n spawnargs: string[] = [];\n spawnfile = \"\";\n\n stdout: EventEmitter | null;\n stderr: EventEmitter | null;\n stdin: EventEmitter | null;\n\n constructor() {\n super();\n this.pid = Math.floor(Math.random() * 10000) + 1000;\n this.stdout = new EventEmitter();\n this.stderr = new EventEmitter();\n this.stdin = new EventEmitter();\n }\n\n kill(signal?: string): boolean {\n this.killed = true;\n this.connected = false;\n this.emit(\"exit\", null, signal || \"SIGTERM\");\n this.emit(\"close\", null, signal || \"SIGTERM\");\n return true;\n }\n\n send(message: unknown, _cb?: (error: Error | null) => void): boolean {\n return true;\n }\n\n disconnect(): void {\n this.connected = false;\n this.emit(\"disconnect\");\n }\n\n ref(): this {\n return this;\n }\n unref(): this {\n return this;\n }\n}\n\nexport interface ExecResult {\n stdout: string;\n stderr: string;\n}\n\nexport function exec(\n command: string,\n optionsOrCb?: unknown | ((err: Error | null, result?: ExecResult) => void),\n cb?: (err: Error | null, result?: ExecResult) => void,\n): ChildProcess {\n const callback =\n typeof optionsOrCb === \"function\"\n ? (optionsOrCb as (err: Error | null, result?: ExecResult) => void)\n : cb;\n const child = new ChildProcess();\n\n setTimeout(() => {\n const stdout = `Executed: ${command}`;\n child.stdout?.emit(\"data\", stdout);\n child.stdout?.emit(\"end\");\n child.stderr?.emit(\"end\");\n child.exitCode = 0;\n child.emit(\"close\", 0);\n child.emit(\"exit\", 0);\n if (callback) callback(null, { stdout, stderr: \"\" });\n }, 0);\n\n return child;\n}\n\nexport function execSync(command: string, _options?: unknown): string {\n return `Executed: ${command}`;\n}\n\nexport interface SpawnOptions {\n cwd?: string;\n env?: Record<string, string>;\n stdio?:\n | \"pipe\"\n | \"inherit\"\n | \"ignore\"\n | Array<\"pipe\" | \"inherit\" | \"ignore\" | \"ipc\" | null>;\n shell?: boolean | string;\n detached?: boolean;\n uid?: number;\n gid?: number;\n timeout?: number;\n signal?: AbortSignal;\n}\n\nexport function spawn(\n command: string,\n args: string[] = [],\n options?: SpawnOptions | unknown,\n): ChildProcess {\n const child = new ChildProcess();\n const opts =\n options && typeof options === \"object\"\n ? (options as SpawnOptions)\n : undefined;\n\n // Handle stdio configuration\n if (opts?.stdio) {\n const stdioConfig =\n typeof opts.stdio === \"string\"\n ? [opts.stdio, opts.stdio, opts.stdio]\n : opts.stdio;\n\n // stdin (index 0)\n if (stdioConfig[0] === \"ignore\") {\n child.stdin = null;\n }\n // stdout (index 1)\n if (stdioConfig[1] === \"ignore\") {\n child.stdout = null;\n }\n // stderr (index 2)\n if (stdioConfig[2] === \"ignore\") {\n child.stderr = null;\n }\n\n // IPC channel stub (index 3 === 'ipc')\n if (stdioConfig.length > 3 && stdioConfig[3] === \"ipc\") {\n child.connected = true;\n }\n }\n\n // Handle shell option — wrap command for shell execution\n if (opts?.shell) {\n child.spawnfile = typeof opts.shell === \"string\" ? opts.shell : \"/bin/sh\";\n child.spawnargs = [\n child.spawnfile,\n \"-c\",\n `${command} ${args.join(\" \")}`.trim(),\n ];\n } else {\n child.spawnfile = command;\n child.spawnargs = [command, ...args];\n }\n\n setTimeout(() => {\n child.emit(\"close\", 0);\n child.emit(\"exit\", 0);\n }, 0);\n return child;\n}\n\nexport function execFile(\n file: string,\n args: string[] = [],\n optionsOrCb?: unknown,\n cb?: (err: Error | null, stdout?: string, stderr?: string) => void,\n): ChildProcess {\n const callback =\n typeof optionsOrCb === \"function\"\n ? (optionsOrCb as (\n err: Error | null,\n stdout?: string,\n stderr?: string,\n ) => void)\n : cb;\n return exec(\n `${file} ${args.join(\" \")}`,\n {},\n callback\n ? (err, result) => callback(err, result?.stdout, result?.stderr)\n : undefined,\n );\n}\n\nexport function execFileSync(\n file: string,\n args: string[] = [],\n _options?: unknown,\n): string {\n return execSync(`${file} ${args.join(\" \")}`, _options);\n}\n\nexport function spawnSync(\n command: string,\n args: string[] = [],\n _options?: unknown,\n): { stdout: string; stderr: string; status: number } {\n return {\n stdout: `Executed: ${command} ${args.join(\" \")}`,\n stderr: \"\",\n status: 0,\n };\n}\n\n/**\n * Fork — runs a Node.js module in a simulated child process using a new Kernel.\n * Creates bidirectional IPC between parent and child, with serialized message delivery.\n */\nexport function fork(\n modulePath: string,\n argsOrOptions?: string[] | Record<string, unknown>,\n options?: Record<string, unknown>,\n): ChildProcess {\n if (!_vfs) {\n throw new Error(\"VFS not initialized\");\n }\n\n let args: string[] = [];\n let opts: Record<string, unknown> = {};\n if (Array.isArray(argsOrOptions)) {\n args = argsOrOptions;\n opts = options || {};\n } else if (argsOrOptions) {\n opts = argsOrOptions;\n }\n\n const cwd = (opts.cwd as string) || \"/\";\n const env = (opts.env as Record<string, string>) || {};\n const execArgv = (opts.execArgv as string[]) || [];\n\n const resolvedPath = modulePath.startsWith(\"/\")\n ? modulePath\n : `${cwd}/${modulePath}`.replace(/\\/+/g, \"/\");\n\n const child = new ChildProcess();\n child.connected = true;\n child.spawnargs = [\"node\", ...execArgv, resolvedPath, ...args];\n child.spawnfile = \"node\";\n\n if (!_runtimeFactory) {\n setTimeout(() => {\n child.emit(\"close\", 0);\n child.emit(\"exit\", 0);\n }, 0);\n return child;\n }\n\n const childRuntime = _runtimeFactory(_vfs!, {\n cwd,\n env,\n onConsole: (method: string, consoleArgs: unknown[]) => {\n const msg = consoleArgs.map(a => String(a)).join(\" \");\n if (method === \"error\" || method === \"warn\") {\n child.stderr?.emit(\"data\", msg + \"\\n\");\n } else {\n child.stdout?.emit(\"data\", msg + \"\\n\");\n }\n },\n onStdout: (data: string) => {\n child.stdout?.emit(\"data\", data);\n },\n onStderr: (data: string) => {\n child.stderr?.emit(\"data\", data);\n },\n });\n\n const childProc = childRuntime.getProcess();\n childProc.argv = [\"node\", resolvedPath, ...args];\n\n // Clone IPC messages to mimic real Node.js IPC behavior.\n // Real IPC serializes messages across process boundaries.\n // Without cloning, shared object references cause corruption.\n const cloneIpcMessage = (msg: unknown): unknown => {\n try {\n return structuredClone(msg);\n } catch {\n return msg;\n }\n };\n\n // Parent sends -> child process receives\n child.send = (\n message: unknown,\n _callback?: (error: Error | null) => void,\n ): boolean => {\n if (!child.connected) return false;\n const cloned = cloneIpcMessage(message);\n setTimeout(() => {\n childProc.emit(\"message\", cloned);\n }, 0);\n return true;\n };\n\n // Child sends -> parent ChildProcess receives (serialized + awaited)\n // We must serialize AND await async handlers so birpc's async onCollected\n // finishes before onTaskUpdate starts.\n let ipcQueue: Promise<void> = Promise.resolve();\n childProc.send = ((\n message: unknown,\n _callback?: (error: Error | null) => void,\n ): boolean => {\n if (!child.connected) return false;\n const cloned = cloneIpcMessage(message);\n ipcQueue = ipcQueue.then(async () => {\n const listeners = child.listeners(\"message\");\n for (const listener of listeners) {\n try {\n const result = (listener as (...args: unknown[]) => unknown)(cloned);\n if (\n result &&\n typeof (result as Promise<unknown>).then === \"function\"\n ) {\n await result;\n }\n } catch {\n // Handler errors propagate through the test runner's own error handling\n }\n }\n });\n return true;\n }) as any;\n childProc.connected = true;\n\n _activeForkedChildren++;\n\n const notifyChildExit = () => {\n _activeForkedChildren--;\n _onForkedChildExit?.();\n };\n\n // Override child's process.exit\n childProc.exit = ((code = 0) => {\n child.exitCode = code;\n child.connected = false;\n childProc.connected = false;\n childProc.emit(\"exit\", code);\n child.emit(\"exit\", code, null);\n child.emit(\"close\", code, null);\n notifyChildExit();\n }) as (code?: number) => never;\n\n // Override child's kill to disconnect\n child.kill = (signal?: string): boolean => {\n child.killed = true;\n child.connected = false;\n childProc.connected = false;\n childProc.emit(\"exit\", null, signal || \"SIGTERM\");\n child.emit(\"exit\", null, signal || \"SIGTERM\");\n child.emit(\"close\", null, signal || \"SIGTERM\");\n notifyChildExit();\n return true;\n };\n\n child.disconnect = (): void => {\n child.connected = false;\n childProc.connected = false;\n child.emit(\"disconnect\");\n };\n\n // Run the module asynchronously\n setTimeout(() => {\n try {\n childRuntime.runFile(resolvedPath);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.startsWith(\"Process exited with code\")\n ) {\n return;\n }\n const errorMsg = error instanceof Error ? error.message : String(error);\n child.stderr?.emit(\"data\", `Error in forked process: ${errorMsg}\\n`);\n child.exitCode = 1;\n child.emit(\"error\", error);\n child.emit(\"exit\", 1, null);\n child.emit(\"close\", 1, null);\n notifyChildExit();\n }\n }, 0);\n\n return child;\n}\n\nexport default {\n ChildProcess,\n exec,\n execSync,\n spawn,\n execFile,\n execFileSync,\n fork,\n spawnSync,\n initChildProcess,\n setStreamingCallbacks,\n clearStreamingCallbacks,\n sendStdin,\n setActiveProcessStdin,\n getStreamingState,\n getActiveForkedChildren,\n setOnForkedChildExit,\n patchDefineProperty,\n};\n","import { EventEmitter } from \"./events\";\nimport type { MemFS } from \"../memfs\";\n\nlet _vfs: MemFS | null = null;\nexport function initChokidar(vfs: MemFS): void {\n _vfs = vfs;\n}\n\nexport class FSWatcher extends EventEmitter {\n closed = false;\n private watchers: { close(): void }[] = [];\n\n add(paths: string | string[]): this {\n if (!_vfs) return this;\n const pathList = Array.isArray(paths) ? paths : [paths];\n for (const p of pathList) {\n try {\n const watcher = _vfs.watch(\n p,\n { recursive: true },\n (eventType, filename) => {\n if (this.closed) return;\n this.emit(\"change\", `${p}/${filename}`);\n this.emit(\"all\", eventType, `${p}/${filename}`);\n },\n );\n this.watchers.push(watcher);\n } catch {}\n }\n setTimeout(() => this.emit(\"ready\"), 0);\n return this;\n }\n\n unwatch(_paths: string | string[]): this {\n return this;\n }\n close(): Promise<void> {\n this.closed = true;\n this.watchers.forEach(w => w.close());\n return Promise.resolve();\n }\n getWatched(): Record<string, string[]> {\n return {};\n }\n}\n\nexport function watch(paths: string | string[], _options?: unknown): FSWatcher {\n const watcher = new FSWatcher();\n return watcher.add(paths);\n}\n\nexport default { watch, FSWatcher, initChokidar };\n","import type { MemFS } from \"../memfs\";\nimport * as pathShim from \"./path\";\n\nlet _vfs: MemFS | null = null;\nexport function initReaddirp(vfs: MemFS): void {\n _vfs = vfs;\n}\n\nexport interface ReaddirpEntry {\n path: string;\n fullPath: string;\n basename: string;\n dirent: { isFile(): boolean; isDirectory(): boolean };\n}\n\nexport default function readdirp(\n root: string,\n options?: {\n fileFilter?: string | string[];\n directoryFilter?: string | string[];\n depth?: number;\n },\n): AsyncIterable<ReaddirpEntry> & {\n [Symbol.asyncIterator](): AsyncIterableIterator<ReaddirpEntry>;\n} {\n const entries: ReaddirpEntry[] = [];\n\n if (_vfs) {\n const collect = (dir: string, depth: number) => {\n if (options?.depth !== undefined && depth > options.depth) return;\n try {\n const items = _vfs!.readdirSync(dir);\n for (const name of items) {\n const fullPath = pathShim.join(dir, name);\n try {\n const stat = _vfs!.statSync(fullPath);\n entries.push({\n path: pathShim.relative(root, fullPath),\n fullPath,\n basename: name,\n dirent: {\n isFile: () => stat.isFile(),\n isDirectory: () => stat.isDirectory(),\n },\n });\n if (stat.isDirectory()) collect(fullPath, depth + 1);\n } catch {}\n }\n } catch {}\n };\n collect(root, 0);\n }\n\n let idx = 0;\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<ReaddirpEntry> {\n return {\n next(): Promise<IteratorResult<ReaddirpEntry>> {\n if (idx < entries.length)\n return Promise.resolve({ value: entries[idx++], done: false });\n return Promise.resolve({\n value: undefined as unknown as ReaddirpEntry,\n done: true,\n });\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n },\n };\n}\n","import * as pathShim from \"./path\";\n\nexport const builtinModules = [\n \"assert\",\n \"buffer\",\n \"child_process\",\n \"cluster\",\n \"console\",\n \"crypto\",\n \"dgram\",\n \"dns\",\n \"domain\",\n \"events\",\n \"fs\",\n \"http\",\n \"http2\",\n \"https\",\n \"inspector\",\n \"module\",\n \"net\",\n \"os\",\n \"path\",\n \"perf_hooks\",\n \"process\",\n \"querystring\",\n \"readline\",\n \"stream\",\n \"string_decoder\",\n \"timers\",\n \"tls\",\n \"tty\",\n \"url\",\n \"util\",\n \"v8\",\n \"vm\",\n \"worker_threads\",\n \"zlib\",\n];\n\nexport function isBuiltin(moduleName: string): boolean {\n const name = moduleName.startsWith(\"node:\")\n ? moduleName.slice(5)\n : moduleName;\n return builtinModules.includes(name);\n}\n\nlet _requireFactory: ((dir: string) => (id: string) => unknown) | null = null;\n\nexport function initModule(\n requireFactory: (dir: string) => (id: string) => unknown,\n): void {\n _requireFactory = requireFactory;\n}\n\nexport function createRequire(filename: string): (id: string) => unknown {\n if (_requireFactory) {\n const dir = pathShim.dirname(filename);\n return _requireFactory(dir);\n }\n return (_id: string) => {\n throw new Error(`createRequire is not supported in browser runtime`);\n };\n}\n\nexport class Module {\n id: string;\n filename: string;\n exports: unknown = {};\n loaded = false;\n children: Module[] = [];\n paths: string[] = [];\n parent: Module | null = null;\n\n constructor(id?: string) {\n this.id = id || \"\";\n this.filename = id || \"\";\n }\n\n static _resolveFilename(request: string, _parent?: unknown): string {\n return request;\n }\n static _cache: Record<string, Module> = {};\n static _extensions: Record<string, unknown> = {\n \".js\": null,\n \".json\": null,\n \".node\": null,\n };\n static builtinModules = builtinModules;\n static isBuiltin = isBuiltin;\n static createRequire = createRequire;\n static wrap(code: string): string {\n return `(function (exports, require, module, __filename, __dirname) { ${code}\\n});`;\n }\n static Module = Module;\n}\n\nexport default { Module, builtinModules, isBuiltin, createRequire };\n","import { EventEmitter } from \"./events\";\nimport { Readable, Writable, BufferImpl } from \"./stream\";\n\ntype ServerListenCallback = (port: number, server: Server) => void;\ntype ServerCloseCallback = (port: number) => void;\n\nlet _onServerListen: ServerListenCallback | null = null;\nlet _onServerClose: ServerCloseCallback | null = null;\n\nexport function setServerListenCallback(cb: ServerListenCallback): void {\n _onServerListen = cb;\n}\n\nexport function setServerCloseCallback(cb: ServerCloseCallback): void {\n _onServerClose = cb;\n}\n\nexport function getServer(_port: number): Server | undefined {\n return undefined;\n}\n\nexport const METHODS = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"HEAD\",\n \"OPTIONS\",\n];\nexport const STATUS_CODES: Record<number, string> = {\n 200: \"OK\",\n 201: \"Created\",\n 204: \"No Content\",\n 301: \"Moved Permanently\",\n 302: \"Found\",\n 304: \"Not Modified\",\n 400: \"Bad Request\",\n 401: \"Unauthorized\",\n 403: \"Forbidden\",\n 404: \"Not Found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\",\n 502: \"Bad Gateway\",\n 503: \"Service Unavailable\",\n};\n\nexport class IncomingMessage extends Readable {\n method: string;\n url: string;\n headers: Record<string, string | string[] | undefined>;\n httpVersion = \"1.1\";\n statusCode?: number;\n statusMessage?: string;\n socket = { remoteAddress: \"127.0.0.1\", remotePort: 0, destroy() {} };\n complete = true;\n aborted = false;\n connection = { remoteAddress: \"127.0.0.1\" };\n\n rawHeaders: string[] = [];\n trailers: Record<string, string> = {};\n rawTrailers: string[] = [];\n\n constructor(opts?: {\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n }) {\n super();\n this.method = opts?.method || \"GET\";\n this.url = opts?.url || \"/\";\n this.headers = opts?.headers || {};\n // Build rawHeaders from headers\n if (opts?.headers) {\n for (const [key, value] of Object.entries(opts.headers)) {\n this.rawHeaders.push(key, value);\n }\n }\n }\n\n setTimeout(_ms: number, _cb?: () => void): this {\n if (_cb) setTimeout(_cb, 0);\n return this;\n }\n}\n\nexport class ServerResponse extends Writable {\n statusCode = 200;\n statusMessage = \"\";\n headersSent = false;\n finished = false;\n private _headers: Record<string, string | string[]> = {};\n private _body: Uint8Array[] = [];\n\n setHeader(name: string, value: string | string[]): this {\n this._headers[name.toLowerCase()] = value;\n return this;\n }\n getHeader(name: string): string | string[] | undefined {\n return this._headers[name.toLowerCase()];\n }\n removeHeader(name: string): void {\n delete this._headers[name.toLowerCase()];\n }\n getHeaders(): Record<string, string | string[]> {\n return { ...this._headers };\n }\n hasHeader(name: string): boolean {\n return name.toLowerCase() in this._headers;\n }\n writeHead(\n statusCode: number,\n statusMessage?: string | Record<string, string | string[]>,\n headers?: Record<string, string | string[]>,\n ): this {\n this.statusCode = statusCode;\n if (typeof statusMessage === \"string\") this.statusMessage = statusMessage;\n const hdrs = typeof statusMessage === \"object\" ? statusMessage : headers;\n if (hdrs) Object.entries(hdrs).forEach(([k, v]) => this.setHeader(k, v));\n this.headersSent = true;\n return this;\n }\n\n _write(chunk: unknown, _encoding: string, callback: () => void): void {\n if (typeof chunk === \"string\")\n this._body.push(new TextEncoder().encode(chunk));\n else if (chunk instanceof Uint8Array) this._body.push(chunk);\n callback();\n }\n\n end(\n chunkOrCb?: unknown,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n this.finished = true;\n return super.end(chunkOrCb, encodingOrCb as string, cb) as this;\n }\n\n getBody(): Uint8Array {\n const total = this._body.reduce((s, b) => s + b.length, 0);\n const combined = new Uint8Array(total);\n let offset = 0;\n for (const chunk of this._body) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n return combined;\n }\n\n getBodyString(): string {\n return new TextDecoder().decode(this.getBody());\n }\n\n addTrailers(headers: Record<string, string>): void {\n for (const [key, value] of Object.entries(headers)) {\n this.setHeader(key, value);\n }\n }\n\n flushHeaders(): void {\n this.headersSent = true;\n }\n\n cork(): void {\n /* no-op in browser */\n }\n uncork(): void {\n /* no-op in browser */\n }\n}\n\ntype RequestHandler = (req: IncomingMessage, res: ServerResponse) => void;\n\nexport class Server extends EventEmitter {\n private handler: RequestHandler | null = null;\n private _port = 0;\n listening = false;\n keepAliveTimeout = 5000;\n headersTimeout = 60000;\n requestTimeout = 300000;\n timeout = 0;\n\n constructor(handler?: RequestHandler) {\n super();\n if (handler) this.handler = handler;\n }\n\n setTimeout(ms?: number, _cb?: () => void): this {\n this.timeout = ms ?? 0;\n return this;\n }\n\n listen(\n portOrOpts?: number | Record<string, unknown>,\n hostOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n if (typeof portOrOpts === \"object\" && portOrOpts !== null) {\n this._port = (portOrOpts.port as number) || 3000;\n const callback =\n typeof portOrOpts.cb === \"function\"\n ? (portOrOpts.cb as () => void)\n : undefined;\n if (callback) setTimeout(callback, 0);\n } else {\n this._port = portOrOpts || 3000;\n const callback = typeof hostOrCb === \"function\" ? hostOrCb : cb;\n if (callback) setTimeout(callback, 0);\n }\n this.listening = true;\n this.emit(\"listening\");\n if (_onServerListen) _onServerListen(this._port, this);\n return this;\n }\n\n close(cb?: () => void): this {\n const port = this._port;\n this.listening = false;\n if (cb) setTimeout(cb, 0);\n this.emit(\"close\");\n if (_onServerClose) _onServerClose(port);\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n return this.listening\n ? { port: this._port, family: \"IPv4\", address: \"0.0.0.0\" }\n : null;\n }\n\n async handleRequest(\n methodOrReq: string | IncomingMessage,\n urlOrRes?: string | ServerResponse,\n headers?: Record<string, string>,\n body?: BufferImpl | string,\n ): Promise<{\n statusCode: number;\n statusMessage: string;\n headers: Record<string, string>;\n body: BufferImpl;\n }> {\n const handler =\n this.handler || (this.listeners(\"request\")[0] as RequestHandler);\n if (!handler) {\n return {\n statusCode: 503,\n statusMessage: \"No Handler\",\n headers: {},\n body: BufferImpl.from(\"\"),\n };\n }\n\n if (\n methodOrReq instanceof IncomingMessage &&\n urlOrRes instanceof ServerResponse\n ) {\n handler(methodOrReq, urlOrRes);\n return {\n statusCode: urlOrRes.statusCode,\n statusMessage: urlOrRes.statusMessage || \"OK\",\n headers: Object.fromEntries(\n Object.entries(urlOrRes.getHeaders()).map(([k, v]) => [\n k,\n Array.isArray(v) ? v.join(\", \") : String(v),\n ]),\n ),\n body: BufferImpl.from(urlOrRes.getBody()),\n };\n }\n\n const req = new IncomingMessage({\n method: methodOrReq as string,\n url: urlOrRes as string,\n headers: headers || {},\n });\n if (body) {\n const data =\n typeof body === \"string\" ? new TextEncoder().encode(body) : body;\n req.push(BufferImpl.from(data));\n req.push(null);\n } else {\n req.push(null);\n }\n\n const res = new ServerResponse();\n await new Promise<void>(resolve => {\n res.on(\"finish\", resolve);\n handler(req, res);\n if (res.finished) resolve();\n });\n\n return {\n statusCode: res.statusCode,\n statusMessage: res.statusMessage || \"OK\",\n headers: Object.fromEntries(\n Object.entries(res.getHeaders()).map(([k, v]) => [\n k,\n Array.isArray(v) ? v.join(\", \") : String(v),\n ]),\n ),\n body: BufferImpl.from(res.getBody()),\n };\n }\n}\n\nexport function createServer(handler?: RequestHandler): Server {\n return new Server(handler);\n}\n\nexport class ClientRequest extends Writable {\n method: string;\n path: string;\n private _headers: Record<string, string> = {};\n private _body: Uint8Array[] = [];\n private _url: string;\n\n constructor(\n options:\n | string\n | {\n hostname?: string;\n host?: string;\n port?: number;\n path?: string;\n method?: string;\n headers?: Record<string, string>;\n protocol?: string;\n },\n ) {\n super();\n const opts = typeof options === \"string\" ? new URL(options) : options;\n const hostname =\n (\"hostname\" in opts ? opts.hostname : \"\") ||\n (\"host\" in opts ? opts.host : \"\") ||\n \"localhost\";\n const port = (\"port\" in opts ? opts.port : undefined) || \"\";\n const protocol = (\"protocol\" in opts ? opts.protocol : \"http:\") || \"http:\";\n this.path =\n (\"pathname\" in opts ? opts.pathname : \"\") ||\n (\"path\" in opts ? opts.path : \"\") ||\n \"/\";\n this.method = (\"method\" in opts ? opts.method : \"\") || \"GET\";\n if (\"headers\" in opts && opts.headers)\n this._headers = opts.headers as Record<string, string>;\n this._url = `${protocol}//${hostname}${port ? \":\" + port : \"\"}${this.path}`;\n }\n\n aborted = false;\n\n setHeader(name: string, value: string): void {\n this._headers[name] = value;\n }\n getHeader(name: string): string | undefined {\n return this._headers[name];\n }\n removeHeader(name: string): void {\n delete this._headers[name];\n }\n\n abort(): void {\n this.aborted = true;\n this.emit(\"abort\");\n }\n\n setTimeout(_ms: number, _cb?: () => void): this {\n if (_cb) setTimeout(_cb, 0);\n return this;\n }\n\n override destroy(error?: Error): this {\n this.aborted = true;\n if (error) this.emit(\"error\", error);\n this.emit(\"close\");\n return this;\n }\n\n _write(chunk: unknown, _encoding: string, callback: () => void): void {\n if (typeof chunk === \"string\")\n this._body.push(new TextEncoder().encode(chunk));\n else if (chunk instanceof Uint8Array) this._body.push(chunk);\n callback();\n }\n\n end(\n chunkOrCb?: unknown,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n if (typeof chunkOrCb === \"string\" || chunkOrCb instanceof Uint8Array) {\n this._write(chunkOrCb, \"utf8\", () => {});\n }\n const callback =\n typeof chunkOrCb === \"function\"\n ? chunkOrCb\n : typeof encodingOrCb === \"function\"\n ? encodingOrCb\n : cb;\n\n const body =\n this._body.length > 0 ? BufferImpl.concat(this._body) : undefined;\n fetch(this._url, {\n method: this.method,\n headers: this._headers,\n body: this.method !== \"GET\" && this.method !== \"HEAD\" ? body : undefined,\n })\n .then(async response => {\n const incoming = new IncomingMessage();\n incoming.statusCode = response.status;\n incoming.statusMessage = response.statusText;\n const hdrs: Record<string, string> = {};\n response.headers.forEach((v, k) => {\n hdrs[k] = v;\n });\n incoming.headers = hdrs;\n const data = new Uint8Array(await response.arrayBuffer());\n incoming.push(BufferImpl.from(data));\n incoming.push(null);\n this.emit(\"response\", incoming);\n })\n .catch(err => this.emit(\"error\", err));\n\n if (typeof callback === \"function\") setTimeout(callback, 0);\n return this;\n }\n}\n\nexport function request(\n options: unknown,\n cb?: (res: IncomingMessage) => void,\n): ClientRequest {\n const req = new ClientRequest(options as string);\n if (cb) req.on(\"response\", cb);\n return req;\n}\n\nexport function get(\n options: unknown,\n cb?: (res: IncomingMessage) => void,\n): ClientRequest {\n const req = request(options, cb);\n req.end();\n return req;\n}\n\nexport const Agent = class Agent {\n constructor(_opts?: unknown) {}\n};\nexport const globalAgent = new Agent();\n\nexport default {\n METHODS,\n STATUS_CODES,\n IncomingMessage,\n ServerResponse,\n Server,\n ClientRequest,\n createServer,\n request,\n get,\n Agent,\n globalAgent,\n setServerListenCallback,\n setServerCloseCallback,\n getServer,\n};\n\nexport const httpsModule = {\n createServer,\n request,\n get,\n Server,\n Agent,\n globalAgent,\n IncomingMessage,\n ServerResponse,\n ClientRequest,\n};\n","import { Duplex } from \"./stream\";\nimport { EventEmitter } from \"./events\";\n\nexport class Socket extends Duplex {\n remoteAddress = \"127.0.0.1\";\n remotePort = 0;\n localAddress = \"127.0.0.1\";\n localPort = 0;\n connecting = false;\n destroyed = false;\n timeout = 0;\n allowHalfOpen = false;\n\n connect(...args: unknown[]): this {\n console.warn(\n \"[jiki] net.Socket.connect() is a no-op in browser runtime. TCP connections are not supported.\",\n );\n const cb =\n typeof args[args.length - 1] === \"function\"\n ? (args[args.length - 1] as () => void)\n : undefined;\n if (cb) setTimeout(cb, 0);\n setTimeout(() => this.emit(\"connect\"), 0);\n return this;\n }\n\n destroy(error?: Error): this {\n this.destroyed = true;\n this.emit(\"close\", !!error);\n return this;\n }\n setTimeout(timeout: number, cb?: () => void): this {\n this.timeout = timeout;\n if (cb) this.once(\"timeout\", cb);\n return this;\n }\n setNoDelay(): this {\n return this;\n }\n setKeepAlive(): this {\n return this;\n }\n ref(): this {\n return this;\n }\n unref(): this {\n return this;\n }\n address(): { port: number; family: string; address: string } {\n return { port: this.localPort, family: \"IPv4\", address: this.localAddress };\n }\n}\n\nexport class Server extends EventEmitter {\n listening = false;\n listen(\n port?: number,\n hostOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n this.listening = true;\n const callback = typeof hostOrCb === \"function\" ? hostOrCb : cb;\n if (callback) setTimeout(callback, 0);\n this.emit(\"listening\");\n return this;\n }\n close(cb?: () => void): this {\n this.listening = false;\n if (cb) setTimeout(cb, 0);\n return this;\n }\n address(): { port: number; family: string; address: string } | null {\n return this.listening\n ? { port: 0, family: \"IPv4\", address: \"0.0.0.0\" }\n : null;\n }\n ref(): this {\n return this;\n }\n unref(): this {\n return this;\n }\n}\n\nexport function createServer(\n _options?: unknown,\n _connectionListener?: unknown,\n): Server {\n console.warn(\n \"[jiki] net.createServer() is a stub in browser runtime. TCP server is not supported.\",\n );\n return new Server();\n}\nexport function createConnection(_options: unknown, cb?: () => void): Socket {\n const s = new Socket();\n if (cb) s.connect({}, cb);\n return s;\n}\nexport function connect(_options: unknown, cb?: () => void): Socket {\n return createConnection(_options, cb);\n}\nexport function isIP(input: string): number {\n if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(input)) return 4;\n if (input.includes(\":\")) return 6;\n return 0;\n}\nexport function isIPv4(input: string): boolean {\n return isIP(input) === 4;\n}\nexport function isIPv6(input: string): boolean {\n return isIP(input) === 6;\n}\n\nexport default {\n Socket,\n Server,\n createServer,\n createConnection,\n connect,\n isIP,\n isIPv4,\n isIPv6,\n};\n","export const URL = globalThis.URL;\nexport const URLSearchParams = globalThis.URLSearchParams;\n\nexport function parse(\n urlString: string,\n parseQueryString = false,\n slashesDenoteHost = false,\n): Record<string, unknown> {\n try {\n const parsed = new globalThis.URL(urlString, \"http://localhost\");\n const result: Record<string, unknown> = {\n protocol: parsed.protocol,\n slashes: parsed.protocol ? true : null,\n auth: parsed.username\n ? parsed.password\n ? `${parsed.username}:${parsed.password}`\n : parsed.username\n : null,\n host: parsed.host,\n port: parsed.port || null,\n hostname: parsed.hostname,\n hash: parsed.hash || null,\n search: parsed.search || null,\n query: parseQueryString\n ? Object.fromEntries(parsed.searchParams)\n : parsed.search?.slice(1) || null,\n pathname: parsed.pathname,\n path: parsed.pathname + (parsed.search || \"\"),\n href: parsed.href,\n };\n return result;\n } catch {\n return {\n protocol: null,\n slashes: null,\n auth: null,\n host: null,\n port: null,\n hostname: null,\n hash: null,\n search: null,\n query: null,\n pathname: urlString,\n path: urlString,\n href: urlString,\n };\n }\n}\n\nexport function format(urlObj: Record<string, unknown>): string {\n if (typeof urlObj === \"string\") return urlObj;\n let result = \"\";\n if (urlObj.protocol) result += urlObj.protocol;\n if (urlObj.slashes) result += \"//\";\n if (urlObj.auth) result += urlObj.auth + \"@\";\n if (urlObj.hostname) result += urlObj.hostname;\n if (urlObj.port) result += \":\" + urlObj.port;\n if (urlObj.pathname) result += urlObj.pathname;\n if (urlObj.search) result += urlObj.search;\n if (urlObj.hash) result += urlObj.hash;\n return result;\n}\n\nexport function resolve(from: string, to: string): string {\n return new globalThis.URL(to, from).href;\n}\n\nexport function fileURLToPath(url: string | URL): string {\n const urlStr = typeof url === \"string\" ? url : url.href;\n if (!urlStr.startsWith(\"file://\")) throw new Error(\"Invalid file URL\");\n return decodeURIComponent(urlStr.replace(/^file:\\/\\//, \"\"));\n}\n\nexport function pathToFileURL(path: string): URL {\n return new globalThis.URL(\n \"file://\" + encodeURIComponent(path).replace(/%2F/g, \"/\"),\n );\n}\n\nexport function domainToASCII(domain: string): string {\n return domain;\n}\nexport function domainToUnicode(domain: string): string {\n return domain;\n}\n\nexport default {\n URL,\n URLSearchParams,\n parse,\n format,\n resolve,\n fileURLToPath,\n pathToFileURL,\n domainToASCII,\n domainToUnicode,\n};\n","export function stringify(\n obj: Record<string, unknown>,\n sep = \"&\",\n eq = \"=\",\n): string {\n if (!obj) return \"\";\n return Object.entries(obj)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => {\n if (Array.isArray(v))\n return v\n .map(\n item =>\n encodeURIComponent(k) + eq + encodeURIComponent(String(item)),\n )\n .join(sep);\n return encodeURIComponent(k) + eq + encodeURIComponent(String(v));\n })\n .join(sep);\n}\n\nexport function parse(\n str: string,\n sep = \"&\",\n eq = \"=\",\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n if (!str) return result;\n for (const part of str.split(sep)) {\n const idx = part.indexOf(eq);\n const key = decodeURIComponent(idx >= 0 ? part.slice(0, idx) : part);\n const value =\n idx >= 0 ? decodeURIComponent(part.slice(idx + eq.length)) : \"\";\n if (key in result) {\n const existing = result[key];\n if (Array.isArray(existing)) existing.push(value);\n else result[key] = [existing, value];\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function escape(str: string): string {\n return encodeURIComponent(str);\n}\nexport function unescape(str: string): string {\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\n}\nexport function encode(\n obj: Record<string, unknown>,\n sep?: string,\n eq?: string,\n): string {\n return stringify(obj, sep, eq);\n}\nexport function decode(\n str: string,\n sep?: string,\n eq?: string,\n): Record<string, string | string[]> {\n return parse(str, sep, eq);\n}\n\nexport default { stringify, parse, escape, unescape, encode, decode };\n","export function format(fmt: unknown, ...args: unknown[]): string {\n if (typeof fmt !== \"string\")\n return args.length\n ? [fmt, ...args].map(a => inspect(a)).join(\" \")\n : inspect(fmt);\n let i = 0;\n return fmt.replace(/%[sdjifoO%]/g, m => {\n if (m === \"%%\") return \"%\";\n if (i >= args.length) return m;\n const arg = args[i++];\n switch (m) {\n case \"%s\":\n return String(arg);\n case \"%d\":\n return String(Number(arg));\n case \"%i\":\n return String(Math.floor(Number(arg)));\n case \"%f\":\n return String(parseFloat(String(arg)));\n case \"%j\":\n try {\n return JSON.stringify(arg);\n } catch {\n return \"[Circular]\";\n }\n case \"%o\":\n case \"%O\":\n return inspect(arg);\n default:\n return m;\n }\n });\n}\n\nexport function inspect(\n obj: unknown,\n opts?: { depth?: number; colors?: boolean },\n): string {\n if (obj === null) return \"null\";\n if (obj === undefined) return \"undefined\";\n if (typeof obj === \"string\") return `'${obj}'`;\n if (\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n typeof obj === \"bigint\"\n )\n return String(obj);\n if (typeof obj === \"function\")\n return `[Function: ${obj.name || \"anonymous\"}]`;\n if (typeof obj === \"symbol\") return obj.toString();\n if (obj instanceof Date) return obj.toISOString();\n if (obj instanceof RegExp) return obj.toString();\n if (obj instanceof Error) return `${obj.name}: ${obj.message}`;\n if (Array.isArray(obj)) return `[ ${obj.map(v => inspect(v)).join(\", \")} ]`;\n if (obj instanceof Map)\n return `Map(${obj.size}) { ${[...obj.entries()]\n .map(([k, v]) => `${inspect(k)} => ${inspect(v)}`)\n .join(\", \")} }`;\n if (obj instanceof Set)\n return `Set(${obj.size}) { ${[...obj].map(v => inspect(v)).join(\", \")} }`;\n try {\n return JSON.stringify(obj, null, 2);\n } catch {\n return \"[Object]\";\n }\n}\ninspect.custom = Symbol.for(\"nodejs.util.inspect.custom\");\n\nexport function inherits(ctor: Function, superCtor: Function): void {\n Object.setPrototypeOf(ctor.prototype, superCtor.prototype);\n Object.setPrototypeOf(ctor, superCtor);\n}\n\nexport function deprecate<T extends Function>(fn: T, msg: string): T {\n let warned = false;\n return function (this: unknown, ...args: unknown[]) {\n if (!warned) {\n console.warn(\"DeprecationWarning:\", msg);\n warned = true;\n }\n return fn.apply(this, args);\n } as unknown as T;\n}\n\nexport function promisify<T extends Function>(\n fn: T,\n): (...args: unknown[]) => Promise<unknown> {\n return (...args: unknown[]) =>\n new Promise((resolve, reject) => {\n fn(...args, (err: Error | null, ...result: unknown[]) => {\n if (err) reject(err);\n else resolve(result.length <= 1 ? result[0] : result);\n });\n });\n}\n\nexport function callbackify(\n fn: (...args: unknown[]) => Promise<unknown>,\n): (...args: unknown[]) => void {\n return (...args: unknown[]) => {\n const cb = args.pop() as Function;\n fn(...args)\n .then(result => cb(null, result))\n .catch(err => cb(err));\n };\n}\n\nexport function debuglog(section: string): (...args: unknown[]) => void {\n const enabled =\n typeof process !== \"undefined\" &&\n process.env?.NODE_DEBUG?.includes(section);\n return enabled\n ? (...args) =>\n console.error(`${section.toUpperCase()} ${process?.pid || 0}:`, ...args)\n : () => {};\n}\n\nexport function isDeepStrictEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a === null || b === null) return false;\n if (typeof a !== \"object\") return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => isDeepStrictEqual(v, b[i]));\n }\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n return keysA.every(k =>\n isDeepStrictEqual(\n (a as Record<string, unknown>)[k],\n (b as Record<string, unknown>)[k],\n ),\n );\n}\n\nexport const types = {\n isDate: (v: unknown): v is Date => v instanceof Date,\n isRegExp: (v: unknown): v is RegExp => v instanceof RegExp,\n isPromise: (v: unknown): v is Promise<unknown> => v instanceof Promise,\n isMap: (v: unknown): v is Map<unknown, unknown> => v instanceof Map,\n isSet: (v: unknown): v is Set<unknown> => v instanceof Set,\n isTypedArray: (v: unknown): boolean =>\n ArrayBuffer.isView(v) && !(v instanceof DataView),\n isUint8Array: (v: unknown): v is Uint8Array => v instanceof Uint8Array,\n isArrayBuffer: (v: unknown): v is ArrayBuffer => v instanceof ArrayBuffer,\n isSharedArrayBuffer: (v: unknown): boolean =>\n typeof SharedArrayBuffer !== \"undefined\" && v instanceof SharedArrayBuffer,\n isProxy: (_v: unknown): boolean => false,\n isNativeError: (v: unknown): v is Error => v instanceof Error,\n isGeneratorFunction: (v: unknown): boolean =>\n typeof v === \"function\" && v.constructor?.name === \"GeneratorFunction\",\n isAsyncFunction: (v: unknown): boolean =>\n typeof v === \"function\" && v.constructor?.name === \"AsyncFunction\",\n};\n\nexport class TextEncoder extends globalThis.TextEncoder {}\nexport class TextDecoder extends globalThis.TextDecoder {}\n\nexport default {\n format,\n inspect,\n inherits,\n deprecate,\n promisify,\n callbackify,\n debuglog,\n isDeepStrictEqual,\n types,\n TextEncoder,\n TextDecoder,\n};\n","import { Readable, Writable } from \"./stream\";\n\nexport class ReadStream extends Readable {\n isTTY = true;\n isRaw = false;\n setRawMode(mode: boolean): this {\n this.isRaw = mode;\n return this;\n }\n}\n\nexport class WriteStream extends Writable {\n isTTY = true;\n columns = 80;\n rows = 24;\n getColorDepth(): number {\n return 8;\n }\n hasColors(count?: number): boolean {\n return (count || 1) <= 256;\n }\n getWindowSize(): [number, number] {\n return [this.columns, this.rows];\n }\n clearLine(_dir: number, _cb?: () => void): boolean {\n return true;\n }\n clearScreenDown(_cb?: () => void): boolean {\n return true;\n }\n cursorTo(_x: number, _y?: number, _cb?: () => void): boolean {\n return true;\n }\n moveCursor(_dx: number, _dy: number, _cb?: () => void): boolean {\n return true;\n }\n}\n\nexport function isatty(_fd: number): boolean {\n return false;\n}\n\nexport default { ReadStream, WriteStream, isatty };\n","export function hostname(): string {\n return \"localhost\";\n}\nexport function type(): string {\n return \"Linux\";\n}\nexport function platform(): string {\n return \"linux\";\n}\nexport function arch(): string {\n return \"x64\";\n}\nexport function release(): string {\n return \"5.15.0\";\n}\nexport function tmpdir(): string {\n return \"/tmp\";\n}\nexport function homedir(): string {\n return \"/\";\n}\nexport function userInfo(): {\n username: string;\n uid: number;\n gid: number;\n shell: string;\n homedir: string;\n} {\n return {\n username: \"user\",\n uid: 1000,\n gid: 1000,\n shell: \"/bin/sh\",\n homedir: \"/\",\n };\n}\nexport function cpus(): {\n model: string;\n speed: number;\n times: { user: number; nice: number; sys: number; idle: number; irq: number };\n}[] {\n const count =\n typeof navigator !== \"undefined\" ? navigator.hardwareConcurrency || 4 : 4;\n return Array.from({ length: count }, () => ({\n model: \"Browser CPU\",\n speed: 2400,\n times: { user: 0, nice: 0, sys: 0, idle: 0, irq: 0 },\n }));\n}\nexport function totalmem(): number {\n return 8 * 1024 * 1024 * 1024;\n}\nexport function freemem(): number {\n return 4 * 1024 * 1024 * 1024;\n}\nexport function uptime(): number {\n return performance.now() / 1000;\n}\nexport function loadavg(): [number, number, number] {\n return [0, 0, 0];\n}\nexport function networkInterfaces(): Record<string, unknown[]> {\n return {};\n}\nexport function endianness(): \"BE\" | \"LE\" {\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1 ? \"LE\" : \"BE\";\n}\nexport const EOL = \"\\n\";\nexport const constants = {\n signals: { SIGHUP: 1, SIGINT: 2, SIGQUIT: 3, SIGTERM: 15, SIGKILL: 9 },\n errno: {},\n priority: {\n PRIORITY_LOW: 19,\n PRIORITY_BELOW_NORMAL: 10,\n PRIORITY_NORMAL: 0,\n PRIORITY_ABOVE_NORMAL: -7,\n PRIORITY_HIGH: -14,\n PRIORITY_HIGHEST: -20,\n },\n};\nexport function version(): string {\n return \"v20.0.0\";\n}\nexport function machine(): string {\n return \"x86_64\";\n}\n\nexport default {\n hostname,\n type,\n platform,\n arch,\n release,\n tmpdir,\n homedir,\n userInfo,\n cpus,\n totalmem,\n freemem,\n uptime,\n loadavg,\n networkInterfaces,\n endianness,\n EOL,\n constants,\n version,\n machine,\n};\n","import { uint8ToHex } from \"../utils/binary-encoding\";\nimport { BufferImpl } from \"./stream\";\n\nexport function randomBytes(size: number): BufferImpl {\n const buf = new BufferImpl(size);\n crypto.getRandomValues(buf);\n return buf;\n}\n\nexport function randomUUID(): string {\n return crypto.randomUUID();\n}\nexport function randomInt(min: number, max?: number): number {\n if (max === undefined) {\n max = min;\n min = 0;\n }\n const range = max - min;\n if (range <= 0) return min;\n const arr = new Uint32Array(1);\n crypto.getRandomValues(arr);\n return min + (arr[0] % range);\n}\n\n// ---- Pure-JS SHA-256 (sync) ----\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nfunction sha256(data: Uint8Array): Uint8Array {\n let h0 = 0x6a09e667,\n h1 = 0xbb67ae85,\n h2 = 0x3c6ef372,\n h3 = 0xa54ff53a;\n let h4 = 0x510e527f,\n h5 = 0x9b05688c,\n h6 = 0x1f83d9ab,\n h7 = 0x5be0cd19;\n\n const bitLen = data.length * 8;\n const padLen = (data.length + 9 + 63) & ~63;\n const padded = new Uint8Array(padLen);\n padded.set(data);\n padded[data.length] = 0x80;\n const view = new DataView(padded.buffer);\n view.setUint32(padLen - 4, bitLen, false);\n if (bitLen > 0xffffffff)\n view.setUint32(padLen - 8, Math.floor(bitLen / 0x100000000), false);\n\n const w = new Uint32Array(64);\n for (let off = 0; off < padLen; off += 64) {\n for (let i = 0; i < 16; i++) w[i] = view.getUint32(off + i * 4, false);\n for (let i = 16; i < 64; i++) {\n const s0 =\n (((w[i - 15] >>> 7) | (w[i - 15] << 25)) ^\n ((w[i - 15] >>> 18) | (w[i - 15] << 14)) ^\n (w[i - 15] >>> 3)) >>>\n 0;\n const s1 =\n (((w[i - 2] >>> 17) | (w[i - 2] << 15)) ^\n ((w[i - 2] >>> 19) | (w[i - 2] << 13)) ^\n (w[i - 2] >>> 10)) >>>\n 0;\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n let a = h0,\n b = h1,\n c = h2,\n d = h3,\n e = h4,\n f = h5,\n g = h6,\n h = h7;\n for (let i = 0; i < 64; i++) {\n const S1 =\n (((e >>> 6) | (e << 26)) ^\n ((e >>> 11) | (e << 21)) ^\n ((e >>> 25) | (e << 7))) >>>\n 0;\n const ch = ((e & f) ^ (~e & g)) >>> 0;\n const temp1 = (h + S1 + ch + SHA256_K[i] + w[i]) >>> 0;\n const S0 =\n (((a >>> 2) | (a << 30)) ^\n ((a >>> 13) | (a << 19)) ^\n ((a >>> 22) | (a << 10))) >>>\n 0;\n const maj = ((a & b) ^ (a & c) ^ (b & c)) >>> 0;\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n h0 = (h0 + a) >>> 0;\n h1 = (h1 + b) >>> 0;\n h2 = (h2 + c) >>> 0;\n h3 = (h3 + d) >>> 0;\n h4 = (h4 + e) >>> 0;\n h5 = (h5 + f) >>> 0;\n h6 = (h6 + g) >>> 0;\n h7 = (h7 + h) >>> 0;\n }\n const out = new Uint8Array(32);\n const ov = new DataView(out.buffer);\n ov.setUint32(0, h0, false);\n ov.setUint32(4, h1, false);\n ov.setUint32(8, h2, false);\n ov.setUint32(12, h3, false);\n ov.setUint32(16, h4, false);\n ov.setUint32(20, h5, false);\n ov.setUint32(24, h6, false);\n ov.setUint32(28, h7, false);\n return out;\n}\n\n// ---- Pure-JS MD5 (sync) ----\nfunction md5(data: Uint8Array): Uint8Array {\n let a0 = 0x67452301,\n b0 = 0xefcdab89,\n c0 = 0x98badcfe,\n d0 = 0x10325476;\n const s = [\n 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5,\n 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11,\n 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10,\n 15, 21,\n ];\n const K = new Uint32Array(64);\n for (let i = 0; i < 64; i++)\n K[i] = Math.floor(2 ** 32 * Math.abs(Math.sin(i + 1))) >>> 0;\n\n const bitLen = data.length * 8;\n const padLen = (data.length + 9 + 63) & ~63;\n const padded = new Uint8Array(padLen);\n padded.set(data);\n padded[data.length] = 0x80;\n const pv = new DataView(padded.buffer);\n pv.setUint32(padLen - 8, bitLen >>> 0, true);\n pv.setUint32(padLen - 4, Math.floor(bitLen / 0x100000000), true);\n\n for (let off = 0; off < padLen; off += 64) {\n const M = new Uint32Array(16);\n for (let j = 0; j < 16; j++) M[j] = pv.getUint32(off + j * 4, true);\n let A = a0,\n B = b0,\n C = c0,\n D = d0;\n for (let i = 0; i < 64; i++) {\n let F: number, g: number;\n if (i < 16) {\n F = (B & C) | (~B & D);\n g = i;\n } else if (i < 32) {\n F = (D & B) | (~D & C);\n g = (5 * i + 1) % 16;\n } else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n } else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n }\n F = (F + A + K[i] + M[g]) >>> 0;\n A = D;\n D = C;\n C = B;\n B = (B + ((F << s[i]) | (F >>> (32 - s[i])))) >>> 0;\n }\n a0 = (a0 + A) >>> 0;\n b0 = (b0 + B) >>> 0;\n c0 = (c0 + C) >>> 0;\n d0 = (d0 + D) >>> 0;\n }\n const out = new Uint8Array(16);\n const ov = new DataView(out.buffer);\n ov.setUint32(0, a0, true);\n ov.setUint32(4, b0, true);\n ov.setUint32(8, c0, true);\n ov.setUint32(12, d0, true);\n return out;\n}\n\nfunction hashBytes(algorithm: string, data: Uint8Array): Uint8Array {\n const algo = algorithm.toLowerCase().replace(\"-\", \"\");\n if (algo === \"sha256\") return sha256(data);\n if (algo === \"md5\") return md5(data);\n // Fallback for unsupported algorithms: use sha256\n return sha256(data);\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes, b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++)\n binary += String.fromCharCode(bytes[i]);\n return btoa(binary);\n}\n\nclass HashImpl {\n private algorithm: string;\n private data: Uint8Array[] = [];\n constructor(algorithm: string) {\n this.algorithm = algorithm.toLowerCase().replace(\"-\", \"\");\n }\n update(data: string | Uint8Array, encoding?: string): this {\n this.data.push(\n typeof data === \"string\"\n ? encoding === \"hex\"\n ? BufferImpl.from(data, \"hex\")\n : new TextEncoder().encode(data)\n : data,\n );\n return this;\n }\n private _combine(): Uint8Array {\n const total = this.data.reduce((s, b) => s + b.length, 0);\n const combined = new Uint8Array(total);\n let offset = 0;\n for (const chunk of this.data) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n return combined;\n }\n async digestAsync(encoding?: string): Promise<string | Uint8Array> {\n const combined = this._combine();\n const algoMap: Record<string, string> = {\n sha256: \"SHA-256\",\n sha1: \"SHA-1\",\n sha384: \"SHA-384\",\n sha512: \"SHA-512\",\n };\n const wcAlgo = algoMap[this.algorithm];\n if (wcAlgo && typeof globalThis.crypto?.subtle?.digest === \"function\") {\n const buf = combined.buffer.slice(\n combined.byteOffset,\n combined.byteOffset + combined.byteLength,\n ) as ArrayBuffer;\n const result = new Uint8Array(await crypto.subtle.digest(wcAlgo, buf));\n if (encoding === \"hex\") return bytesToHex(result);\n if (encoding === \"base64\") return bytesToBase64(result);\n return BufferImpl.from(result);\n }\n return this.digest(encoding); // fallback to sync\n }\n digest(encoding?: string): string | Uint8Array {\n const combined = this._combine();\n const result = hashBytes(this.algorithm, combined);\n if (encoding === \"hex\") return bytesToHex(result);\n if (encoding === \"base64\") return bytesToBase64(result);\n return BufferImpl.from(result);\n }\n}\n\nclass HmacImpl {\n private algorithm: string;\n private key: Uint8Array;\n private chunks: Uint8Array[] = [];\n constructor(algorithm: string, key: string | Uint8Array) {\n this.algorithm = algorithm;\n this.key = typeof key === \"string\" ? new TextEncoder().encode(key) : key;\n }\n update(data: string | Uint8Array, _encoding?: string): this {\n this.chunks.push(\n typeof data === \"string\" ? new TextEncoder().encode(data) : data,\n );\n return this;\n }\n digest(encoding?: string): string | Uint8Array {\n let total = 0;\n for (const c of this.chunks) total += c.length;\n const combined = new Uint8Array(total);\n let offset = 0;\n for (const c of this.chunks) {\n combined.set(c, offset);\n offset += c.length;\n }\n\n if (this.algorithm === \"sha256\") {\n const result = hmacSha256(this.key, combined);\n if (encoding === \"hex\") return bytesToHex(result);\n if (encoding === \"base64\") return bytesToBase64(result);\n return BufferImpl.from(result);\n }\n // Fallback for unsupported algorithms: plain hash (best effort)\n const result = hashBytes(this.algorithm, combined);\n if (encoding === \"hex\") return bytesToHex(result);\n if (encoding === \"base64\") return bytesToBase64(result);\n return BufferImpl.from(result);\n }\n}\n\nexport function createHash(algorithm: string): HashImpl {\n return new HashImpl(algorithm);\n}\nexport function createHmac(\n algorithm: string,\n key: string | Uint8Array,\n): HmacImpl {\n return new HmacImpl(algorithm, key);\n}\n\nexport function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length)\n throw new RangeError(\"Input buffers must have the same byte length\");\n let result = 0;\n for (let i = 0; i < a.length; i++) result |= a[i] ^ b[i];\n return result === 0;\n}\n\nexport function getHashes(): string[] {\n return [\"sha1\", \"sha256\", \"sha384\", \"sha512\"];\n}\nexport function getCiphers(): string[] {\n return [\"aes-128-cbc\", \"aes-256-cbc\", \"aes-128-gcm\", \"aes-256-gcm\"];\n}\n\nfunction hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array {\n const blockSize = 64;\n let keyBlock = key;\n if (keyBlock.length > blockSize) keyBlock = sha256(keyBlock);\n const padded = new Uint8Array(blockSize);\n padded.set(keyBlock);\n\n const ipad = new Uint8Array(blockSize + data.length);\n for (let i = 0; i < blockSize; i++) ipad[i] = padded[i] ^ 0x36;\n ipad.set(data, blockSize);\n const inner = sha256(ipad);\n\n const opad = new Uint8Array(blockSize + 32);\n for (let i = 0; i < blockSize; i++) opad[i] = padded[i] ^ 0x5c;\n opad.set(inner, blockSize);\n return sha256(opad);\n}\n\nexport function createSign(_algorithm: string) {\n const chunks: Uint8Array[] = [];\n return {\n update(data: string | Uint8Array) {\n chunks.push(\n typeof data === \"string\" ? new TextEncoder().encode(data) : data,\n );\n return this;\n },\n sign(key: unknown, encoding?: string) {\n const keyBytes =\n typeof key === \"string\"\n ? new TextEncoder().encode(key)\n : key instanceof Uint8Array\n ? key\n : new TextEncoder().encode(String(key));\n const total = chunks.reduce((s, b) => s + b.length, 0);\n const combined = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n combined.set(c, off);\n off += c.length;\n }\n const sig = hmacSha256(keyBytes, combined);\n if (encoding === \"hex\") return bytesToHex(sig);\n if (encoding === \"base64\") return bytesToBase64(sig);\n return BufferImpl.from(sig);\n },\n };\n}\n\nexport function createVerify(_algorithm: string) {\n const chunks: Uint8Array[] = [];\n return {\n update(data: string | Uint8Array) {\n chunks.push(\n typeof data === \"string\" ? new TextEncoder().encode(data) : data,\n );\n return this;\n },\n verify(key: unknown, signature: unknown, encoding?: string) {\n const keyBytes =\n typeof key === \"string\"\n ? new TextEncoder().encode(key)\n : key instanceof Uint8Array\n ? key\n : new TextEncoder().encode(String(key));\n const total = chunks.reduce((s, b) => s + b.length, 0);\n const combined = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n combined.set(c, off);\n off += c.length;\n }\n const expected = hmacSha256(keyBytes, combined);\n const expectedStr =\n encoding === \"base64\" ? bytesToBase64(expected) : bytesToHex(expected);\n const sigStr =\n typeof signature === \"string\"\n ? signature\n : bytesToHex(signature as Uint8Array);\n return expectedStr === sigStr;\n },\n };\n}\n\nexport const webcrypto = crypto;\n\nexport default {\n randomBytes,\n randomUUID,\n randomInt,\n createHash,\n createHmac,\n timingSafeEqual,\n getHashes,\n getCiphers,\n createSign,\n createVerify,\n webcrypto,\n};\n","import pako from \"pako\";\nimport { BufferImpl, Transform } from \"./stream\";\n\nexport function gzipSync(data: string | Uint8Array): BufferImpl {\n const input =\n typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n return BufferImpl.from(pako.gzip(input));\n}\n\nexport function gunzipSync(data: Uint8Array): BufferImpl {\n return BufferImpl.from(pako.ungzip(data));\n}\n\nexport function deflateSync(data: string | Uint8Array): BufferImpl {\n const input =\n typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n return BufferImpl.from(pako.deflate(input));\n}\n\nexport function inflateSync(data: Uint8Array): BufferImpl {\n return BufferImpl.from(pako.inflate(data));\n}\n\nexport function deflateRawSync(data: string | Uint8Array): BufferImpl {\n const input =\n typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n return BufferImpl.from(pako.deflateRaw(input));\n}\n\nexport function inflateRawSync(data: Uint8Array): BufferImpl {\n return BufferImpl.from(pako.inflateRaw(data));\n}\n\nexport function gzip(\n data: string | Uint8Array,\n cb: (err: Error | null, result?: BufferImpl) => void,\n): void {\n try {\n cb(null, gzipSync(data));\n } catch (e) {\n cb(e as Error);\n }\n}\n\nexport function gunzip(\n data: Uint8Array,\n cb: (err: Error | null, result?: BufferImpl) => void,\n): void {\n try {\n cb(null, gunzipSync(data));\n } catch (e) {\n cb(e as Error);\n }\n}\n\nexport function deflate(\n data: string | Uint8Array,\n cb: (err: Error | null, result?: BufferImpl) => void,\n): void {\n try {\n cb(null, deflateSync(data));\n } catch (e) {\n cb(e as Error);\n }\n}\n\nexport function inflate(\n data: Uint8Array,\n cb: (err: Error | null, result?: BufferImpl) => void,\n): void {\n try {\n cb(null, inflateSync(data));\n } catch (e) {\n cb(e as Error);\n }\n}\n\nexport function unzipSync(data: Uint8Array): BufferImpl {\n try {\n return gunzipSync(data);\n } catch {\n return inflateSync(data);\n }\n}\n\nexport function unzip(\n data: Uint8Array,\n cb: (err: Error | null, result?: BufferImpl) => void,\n): void {\n try {\n cb(null, unzipSync(data));\n } catch (e) {\n cb(e as Error);\n }\n}\n\nclass ZlibTransform extends Transform {\n private processor: pako.Deflate | pako.Inflate;\n private _chunks: Uint8Array[] = [];\n\n constructor(processor: pako.Deflate | pako.Inflate) {\n super();\n this.processor = processor;\n // pako calls onData for each output chunk during push()\n (this.processor as any).onData = (chunk: Uint8Array) => {\n this._chunks.push(chunk);\n };\n }\n\n _transform(\n chunk: unknown,\n _encoding: string,\n callback: (err?: Error | null, data?: unknown) => void,\n ): void {\n try {\n const input =\n chunk instanceof Uint8Array\n ? chunk\n : new TextEncoder().encode(String(chunk));\n this._chunks = [];\n this.processor.push(input, false);\n // Emit any chunks produced by onData callback\n for (const c of this._chunks) {\n this.push(c);\n }\n callback();\n } catch (err) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n }\n\n _flush(callback: (err?: Error | null, data?: unknown) => void): void {\n try {\n this._chunks = [];\n this.processor.push(new Uint8Array(0), true); // finalize\n // Emit final chunks produced by onData callback\n for (const c of this._chunks) {\n this.push(c);\n }\n callback();\n } catch (err) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n }\n\n end(\n chunkOrCb?: unknown,\n encodingOrCb?: string | (() => void),\n cb?: () => void,\n ): this {\n if (this.writableEnded) return this;\n // Handle the case where first arg is a callback\n if (typeof chunkOrCb === \"function\") {\n cb = chunkOrCb as () => void;\n chunkOrCb = undefined;\n }\n this.writableEnded = true;\n // Write any final chunk\n if (chunkOrCb != null) {\n this.write(chunkOrCb as string | Uint8Array, encodingOrCb as string);\n }\n // Call _flush to finalize compression/decompression\n this._flush(err => {\n if (err) {\n this.emit(\"error\", err);\n }\n // Signal end of readable stream\n this.push(null);\n this.writableFinished = true;\n this.emit(\"finish\");\n this.emit(\"close\");\n if (cb) cb();\n if (typeof encodingOrCb === \"function\") encodingOrCb();\n });\n return this;\n }\n}\n\nexport function createGzip() {\n return new ZlibTransform(new pako.Deflate({ gzip: true }));\n}\nexport function createGunzip() {\n return new ZlibTransform(new pako.Inflate());\n}\nexport function createDeflate() {\n return new ZlibTransform(new pako.Deflate());\n}\nexport function createInflate() {\n return new ZlibTransform(new pako.Inflate());\n}\n\nexport function brotliCompressSync(data: string | Uint8Array): BufferImpl {\n const input =\n typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n // Use pako deflate as brotli substitute (actual brotli needs wasm/native)\n const compressed = pako.deflate(input);\n return BufferImpl.from(compressed);\n}\nexport function brotliDecompressSync(data: Uint8Array): BufferImpl {\n const decompressed = pako.inflate(data);\n return BufferImpl.from(decompressed);\n}\n\nexport const constants = {\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DEFAULT_COMPRESSION: -1,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_NO_COMPRESSION: 0,\n BROTLI_OPERATION_PROCESS: 0,\n BROTLI_OPERATION_FLUSH: 1,\n BROTLI_OPERATION_FINISH: 2,\n};\n\nexport default {\n gzip,\n gzipSync,\n gunzip,\n gunzipSync,\n deflate,\n deflateSync,\n inflate,\n inflateSync,\n deflateRawSync,\n inflateRawSync,\n unzip,\n unzipSync,\n brotliCompressSync,\n brotliDecompressSync,\n createGzip,\n createGunzip,\n createDeflate,\n createInflate,\n constants,\n};\n","import { isDeepStrictEqual } from \"./util\";\n\nclass AssertionError extends Error {\n actual: unknown;\n expected: unknown;\n operator: string;\n constructor(\n message: string,\n actual?: unknown,\n expected?: unknown,\n operator?: string,\n ) {\n super(message);\n this.name = \"AssertionError\";\n this.actual = actual;\n this.expected = expected;\n this.operator = operator || \"\";\n }\n}\n\nfunction assert(value: unknown, message?: string): asserts value {\n if (!value)\n throw new AssertionError(\n message || `Expected truthy value, got ${value}`,\n value,\n true,\n \"==\",\n );\n}\n\nassert.ok = assert;\nassert.equal = (actual: unknown, expected: unknown, message?: string) => {\n if (actual != expected)\n throw new AssertionError(\n message || `${actual} != ${expected}`,\n actual,\n expected,\n \"==\",\n );\n};\nassert.notEqual = (actual: unknown, expected: unknown, message?: string) => {\n if (actual == expected)\n throw new AssertionError(\n message || `${actual} == ${expected}`,\n actual,\n expected,\n \"!=\",\n );\n};\nassert.strictEqual = (actual: unknown, expected: unknown, message?: string) => {\n if (actual !== expected)\n throw new AssertionError(\n message || `${actual} !== ${expected}`,\n actual,\n expected,\n \"===\",\n );\n};\nassert.notStrictEqual = (\n actual: unknown,\n expected: unknown,\n message?: string,\n) => {\n if (actual === expected)\n throw new AssertionError(\n message || `${actual} === ${expected}`,\n actual,\n expected,\n \"!==\",\n );\n};\nassert.deepEqual = (actual: unknown, expected: unknown, message?: string) => {\n if (!isDeepStrictEqual(actual, expected))\n throw new AssertionError(\n message || \"Values not deep equal\",\n actual,\n expected,\n \"deepEqual\",\n );\n};\nassert.deepStrictEqual = assert.deepEqual;\nassert.notDeepEqual = (\n actual: unknown,\n expected: unknown,\n message?: string,\n) => {\n if (isDeepStrictEqual(actual, expected))\n throw new AssertionError(\n message || \"Values are deep equal\",\n actual,\n expected,\n \"notDeepEqual\",\n );\n};\nassert.notDeepStrictEqual = assert.notDeepEqual;\nassert.throws = (\n fn: () => void,\n errorOrMessage?: unknown,\n message?: string,\n) => {\n let threw = false;\n try {\n fn();\n } catch {\n threw = true;\n }\n if (!threw)\n throw new AssertionError(\n typeof errorOrMessage === \"string\"\n ? errorOrMessage\n : message || \"Expected function to throw\",\n );\n};\nassert.doesNotThrow = (fn: () => void, message?: string) => {\n try {\n fn();\n } catch (e) {\n throw new AssertionError(message || `Function threw: ${e}`);\n }\n};\nassert.rejects = async (\n fn: (() => Promise<unknown>) | Promise<unknown>,\n message?: string,\n) => {\n try {\n await (typeof fn === \"function\" ? fn() : fn);\n } catch {\n return;\n }\n throw new AssertionError(\n typeof message === \"string\" ? message : \"Expected promise to reject\",\n );\n};\nassert.doesNotReject = async (\n fn: (() => Promise<unknown>) | Promise<unknown>,\n message?: string,\n) => {\n try {\n await (typeof fn === \"function\" ? fn() : fn);\n } catch (e) {\n throw new AssertionError(\n typeof message === \"string\" ? message : `Promise rejected: ${e}`,\n );\n }\n};\nassert.ifError = (value: unknown) => {\n if (value) throw value;\n};\nassert.fail = (message?: string) => {\n throw new AssertionError(message || \"Failed\");\n};\nassert.match = (string: string, regexp: RegExp, message?: string) => {\n if (!regexp.test(string))\n throw new AssertionError(message || `${string} does not match ${regexp}`);\n};\nassert.doesNotMatch = (string: string, regexp: RegExp, message?: string) => {\n if (regexp.test(string))\n throw new AssertionError(message || `${string} matches ${regexp}`);\n};\nassert.AssertionError = AssertionError;\nassert.strict = assert;\n\nexport { AssertionError };\nexport default assert;\n","import { EventEmitter } from \"./events\";\n\nexport class Interface extends EventEmitter {\n private _input: unknown;\n private _output: unknown;\n terminal: boolean;\n\n constructor(options?: {\n input?: unknown;\n output?: unknown;\n terminal?: boolean;\n }) {\n super();\n this._input = options?.input;\n this._output = options?.output;\n this.terminal = options?.terminal ?? false;\n }\n\n question(query: string, cb: (answer: string) => void): void {\n if (this._output && typeof (this._output as any).write === \"function\") {\n (this._output as any).write(query);\n }\n cb(\"\");\n }\n\n close(): void {\n this.emit(\"close\");\n }\n pause(): this {\n return this;\n }\n resume(): this {\n return this;\n }\n prompt(_preserveCursor?: boolean): void {}\n setPrompt(_prompt: string): void {}\n write(_data: string): void {}\n}\n\nexport function createInterface(options?: unknown): Interface {\n return new Interface(\n options as { input?: unknown; output?: unknown; terminal?: boolean },\n );\n}\n\nexport function clearLine(\n _stream: unknown,\n _dir: number,\n _cb?: () => void,\n): boolean {\n return true;\n}\nexport function clearScreenDown(_stream: unknown, _cb?: () => void): boolean {\n return true;\n}\nexport function cursorTo(\n _stream: unknown,\n _x: number,\n _y?: number,\n _cb?: () => void,\n): boolean {\n return true;\n}\nexport function moveCursor(\n _stream: unknown,\n _dx: number,\n _dy: number,\n _cb?: () => void,\n): boolean {\n return true;\n}\n\nexport default {\n Interface,\n createInterface,\n clearLine,\n clearScreenDown,\n cursorTo,\n moveCursor,\n};\n","export function getHeapStatistics(): Record<string, number> {\n return {\n total_heap_size: 30 * 1024 * 1024,\n used_heap_size: 20 * 1024 * 1024,\n heap_size_limit: 512 * 1024 * 1024,\n total_physical_size: 30 * 1024 * 1024,\n total_available_size: 400 * 1024 * 1024,\n malloced_memory: 0,\n peak_malloced_memory: 0,\n does_zap_garbage: 0,\n number_of_native_contexts: 1,\n number_of_detached_contexts: 0,\n total_global_handles_size: 0,\n used_global_handles_size: 0,\n external_memory: 0,\n };\n}\nexport function getHeapSpaceStatistics(): Record<string, unknown>[] {\n return [];\n}\nexport function getHeapSnapshot(): unknown {\n return {\n toString() {\n return \"{}\";\n },\n };\n}\nexport function writeHeapSnapshot(_filename?: string): string {\n return \"\";\n}\nexport function setFlagsFromString(_flags: string): void {}\nexport function serialize(value: unknown): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(value));\n}\nexport function deserialize(buffer: Uint8Array): unknown {\n return JSON.parse(new TextDecoder().decode(buffer));\n}\nexport const DefaultSerializer = class {\n writeHeader() {}\n writeValue(_v: unknown) {}\n releaseBuffer() {\n return new Uint8Array(0);\n }\n};\nexport const DefaultDeserializer = class {\n constructor(_buf: Uint8Array) {}\n readHeader() {}\n readValue() {\n return null;\n }\n};\nexport default {\n getHeapStatistics,\n getHeapSpaceStatistics,\n getHeapSnapshot,\n writeHeapSnapshot,\n setFlagsFromString,\n serialize,\n deserialize,\n DefaultSerializer,\n DefaultDeserializer,\n};\n","/**\n * Browser polyfill for Node.js `vm` module.\n *\n * **IMPORTANT: Security Limitation**\n *\n * This is NOT a true sandbox. In Node.js, `vm` creates a V8 context with its own\n * global object, providing isolation from the host environment. In the browser,\n * this polyfill uses `new Function()` which executes code in the same JavaScript\n * realm as the host page.\n *\n * Implications:\n * - Code executed via `runInContext()` / `runInNewContext()` can access and modify\n * global browser objects (window, document, etc.) through prototype chain traversal.\n * - There is NO memory isolation — the executed code shares the same heap.\n * - `createContext()` simply returns the sandbox object without creating an isolated context.\n * - The `Script` class wraps code in `new Function()`, not a separate V8 context.\n *\n * This polyfill is suitable for:\n * - Module evaluation (CommonJS require simulation)\n * - Template rendering that expects vm-like API\n * - Code that uses vm for convenience, not security\n *\n * This polyfill is NOT suitable for:\n * - Untrusted code execution\n * - Security sandboxing\n * - Scenarios requiring true memory/scope isolation\n *\n * @module vm\n */\n\n/**\n * Create a \"context\" from a sandbox object.\n * In the browser, this simply returns the sandbox as-is since we cannot\n * create a true V8 context. The returned object is used as the scope\n * for `runInContext()`.\n */\nexport function createContext(\n sandbox?: Record<string, unknown>,\n): Record<string, unknown> {\n return sandbox || {};\n}\n\n/**\n * Execute code in the given context.\n * Uses `new Function()` — does NOT provide true V8 context isolation.\n * @see Module-level JSDoc for security limitations.\n */\nexport function runInContext(\n code: string,\n context: Record<string, unknown>,\n): unknown {\n const keys = Object.keys(context);\n const values = keys.map(k => context[k]);\n const fn = new Function(...keys, `return (${code})`);\n return fn(...values);\n}\n\n/**\n * Execute code in a new context created from the sandbox.\n * Equivalent to `runInContext(code, createContext(sandbox))`.\n * @see Module-level JSDoc for security limitations.\n */\nexport function runInNewContext(\n code: string,\n sandbox?: Record<string, unknown>,\n): unknown {\n return runInContext(code, sandbox || {});\n}\n\n/**\n * Execute code in the current global context via `new Function()`.\n * @see Module-level JSDoc for security limitations.\n */\nexport function runInThisContext(code: string): unknown {\n return new Function(`return (${code})`)();\n}\n\n/** Always returns true since we cannot distinguish real V8 contexts in the browser. */\nexport function isContext(_sandbox: unknown): boolean {\n return true;\n}\n\n/**\n * Wraps code in a `new Function()` call for deferred execution.\n * Does NOT create a V8 Script object — no compilation caching occurs.\n * @see Module-level JSDoc for security limitations.\n */\nexport class Script {\n private code: string;\n constructor(code: string, _options?: unknown) {\n this.code = code;\n }\n runInContext(context: Record<string, unknown>): unknown {\n return runInContext(this.code, context);\n }\n runInNewContext(sandbox?: Record<string, unknown>): unknown {\n return runInNewContext(this.code, sandbox);\n }\n runInThisContext(): unknown {\n return runInThisContext(this.code);\n }\n}\n\nexport default {\n createContext,\n runInContext,\n runInNewContext,\n runInThisContext,\n isContext,\n Script,\n};\n","export const performance = globalThis.performance;\n\nexport class PerformanceObserver {\n private callback: (list: unknown) => void;\n constructor(callback: (list: unknown) => void) {\n this.callback = callback;\n }\n observe(_options?: unknown): void {}\n disconnect(): void {}\n}\n\nexport function monitorEventLoopDelay(_options?: unknown): {\n enable(): void;\n disable(): void;\n min: number;\n max: number;\n mean: number;\n percentile(p: number): number;\n} {\n return {\n enable() {},\n disable() {},\n min: 0,\n max: 0,\n mean: 0,\n percentile: () => 0,\n };\n}\n\nexport default { performance, PerformanceObserver, monitorEventLoopDelay };\n","import { EventEmitter } from \"./events\";\n\nexport class WebSocketShim extends EventEmitter {\n readyState = 0;\n url: string;\n static CONNECTING = 0;\n static OPEN = 1;\n static CLOSING = 2;\n static CLOSED = 3;\n CONNECTING = 0;\n OPEN = 1;\n CLOSING = 2;\n CLOSED = 3;\n\n private _ws: WebSocket | null = null;\n\n constructor(url: string, _protocols?: string | string[], _options?: unknown) {\n super();\n this.url = url;\n try {\n this._ws = new WebSocket(url);\n this._ws.binaryType = \"arraybuffer\";\n this._ws.onopen = () => {\n this.readyState = 1;\n this.emit(\"open\");\n };\n this._ws.onmessage = e => this.emit(\"message\", e.data);\n this._ws.onerror = e => this.emit(\"error\", e);\n this._ws.onclose = e => {\n this.readyState = 3;\n this.emit(\"close\", e.code, e.reason);\n };\n } catch (err) {\n setTimeout(() => this.emit(\"error\", err), 0);\n }\n }\n\n send(data: unknown, _options?: unknown, cb?: (err?: Error) => void): void {\n try {\n this._ws?.send(data as string | ArrayBuffer);\n cb?.();\n } catch (err) {\n cb?.(err as Error);\n }\n }\n\n close(code?: number, reason?: string): void {\n this.readyState = 2;\n this._ws?.close(code, reason);\n }\n\n ping(_data?: unknown, _mask?: boolean, _cb?: () => void): void {}\n pong(_data?: unknown, _mask?: boolean, _cb?: () => void): void {}\n terminate(): void {\n this.close();\n }\n}\n\nexport class WebSocketServer extends EventEmitter {\n clients = new Set<WebSocketShim>();\n constructor(_options?: unknown) {\n super();\n }\n close(_cb?: () => void): void {\n this.emit(\"close\");\n }\n address(): { port: number; family: string; address: string } {\n return { port: 0, family: \"IPv4\", address: \"0.0.0.0\" };\n }\n}\n\nexport { WebSocketShim as WebSocket };\nexport default WebSocketShim;\n","/**\n * TypeScript/TSX/JSX transpiler and bundler powered by esbuild-wasm.\n * Provides lazy initialization with singleton pattern for the WASM runtime.\n */\n\nimport * as esbuild from \"esbuild-wasm\";\nimport type { MemFS } from \"./memfs\";\nimport * as pathShim from \"./polyfills/path\";\n\nlet initialized = false;\nlet initializing: Promise<void> | null = null;\n\nexport interface TranspileOptions {\n jsx?: \"transform\" | \"preserve\" | \"automatic\";\n jsxFactory?: string;\n jsxFragment?: string;\n jsxImportSource?: string;\n target?: string;\n sourcemap?: boolean;\n}\n\nexport interface BundleOptions {\n entryPoint: string;\n format?: \"esm\" | \"cjs\" | \"iife\";\n platform?: \"browser\" | \"node\" | \"neutral\";\n minify?: boolean;\n sourcemap?: boolean;\n target?: string;\n external?: string[];\n outfile?: string;\n loader?: Record<string, string>;\n define?: Record<string, string>;\n}\n\nexport interface BundleResult {\n code: string;\n map?: string;\n errors: esbuild.Message[];\n warnings: esbuild.Message[];\n}\n\nexport interface InitOptions {\n wasmURL?: string | URL;\n /** When true, esbuild runs transpilation in a Web Worker (browser only). */\n useWorker?: boolean;\n}\n\nlet customWasmURL: string | URL | undefined;\n\nexport function setWasmURL(url: string | URL): void {\n customWasmURL = url;\n}\n\nfunction resolveWasmURL(options?: InitOptions): string | URL | undefined {\n if (options?.wasmURL) return options.wasmURL;\n if (customWasmURL) return customWasmURL;\n\n const isBrowser =\n typeof window !== \"undefined\" || typeof importScripts === \"function\";\n if (!isBrowser) return undefined;\n\n return \"https://unpkg.com/esbuild-wasm@\" + esbuild.version + \"/esbuild.wasm\";\n}\n\nexport async function initTranspiler(options?: InitOptions): Promise<void> {\n if (initialized) return;\n if (initializing) return initializing;\n\n const initOpts: esbuild.InitializeOptions = {\n worker: options?.useWorker ?? false,\n };\n const wasmURL = resolveWasmURL(options);\n if (wasmURL) initOpts.wasmURL = wasmURL;\n\n initializing = esbuild.initialize(initOpts);\n await initializing;\n initialized = true;\n initializing = null;\n}\n\nexport function isInitialized(): boolean {\n return initialized;\n}\n\nfunction loaderFromFilename(filename: string): esbuild.Loader {\n if (filename.endsWith(\".tsx\")) return \"tsx\";\n if (filename.endsWith(\".ts\")) return \"ts\";\n if (filename.endsWith(\".jsx\")) return \"jsx\";\n return \"js\";\n}\n\nexport function needsTranspilation(filename: string): boolean {\n return (\n filename.endsWith(\".ts\") ||\n filename.endsWith(\".tsx\") ||\n filename.endsWith(\".jsx\")\n );\n}\n\nexport async function transpile(\n code: string,\n filename: string,\n options: TranspileOptions = {},\n): Promise<string> {\n await initTranspiler();\n\n const loader = loaderFromFilename(filename);\n const result = await esbuild.transform(code, {\n loader,\n format: \"esm\",\n target: options.target || \"esnext\",\n sourcemap: options.sourcemap ? \"inline\" : false,\n jsx: options.jsx || \"automatic\",\n jsxFactory: options.jsxFactory,\n jsxFragment: options.jsxFragment,\n jsxImportSource: options.jsxImportSource,\n });\n\n return result.code;\n}\n\nconst isBrowserEnv =\n typeof window !== \"undefined\" || typeof importScripts === \"function\";\n\nexport function hasSyncSupport(): boolean {\n return !isBrowserEnv;\n}\n\nexport function transpileSync(\n code: string,\n filename: string,\n options: TranspileOptions = {},\n): string {\n if (!initialized) {\n throw new Error(\n \"Transpiler not initialized. Call initTranspiler() first or use transpile() which auto-initializes.\",\n );\n }\n\n if (isBrowserEnv) {\n throw new Error(\n \"transpileSync is not available in the browser. Use transpile() (async) or prepareFile() to pre-transpile.\",\n );\n }\n\n const loader = loaderFromFilename(filename);\n const result = esbuild.transformSync(code, {\n loader,\n format: \"esm\",\n target: options.target || \"esnext\",\n sourcemap: options.sourcemap ? \"inline\" : false,\n jsx: options.jsx || \"automatic\",\n jsxFactory: options.jsxFactory,\n jsxFragment: options.jsxFragment,\n jsxImportSource: options.jsxImportSource,\n });\n\n return result.code;\n}\n\nfunction createMemFSPlugin(vfs: MemFS, cwd: string): esbuild.Plugin {\n return {\n name: \"memfs\",\n setup(build) {\n build.onResolve({ filter: /.*/ }, args => {\n if (args.kind === \"entry-point\") {\n const resolved = pathShim.isAbsolute(args.path)\n ? args.path\n : pathShim.resolve(cwd, args.path);\n return { path: resolved, namespace: \"memfs\" };\n }\n\n const resolveDir = args.resolveDir || cwd;\n\n if (args.path.startsWith(\".\") || args.path.startsWith(\"/\")) {\n const base = args.path.startsWith(\"/\")\n ? args.path\n : pathShim.resolve(resolveDir, args.path);\n\n for (const candidate of [\n base,\n `${base}.ts`,\n `${base}.tsx`,\n `${base}.js`,\n `${base}.jsx`,\n `${base}.json`,\n ]) {\n if (vfs.existsSync(candidate)) {\n try {\n if (vfs.statSync(candidate).isFile()) {\n return { path: candidate, namespace: \"memfs\" };\n }\n } catch {}\n }\n }\n\n for (const indexFile of [\n \"index.ts\",\n \"index.tsx\",\n \"index.js\",\n \"index.jsx\",\n \"index.json\",\n ]) {\n const indexPath = pathShim.join(base, indexFile);\n if (vfs.existsSync(indexPath)) {\n return { path: indexPath, namespace: \"memfs\" };\n }\n }\n }\n\n return { path: args.path, external: true };\n });\n\n build.onLoad({ filter: /.*/, namespace: \"memfs\" }, args => {\n try {\n const contents = vfs.readFileSync(args.path, \"utf8\");\n return { contents, loader: loaderFromFilename(args.path) };\n } catch (e) {\n return {\n errors: [\n {\n text: `File not found: ${args.path}`,\n } as esbuild.PartialMessage,\n ],\n };\n }\n });\n },\n };\n}\n\nexport async function bundle(\n vfs: MemFS,\n options: BundleOptions,\n): Promise<BundleResult> {\n await initTranspiler();\n\n const cwd = pathShim.dirname(\n pathShim.isAbsolute(options.entryPoint)\n ? options.entryPoint\n : pathShim.resolve(\"/\", options.entryPoint),\n );\n\n const result = await esbuild.build({\n entryPoints: [options.entryPoint],\n bundle: true,\n write: false,\n format: options.format || \"esm\",\n platform: options.platform || \"browser\",\n minify: options.minify || false,\n sourcemap: options.sourcemap ? \"inline\" : false,\n target: options.target || \"esnext\",\n external: options.external,\n define: options.define,\n plugins: [createMemFSPlugin(vfs, cwd)],\n });\n\n const code = result.outputFiles?.[0]?.text || \"\";\n\n if (options.outfile) {\n const outDir = pathShim.dirname(options.outfile);\n if (!vfs.existsSync(outDir)) {\n vfs.mkdirSync(outDir, { recursive: true });\n }\n vfs.writeFileSync(options.outfile, code);\n }\n\n return {\n code,\n errors: result.errors,\n warnings: result.warnings,\n };\n}\n\nexport async function stopTranspiler(): Promise<void> {\n if (initialized) {\n await esbuild.stop();\n initialized = false;\n }\n}\n\nexport { esbuild };\n","/**\n * Consolidated stubs for Node.js modules that cannot run in the browser.\n * Each export is a minimal shim that satisfies import resolution without real functionality.\n *\n * Each stub emits a one-time console.warn when first used, so developers are aware\n * that the module is not fully functional in the browser environment.\n */\n\nimport { EventEmitter } from \"./events\";\n\n/**\n * Tracks which stub module warnings have already been emitted.\n * Each warning is shown only once per session to avoid flooding the console.\n */\nexport const _warnedStubs = new Set<string>();\n\n/**\n * Emit a one-time warning that a stub module is being used.\n * @param moduleName - The name of the Node.js module being stubbed.\n */\nfunction warnStub(moduleName: string): void {\n if (_warnedStubs.has(moduleName)) return;\n _warnedStubs.add(moduleName);\n console.warn(\n `[jiki] \"${moduleName}\" is a stub module — it provides no real functionality in the browser runtime.`,\n );\n}\n\n// --- async_hooks ---\n\nexport const async_hooks = (() => {\n warnStub(\"async_hooks\");\n class AsyncLocalStorage<T = unknown> {\n #store: T | undefined;\n\n getStore(): T | undefined {\n return this.#store;\n }\n\n run<R>(\n store: T,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): R {\n const prev = this.#store;\n this.#store = store;\n try {\n return callback(...args);\n } finally {\n this.#store = prev;\n }\n }\n\n exit<R>(callback: (...args: unknown[]) => R, ...args: unknown[]): R {\n const prev = this.#store;\n this.#store = undefined;\n try {\n return callback(...args);\n } finally {\n this.#store = prev;\n }\n }\n\n enterWith(store: T): void {\n this.#store = store;\n }\n disable(): void {\n this.#store = undefined;\n }\n\n snapshot(): <R>(fn: (...args: unknown[]) => R, ...args: unknown[]) => R {\n const captured = this.#store;\n return <R>(fn: (...args: unknown[]) => R, ...args: unknown[]): R => {\n const prev = this.#store;\n this.#store = captured;\n try {\n return fn(...args);\n } finally {\n this.#store = prev;\n }\n };\n }\n\n static bind<F extends (...args: unknown[]) => unknown>(fn: F): F {\n return fn;\n }\n\n static snapshot(): <R>(\n fn: (...args: unknown[]) => R,\n ...args: unknown[]\n ) => R {\n return <R>(fn: (...args: unknown[]) => R, ...args: unknown[]): R =>\n fn(...args);\n }\n }\n\n class AsyncResource {\n type: string;\n constructor(type: string, _opts?: unknown) {\n this.type = type;\n }\n runInAsyncScope<R>(\n fn: (...args: unknown[]) => R,\n thisArg?: unknown,\n ...args: unknown[]\n ): R {\n return fn.apply(thisArg, args);\n }\n emitDestroy(): this {\n return this;\n }\n asyncId(): number {\n return 0;\n }\n triggerAsyncId(): number {\n return 0;\n }\n bind<F extends (...args: unknown[]) => unknown>(fn: F): F {\n return fn;\n }\n static bind<F extends (...args: unknown[]) => unknown>(\n fn: F,\n _type?: string,\n ): F {\n return fn;\n }\n }\n\n return {\n AsyncLocalStorage,\n AsyncResource,\n executionAsyncId: () => 0,\n triggerAsyncId: () => 0,\n executionAsyncResource: () => ({}),\n createHook: () => ({ enable() {}, disable() {} }),\n };\n})();\n\n// --- cluster ---\n\nexport const cluster = (() => {\n warnStub(\"cluster\");\n return {\n isWorker: false,\n isMaster: true,\n isPrimary: true,\n workers: {} as Record<string, unknown>,\n fork: () => new EventEmitter(),\n setupMaster() {},\n setupPrimary() {},\n disconnect() {},\n settings: {},\n SCHED_NONE: 1,\n SCHED_RR: 2,\n schedulingPolicy: 2,\n };\n})();\n\n// --- dgram ---\n\nexport const dgram = (() => {\n warnStub(\"dgram\");\n class Socket extends EventEmitter {\n bind() {\n return this;\n }\n send() {}\n close() {\n this.emit(\"close\");\n }\n address() {\n return { address: \"0.0.0.0\", family: \"IPv4\", port: 0 };\n }\n setBroadcast() {}\n setTTL() {}\n setMulticastTTL() {}\n addMembership() {}\n dropMembership() {}\n ref() {\n return this;\n }\n unref() {\n return this;\n }\n }\n return { Socket, createSocket: () => new Socket() };\n})();\n\n// --- diagnostics_channel ---\n\nexport const diagnostics_channel = (() => {\n warnStub(\"diagnostics_channel\");\n class Channel {\n name: string;\n constructor(name: string) {\n this.name = name;\n }\n get hasSubscribers() {\n return false;\n }\n subscribe() {}\n unsubscribe() {\n return false;\n }\n publish() {}\n }\n\n class TracingChannel {\n start: Channel;\n end: Channel;\n asyncStart: Channel;\n asyncEnd: Channel;\n error: Channel;\n constructor(name: string) {\n this.start = new Channel(`tracing:${name}:start`);\n this.end = new Channel(`tracing:${name}:end`);\n this.asyncStart = new Channel(`tracing:${name}:asyncStart`);\n this.asyncEnd = new Channel(`tracing:${name}:asyncEnd`);\n this.error = new Channel(`tracing:${name}:error`);\n }\n subscribe(_subscribers: Record<string, unknown>) {}\n unsubscribe(_subscribers: Record<string, unknown>) {}\n traceSync(\n fn: (...a: unknown[]) => unknown,\n _ctx?: object,\n thisArg?: unknown,\n ...args: unknown[]\n ) {\n return fn.apply(thisArg, args);\n }\n tracePromise(\n fn: (...a: unknown[]) => unknown,\n _ctx?: object,\n thisArg?: unknown,\n ...args: unknown[]\n ) {\n return fn.apply(thisArg, args);\n }\n traceCallback(\n fn: (...a: unknown[]) => unknown,\n _pos?: number,\n _ctx?: object,\n thisArg?: unknown,\n ...args: unknown[]\n ) {\n return fn.apply(thisArg, args);\n }\n }\n\n return {\n Channel,\n TracingChannel,\n channel: (n: string) => new Channel(n),\n tracingChannel: (n: string) => new TracingChannel(n),\n hasSubscribers: () => false,\n };\n})();\n\n// --- dns ---\n\nexport const dns = (() => {\n warnStub(\"dns\");\n return {\n lookup: (_h: string, optsOrCb: unknown, maybeCb?: unknown) => {\n const cb = typeof optsOrCb === \"function\" ? optsOrCb : maybeCb;\n const opts =\n typeof optsOrCb === \"object\" && optsOrCb !== null\n ? (optsOrCb as Record<string, unknown>)\n : {};\n if (typeof cb !== \"function\") return;\n if (opts.all) {\n cb(null, [{ address: \"127.0.0.1\", family: 4 }]);\n } else {\n cb(null, \"127.0.0.1\", 4);\n }\n },\n resolve: (_h: string, cb: (e: Error | null, a: string[]) => void) =>\n cb(null, [\"127.0.0.1\"]),\n resolve4: (_h: string, cb: (e: Error | null, a: string[]) => void) =>\n cb(null, [\"127.0.0.1\"]),\n resolve6: (_h: string, cb: (e: Error | null, a: string[]) => void) =>\n cb(null, [\"::1\"]),\n reverse: (_ip: string, cb: (e: Error | null, h: string[]) => void) =>\n cb(null, [\"localhost\"]),\n getServers: () => [\"8.8.8.8\"],\n setServers() {},\n NODATA: \"ENODATA\",\n FORMERR: \"EFORMERR\",\n SERVFAIL: \"ESERVFAIL\",\n NOTFOUND: \"ENOTFOUND\",\n promises: {\n lookup: async (_h: string, opts?: Record<string, unknown>) => {\n if (opts?.all) return [{ address: \"127.0.0.1\", family: 4 }];\n return { address: \"127.0.0.1\", family: 4 };\n },\n resolve: async () => [\"127.0.0.1\"],\n resolve4: async () => [\"127.0.0.1\"],\n resolve6: async () => [\"::1\"],\n },\n };\n})();\n\n// --- domain ---\n\nexport const domain = (() => {\n warnStub(\"domain\");\n class Domain extends EventEmitter {\n members: unknown[] = [];\n add() {}\n remove() {}\n bind(cb: Function) {\n return cb;\n }\n intercept(cb: Function) {\n return cb;\n }\n run(fn: Function) {\n fn();\n }\n dispose() {}\n enter() {}\n exit() {}\n }\n return { Domain, create: () => new Domain() };\n})();\n\n// --- esbuild (delegates to real esbuild-wasm) ---\n\nimport * as _esbuildWasm from \"esbuild-wasm\";\nimport { initTranspiler } from \"../transpiler\";\n\nexport const esbuild = {\n initialize: (opts?: Record<string, unknown>) => initTranspiler(),\n build: (...args: Parameters<typeof _esbuildWasm.build>) => {\n return _esbuildWasm.build(...args);\n },\n transform: (...args: Parameters<typeof _esbuildWasm.transform>) => {\n return _esbuildWasm.transform(...args);\n },\n buildSync: (...args: Parameters<typeof _esbuildWasm.buildSync>) => {\n return _esbuildWasm.buildSync(...args);\n },\n transformSync: (...args: Parameters<typeof _esbuildWasm.transformSync>) => {\n return _esbuildWasm.transformSync(...args);\n },\n formatMessages: (...args: Parameters<typeof _esbuildWasm.formatMessages>) => {\n return _esbuildWasm.formatMessages(...args);\n },\n analyzeMetafile: (\n ...args: Parameters<typeof _esbuildWasm.analyzeMetafile>\n ) => {\n return _esbuildWasm.analyzeMetafile(...args);\n },\n stop: () => _esbuildWasm.stop(),\n version: _esbuildWasm.version,\n};\n\n// --- fsevents ---\n\nexport const fsevents = (() => {\n warnStub(\"fsevents\");\n return {\n watch: () => ({ stop() {} }),\n getInfo: () => ({ event: \"\", path: \"\", type: \"\", changes: {} }),\n constants: {\n None: 0,\n MustScanSubDirs: 1,\n UserDropped: 2,\n KernelDropped: 4,\n EventIdsWrapped: 8,\n },\n };\n})();\n\n// --- http2 ---\n\nexport const http2 = (() => {\n warnStub(\"http2\");\n return {\n createServer: () => ({ listen() {}, close() {}, on() {} }),\n createSecureServer: () => ({ listen() {}, close() {}, on() {} }),\n connect: () => ({ on() {}, close() {} }),\n getDefaultSettings: () => ({}),\n getPackedSettings: () => new Uint8Array(0),\n getUnpackedSettings: () => ({}),\n constants: {\n NGHTTP2_SESSION_SERVER: 0,\n NGHTTP2_SESSION_CLIENT: 1,\n HTTP2_HEADER_STATUS: \":status\",\n HTTP2_HEADER_METHOD: \":method\",\n HTTP2_HEADER_PATH: \":path\",\n },\n sensitiveHeaders: Symbol(\"sensitiveHeaders\"),\n };\n})();\n\n// --- inspector ---\n\nexport const inspector = (() => {\n warnStub(\"inspector\");\n return {\n Session: class {\n connect() {}\n connectToMainThread() {}\n disconnect() {}\n post(_m: string, _p?: unknown, cb?: () => void) {\n if (cb) setTimeout(cb, 0);\n }\n on() {}\n },\n open() {},\n close() {},\n url: () => undefined as string | undefined,\n waitForDebugger() {},\n console: globalThis.console,\n };\n})();\n\n// --- rollup ---\n\nfunction rollupParseAst(code: string, _options?: Record<string, unknown>) {\n // Use acorn as the parser (ESTree-compatible like Rollup's native parser)\n try {\n const acorn = require(\"acorn\");\n if (acorn && acorn.parse) {\n return acorn.parse(code, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n allowReturnOutsideFunction: true,\n locations: true,\n });\n }\n } catch {}\n return { type: \"Program\", body: [], sourceType: \"module\" };\n}\n\nexport const rollup_stub = {\n async rollup() {\n return {\n async generate() {\n return { output: [] };\n },\n async write() {\n return { output: [] };\n },\n async close() {},\n };\n },\n watch: () => ({ on() {}, close() {} }),\n VERSION: \"4.0.0\",\n parseAst: rollupParseAst,\n parseAstAsync: async (code: string, opts?: Record<string, unknown>) =>\n rollupParseAst(code, opts),\n};\n\nexport const rollup_parseAst_stub = {\n parseAst: rollupParseAst,\n parseAstAsync: async (code: string, opts?: Record<string, unknown>) =>\n rollupParseAst(code, opts),\n};\n\nexport const rollup_native_stub = {\n parse: rollupParseAst,\n parseAsync: async (code: string, opts?: Record<string, unknown>) =>\n rollupParseAst(code, opts),\n};\n\n// --- tls ---\n\nexport const tls = (() => {\n warnStub(\"tls\");\n return {\n TLSSocket: class TLSSocket extends EventEmitter {\n authorized = true;\n encrypted = true;\n },\n connect: (_opts: unknown, cb?: () => void) => {\n const s = new EventEmitter();\n if (cb) setTimeout(cb, 0);\n return s;\n },\n createServer: () => ({ listen() {}, close() {}, on() {} }),\n createSecureContext: () => ({}),\n DEFAULT_MIN_VERSION: \"TLSv1.2\",\n DEFAULT_MAX_VERSION: \"TLSv1.3\",\n DEFAULT_ECDH_CURVE: \"auto\",\n rootCertificates: [] as string[],\n };\n})();\n\n// --- worker_threads ---\n\nexport const worker_threads = (() => {\n warnStub(\"worker_threads\");\n let nextThreadId = 1;\n\n class WTMessagePort extends EventEmitter {\n #peer: WTMessagePort | null = null;\n #started = false;\n\n postMessage(value: unknown) {\n if (this.#peer) {\n const target = this.#peer;\n setTimeout(() => target.emit(\"message\", value), 0);\n }\n }\n close() {\n this.#peer = null;\n this.emit(\"close\");\n }\n start() {\n this.#started = true;\n }\n ref() {\n return this;\n }\n unref() {\n return this;\n }\n\n static createPair(): [WTMessagePort, WTMessagePort] {\n const a = new WTMessagePort();\n const b = new WTMessagePort();\n a.#peer = b;\n b.#peer = a;\n return [a, b];\n }\n }\n\n class WTMessageChannel {\n port1: WTMessagePort;\n port2: WTMessagePort;\n constructor() {\n [this.port1, this.port2] = WTMessagePort.createPair();\n }\n }\n\n class Worker extends EventEmitter {\n threadId: number;\n #parentPort: WTMessagePort;\n #childPort: WTMessagePort;\n\n constructor(_filename: string, _opts?: Record<string, unknown>) {\n super();\n this.threadId = nextThreadId++;\n [this.#parentPort, this.#childPort] = WTMessagePort.createPair();\n\n this.#parentPort.on(\"message\", (msg: unknown) => {\n this.emit(\"message\", msg);\n });\n }\n\n postMessage(value: unknown) {\n this.#parentPort.postMessage(value);\n }\n\n terminate() {\n this.#parentPort.close();\n this.#childPort.close();\n this.emit(\"exit\", 0);\n return Promise.resolve(0);\n }\n\n ref() {\n return this;\n }\n unref() {\n return this;\n }\n\n getChildPort(): WTMessagePort {\n return this.#childPort;\n }\n }\n\n class BroadcastChannel extends EventEmitter {\n name: string;\n constructor(name: string) {\n super();\n this.name = name;\n }\n postMessage() {}\n close() {}\n }\n\n return {\n isMainThread: true,\n parentPort: null as WTMessagePort | null,\n workerData: null as unknown,\n threadId: 0,\n resourceLimits: {},\n Worker,\n MessageChannel: WTMessageChannel,\n MessagePort: WTMessagePort,\n BroadcastChannel,\n markAsUntransferable() {},\n moveMessagePortToContext: (p: unknown) => p,\n receiveMessageOnPort: () => undefined,\n };\n})();\n","/**\n * Enhanced worker_threads polyfill.\n *\n * Provides a more complete implementation of Node.js worker_threads API.\n * When Web Workers are available (browser), `new Worker()` spawns a real\n * Web Worker for parallel execution. When unavailable (tests), it falls\n * back to in-process emulation via EventEmitter pairs.\n *\n * Supported:\n * - `Worker` class with `postMessage`/`on('message')` communication\n * - `parentPort` for child-to-parent messaging\n * - `workerData` for initial data transfer\n * - `isMainThread` flag\n * - `threadId` counter\n * - `MessageChannel` / `MessagePort` pairs\n */\n\nimport { EventEmitter } from \"./events\";\n\nlet _threadIdCounter = 1;\n\n// ---------------------------------------------------------------------------\n// MessagePort / MessageChannel\n// ---------------------------------------------------------------------------\n\nexport class MessagePort extends EventEmitter {\n private _partner: MessagePort | null = null;\n private _started = false;\n private _closed = false;\n private _queue: unknown[] = [];\n\n postMessage(value: unknown): void {\n if (this._closed) return;\n if (this._partner) {\n if (this._partner._started) {\n // Deliver asynchronously like real MessagePort\n queueMicrotask(() => this._partner?.emit(\"message\", value));\n } else {\n this._partner._queue.push(value);\n }\n }\n }\n\n start(): void {\n this._started = true;\n // Flush queued messages\n for (const msg of this._queue) {\n queueMicrotask(() => this.emit(\"message\", msg));\n }\n this._queue.length = 0;\n }\n\n close(): void {\n this._closed = true;\n this.emit(\"close\");\n }\n\n ref(): this {\n return this;\n }\n unref(): this {\n return this;\n }\n\n /** @internal Connect two ports as partners. */\n static _pair(): [MessagePort, MessagePort] {\n const a = new MessagePort();\n const b = new MessagePort();\n a._partner = b;\n b._partner = a;\n return [a, b];\n }\n}\n\nexport class MessageChannel {\n port1: MessagePort;\n port2: MessagePort;\n\n constructor() {\n [this.port1, this.port2] = MessagePort._pair();\n this.port1.start();\n this.port2.start();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Worker\n// ---------------------------------------------------------------------------\n\nexport class Worker extends EventEmitter {\n readonly threadId: number;\n private _port: MessagePort;\n private _workerPort: MessagePort;\n\n constructor(\n _filename: string,\n options?: { workerData?: unknown; eval?: boolean },\n ) {\n super();\n this.threadId = _threadIdCounter++;\n\n // Create a MessageChannel pair for parent <-> worker communication\n [this._port, this._workerPort] = MessagePort._pair();\n this._port.start();\n this._workerPort.start();\n\n // Forward messages from the worker port to the Worker's 'message' event\n this._port.on(\"message\", (msg: unknown) => {\n this.emit(\"message\", msg);\n });\n\n // Expose parentPort-like API on the worker side\n const workerData = options?.workerData;\n const workerPort = this._workerPort;\n\n // In a real implementation, we'd execute the file in an isolated context.\n // For now, make the worker port and data available via the module-level exports.\n _lastWorkerPort = workerPort;\n _lastWorkerData = workerData;\n\n // Emit 'online' asynchronously\n queueMicrotask(() => this.emit(\"online\"));\n }\n\n postMessage(value: unknown): void {\n this._workerPort.emit(\"message\", value);\n }\n\n terminate(): Promise<number> {\n this._port.close();\n this._workerPort.close();\n this.emit(\"exit\", 0);\n return Promise.resolve(0);\n }\n\n ref(): this {\n return this;\n }\n unref(): this {\n return this;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Module-level exports (mimics Node.js worker_threads)\n// ---------------------------------------------------------------------------\n\n/** Whether the current context is the main thread. */\nexport const isMainThread = true;\n\n/** Thread ID of the current thread. */\nexport const threadId = 0;\n\n// These are set when a Worker is created, allowing test code to access them.\nlet _lastWorkerPort: MessagePort | null = null;\nlet _lastWorkerData: unknown = undefined;\n\n/** Parent port (only available inside a worker thread). */\nexport const parentPort: MessagePort | null = null;\n\n/** Data passed to the worker via `workerData` option. */\nexport const workerData: unknown = undefined;\n\n/**\n * Get the last created worker's port (for testing).\n * @internal\n */\nexport function _getLastWorkerPort(): MessagePort | null {\n return _lastWorkerPort;\n}\n\n/**\n * Get the last created worker's data (for testing).\n * @internal\n */\nexport function _getLastWorkerData(): unknown {\n return _lastWorkerData;\n}\n\n/** Default export matching Node.js worker_threads module shape. */\nexport default {\n Worker,\n isMainThread,\n parentPort,\n workerData,\n threadId,\n MessageChannel,\n MessagePort,\n};\n","// Core polyfills loaded eagerly (used by almost every container).\nimport * as _pathMod from \"./polyfills/path\";\nimport _eventsMod from \"./polyfills/events\";\nimport _streamMod, { bufferModule as _bufferMod } from \"./polyfills/stream\";\n\nexport { _bufferMod as bufferPolyfill };\n\n// Secondary polyfills — statically imported but only evaluated via the\n// registry factory on first require(). The `loaded` cache in resolveBuiltin\n// ensures each factory runs at most once. While the modules themselves are\n// loaded at bundle time, no per-module initialization runs until first use.\nimport * as _httpMod from \"./polyfills/http\";\nimport * as _netMod from \"./polyfills/net\";\nimport * as _urlMod from \"./polyfills/url\";\nimport * as _qsMod from \"./polyfills/querystring\";\nimport * as _utilMod from \"./polyfills/util\";\nimport * as _ttyMod from \"./polyfills/tty\";\nimport * as _osMod from \"./polyfills/os\";\nimport * as _cryptoMod from \"./polyfills/crypto\";\nimport * as _zlibMod from \"./polyfills/zlib\";\nimport * as _cpMod from \"./polyfills/child_process\";\nimport _assertMod from \"./polyfills/assert\";\nimport * as _readlineMod from \"./polyfills/readline\";\nimport * as _v8Mod from \"./polyfills/v8\";\nimport * as _vmMod from \"./polyfills/vm\";\nimport * as _moduleMod from \"./polyfills/module\";\nimport * as _perfHooksMod from \"./polyfills/perf_hooks\";\nimport * as _chokidarMod from \"./polyfills/chokidar\";\nimport * as _wsMod from \"./polyfills/ws\";\nimport * as _readdirpMod from \"./polyfills/readdirp\";\n\n// Stubs are imported but each stub is only constructed via its IIFE when\n// first accessed through the registry factory.\nimport * as _stubsMod from \"./polyfills/stubs\";\nimport _workerThreadsMod from \"./polyfills/worker-threads\";\n\nfunction cloneNamespace(ns: Record<string, unknown>): Record<string, unknown> {\n const copy: Record<string, unknown> = {};\n for (const k of Object.keys(ns)) copy[k] = ns[k];\n return copy;\n}\n\nclass StringDecoder {\n private enc: string;\n constructor(encoding?: string) {\n this.enc = encoding || \"utf8\";\n }\n write(buf: Uint8Array): string {\n return new TextDecoder(this.enc).decode(buf);\n }\n end(buf?: Uint8Array): string {\n return buf ? this.write(buf) : \"\";\n }\n}\n\nconst FS_CONSTANTS = {\n O_RDONLY: 0,\n O_WRONLY: 1,\n O_RDWR: 2,\n O_CREAT: 64,\n O_EXCL: 128,\n O_TRUNC: 512,\n O_APPEND: 1024,\n O_DIRECTORY: 65536,\n O_NOFOLLOW: 131072,\n O_SYNC: 1052672,\n F_OK: 0,\n R_OK: 4,\n W_OK: 2,\n X_OK: 1,\n S_IFMT: 61440,\n S_IFREG: 32768,\n S_IFDIR: 16384,\n S_IFLNK: 40960,\n S_IRWXU: 448,\n S_IRUSR: 256,\n S_IWUSR: 128,\n S_IXUSR: 64,\n UV_FS_COPYFILE_EXCL: 1,\n COPYFILE_EXCL: 1,\n UV_FS_COPYFILE_FICLONE: 2,\n} as const;\n\ntype Loader = () => unknown;\n\nconst registry: Record<string, Loader> = {\n path: () => _pathMod,\n events: () => _eventsMod,\n stream: () => _streamMod,\n buffer: () => _bufferMod,\n http: () => cloneNamespace(_httpMod as unknown as Record<string, unknown>),\n https: () => (_httpMod as any).httpsModule,\n net: () => _netMod,\n url: () => _urlMod,\n querystring: () => _qsMod,\n util: () => _utilMod,\n tty: () => _ttyMod,\n os: () => _osMod,\n crypto: () => _cryptoMod,\n zlib: () => _zlibMod,\n child_process: () => _cpMod,\n assert: () => _assertMod,\n readline: () => _readlineMod,\n v8: () => _v8Mod,\n vm: () => _vmMod,\n module: () => _moduleMod,\n perf_hooks: () => _perfHooksMod,\n chokidar: () => _chokidarMod,\n ws: () => _wsMod,\n readdirp: () => _readdirpMod,\n\n async_hooks: () => _stubsMod.async_hooks,\n cluster: () => _stubsMod.cluster,\n dgram: () => _stubsMod.dgram,\n diagnostics_channel: () => _stubsMod.diagnostics_channel,\n dns: () => _stubsMod.dns,\n domain: () => _stubsMod.domain,\n esbuild: () => _stubsMod.esbuild,\n fsevents: () => _stubsMod.fsevents,\n http2: () => _stubsMod.http2,\n inspector: () => _stubsMod.inspector,\n \"inspector/promises\": () => _stubsMod.inspector,\n rollup: () => _stubsMod.rollup_stub,\n tls: () => _stubsMod.tls,\n worker_threads: () => _workerThreadsMod,\n\n constants: () => FS_CONSTANTS,\n string_decoder: () => ({ StringDecoder }),\n timers: () => ({\n setTimeout: globalThis.setTimeout.bind(globalThis),\n setInterval: globalThis.setInterval.bind(globalThis),\n setImmediate: (fn: () => void) => setTimeout(fn, 0),\n clearTimeout: globalThis.clearTimeout.bind(globalThis),\n clearInterval: globalThis.clearInterval.bind(globalThis),\n clearImmediate: globalThis.clearTimeout.bind(globalThis),\n }),\n _http_common: () => ({}),\n _http_incoming: () => ({}),\n _http_outgoing: () => ({}),\n console: () => ({\n ...console,\n Console: class Console {\n log(...a: unknown[]) {\n console.log(...a);\n }\n error(...a: unknown[]) {\n console.error(...a);\n }\n warn(...a: unknown[]) {\n console.warn(...a);\n }\n info(...a: unknown[]) {\n console.info(...a);\n }\n },\n }),\n \"util/types\": () => _utilMod.types,\n \"path/posix\": () => _pathMod,\n \"path/win32\": () => _pathMod.win32,\n \"timers/promises\": () => ({\n setTimeout: (ms: number) => new Promise(r => setTimeout(r, ms)),\n setInterval: globalThis.setInterval,\n setImmediate: (v?: unknown) => new Promise(r => setTimeout(() => r(v), 0)),\n scheduler: { wait: (ms: number) => new Promise(r => setTimeout(r, ms)) },\n }),\n};\n\nconst loaded: Record<string, unknown> = {};\n\nexport function resolveBuiltin(name: string): unknown | undefined {\n if (loaded[name] !== undefined) return loaded[name];\n const loader = registry[name];\n if (!loader) return undefined;\n const result = loader();\n loaded[name] = result;\n return result;\n}\n\nexport function isBuiltinModule(name: string): boolean {\n return (\n name in registry ||\n name === \"fs\" ||\n name === \"fs/promises\" ||\n name === \"process\"\n );\n}\n\n/**\n * Register a custom polyfill for a built-in module name.\n * Replaces any existing polyfill for the same name.\n * The factory is called lazily on first `require()`.\n */\nexport function registerBuiltin(name: string, factory: () => unknown): void {\n registry[name] = factory;\n // Clear loaded cache so the new factory takes effect on next require().\n delete loaded[name];\n}\n\n/**\n * Register multiple custom polyfills at once.\n */\nexport function registerBuiltins(map: Record<string, () => unknown>): void {\n for (const [name, factory] of Object.entries(map)) {\n registerBuiltin(name, factory);\n }\n}\n\n/**\n * Unregister a custom polyfill, reverting to the default (if any was\n * overridden) or removing the module entirely.\n */\nexport function unregisterBuiltin(name: string): void {\n delete registry[name];\n delete loaded[name];\n}\n\n/** Return a list of all registered builtin module names. */\nexport function listBuiltins(): string[] {\n return Object.keys(registry);\n}\n\nexport const builtinModules = loaded;\n","/**\n * Centralized CDN version pins and URLs.\n * Change versions here to update them across the entire platform.\n */\n\nexport const REACT_VERSION = \"18.2.0\";\nexport const ESBUILD_WASM_VERSION = \"0.20.0\";\nexport const REACT_REFRESH_VERSION = \"0.14.0\";\n\nexport const REACT_CDN = `https://esm.sh/react@${REACT_VERSION}`;\nexport const REACT_DOM_CDN = `https://esm.sh/react-dom@${REACT_VERSION}`;\nexport const REACT_REFRESH_CDN = `https://esm.sh/react-refresh@${REACT_REFRESH_VERSION}/runtime`;\n\nexport const ESBUILD_WASM_ESM_CDN = `https://esm.sh/esbuild-wasm@${ESBUILD_WASM_VERSION}`;\nexport const ESBUILD_WASM_BINARY_CDN = `https://unpkg.com/esbuild-wasm@${ESBUILD_WASM_VERSION}/esbuild.wasm`;\n\nexport const TAILWIND_CDN_URL = \"https://cdn.tailwindcss.com\";\n","/**\n * Code transformation utilities for ESM/CJS conversion, CSS imports,\n * npm import redirection, and React Refresh registration.\n */\n\nimport * as acorn from \"acorn\";\nimport acornJsx from \"acorn-jsx\";\nimport { simpleHash } from \"../utils/hash\";\nimport { REACT_CDN, REACT_DOM_CDN } from \"../config/cdn\";\n\nconst jsxParser = acorn.Parser.extend(acornJsx());\n\nlet _varCounter = 0;\n\n// JS identifiers can contain $, so we use [\\w$]+ instead of \\w+\nconst ID = \"[\\\\w$]+\";\n\nexport interface CssModuleContext {\n readFile: (path: string) => string;\n exists: (path: string) => boolean;\n}\n\nexport function transformEsmToCjsSimple(code: string): string {\n let result = code;\n\n // Transform: import defaultExport, { named } from 'module' (combined)\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)import\\\\s+(${ID})\\\\s*,\\\\s*\\\\{([\\\\s\\\\S]+?)\\\\}\\\\s+from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\\\\s*;?`,\n \"gm\",\n ),\n (_, indent, defaultName, imports, mod) => {\n const parts = imports\n .split(\",\")\n .map((s: string) => s.trim())\n .filter(Boolean);\n const bindings = parts.map((p: string) => {\n const [name, alias] = p.split(/\\s+as\\s+/).map((s: string) => s.trim());\n return alias ? `${name}: ${alias}` : name;\n });\n const tmpVar = `_mod_${(++_varCounter).toString(36)}`;\n return `${indent}const ${tmpVar} = require(\"${mod}\");\\n${indent}const ${defaultName} = ${tmpVar}.default || ${tmpVar};\\n${indent}const { ${bindings.join(\n \", \",\n )} } = ${tmpVar};`;\n },\n );\n\n // Transform: import defaultExport, * as name from 'module' (combined)\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)import\\\\s+(${ID})\\\\s*,\\\\s*\\\\*\\\\s+as\\\\s+(${ID})\\\\s+from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\\\\s*;?`,\n \"gm\",\n ),\n (_, indent, defaultName, nsName, mod) => {\n return `${indent}const ${nsName} = require(\"${mod}\");\\n${indent}const ${defaultName} = ${nsName}.default || ${nsName};`;\n },\n );\n\n // Transform: import defaultExport from 'module'\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)import\\\\s+(${ID})\\\\s+from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\\\\s*;?`,\n \"gm\",\n ),\n (_, indent, name, mod) => `${indent}const ${name} = require(\"${mod}\");`,\n );\n\n // Transform: import { a, b as c } from 'module'\n result = result.replace(\n /^([ \\t]*)import\\s+\\{([\\s\\S]+?)\\}\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?/gm,\n (_, indent, imports, mod) => {\n const parts = imports\n .split(\",\")\n .map((s: string) => s.trim())\n .filter(Boolean);\n const bindings = parts.map((p: string) => {\n const [name, alias] = p.split(/\\s+as\\s+/).map((s: string) => s.trim());\n return alias ? `${name}: ${alias}` : name;\n });\n return `${indent}const { ${bindings.join(\", \")} } = require(\"${mod}\");`;\n },\n );\n\n // Transform: import * as name from 'module'\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)import\\\\s+\\\\*\\\\s+as\\\\s+(${ID})\\\\s+from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\\\\s*;?`,\n \"gm\",\n ),\n (_, indent, name, mod) => `${indent}const ${name} = require(\"${mod}\");`,\n );\n\n // Transform: import 'module' (side-effect only)\n result = result.replace(\n /^([ \\t]*)import\\s+['\"]([^'\"]+)['\"]\\s*;?/gm,\n (_, indent, mod) => `${indent}require(\"${mod}\");`,\n );\n\n // Transform: export default expr\n result = result.replace(\n /^([ \\t]*)export\\s+default\\s+(?=class\\s|function\\s)/gm,\n \"$1module.exports = exports.default = \",\n );\n result = result.replace(\n /^([ \\t]*)export\\s+default\\s+/gm,\n \"$1module.exports = exports.default = \",\n );\n\n // Transform: export { a, b as c }\n result = result.replace(\n /^([ \\t]*)export\\s+\\{([\\s\\S]+?)\\}\\s*(?:from\\s+['\"]([^'\"]+)['\"])?\\s*;?/gm,\n (_, indent, exportsList, mod) => {\n const parts = exportsList\n .split(\",\")\n .map((s: string) => s.trim())\n .filter(Boolean);\n if (mod) {\n const tmpVar = `_re_export_${(++_varCounter).toString(36)}`;\n const lines = [`${indent}const ${tmpVar} = require(\"${mod}\");`];\n for (const part of parts) {\n const [name, alias] = part\n .split(/\\s+as\\s+/)\n .map((s: string) => s.trim());\n lines.push(\n `${indent}Object.defineProperty(exports, \"${\n alias || name\n }\", { enumerable: true, get: function() { return ${tmpVar}.${name}; } });`,\n );\n }\n return lines.join(\"\\n\");\n }\n return parts\n .map((part: string) => {\n const [name, alias] = part\n .split(/\\s+as\\s+/)\n .map((s: string) => s.trim());\n return `${indent}Object.defineProperty(exports, \"${\n alias || name\n }\", { enumerable: true, get: function() { return ${name}; } });`;\n })\n .join(\"\\n\");\n },\n );\n\n // Transform: export const/let/var name = ...\n result = result.replace(/^([ \\t]*)export\\s+(const|let|var)\\s+/gm, \"$1$2 \");\n const declMatch = code.matchAll(\n new RegExp(`^[ \\\\t]*export\\\\s+(?:const|let|var)\\\\s+(${ID})`, \"gm\"),\n );\n for (const m of declMatch) {\n const name = m[1];\n result += `\\nObject.defineProperty(exports, \"${name}\", { enumerable: true, get: function() { return ${name}; } });`;\n }\n\n // Transform: export function name() / export class name / export async function\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)export\\\\s+(async\\\\s+)?(function|class)\\\\s+(${ID})`,\n \"gm\",\n ),\n (_, indent, async_, type, name) =>\n `${indent}${async_ || \"\"}${type} ${name}`,\n );\n const funcClassMatch = code.matchAll(\n new RegExp(\n `^[ \\\\t]*export\\\\s+(?:async\\\\s+)?(?:function|class)\\\\s+(${ID})`,\n \"gm\",\n ),\n );\n for (const m of funcClassMatch) {\n const name = m[1];\n result += `\\nObject.defineProperty(exports, \"${name}\", { enumerable: true, get: function() { return ${name}; } });`;\n }\n\n // Transform: export * as name from 'module' (must come before export * from)\n result = result.replace(\n new RegExp(\n `^([ \\\\t]*)export\\\\s+\\\\*\\\\s+as\\\\s+(${ID})\\\\s+from\\\\s+['\\\"]([^'\\\"]+)['\\\"]\\\\s*;?`,\n \"gm\",\n ),\n (_, indent, name, mod) => `${indent}exports.${name} = require(\"${mod}\");`,\n );\n\n // Transform: export * from 'module' — filter dangerous keys and default\n result = result.replace(\n /^([ \\t]*)export\\s+\\*\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?/gm,\n (_, indent, mod) =>\n `${indent}(function(m) { for (var k in m) if (k !== \"default\" && k !== \"__proto__\" && k !== \"constructor\" && k !== \"prototype\" && Object.prototype.hasOwnProperty.call(m, k)) exports[k] = m[k]; })(require(\"${mod}\"));`,\n );\n\n return result;\n}\n\n// ── CSS Import Handling ──────────────────────────────────────────────\n\nexport function resolveRelativePath(dir: string, relativePath: string): string {\n const parts = dir.split(\"/\").filter(Boolean);\n const relParts = relativePath.split(\"/\");\n\n for (const part of relParts) {\n if (part === \"..\") {\n parts.pop();\n } else if (part !== \".\" && part !== \"\") {\n parts.push(part);\n }\n }\n\n return \"/\" + parts.join(\"/\");\n}\n\nexport function resolveCssModulePath(\n cssPath: string,\n currentFile: string | undefined,\n ctx: CssModuleContext,\n): string | null {\n if (currentFile && (cssPath.startsWith(\"./\") || cssPath.startsWith(\"../\"))) {\n const dir = currentFile.replace(/\\/[^/]+$/, \"\");\n const resolved = resolveRelativePath(dir, cssPath);\n if (ctx.exists(resolved)) return resolved;\n }\n\n if (ctx.exists(cssPath)) return cssPath;\n\n const withSlash = \"/\" + cssPath.replace(/^\\.\\//, \"\");\n if (ctx.exists(withSlash)) return withSlash;\n\n return null;\n}\n\n/**\n * Generate replacement code for a CSS Module import.\n * Parses the CSS file, extracts class names via regex (no css-tree dependency),\n * generates scoped names, and injects the scoped CSS via a style tag.\n */\nexport function generateCssModuleReplacement(\n varName: string,\n cssPath: string,\n currentFile: string | undefined,\n ctx: CssModuleContext,\n): string {\n try {\n const resolvedPath = resolveCssModulePath(cssPath, currentFile, ctx);\n if (!resolvedPath) return `const ${varName} = {};`;\n\n const cssContent = ctx.readFile(resolvedPath);\n const fileHash = simpleHash(resolvedPath + cssContent).slice(0, 6);\n\n const classMap: Record<string, string> = {};\n\n // Extract class names via regex and build scoped names\n const classRegex = /\\.([a-zA-Z_][\\w-]*)/g;\n let m;\n while ((m = classRegex.exec(cssContent)) !== null) {\n if (!classMap[m[1]]) {\n classMap[m[1]] = `${m[1]}_${fileHash}`;\n }\n }\n\n // Replace class names in CSS to create scoped version\n let scopedCss = cssContent;\n for (const [original, scoped] of Object.entries(classMap)) {\n scopedCss = scopedCss.replace(\n new RegExp(\n `\\\\.${original.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n \"\\\\$&\",\n )}(?=[\\\\s{:,>+~])`,\n \"g\",\n ),\n `.${scoped}`,\n );\n }\n\n const escapedCss = scopedCss\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/`/g, \"\\\\`\")\n .replace(/\\$/g, \"\\\\$\");\n\n const mapEntries = Object.entries(classMap)\n .map(([k, v]) => `${JSON.stringify(k)}: ${JSON.stringify(v)}`)\n .join(\", \");\n\n return `const ${varName} = {${mapEntries}};\n(function() {\n if (typeof document !== 'undefined') {\n var id = ${JSON.stringify(\"cssmod-\" + fileHash)};\n if (!document.getElementById(id)) {\n var s = document.createElement('style');\n s.id = id;\n s.textContent = \\`${escapedCss}\\`;\n document.head.appendChild(s);\n }\n }\n})();`;\n } catch {\n return `const ${varName} = {};`;\n }\n}\n\n/**\n * Strip CSS imports from code. CSS Module imports (*.module.css) are converted\n * to inline objects with class name mappings. Regular CSS imports are removed.\n */\nexport function stripCssImports(\n code: string,\n currentFile: string | undefined,\n ctx: CssModuleContext,\n): string {\n // CSS Module default imports\n code = code.replace(\n /import\\s+(\\w+)\\s+from\\s+['\"]([^'\"]+\\.module\\.css)['\"]\\s*;?/g,\n (_match, varName, cssPath) => {\n return generateCssModuleReplacement(varName, cssPath, currentFile, ctx);\n },\n );\n\n // Destructured CSS Module imports\n code = code.replace(\n /import\\s+\\{([\\s\\S]+?)\\}\\s+from\\s+['\"]([^'\"]+\\.module\\.css)['\"]\\s*;?/g,\n (_match, names, cssPath) => {\n const varName = \"__cssModule_\" + simpleHash(cssPath);\n const replacement = generateCssModuleReplacement(\n varName,\n cssPath,\n currentFile,\n ctx,\n );\n const namedExports = (names as string)\n .split(\",\")\n .map((n: string) => {\n const trimmed = n.trim();\n const parts = trimmed.split(/\\s+as\\s+/);\n const key = parts[0].trim();\n const alias = parts[1]?.trim() || key;\n return `const ${alias} = ${varName}[${JSON.stringify(key)}];`;\n })\n .join(\"\\n\");\n return `${replacement}\\n${namedExports}`;\n },\n );\n\n // Strip remaining plain CSS imports\n return code.replace(/import\\s+['\"][^'\"]+\\.css['\"]\\s*;?/g, \"\");\n}\n\n// ── NPM Import Redirection ──────────────────────────────────────────\n\nconst EXPLICIT_MAPPINGS: Record<string, string> = {\n react: `${REACT_CDN}?dev`,\n \"react/jsx-runtime\": `${REACT_CDN}&dev/jsx-runtime`,\n \"react/jsx-dev-runtime\": `${REACT_CDN}&dev/jsx-dev-runtime`,\n \"react-dom\": `${REACT_DOM_CDN}?dev`,\n \"react-dom/client\": `${REACT_DOM_CDN}/client?dev`,\n};\n\nconst LOCAL_PACKAGES = new Set([\n \"next/link\",\n \"next/router\",\n \"next/head\",\n \"next/navigation\",\n \"next/dynamic\",\n \"next/image\",\n \"next/script\",\n \"next/font/google\",\n \"next/font/local\",\n]);\n\nfunction extractMajorVersion(range: string): string | null {\n const match = range.match(/(\\d+)\\.\\d+/);\n return match ? match[1] : null;\n}\n\nfunction resolveNpmPackage(\n packageName: string,\n extraLocalPackages?: Set<string>,\n dependencies?: Record<string, string>,\n esmShDeps?: string,\n installedPackages?: Set<string>,\n): string | null {\n if (\n packageName.startsWith(\".\") ||\n packageName.startsWith(\"/\") ||\n packageName.startsWith(\"http://\") ||\n packageName.startsWith(\"https://\") ||\n packageName.startsWith(\"/__virtual__\")\n ) {\n return null;\n }\n\n if (EXPLICIT_MAPPINGS[packageName]) return EXPLICIT_MAPPINGS[packageName];\n if (LOCAL_PACKAGES.has(packageName)) return null;\n if (extraLocalPackages?.has(packageName)) return null;\n\n const basePkg = packageName.includes(\"/\")\n ? packageName.split(\"/\")[0]\n : packageName;\n const isScoped = basePkg.startsWith(\"@\");\n const scopedBasePkg =\n isScoped && packageName.includes(\"/\")\n ? packageName.split(\"/\").slice(0, 2).join(\"/\")\n : basePkg;\n\n if (LOCAL_PACKAGES.has(scopedBasePkg)) return null;\n if (extraLocalPackages?.has(scopedBasePkg)) return null;\n\n if (installedPackages?.has(scopedBasePkg)) return `/_npm/${packageName}`;\n\n let esmPkg = packageName;\n if (dependencies) {\n const depVersion = dependencies[scopedBasePkg];\n if (depVersion) {\n const major = extractMajorVersion(depVersion);\n if (major) {\n const subpath = packageName.slice(scopedBasePkg.length);\n esmPkg = `${scopedBasePkg}@${major}${subpath}`;\n }\n }\n }\n\n const depsParam = esmShDeps ? `&deps=${esmShDeps}` : \"\";\n return `https://esm.sh/${esmPkg}?external=react${depsParam}`;\n}\n\n/**\n * Redirect bare npm package imports to esm.sh CDN URLs.\n * Uses acorn AST for precision, falls back to regex.\n */\nexport function redirectNpmImports(\n code: string,\n additionalLocalPackages?: string[],\n dependencies?: Record<string, string>,\n esmShDeps?: string,\n installedPackages?: Set<string>,\n): string {\n const extraSet = additionalLocalPackages?.length\n ? new Set(additionalLocalPackages)\n : undefined;\n try {\n return redirectNpmImportsAst(\n code,\n extraSet,\n dependencies,\n esmShDeps,\n installedPackages,\n );\n } catch {\n return redirectNpmImportsRegex(\n code,\n extraSet,\n dependencies,\n esmShDeps,\n installedPackages,\n );\n }\n}\n\nfunction redirectNpmImportsAst(\n code: string,\n extraLocalPackages?: Set<string>,\n dependencies?: Record<string, string>,\n esmShDeps?: string,\n installedPackages?: Set<string>,\n): string {\n const ast = jsxParser.parse(code, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n const replacements: Array<[number, number, string]> = [];\n\n function processSource(sourceNode: any) {\n if (!sourceNode || sourceNode.type !== \"Literal\") return;\n const resolved = resolveNpmPackage(\n sourceNode.value,\n extraLocalPackages,\n dependencies,\n esmShDeps,\n installedPackages,\n );\n if (resolved) {\n replacements.push([\n sourceNode.start,\n sourceNode.end,\n JSON.stringify(resolved),\n ]);\n }\n }\n\n for (const node of (ast as any).body) {\n if (node.type === \"ImportDeclaration\") processSource(node.source);\n else if (node.type === \"ExportNamedDeclaration\" && node.source)\n processSource(node.source);\n else if (node.type === \"ExportAllDeclaration\") processSource(node.source);\n }\n\n if (replacements.length === 0) return code;\n\n let result = code;\n replacements.sort((a, b) => b[0] - a[0]);\n for (const [start, end, replacement] of replacements) {\n result = result.slice(0, start) + replacement + result.slice(end);\n }\n\n return result;\n}\n\nfunction redirectNpmImportsRegex(\n code: string,\n extraLocalPackages?: Set<string>,\n dependencies?: Record<string, string>,\n esmShDeps?: string,\n installedPackages?: Set<string>,\n): string {\n const importPattern = /(from\\s*['\"])([^'\"./][^'\"]*?)(['\"])/g;\n return code.replace(importPattern, (match, prefix, packageName, suffix) => {\n const resolved = resolveNpmPackage(\n packageName,\n extraLocalPackages,\n dependencies,\n esmShDeps,\n installedPackages,\n );\n if (!resolved) return match;\n return `${prefix}${resolved}${suffix}`;\n });\n}\n\n// ── React Refresh Registration ───────────────────────────────────────\n\n/**\n * Add React Refresh registration to transformed code.\n * Enables true HMR (state-preserving) for React components.\n */\nexport function addReactRefresh(code: string, filename: string): string {\n const components = detectReactComponents(code);\n\n if (components.length === 0) {\n return `// HMR Setup\nimport.meta.hot = window.__vite_hot_context__(\"${filename}\");\n\n${code}\n\n// HMR Accept\nif (import.meta.hot) {\n import.meta.hot.accept();\n}\n`;\n }\n\n const registrations = components\n .map(name => ` $RefreshReg$(${name}, \"${filename} ${name}\");`)\n .join(\"\\n\");\n\n return `// HMR Setup\nimport.meta.hot = window.__vite_hot_context__(\"${filename}\");\n\n${code}\n\n// React Refresh Registration\nif (import.meta.hot) {\n${registrations}\n import.meta.hot.accept(() => {\n if (window.$RefreshRuntime$) {\n window.$RefreshRuntime$.performReactRefresh();\n }\n });\n}\n`;\n}\n\nfunction isUppercaseStart(name: string): boolean {\n return name.length > 0 && name[0] >= \"A\" && name[0] <= \"Z\";\n}\n\nfunction detectReactComponents(code: string): string[] {\n try {\n return detectReactComponentsAst(code);\n } catch {\n return detectReactComponentsRegex(code);\n }\n}\n\nfunction detectReactComponentsAst(code: string): string[] {\n const ast = jsxParser.parse(code, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n const components: string[] = [];\n\n for (const node of (ast as any).body) {\n if (\n node.type === \"FunctionDeclaration\" &&\n node.id &&\n isUppercaseStart(node.id.name)\n ) {\n if (!components.includes(node.id.name)) components.push(node.id.name);\n }\n\n if (\n node.type === \"ExportDefaultDeclaration\" &&\n node.declaration?.type === \"FunctionDeclaration\" &&\n node.declaration.id &&\n isUppercaseStart(node.declaration.id.name)\n ) {\n if (!components.includes(node.declaration.id.name))\n components.push(node.declaration.id.name);\n }\n\n if (\n node.type === \"ExportNamedDeclaration\" &&\n node.declaration?.type === \"FunctionDeclaration\" &&\n node.declaration.id &&\n isUppercaseStart(node.declaration.id.name)\n ) {\n if (!components.includes(node.declaration.id.name))\n components.push(node.declaration.id.name);\n }\n\n const varDecl =\n node.type === \"VariableDeclaration\"\n ? node\n : node.type === \"ExportNamedDeclaration\" &&\n node.declaration?.type === \"VariableDeclaration\"\n ? node.declaration\n : null;\n\n if (varDecl) {\n for (const declarator of varDecl.declarations) {\n if (\n declarator.id?.name &&\n isUppercaseStart(declarator.id.name) &&\n declarator.init\n ) {\n const initType = declarator.init.type;\n if (\n initType === \"ArrowFunctionExpression\" ||\n initType === \"FunctionExpression\" ||\n initType === \"CallExpression\"\n ) {\n if (!components.includes(declarator.id.name))\n components.push(declarator.id.name);\n }\n }\n }\n }\n }\n\n return components;\n}\n\nfunction detectReactComponentsRegex(code: string): string[] {\n const components: string[] = [];\n\n const funcDeclRegex =\n /(?:^|\\n)(?:export\\s+)?(?:async\\s+)?function\\s+([A-Z][a-zA-Z0-9]*)\\s*\\(/g;\n let match;\n while ((match = funcDeclRegex.exec(code)) !== null) {\n if (!components.includes(match[1])) components.push(match[1]);\n }\n\n const arrowRegex =\n /(?:^|\\n)(?:export\\s+)?(?:const|let|var)\\s+([A-Z][a-zA-Z0-9]*)\\s*=/g;\n while ((match = arrowRegex.exec(code)) !== null) {\n if (!components.includes(match[1])) components.push(match[1]);\n }\n\n return components;\n}\n","import * as acorn from \"acorn\";\nimport acornJsx from \"acorn-jsx\";\nimport * as pathShim from \"./polyfills/path\";\nimport { transformEsmToCjsSimple } from \"./frameworks/code-transforms\";\nimport { simpleHash } from \"./utils/hash\";\n\nconst jsxParser = acorn.Parser.extend(acornJsx());\nimport {\n needsTranspilation,\n transpileSync,\n transpile,\n isInitialized,\n hasSyncSupport,\n} from \"./transpiler\";\n\nconst tsCache = new Map<string, string>();\n\nexport { tsCache as transpileCache };\n\nexport function removeShebang(source: string): string {\n return source.charCodeAt(0) === 0x23 && source.charCodeAt(1) === 0x21\n ? source.slice(source.indexOf(\"\\n\") + 1)\n : source;\n}\n\nfunction rewriteDynamicImports(source: string): string {\n return source.replace(/(?<![.$\\w])import\\s*\\(/g, \"__dynamicImport(\");\n}\n\nfunction visitAstNodes(root: any, fn: (n: any) => void): void {\n if (!root || typeof root !== \"object\") return;\n if (typeof root.type === \"string\") fn(root);\n const skip = new Set([\"type\", \"start\", \"end\", \"loc\", \"range\"]);\n for (const prop of Object.keys(root)) {\n if (skip.has(prop)) continue;\n const val = root[prop];\n if (!val || typeof val !== \"object\") continue;\n if (Array.isArray(val)) {\n for (const el of val) {\n if (el && typeof el === \"object\" && typeof el.type === \"string\") {\n visitAstNodes(el, fn);\n }\n }\n } else if (typeof val.type === \"string\") {\n visitAstNodes(val, fn);\n }\n }\n}\n\nfunction esmToCjsViaAst(source: string, _file: string): string {\n const tree = jsxParser.parse(source, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n }) as any;\n\n const patches: { from: number; to: number; text: string }[] = [];\n\n visitAstNodes(tree, (node: any) => {\n if (\n node.type === \"MetaProperty\" &&\n node.meta?.name === \"import\" &&\n node.property?.name === \"meta\"\n ) {\n patches.push({ from: node.start, to: node.end, text: \"import_meta\" });\n }\n if (node.type === \"ImportExpression\") {\n patches.push({\n from: node.start,\n to: node.start + 6,\n text: \"__dynamicImport\",\n });\n }\n });\n\n const usesImportDecl = tree.body.some(\n (n: any) => n.type === \"ImportDeclaration\",\n );\n const usesExportDecl = tree.body.some((n: any) =>\n n.type?.startsWith(\"Export\"),\n );\n\n let result = source;\n patches.sort((a, b) => b.from - a.from);\n for (const { from, to, text } of patches) {\n result = result.slice(0, from) + text + result.slice(to);\n }\n\n if (usesImportDecl || usesExportDecl) {\n result = transformEsmToCjsSimple(result);\n if (usesExportDecl) {\n result =\n 'Object.defineProperty(exports, \"__esModule\", { value: true });\\n' +\n result;\n }\n }\n return result;\n}\n\nfunction esmToCjsViaRegex(source: string, file: string): string {\n let out = source;\n const dir = pathShim.dirname(file);\n out = out.replace(/\\bimport\\.meta\\.url\\b/g, `import_meta.url`);\n out = out.replace(/\\bimport\\.meta\\.dirname\\b/g, `import_meta.dirname`);\n out = out.replace(/\\bimport\\.meta\\.filename\\b/g, `import_meta.filename`);\n out = out.replace(/\\bimport\\.meta\\b/g, `import_meta`);\n out = rewriteDynamicImports(out);\n const hasImport = /\\bimport\\s+[\\w{*'\"]/m.test(source);\n const hasExport =\n /\\bexport\\s+(?:default|const|let|var|function|class|{|\\*)/m.test(source);\n if (hasImport || hasExport) {\n out = transformEsmToCjsSimple(out);\n if (hasExport) {\n out =\n 'Object.defineProperty(exports, \"__esModule\", { value: true });\\n' +\n out;\n }\n }\n return out;\n}\n\nexport function transformEsmToCjs(source: string, file: string): string {\n if (!/\\bimport\\b|\\bexport\\b/.test(source)) return source;\n try {\n return esmToCjsViaAst(source, file);\n } catch {\n return esmToCjsViaRegex(source, file);\n }\n}\n\nexport function processSource(\n source: string,\n file: string,\n sourceMaps?: boolean,\n): string {\n if (needsTranspilation(file)) {\n const key = `${file}:${simpleHash(source)}`;\n const hit = tsCache.get(key);\n if (hit !== undefined) return hit;\n if (!isInitialized()) {\n throw new Error(\n `Transpiler not initialized. Call kernel.init() before loading TypeScript files (${file}).`,\n );\n }\n if (hasSyncSupport()) {\n const compiled = transpileSync(source, file, { sourcemap: sourceMaps });\n const result = transformEsmToCjs(compiled, file);\n tsCache.set(key, result);\n return result;\n }\n throw new Error(\n `File \"${file}\" has not been pre-transpiled. Call kernel.prepareFile(\"${file}\") before running TypeScript in the browser.`,\n );\n }\n return transformEsmToCjs(source, file);\n}\n\nexport function getProcessedSource(\n rawSource: string,\n filepath: string,\n cache: Map<string, string>,\n sourceMaps?: boolean,\n): string {\n let source = removeShebang(rawSource);\n const hash = simpleHash(source);\n const key = `${filepath}:${hash}`;\n const cached = cache.get(key);\n if (cached !== undefined) return cached;\n const result = processSource(source, filepath, sourceMaps);\n cache.set(key, result);\n return result;\n}\n\nexport async function ensureTranspiled(\n file: string,\n source: string,\n): Promise<void> {\n if (!needsTranspilation(file)) return;\n const key = `${file}:${simpleHash(source)}`;\n if (tsCache.has(key)) return;\n const compiled = await transpile(source, file);\n const result = transformEsmToCjs(compiled, file);\n tsCache.set(key, result);\n}\n","import type { RequireFunction } from \"./kernel\";\n\nexport function wrapDynamicImport(\n localRequire: RequireFunction,\n): (specifier: string) => Promise<unknown> {\n return async (specifier: string): Promise<unknown> => {\n const exported = localRequire(specifier);\n if (\n exported &&\n typeof exported === \"object\" &&\n (\"default\" in (exported as object) ||\n \"__esModule\" in (exported as object))\n ) {\n return exported;\n }\n return {\n default: exported,\n ...(exported && typeof exported === \"object\" ? (exported as object) : {}),\n };\n };\n}\n\nconst CONSOLE_METHODS = [\n \"log\",\n \"error\",\n \"warn\",\n \"info\",\n \"debug\",\n \"trace\",\n \"dir\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"assert\",\n \"clear\",\n \"count\",\n \"countReset\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n] as const;\n\nexport function buildConsoleProxy(\n hook?: (method: string, args: unknown[]) => void,\n): typeof console | Record<string, (...args: unknown[]) => void> {\n if (!hook) return console;\n const proxy: Record<string, (...args: unknown[]) => void> = {};\n for (const name of CONSOLE_METHODS) {\n proxy[name] = (...args: unknown[]) => {\n hook(name, args);\n (console as any)[name]?.(...args);\n };\n }\n return proxy;\n}\n\nexport function buildModuleWrapper(\n code: string,\n filename?: string,\n): (\n exports: unknown,\n require: RequireFunction,\n mod: unknown,\n __filename: string,\n __dirname: string,\n process: unknown,\n console: unknown,\n import_meta: unknown,\n __dynamicImport: unknown,\n) => void {\n // Append //# sourceURL so browser DevTools display the correct filename.\n const sourceURL = filename ? `\\n//# sourceURL=${filename}` : \"\";\n const body = [\n \"(function(exports, require, module, __filename, __dirname, process, console, import_meta, __dynamicImport) {\",\n \"(function() {\",\n code,\n \"}).call(exports);\",\n \"})\",\n sourceURL,\n ].join(\"\\n\");\n return new Function(\"return \" + body)();\n}\n","import { MemFS } from \"./memfs\";\nimport type { PackageJson } from \"./types/package-json\";\nimport type { FsShim } from \"./polyfills/fs\";\nimport type { Process } from \"./polyfills/process\";\nimport * as pathShim from \"./polyfills/path\";\nimport { resolveBuiltin, isBuiltinModule } from \"./builtins\";\nimport { getProcessedSource } from \"./code-transform\";\nimport {\n wrapDynamicImport,\n buildConsoleProxy,\n buildModuleWrapper,\n} from \"./runtime-helpers\";\nimport {\n resolve as resolveExports,\n imports as resolveImports,\n} from \"resolve.exports\";\nimport type { PluginRegistry } from \"./plugin\";\n\nexport interface Module {\n id: string;\n filename: string;\n exports: unknown;\n loaded: boolean;\n children: Module[];\n paths: string[];\n}\n\nexport interface AutoInstallProvider {\n installSync(name: string): void;\n}\n\nexport interface RuntimeOptions {\n cwd?: string;\n env?: Record<string, string>;\n onConsole?: (method: string, args: unknown[]) => void;\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n autoInstall?: boolean;\n autoInstallProvider?: AutoInstallProvider;\n /** Enable inline source maps for TypeScript/JSX transpilation. */\n sourceMaps?: boolean;\n}\n\nexport interface RequireFunction {\n (id: string): unknown;\n resolve: ((id: string) => string) & {\n paths: (id: string) => string[] | null;\n };\n cache: Record<string, Module>;\n}\n\nconst FILE_EXTENSIONS = [\n \".js\",\n \".ts\",\n \".tsx\",\n \".jsx\",\n \".json\",\n \".node\",\n \".mjs\",\n \".cjs\",\n];\nconst INDEX_NAMES = [\n \"index.js\",\n \"index.ts\",\n \"index.tsx\",\n \"index.json\",\n \"index.node\",\n];\nconst ENTRY_FIELDS = [\"main\", \"module\"] as const;\n\nexport class ModuleResolver {\n private vfs: MemFS;\n private fsShim: FsShim;\n private proc: Process;\n private opts: RuntimeOptions;\n private cache: Record<string, Module>;\n private transformedCache: Map<string, string>;\n private debug: boolean;\n private pluginRegistry?: PluginRegistry;\n\n private pkgJsonMemo = new Map<string, PackageJson | null>();\n private resolveMemo = new Map<string, string | null>();\n\n clearMemos(): void {\n this.pkgJsonMemo.clear();\n this.resolveMemo.clear();\n }\n\n /** Invalidate cached resolution entries that match the given file path.\n * This enables per-entry cache invalidation when a file changes on disk. */\n invalidate(path: string): void {\n // Remove any resolveMemo entries whose resolved value matches this path\n for (const [key, value] of this.resolveMemo) {\n if (value === path) this.resolveMemo.delete(key);\n }\n // Remove the module from the require cache so it gets re-evaluated\n if (this.cache[path]) delete this.cache[path];\n // Remove any pkgJsonMemo that matches this path (e.g. if a package.json was edited)\n if (this.pkgJsonMemo.has(path)) this.pkgJsonMemo.delete(path);\n // Remove transformed source cache\n if (this.transformedCache.has(path)) this.transformedCache.delete(path);\n }\n\n constructor(\n vfs: MemFS,\n fsShim: FsShim,\n proc: Process,\n cache: Record<string, Module>,\n opts: RuntimeOptions,\n transformedCache: Map<string, string>,\n pluginRegistry?: PluginRegistry,\n ) {\n this.vfs = vfs;\n this.fsShim = fsShim;\n this.proc = proc;\n this.cache = cache;\n this.opts = opts;\n this.transformedCache = transformedCache;\n this.debug = !!(opts.env && opts.env.DEBUG_RESOLVER);\n this.pluginRegistry = pluginRegistry;\n }\n\n makeRequire(fromDir: string): RequireFunction {\n const self = this;\n\n const fn = ((id: string): unknown => {\n const resolved = self.resolve(id, fromDir);\n return self.load(resolved).exports;\n }) as RequireFunction;\n\n const resolveFn = (id: string): string => self.resolve(id, fromDir);\n (resolveFn as any).paths = (id: string): string[] | null => {\n const bare = id.startsWith(\"node:\") ? id.slice(5) : id;\n if (isBuiltinModule(bare)) return null;\n const dirs: string[] = [];\n let d = fromDir;\n while (d !== \"/\") {\n dirs.push(pathShim.join(d, \"node_modules\"));\n d = pathShim.dirname(d);\n }\n dirs.push(\"/node_modules\");\n return dirs;\n };\n fn.resolve = resolveFn as RequireFunction[\"resolve\"];\n fn.cache = this.cache;\n return fn;\n }\n\n resolve(id: string, fromDir: string): string {\n if (id.startsWith(\"node:\")) id = id.slice(5);\n if (isBuiltinModule(id)) return id;\n\n // --- Plugin onResolve hooks (first match wins) ---\n if (this.pluginRegistry) {\n const pluginResult = this.pluginRegistry.runResolve(id, fromDir);\n if (pluginResult && pluginResult.path) return pluginResult.path;\n }\n\n if (id.startsWith(\"#\")) return this.resolvePackageImport(id, fromDir);\n\n const memoKey = `${fromDir}|${id}`;\n const memoized = this.resolveMemo.get(memoKey);\n if (memoized !== undefined) {\n if (memoized === null) throw new Error(`Cannot find module '${id}'`);\n return memoized;\n }\n\n let found: string | null = null;\n\n if (\n id === \".\" ||\n id === \"..\" ||\n id.startsWith(\"./\") ||\n id.startsWith(\"../\") ||\n id.startsWith(\"/\")\n ) {\n const abs = id.startsWith(\"/\") ? id : pathShim.resolve(fromDir, id);\n found = this.probeFile(abs);\n if (!found) {\n this.resolveMemo.set(memoKey, null);\n throw new Error(`Cannot find module '${id}' from '${fromDir}'`);\n }\n } else {\n if (id === \"rollup\" || id.startsWith(\"rollup/\")) return \"rollup\";\n found = this.resolveFromNodeModules(id, fromDir);\n if (!found && this.opts.autoInstall && this.opts.autoInstallProvider) {\n const pkgName = this.extractPackageName(id);\n try {\n this.opts.autoInstallProvider.installSync(pkgName);\n this.resolveMemo.delete(memoKey);\n found = this.resolveFromNodeModules(id, fromDir);\n } catch (e) {\n if (this.debug) {\n console.warn(\n `[jiki:resolver] auto-install failed for '${pkgName}': ${(e as Error).message}`,\n );\n }\n }\n }\n if (!found) {\n this.resolveMemo.set(memoKey, null);\n throw new Error(`Cannot find module '${id}' from '${fromDir}'`);\n }\n }\n\n this.resolveMemo.set(memoKey, found);\n return found;\n }\n\n load(resolved: string): Module {\n if (this.cache[resolved]) return this.cache[resolved];\n\n const builtin = resolveBuiltin(resolved);\n if (builtin !== undefined) return this.cacheAndReturn(resolved, builtin);\n\n if (resolved === \"fs\" || resolved === \"fs/promises\") {\n const exp =\n resolved === \"fs/promises\" ? this.fsShim.promises : this.fsShim;\n return this.cacheAndReturn(resolved, exp);\n }\n if (resolved === \"process\") {\n return this.cacheAndReturn(\"process\", this.proc);\n }\n\n // --- Plugin onLoad hooks (first match wins) ---\n if (this.pluginRegistry) {\n const pluginResult = this.pluginRegistry.runLoad(resolved);\n if (pluginResult && pluginResult.contents !== undefined) {\n const entry: Module = {\n id: resolved,\n filename: resolved,\n exports: {},\n loaded: false,\n children: [],\n paths: [pathShim.dirname(resolved)],\n };\n this.cache[resolved] = entry;\n\n try {\n let source = getProcessedSource(\n pluginResult.contents,\n resolved,\n this.transformedCache,\n this.opts.sourceMaps,\n );\n // Run plugin transform pipeline on the loaded source.\n source = this.pluginRegistry.runTransform(resolved, source);\n const dir = pathShim.dirname(resolved);\n const childRequire = this.makeRequire(dir);\n const meta = {\n url: `file://${resolved}`,\n dirname: dir,\n filename: resolved,\n };\n const dynImport = wrapDynamicImport(childRequire);\n const consoleFacade = buildConsoleProxy(this.opts.onConsole);\n const wrapper = buildModuleWrapper(source, resolved);\n\n wrapper(\n entry.exports,\n childRequire,\n entry,\n resolved,\n dir,\n this.proc,\n consoleFacade,\n meta,\n dynImport,\n );\n entry.loaded = true;\n return entry;\n } catch (err) {\n delete this.cache[resolved];\n throw new Error(\n `Error loading module '${resolved}': ${(err as Error).message}`,\n );\n }\n }\n }\n\n const entry: Module = {\n id: resolved,\n filename: resolved,\n exports: {},\n loaded: false,\n children: [],\n paths: [pathShim.dirname(resolved)],\n };\n this.cache[resolved] = entry;\n\n try {\n if (resolved.endsWith(\".json\")) {\n entry.exports = JSON.parse(this.vfs.readFileSync(resolved, \"utf8\"));\n entry.loaded = true;\n return entry;\n }\n\n const rawSource = this.vfs.readFileSync(resolved, \"utf8\");\n let source = getProcessedSource(\n rawSource,\n resolved,\n this.transformedCache,\n this.opts.sourceMaps,\n );\n // Run plugin transform pipeline on VFS-loaded source.\n if (this.pluginRegistry) {\n source = this.pluginRegistry.runTransform(resolved, source);\n }\n\n const dir = pathShim.dirname(resolved);\n const childRequire = this.makeRequire(dir);\n const meta = {\n url: `file://${resolved}`,\n dirname: dir,\n filename: resolved,\n };\n const dynImport = wrapDynamicImport(childRequire);\n const consoleFacade = buildConsoleProxy(this.opts.onConsole);\n const wrapper = buildModuleWrapper(source, resolved);\n\n wrapper(\n entry.exports,\n childRequire,\n entry,\n resolved,\n dir,\n this.proc,\n consoleFacade,\n meta,\n dynImport,\n );\n\n entry.loaded = true;\n return entry;\n } catch (err) {\n delete this.cache[resolved];\n throw new Error(\n `Error loading module '${resolved}': ${(err as Error).message}`,\n );\n }\n }\n\n private cacheAndReturn(id: string, exports: unknown): Module {\n const m: Module = {\n id,\n filename: id,\n exports,\n loaded: true,\n children: [],\n paths: [],\n };\n this.cache[id] = m;\n return m;\n }\n\n private readPkg(pkgPath: string): PackageJson | null {\n if (this.pkgJsonMemo.has(pkgPath)) return this.pkgJsonMemo.get(pkgPath)!;\n try {\n const data = JSON.parse(\n this.vfs.readFileSync(pkgPath, \"utf8\"),\n ) as PackageJson;\n this.pkgJsonMemo.set(pkgPath, data);\n return data;\n } catch {\n this.pkgJsonMemo.set(pkgPath, null);\n return null;\n }\n }\n\n probeFile(base: string): string | null {\n if (this.vfs.existsSync(base)) {\n const st = this.vfs.statSync(base);\n if (st.isFile()) return base;\n if (st.isDirectory()) {\n const pkg = this.readPkg(pathShim.join(base, \"package.json\"));\n if (pkg) {\n for (const field of ENTRY_FIELDS) {\n const val = (pkg as Record<string, unknown>)[field];\n if (typeof val === \"string\") {\n const hit = this.probeFile(pathShim.join(base, val));\n if (hit) return hit;\n }\n }\n }\n for (const idx of INDEX_NAMES) {\n const p = pathShim.join(base, idx);\n if (this.vfs.existsSync(p)) return p;\n }\n }\n }\n for (const ext of FILE_EXTENSIONS) {\n const p = base + ext;\n if (this.vfs.existsSync(p)) return p;\n }\n return null;\n }\n\n private resolvePackageImport(id: string, fromDir: string): string {\n let dir = fromDir;\n while (dir !== \"/\") {\n const pkg = this.readPkg(pathShim.join(dir, \"package.json\"));\n if (pkg?.imports) {\n try {\n const resolved = resolveImports(pkg, id, { require: true });\n if (resolved && resolved.length > 0) {\n const full = pathShim.join(dir, resolved[0]);\n if (this.vfs.existsSync(full)) return full;\n }\n } catch (e) {\n if (this.debug) {\n console.warn(\n `[jiki:resolver] imports resolution failed for '${id}' in ${dir}: ${(e as Error).message}`,\n );\n }\n }\n }\n dir = pathShim.dirname(dir);\n }\n throw new Error(`Cannot find module '${id}'`);\n }\n\n private extractPackageName(id: string): string {\n const segments = id.split(\"/\");\n if (segments[0].startsWith(\"@\") && segments.length > 1) {\n return `${segments[0]}/${segments[1]}`;\n }\n return segments[0];\n }\n\n private resolveFromNodeModules(id: string, fromDir: string): string | null {\n const segments = id.split(\"/\");\n const pkgName =\n segments[0].startsWith(\"@\") && segments.length > 1\n ? `${segments[0]}/${segments[1]}`\n : segments[0];\n const subpath = segments.slice(pkgName.split(\"/\").length).join(\"/\");\n\n let dir = fromDir;\n while (true) {\n const nm = pathShim.join(dir, \"node_modules\");\n if (this.vfs.existsSync(nm)) {\n const pkgRoot = pathShim.join(nm, pkgName);\n const hit = this.tryPackageEntry(pkgRoot, pkgName, subpath);\n if (hit) return hit;\n }\n if (dir === \"/\") break;\n dir = pathShim.dirname(dir);\n }\n return null;\n }\n\n private tryPackageEntry(\n pkgRoot: string,\n pkgName: string,\n subpath: string,\n ): string | null {\n const pkg = this.readPkg(pathShim.join(pkgRoot, \"package.json\"));\n\n if (pkg) {\n if (pkg.exports) {\n const target = subpath ? `${pkgName}/${subpath}` : pkgName;\n for (const cond of [\n { require: true }, // node + require + default (auto)\n { import: true }, // node + import + default (auto)\n { browser: true, require: true }, // browser + require + default\n { browser: true, import: true }, // browser + import + default\n { require: true, conditions: [\"production\"] }, // production builds\n ] as const) {\n try {\n const resolved = resolveExports(pkg, target, cond);\n if (resolved?.length) {\n const hit = this.probeFile(pathShim.join(pkgRoot, resolved[0]));\n if (hit) return hit;\n }\n } catch (e) {\n if (this.debug) {\n console.warn(\n `[jiki:resolver] exports resolution failed for '${target}' in ${pkgRoot} with conditions ${JSON.stringify(cond)}: ${(e as Error).message}`,\n );\n }\n }\n }\n // If exports is defined, do NOT fall through to main/module/browser\n // per Node.js module resolution spec\n return null;\n }\n\n if (subpath) {\n const hit = this.probeFile(pathShim.join(pkgRoot, subpath));\n if (hit) return hit;\n }\n\n if (typeof pkg.browser === \"string\") {\n const hit = this.probeFile(pathShim.join(pkgRoot, pkg.browser));\n if (hit) return hit;\n }\n\n if (pkg.main) {\n const hit = this.probeFile(pathShim.join(pkgRoot, pkg.main));\n if (hit) return hit;\n }\n\n if (pkg.module) {\n const hit = this.probeFile(pathShim.join(pkgRoot, pkg.module));\n if (hit) return hit;\n }\n }\n\n return this.probeFile(subpath ? pathShim.join(pkgRoot, subpath) : pkgRoot);\n }\n}\n","import { MemFS } from \"./memfs\";\nimport type { IExecuteResult } from \"./runtime-interface\";\nimport { simpleHash } from \"./utils/hash\";\nimport { createFsShim, FsShim } from \"./polyfills/fs\";\nimport * as pathShim from \"./polyfills/path\";\nimport { createProcess, Process } from \"./polyfills/process\";\nimport { initChildProcess } from \"./polyfills/child_process\";\nimport { initChokidar } from \"./polyfills/chokidar\";\nimport { initReaddirp } from \"./polyfills/readdirp\";\nimport { initModule } from \"./polyfills/module\";\nimport { bufferPolyfill } from \"./builtins\";\nimport {\n initTranspiler,\n isInitialized,\n needsTranspilation,\n type InitOptions,\n} from \"./transpiler\";\nimport {\n transpileCache,\n ensureTranspiled,\n transformEsmToCjs,\n getProcessedSource,\n} from \"./code-transform\";\nimport {\n ModuleResolver,\n type Module,\n type RuntimeOptions,\n type RequireFunction,\n} from \"./module-resolver\";\nimport {\n wrapDynamicImport,\n buildConsoleProxy,\n buildModuleWrapper,\n} from \"./runtime-helpers\";\nimport { builtinModules } from \"./builtins\";\nimport type { PluginRegistry } from \"./plugin\";\n\nexport type { Module, RuntimeOptions, RequireFunction };\n\nfunction createRequire(\n vfs: MemFS,\n fsShim: FsShim,\n process: Process,\n currentDir: string,\n moduleCache: Record<string, Module>,\n options: RuntimeOptions,\n processedCodeCache?: Map<string, string>,\n pluginRegistry?: PluginRegistry,\n): RequireFunction {\n const resolver = new ModuleResolver(\n vfs,\n fsShim,\n process,\n moduleCache,\n options,\n processedCodeCache || new Map(),\n pluginRegistry,\n );\n return resolver.makeRequire(currentDir);\n}\n\nexport class Kernel {\n vfs: MemFS;\n fsShim: FsShim;\n process: Process;\n moduleCache: Record<string, Module> = {};\n processedCodeCache = new Map<string, string>();\n private options: RuntimeOptions;\n private maxCacheSize = 4000;\n private cacheAccessTime = new Map<string, number>();\n private resolver: ModuleResolver;\n /** Plugin registry for this kernel (shared with child kernels). */\n readonly pluginRegistry?: PluginRegistry;\n\n constructor(\n vfs: MemFS,\n options: RuntimeOptions = {},\n pluginRegistry?: PluginRegistry,\n ) {\n this.vfs = vfs;\n this.options = options;\n this.pluginRegistry = pluginRegistry;\n this.process = createProcess({\n cwd: options.cwd || \"/\",\n env: options.env,\n onStdout: options.onStdout,\n onStderr: options.onStderr,\n });\n this.fsShim = createFsShim(vfs, () => this.process.cwd());\n this.resolver = new ModuleResolver(\n vfs,\n this.fsShim,\n this.process,\n this.moduleCache,\n this.options,\n this.processedCodeCache,\n pluginRegistry,\n );\n initChildProcess(\n vfs,\n (v, opts) => new Kernel(v, opts as RuntimeOptions, pluginRegistry),\n );\n initChokidar(vfs);\n initReaddirp(vfs);\n initModule(dir => this.resolver.makeRequire(dir));\n this.patchGlobals();\n }\n\n async init(options?: InitOptions): Promise<void> {\n await initTranspiler(options);\n }\n\n async prepareFile(filename: string): Promise<void> {\n if (!isInitialized()) await initTranspiler();\n await this.walkImports(filename, new Set());\n }\n\n private async walkImports(file: string, seen: Set<string>): Promise<void> {\n if (seen.has(file)) return;\n seen.add(file);\n if (!this.vfs.existsSync(file)) return;\n\n const source = this.vfs.readFileSync(file, \"utf8\");\n await ensureTranspiled(file, source);\n\n const hash = simpleHash(source);\n const processed = transpileCache.get(`${file}:${hash}`) || source;\n\n const importPattern =\n /(?:require\\s*\\(\\s*['\"]|from\\s+['\"]|import\\s+['\"])([^'\"]+)['\"]/g;\n const dir = pathShim.dirname(file);\n\n let m;\n while ((m = importPattern.exec(processed)) !== null) {\n const spec = m[1];\n if (!spec.startsWith(\".\") && !spec.startsWith(\"/\")) continue;\n const abs = spec.startsWith(\"/\") ? spec : pathShim.resolve(dir, spec);\n const resolved = this.resolver.probeFile(abs);\n if (resolved) await this.walkImports(resolved, seen);\n }\n }\n\n private patchGlobals(): void {\n const inBrowser =\n typeof window !== \"undefined\" || typeof importScripts === \"function\";\n\n if (!globalThis.Buffer || inBrowser) {\n (globalThis as any).Buffer = bufferPolyfill.Buffer;\n }\n\n if (typeof globalThis.setImmediate === \"undefined\") {\n (globalThis as any).setImmediate = (fn: () => void, ...args: unknown[]) =>\n setTimeout(fn, 0, ...args);\n (globalThis as any).clearImmediate = clearTimeout;\n }\n\n if (inBrowser && !(globalThis.setTimeout as any).__patched) {\n const origTimeout = globalThis.setTimeout;\n const origInterval = globalThis.setInterval;\n const timerExtras = () => ({\n ref() {\n return this;\n },\n unref() {\n return this;\n },\n refresh() {\n return this;\n },\n hasRef() {\n return true;\n },\n });\n (globalThis as any).setTimeout = Object.assign(\n (fn: () => void, ms?: number, ...args: unknown[]) => {\n const id = origTimeout(fn, ms, ...args);\n return Object.assign(id, {\n ...timerExtras(),\n [Symbol.toPrimitive]() {\n return id;\n },\n });\n },\n { __patched: true },\n );\n (globalThis as any).setInterval = Object.assign(\n (fn: () => void, ms?: number, ...args: unknown[]) => {\n const id = origInterval(fn, ms, ...args);\n return Object.assign(id, {\n ...timerExtras(),\n [Symbol.toPrimitive]() {\n return id;\n },\n });\n },\n { __patched: true },\n );\n }\n\n if (!(Error as any).captureStackTrace) {\n (Error as any).captureStackTrace = (target: Error) => {\n const trace = new Error().stack;\n if (trace)\n Object.defineProperty(target, \"stack\", {\n value: trace,\n writable: true,\n configurable: true,\n });\n };\n }\n if (!(Error as any).prepareStackTrace) {\n (Error as any).prepareStackTrace = undefined;\n }\n }\n\n execute(code: string, filename?: string): IExecuteResult {\n const fname = filename || `/__exec_${simpleHash(code)}.js`;\n this.vfs.writeFileSync(fname, code);\n return this.runFileSync(fname);\n }\n\n executeSync(code: string, filename?: string): IExecuteResult {\n return this.execute(code, filename);\n }\n\n async executeAsync(code: string, filename?: string): Promise<IExecuteResult> {\n return this.execute(code, filename);\n }\n\n runFile(filename: string): IExecuteResult {\n return this.runFileSync(filename);\n }\n\n runFileSync(filename: string): IExecuteResult {\n const dir = pathShim.dirname(filename);\n const localRequire = this.resolver.makeRequire(dir);\n\n this.trimCacheIfOversized();\n\n const entry: Module = {\n id: filename,\n filename,\n exports: {},\n loaded: false,\n children: [],\n paths: [dir],\n };\n\n const rawSource = this.vfs.readFileSync(filename, \"utf8\");\n let source = getProcessedSource(\n rawSource,\n filename,\n this.processedCodeCache,\n this.options.sourceMaps,\n );\n // Run plugin transform pipeline on the executed file.\n if (this.pluginRegistry) {\n source = this.pluginRegistry.runTransform(filename, source);\n }\n\n const meta = { url: `file://${filename}`, dirname: dir, filename };\n const dynImport = wrapDynamicImport(localRequire);\n const consoleFacade = buildConsoleProxy(this.options.onConsole);\n const wrapper = buildModuleWrapper(source, filename);\n\n wrapper(\n entry.exports,\n localRequire,\n entry,\n filename,\n dir,\n this.process,\n consoleFacade,\n meta,\n dynImport,\n );\n\n entry.loaded = true;\n this.moduleCache[filename] = entry;\n this.cacheAccessTime.set(filename, Date.now());\n return { exports: entry.exports, module: entry };\n }\n\n async runFileAsync(filename: string): Promise<IExecuteResult> {\n return this.runFileSync(filename);\n }\n\n clearCache(): void {\n for (const key of Object.keys(this.moduleCache)) {\n delete this.moduleCache[key];\n }\n this.cacheAccessTime.clear();\n this.processedCodeCache.clear();\n this.resolver.clearMemos();\n }\n\n invalidateModule(path: string): void {\n delete this.moduleCache[path];\n const prefix = `${path}:`;\n for (const key of this.processedCodeCache.keys()) {\n if (key.startsWith(prefix)) this.processedCodeCache.delete(key);\n }\n }\n\n invalidateModulesMatching(predicate: (path: string) => boolean): void {\n for (const key of Object.keys(this.moduleCache)) {\n if (predicate(key)) delete this.moduleCache[key];\n }\n for (const key of this.processedCodeCache.keys()) {\n if (predicate(key.split(\":\")[0])) this.processedCodeCache.delete(key);\n }\n }\n\n getVFS(): MemFS {\n return this.vfs;\n }\n getProcess(): Process {\n return this.process;\n }\n\n private trimCacheIfOversized(): void {\n const keys = Object.keys(this.moduleCache);\n if (keys.length > this.maxCacheSize) {\n // Sort by last-access time (LRU first) and evict least recently used\n const sorted = keys.sort((a, b) => {\n const aTime = this.cacheAccessTime.get(a) || 0;\n const bTime = this.cacheAccessTime.get(b) || 0;\n return aTime - bTime;\n });\n const evictCount = keys.length - this.maxCacheSize + 100;\n const stale = sorted.slice(0, evictCount);\n for (const k of stale) {\n delete this.moduleCache[k];\n this.cacheAccessTime.delete(k);\n }\n }\n }\n\n /** Record access time for a module cache entry */\n touchCacheEntry(key: string): void {\n this.cacheAccessTime.set(key, Date.now());\n }\n\n createREPL(): { eval: (code: string) => unknown } {\n const scope: Record<string, unknown> = {};\n const dir = this.process.cwd();\n const localRequire = this.resolver.makeRequire(dir);\n const VALID_IDENT = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\n return {\n eval: (input: string): unknown => {\n const adapted = input.replace(/^(const|let)\\s+/gm, \"var \");\n // Filter scope keys to only valid JS identifiers to prevent code injection\n const safeKeys = Object.keys(scope).filter(k => VALID_IDENT.test(k));\n const safeValues = safeKeys.map(k => scope[k]);\n try {\n const fn = new Function(\n \"require\",\n \"process\",\n \"console\",\n ...safeKeys,\n `return (${adapted})`,\n );\n return fn(localRequire, this.process, console, ...safeValues);\n } catch {\n const fn = new Function(\n \"require\",\n \"process\",\n \"console\",\n ...safeKeys,\n adapted,\n );\n return fn(localRequire, this.process, console, ...safeValues);\n }\n },\n };\n }\n}\n\nexport { transformEsmToCjs, createRequire, builtinModules };\nexport { Kernel as Runtime };\n","import type { PackageCache } from \"./cache\";\n\nexport interface RegistryOptions {\n registry?: string;\n token?: string;\n /** Optional package cache for manifest and tarball caching. */\n cache?: PackageCache;\n}\n\nexport interface PackageManifest {\n name: string;\n \"dist-tags\": Record<string, string>;\n versions: Record<string, PackageVersion>;\n}\n\nexport interface PackageVersion {\n name: string;\n version: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependenciesMeta?: Record<string, { optional?: boolean }>;\n bin?: string | Record<string, string>;\n main?: string;\n module?: string;\n exports?: unknown;\n dist: {\n tarball: string;\n shasum: string;\n integrity?: string;\n };\n}\n\nexport class Registry {\n private baseUrl: string;\n private token?: string;\n private inMemoryCache = new Map<string, PackageManifest>();\n private packageCache?: PackageCache;\n\n constructor(options: RegistryOptions = {}) {\n this.baseUrl = (options.registry || \"https://registry.npmjs.org\").replace(\n /\\/$/,\n \"\",\n );\n this.token = options.token;\n this.packageCache = options.cache;\n }\n\n async getManifest(name: string): Promise<PackageManifest> {\n // Check in-memory cache first (legacy behaviour)\n if (this.inMemoryCache.has(name)) return this.inMemoryCache.get(name)!;\n\n // Check package cache (with TTL)\n if (this.packageCache) {\n return this.packageCache.getManifest(name, () =>\n this.fetchManifest(name),\n );\n }\n\n return this.fetchManifest(name);\n }\n\n private async fetchManifest(name: string): Promise<PackageManifest> {\n const encodedName = name.startsWith(\"@\")\n ? `@${encodeURIComponent(name.slice(1))}`\n : encodeURIComponent(name);\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (this.token) {\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n }\n const response = await fetch(`${this.baseUrl}/${encodedName}`, {\n headers,\n });\n\n if (!response.ok)\n throw new Error(`Failed to fetch package ${name}: ${response.status}`);\n\n const manifest = (await response.json()) as PackageManifest;\n this.inMemoryCache.set(name, manifest);\n return manifest;\n }\n\n async getVersion(name: string, version: string): Promise<PackageVersion> {\n const manifest = await this.getManifest(name);\n if (manifest[\"dist-tags\"][version])\n version = manifest[\"dist-tags\"][version];\n const pkgVersion = manifest.versions[version];\n if (!pkgVersion)\n throw new Error(`Version ${version} not found for ${name}`);\n return pkgVersion;\n }\n\n async downloadTarball(url: string): Promise<ArrayBuffer> {\n // Check tarball cache\n if (this.packageCache) {\n const data = await this.packageCache.getTarball(url, async () => {\n const raw = await this.fetchTarball(url);\n return new Uint8Array(raw);\n });\n return data.buffer as ArrayBuffer;\n }\n return this.fetchTarball(url);\n }\n\n private async fetchTarball(url: string): Promise<ArrayBuffer> {\n const headers: Record<string, string> = {};\n if (this.token) {\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n }\n const response = await fetch(url, { headers });\n if (!response.ok)\n throw new Error(`Failed to download tarball: ${response.status}`);\n return response.arrayBuffer();\n }\n\n clearCache(): void {\n this.inMemoryCache.clear();\n }\n}\n","import type { Registry, PackageVersion } from \"./registry\";\n\nexport interface ResolvedPackage {\n name: string;\n version: string;\n dependencies: Record<string, string>;\n dist: { tarball: string; shasum: string };\n bin?: string | Record<string, string>;\n}\n\nexport interface ResolveOptions {\n registry: Registry;\n includeDev?: boolean;\n includeOptional?: boolean;\n}\n\nexport class SemVer {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n readonly pre: string;\n\n constructor(raw: string) {\n const cleaned = raw.replace(/^[=v]+/, \"\");\n const [mainPart, prePart = \"\"] = cleaned.split(\"-\");\n const nums = mainPart.split(\".\").map(Number);\n this.major = nums[0] || 0;\n this.minor = nums[1] || 0;\n this.patch = nums[2] || 0;\n this.pre = prePart;\n }\n\n compareTo(other: SemVer): number {\n if (this.major !== other.major) return this.major - other.major;\n if (this.minor !== other.minor) return this.minor - other.minor;\n if (this.patch !== other.patch) return this.patch - other.patch;\n if (!this.pre && other.pre) return 1;\n if (this.pre && !other.pre) return -1;\n if (this.pre && other.pre) {\n // Compare prerelease segments per semver spec:\n // split on \".\", compare each segment numerically if both numeric, otherwise lexically\n const aParts = this.pre.split(\".\");\n const bParts = other.pre.split(\".\");\n const len = Math.max(aParts.length, bParts.length);\n for (let i = 0; i < len; i++) {\n if (i >= aParts.length) return -1; // fewer segments = lower precedence\n if (i >= bParts.length) return 1;\n const aNum = /^\\d+$/.test(aParts[i]);\n const bNum = /^\\d+$/.test(bParts[i]);\n if (aNum && bNum) {\n const diff = Number(aParts[i]) - Number(bParts[i]);\n if (diff !== 0) return diff;\n } else if (aNum !== bNum) {\n // Numeric identifiers have lower precedence than string identifiers\n return aNum ? -1 : 1;\n } else {\n if (aParts[i] < bParts[i]) return -1;\n if (aParts[i] > bParts[i]) return 1;\n }\n }\n }\n return 0;\n }\n\n matches(range: string): boolean {\n return satisfies(this.toString(), range);\n }\n\n toString(): string {\n const base = `${this.major}.${this.minor}.${this.patch}`;\n return this.pre ? `${base}-${this.pre}` : base;\n }\n}\n\ninterface RangeConstraint {\n op:\n | \"=\"\n | \">=\"\n | \"<=\"\n | \">\"\n | \"<\"\n | \"^\"\n | \"~\"\n | \"partial-major\"\n | \"partial-minor\"\n | \"any\";\n target: SemVer;\n raw?: string;\n}\n\nfunction parseConstraint(token: string): RangeConstraint | null {\n const t = token.trim();\n if (!t || t === \"*\" || t === \"latest\")\n return { op: \"any\", target: new SemVer(\"0.0.0\") };\n if (t.startsWith(\"npm:\")) return { op: \"any\", target: new SemVer(\"0.0.0\") };\n\n if (t.startsWith(\">=\")) return { op: \">=\", target: new SemVer(t.slice(2)) };\n if (t.startsWith(\"<=\")) return { op: \"<=\", target: new SemVer(t.slice(2)) };\n if (t.startsWith(\">\") && !t.startsWith(\">=\"))\n return { op: \">\", target: new SemVer(t.slice(1)) };\n if (t.startsWith(\"<\") && !t.startsWith(\"<=\"))\n return { op: \"<\", target: new SemVer(t.slice(1)) };\n if (t.startsWith(\"^\")) return { op: \"^\", target: new SemVer(t.slice(1)) };\n if (t.startsWith(\"~\")) return { op: \"~\", target: new SemVer(t.slice(1)) };\n if (t.startsWith(\"=\")) return { op: \"=\", target: new SemVer(t.slice(1)) };\n\n const dots = (t.match(/\\./g) || []).length;\n if (dots === 0 && /^\\d+$/.test(t))\n return { op: \"partial-major\", target: new SemVer(t + \".0.0\") };\n if (dots === 1 && /^\\d+\\.\\d+$/.test(t))\n return { op: \"partial-minor\", target: new SemVer(t + \".0\") };\n\n return { op: \"=\", target: new SemVer(t) };\n}\n\nfunction testConstraint(ver: SemVer, c: RangeConstraint): boolean {\n switch (c.op) {\n case \"any\":\n return true;\n case \"=\":\n return ver.compareTo(c.target) === 0;\n case \">=\":\n return ver.compareTo(c.target) >= 0;\n case \"<=\":\n return ver.compareTo(c.target) <= 0;\n case \">\":\n return ver.compareTo(c.target) > 0;\n case \"<\":\n return ver.compareTo(c.target) < 0;\n case \"~\":\n return (\n ver.major === c.target.major &&\n ver.minor === c.target.minor &&\n ver.patch >= c.target.patch\n );\n case \"^\": {\n const r = c.target;\n if (ver.compareTo(r) < 0) return false; // below minimum\n if (r.major > 0) return ver.major === r.major;\n if (r.minor > 0) return ver.major === 0 && ver.minor === r.minor;\n return ver.major === 0 && ver.minor === 0 && ver.patch === r.patch;\n }\n case \"partial-major\":\n return ver.major === c.target.major;\n case \"partial-minor\":\n return ver.major === c.target.major && ver.minor === c.target.minor;\n }\n}\n\nfunction satisfies(version: string, range: string): boolean {\n range = range.trim();\n if (range === \"*\" || range === \"\" || range === \"latest\") return true;\n if (range.startsWith(\"npm:\")) return true;\n\n if (range.includes(\"||\")) {\n return range.split(\"||\").some(alt => satisfies(version, alt.trim()));\n }\n\n range = range.replace(/(>=?|<=?|[~^=])\\s+/g, \"$1\");\n\n const tokens = range.split(/\\s+/).filter(Boolean);\n if (tokens.length > 1 && tokens[1] === \"-\" && tokens.length === 3) {\n return (\n satisfies(version, `>=${tokens[0]}`) &&\n satisfies(version, `<=${tokens[2]}`)\n );\n }\n\n const ver = new SemVer(version);\n for (const tok of tokens) {\n const c = parseConstraint(tok);\n if (!c || !testConstraint(ver, c)) return false;\n }\n return true;\n}\n\nfunction compareVersions(a: string, b: string): number {\n return new SemVer(a).compareTo(new SemVer(b));\n}\n\nfunction findBestVersion(versions: string[], range: string): string | null {\n const valid = versions.filter(v => satisfies(v, range));\n if (valid.length === 0) return null;\n return valid.sort(compareVersions).pop()!;\n}\n\ninterface QueueEntry {\n name: string;\n range: string;\n optional?: boolean;\n}\n\nexport async function resolveDependencies(\n name: string,\n versionRange: string,\n options: ResolveOptions,\n): Promise<Map<string, ResolvedPackage>> {\n const resolved = new Map<string, ResolvedPackage>();\n const visited = new Set<string>();\n const queue: QueueEntry[] = [{ name, range: versionRange }];\n\n while (queue.length > 0) {\n const batch = queue.splice(0, queue.length);\n const pending = batch.filter(entry => {\n const key = `${entry.name}@${entry.range}`;\n if (visited.has(key)) return false;\n visited.add(key);\n return true;\n });\n\n const results = await Promise.all(\n pending.map(async entry => {\n try {\n const manifest = await options.registry.getManifest(entry.name);\n const versions = Object.keys(manifest.versions);\n let target = entry.range;\n\n if (manifest[\"dist-tags\"][entry.range]) {\n target = manifest[\"dist-tags\"][entry.range];\n } else {\n const best = findBestVersion(versions, entry.range);\n if (!best) {\n if (entry.optional) return null;\n throw new Error(\n `No matching version for ${entry.name}@${entry.range}`,\n );\n }\n target = best;\n }\n\n if (resolved.has(entry.name)) return null;\n\n const pkgVersion = manifest.versions[target];\n if (!pkgVersion) {\n if (entry.optional) return null;\n throw new Error(`Version ${target} not found for ${entry.name}`);\n }\n\n const deps = mergePeerDeps(\n pkgVersion.dependencies || {},\n pkgVersion.peerDependencies || {},\n pkgVersion.peerDependenciesMeta,\n );\n\n // Include optional dependencies when includeOptional is set\n if (options.includeOptional && pkgVersion.optionalDependencies) {\n for (const [optName, optRange] of Object.entries(\n pkgVersion.optionalDependencies,\n )) {\n if (!deps[optName]) {\n deps[optName] = optRange;\n }\n }\n }\n\n // Track which dependency names came from optionalDependencies\n const optionalDepNames = new Set<string>(\n options.includeOptional && pkgVersion.optionalDependencies\n ? Object.keys(pkgVersion.optionalDependencies)\n : [],\n );\n\n const pkg: ResolvedPackage = {\n name: entry.name,\n version: target,\n dependencies: deps,\n dist: pkgVersion.dist,\n bin: pkgVersion.bin,\n };\n return { pkg, optionalDepNames };\n } catch (err) {\n // Optional dependencies should fail gracefully\n if (entry.optional) return null;\n throw err;\n }\n }),\n );\n\n for (const result of results) {\n if (!result || resolved.has(result.pkg.name)) continue;\n const { pkg, optionalDepNames } = result;\n resolved.set(pkg.name, pkg);\n for (const [depName, depRange] of Object.entries(pkg.dependencies)) {\n queue.push({\n name: depName,\n range: depRange,\n optional: optionalDepNames.has(depName),\n });\n }\n }\n }\n\n return resolved;\n}\n\nexport async function resolveFromPackageJson(\n packageJson: {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n },\n options: ResolveOptions,\n): Promise<Map<string, ResolvedPackage>> {\n const all = new Map<string, ResolvedPackage>();\n const deps = { ...packageJson.dependencies };\n if (options.includeDev) Object.assign(deps, packageJson.devDependencies);\n\n const results = await Promise.all(\n Object.entries(deps).map(([n, r]) =>\n resolveDependencies(n, r, options).catch(\n () => new Map<string, ResolvedPackage>(),\n ),\n ),\n );\n\n for (const result of results) {\n for (const [n, pkg] of result) {\n if (!all.has(n)) all.set(n, pkg);\n }\n }\n\n return all;\n}\n\n/** Merge non-optional peerDependencies into deps. Existing deps take precedence. */\nexport function mergePeerDeps(\n deps: Record<string, string>,\n peerDeps: Record<string, string>,\n peerMeta?: Record<string, { optional?: boolean }>,\n): Record<string, string> {\n const merged = { ...deps };\n for (const [name, range] of Object.entries(peerDeps)) {\n if (!peerMeta?.[name]?.optional && !merged[name]) {\n merged[name] = range;\n }\n }\n return merged;\n}\n\nexport { satisfies, compareVersions, findBestVersion };\n","import pako from \"pako\";\nimport { MemFS } from \"../memfs\";\nimport * as pathShim from \"../polyfills/path\";\nimport type { PackageCache } from \"./cache\";\n\nconst BLOCK = 512;\nconst decoder = new TextDecoder();\n\nfunction decodeField(buf: Uint8Array, start: number, len: number): string {\n let i = start;\n const limit = start + len;\n while (i < limit && buf[i] !== 0) i++;\n return decoder.decode(buf.subarray(start, i));\n}\n\nfunction readSize(buf: Uint8Array, offset: number, len: number): number {\n return parseInt(decodeField(buf, offset, len), 8) || 0;\n}\n\nfunction isZeroBlock(buf: Uint8Array): boolean {\n for (let i = 0; i < buf.length; i++) {\n if (buf[i] !== 0) return false;\n }\n return true;\n}\n\nfunction decompress(raw: Uint8Array): Uint8Array {\n try {\n return pako.ungzip(raw);\n } catch {\n return raw;\n }\n}\n\nasync function fetchArchive(url: string): Promise<Uint8Array> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Failed to download ${url}: ${res.status}`);\n return new Uint8Array(await res.arrayBuffer());\n}\n\nfunction* iterateEntries(tar: Uint8Array): Generator<{\n name: string;\n size: number;\n type: number;\n linkTarget: string;\n data: Uint8Array | null;\n}> {\n let pos = 0;\n while (pos + BLOCK <= tar.length) {\n const hdr = tar.subarray(pos, pos + BLOCK);\n pos += BLOCK;\n\n if (isZeroBlock(hdr)) break;\n\n const rawName = decodeField(hdr, 0, 100);\n if (!rawName) break;\n\n const size = readSize(hdr, 124, 12);\n const type = hdr[156];\n const linkTarget = decodeField(hdr, 157, 100);\n const prefix = decodeField(hdr, 345, 155);\n const name = prefix ? `${prefix}/${rawName}` : rawName;\n\n let data: Uint8Array | null = null;\n if (size > 0 && pos + size <= tar.length) {\n data = tar.subarray(pos, pos + size);\n }\n\n yield { name, size, type, linkTarget, data };\n pos += Math.ceil(size / BLOCK) * BLOCK;\n }\n}\n\nfunction stripPrefix(name: string, depth: number): string {\n if (depth <= 0) return name;\n return name.split(\"/\").slice(depth).join(\"/\");\n}\n\nfunction unpackEntries(\n tar: Uint8Array,\n vfs: MemFS,\n dest: string,\n stripDepth: number,\n): void {\n vfs.mkdirSync(dest, { recursive: true });\n\n for (const entry of iterateEntries(tar)) {\n const relative = stripPrefix(entry.name, stripDepth);\n if (!relative || relative === \".\") continue;\n\n const target = pathShim.join(dest, relative);\n const parentDir = pathShim.dirname(target);\n\n if (entry.type === 53 || entry.name.endsWith(\"/\")) {\n vfs.mkdirSync(target, { recursive: true });\n } else if (entry.type === 0 || entry.type === 48) {\n vfs.mkdirSync(parentDir, { recursive: true });\n vfs.writeFileSync(\n target,\n entry.data ? new Uint8Array(entry.data) : new Uint8Array(0),\n );\n } else if (entry.type === 50 && entry.linkTarget) {\n try {\n vfs.mkdirSync(parentDir, { recursive: true });\n vfs.symlinkSync(entry.linkTarget, target);\n } catch {}\n }\n }\n}\n\nexport async function downloadAndExtract(\n url: string,\n vfs: MemFS,\n destDir: string,\n stripComponents = 1,\n cache?: PackageCache,\n): Promise<void> {\n let compressed: Uint8Array;\n if (cache) {\n compressed = await cache.getTarball(url, () => fetchArchive(url));\n } else {\n compressed = await fetchArchive(url);\n }\n const tar = decompress(compressed);\n unpackEntries(tar, vfs, destDir, stripComponents);\n}\n\nexport async function extractTarball(\n data: Uint8Array,\n vfs: MemFS,\n destDir: string,\n stripComponents = 1,\n): Promise<void> {\n const tar = decompress(data);\n unpackEntries(tar, vfs, destDir, stripComponents);\n}\n","/**\n * Package cache for npm manifests and tarballs.\n *\n * Provides an in-memory cache with an optional persistent backing store\n * (IndexedDB or any `PersistenceAdapter`-like backend). Manifests have a\n * configurable TTL; tarballs are immutable by URL and cached indefinitely.\n *\n * @example\n * ```ts\n * const cache = new PackageCache();\n * const registry = new Registry();\n * // Wrap getManifest with cache\n * const manifest = await cache.getManifest('react', () => registry.getManifest('react'));\n * ```\n */\n\nimport type { PackageManifest } from \"./registry\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PackageCacheOptions {\n /** Manifest TTL in milliseconds. Default: 1 hour. */\n manifestTtlMs?: number;\n /** Maximum number of manifests to keep in memory. Default: 500. */\n maxManifests?: number;\n /** Maximum number of tarballs to keep in memory. Default: 200. */\n maxTarballs?: number;\n}\n\ninterface CachedManifest {\n manifest: PackageManifest;\n timestamp: number;\n}\n\n// ---------------------------------------------------------------------------\n// PackageCache\n// ---------------------------------------------------------------------------\n\n/**\n * In-memory cache for npm package manifests and tarball data.\n *\n * - **Manifests** are keyed by package name with a configurable TTL (default\n * 1 hour). After TTL expiry the manifest is re-fetched on next access.\n * - **Tarballs** are keyed by URL. Since npm tarball URLs are immutable\n * (content-addressed), they are cached indefinitely.\n */\nexport class PackageCache {\n private manifests = new Map<string, CachedManifest>();\n private tarballs = new Map<string, Uint8Array>();\n private manifestTtlMs: number;\n private maxManifests: number;\n private maxTarballs: number;\n\n constructor(options: PackageCacheOptions = {}) {\n this.manifestTtlMs = options.manifestTtlMs ?? 60 * 60 * 1000; // 1 hour\n this.maxManifests = options.maxManifests ?? 500;\n this.maxTarballs = options.maxTarballs ?? 200;\n }\n\n // -- Manifests ------------------------------------------------------------\n\n /**\n * Get a cached manifest, or fetch and cache it.\n *\n * @param name - Package name\n * @param fetcher - Async function that fetches the manifest from the registry\n * @returns The manifest (from cache or freshly fetched)\n */\n async getManifest(\n name: string,\n fetcher: () => Promise<PackageManifest>,\n ): Promise<PackageManifest> {\n const cached = this.manifests.get(name);\n if (cached && Date.now() - cached.timestamp < this.manifestTtlMs) {\n return cached.manifest;\n }\n\n const manifest = await fetcher();\n this.setManifest(name, manifest);\n return manifest;\n }\n\n /** Check if a manifest is cached and not expired. */\n hasManifest(name: string): boolean {\n const cached = this.manifests.get(name);\n return !!cached && Date.now() - cached.timestamp < this.manifestTtlMs;\n }\n\n /** Store a manifest in the cache. */\n setManifest(name: string, manifest: PackageManifest): void {\n if (this.manifests.size >= this.maxManifests) {\n // Evict oldest entry\n const oldest = this.manifests.keys().next().value;\n if (oldest !== undefined) this.manifests.delete(oldest);\n }\n this.manifests.set(name, { manifest, timestamp: Date.now() });\n }\n\n // -- Tarballs -------------------------------------------------------------\n\n /**\n * Get a cached tarball, or fetch and cache it.\n *\n * @param url - Tarball URL (immutable by npm convention)\n * @param fetcher - Async function that downloads the tarball\n * @returns The tarball data\n */\n async getTarball(\n url: string,\n fetcher: () => Promise<Uint8Array>,\n ): Promise<Uint8Array> {\n const cached = this.tarballs.get(url);\n if (cached) return cached;\n\n const data = await fetcher();\n this.setTarball(url, data);\n return data;\n }\n\n /** Check if a tarball is cached. */\n hasTarball(url: string): boolean {\n return this.tarballs.has(url);\n }\n\n /** Store a tarball in the cache. */\n setTarball(url: string, data: Uint8Array): void {\n if (this.tarballs.size >= this.maxTarballs) {\n const oldest = this.tarballs.keys().next().value;\n if (oldest !== undefined) this.tarballs.delete(oldest);\n }\n this.tarballs.set(url, data);\n }\n\n // -- Diagnostics ----------------------------------------------------------\n\n /** Number of cached manifests. */\n get manifestCount(): number {\n return this.manifests.size;\n }\n\n /** Number of cached tarballs. */\n get tarballCount(): number {\n return this.tarballs.size;\n }\n\n /** Total bytes of cached tarballs. */\n get tarballBytes(): number {\n let total = 0;\n for (const data of this.tarballs.values()) total += data.length;\n return total;\n }\n\n // -- Cache control --------------------------------------------------------\n\n /** Clear all cached manifests. */\n clearManifests(): void {\n this.manifests.clear();\n }\n\n /** Clear all cached tarballs. */\n clearTarballs(): void {\n this.tarballs.clear();\n }\n\n /** Clear all cached data. */\n clear(): void {\n this.manifests.clear();\n this.tarballs.clear();\n }\n}\n","/**\n * Lockfile reader for package-lock.json (v3 format).\n *\n * When a lockfile exists, the package manager can skip dependency resolution\n * entirely and use the exact versions and tarball URLs from the lockfile.\n * Combined with the package cache, this enables zero-network deterministic\n * installs.\n */\n\nimport type { MemFS } from \"../memfs\";\nimport * as pathShim from \"../polyfills/path\";\nimport type { ResolvedPackage } from \"./resolver\";\n\n/** A single package entry parsed from a lockfile. */\nexport interface LockfileEntry {\n name: string;\n version: string;\n resolved: string; // tarball URL\n dependencies?: Record<string, string>;\n}\n\n/** Parsed lockfile data. */\nexport interface LockfileData {\n lockfileVersion: number;\n packages: Map<string, LockfileEntry>;\n}\n\n/**\n * Read and parse a package-lock.json (v3 format) from the VFS.\n * Returns `null` if no lockfile exists or it can't be parsed.\n */\nexport function readLockfile(vfs: MemFS, cwd: string): LockfileData | null {\n const lockfilePath = pathShim.join(cwd, \"package-lock.json\");\n try {\n if (!vfs.existsSync(lockfilePath)) return null;\n const content = JSON.parse(vfs.readFileSync(lockfilePath, \"utf8\"));\n return parseLockfileV3(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Parse lockfile JSON (v3 format) into structured data.\n */\nfunction parseLockfileV3(json: Record<string, unknown>): LockfileData | null {\n const lockfileVersion = json.lockfileVersion as number;\n if (!lockfileVersion || lockfileVersion < 3) return null;\n\n const rawPackages = json.packages as\n | Record<\n string,\n {\n version?: string;\n resolved?: string;\n dependencies?: Record<string, string>;\n }\n >\n | undefined;\n\n if (!rawPackages) return null;\n\n const packages = new Map<string, LockfileEntry>();\n\n for (const [key, entry] of Object.entries(rawPackages)) {\n // Keys are like \"node_modules/react\" or \"node_modules/@scope/pkg\"\n if (!key.startsWith(\"node_modules/\")) continue;\n const name = key.slice(\"node_modules/\".length);\n\n if (!entry.version || !entry.resolved) continue;\n\n packages.set(name, {\n name,\n version: entry.version,\n resolved: entry.resolved,\n dependencies: entry.dependencies,\n });\n }\n\n return { lockfileVersion, packages };\n}\n\n/**\n * Convert lockfile entries to ResolvedPackage map for use by the installer.\n * This replaces the full dependency resolution step when a lockfile is available.\n */\nexport function lockfileToResolved(\n lockfile: LockfileData,\n): Map<string, ResolvedPackage> {\n const resolved = new Map<string, ResolvedPackage>();\n\n for (const [name, entry] of lockfile.packages) {\n resolved.set(name, {\n name,\n version: entry.version,\n dependencies: entry.dependencies || {},\n dist: {\n tarball: entry.resolved,\n shasum: \"\",\n },\n });\n }\n\n return resolved;\n}\n","import { MemFS } from \"../memfs\";\nimport { Registry, RegistryOptions } from \"./registry\";\nimport {\n resolveDependencies,\n resolveFromPackageJson,\n satisfies as semverSatisfies,\n compareVersions,\n ResolvedPackage,\n} from \"./resolver\";\nimport { downloadAndExtract } from \"./tarball\";\nimport * as path from \"../polyfills/path\";\nimport { PackageCache, type PackageCacheOptions } from \"./cache\";\nimport { readLockfile, lockfileToResolved } from \"./lockfile-reader\";\n\nexport interface LayoutStrategy {\n getPackageDir(cwd: string, pkgName: string, pkgVersion: string): string;\n createTopLevelLink(\n vfs: MemFS,\n cwd: string,\n pkgName: string,\n pkgVersion: string,\n ): void;\n createDependencyLinks(\n vfs: MemFS,\n cwd: string,\n pkg: ResolvedPackage,\n allResolved: Map<string, ResolvedPackage>,\n ): void;\n createBinStub(\n vfs: MemFS,\n cwd: string,\n cmdName: string,\n targetPath: string,\n ): void;\n}\n\nexport class NpmLayout implements LayoutStrategy {\n getPackageDir(cwd: string, pkgName: string, _pkgVersion: string): string {\n return path.join(cwd, \"node_modules\", pkgName);\n }\n\n createTopLevelLink(): void {}\n createDependencyLinks(): void {}\n\n createBinStub(\n vfs: MemFS,\n cwd: string,\n cmdName: string,\n targetPath: string,\n ): void {\n const binDir = path.join(cwd, \"node_modules\", \".bin\");\n vfs.mkdirSync(binDir, { recursive: true });\n const stubPath = path.join(binDir, cmdName);\n vfs.writeFileSync(\n stubPath,\n `#!/usr/bin/env node\\nrequire(\"${targetPath}\");\\n`,\n );\n }\n}\n\nfunction normalizeBin(\n pkgName: string,\n bin?: Record<string, string> | string,\n): Record<string, string> {\n if (!bin) return {};\n if (typeof bin === \"string\") {\n const cmdName = pkgName.includes(\"/\") ? pkgName.split(\"/\").pop()! : pkgName;\n return { [cmdName]: bin };\n }\n return bin;\n}\n\nexport function parsePackageSpec(spec: string): {\n name: string;\n version: string;\n} {\n if (spec.startsWith(\"@\")) {\n const atIdx = spec.indexOf(\"@\", 1);\n if (atIdx > 0)\n return { name: spec.slice(0, atIdx), version: spec.slice(atIdx + 1) };\n return { name: spec, version: \"latest\" };\n }\n const atIdx = spec.lastIndexOf(\"@\");\n if (atIdx > 0)\n return { name: spec.slice(0, atIdx), version: spec.slice(atIdx + 1) };\n return { name: spec, version: \"latest\" };\n}\n\nexport interface InstallOptions {\n registry?: string;\n save?: boolean;\n saveDev?: boolean;\n includeDev?: boolean;\n includeOptional?: boolean;\n onProgress?: (message: string) => void;\n transform?: boolean;\n concurrency?: number;\n}\n\nexport interface InstallResult {\n installed: Map<string, ResolvedPackage>;\n added: string[];\n}\n\nconst DEFAULT_CONCURRENCY =\n typeof navigator !== \"undefined\" && navigator.hardwareConcurrency\n ? navigator.hardwareConcurrency\n : 6;\n\nexport class PackageManager {\n private vfs: MemFS;\n private registry: Registry;\n private cwd: string;\n readonly layout: LayoutStrategy;\n /** Package cache for manifests and tarballs. */\n readonly cache: PackageCache;\n\n constructor(\n vfs: MemFS,\n options: {\n cwd?: string;\n layout?: LayoutStrategy;\n cache?: PackageCache;\n } & RegistryOptions = {},\n ) {\n this.vfs = vfs;\n this.cache = options.cache || new PackageCache();\n this.registry = new Registry({ ...options, cache: this.cache });\n this.cwd = options.cwd || \"/\";\n this.layout = options.layout || new NpmLayout();\n }\n\n /** Clear the package cache (manifests and tarballs). */\n clearCache(): void {\n this.cache.clear();\n }\n\n async install(\n packageSpec: string | string[],\n options: InstallOptions = {},\n ): Promise<InstallResult> {\n const specs = Array.isArray(packageSpec) ? packageSpec : [packageSpec];\n const { onProgress } = options;\n const allResolved = new Map<string, ResolvedPackage>();\n const added: string[] = [];\n\n const results = await Promise.all(\n specs.map(async spec => {\n const { name, version } = parsePackageSpec(spec);\n onProgress?.(`Resolving ${name}@${version || \"latest\"}...`);\n return resolveDependencies(name, version || \"latest\", {\n registry: this.registry,\n includeDev: options.includeDev,\n includeOptional: options.includeOptional,\n });\n }),\n );\n\n for (const result of results) {\n for (const [name, pkg] of result) {\n if (!allResolved.has(name)) {\n allResolved.set(name, pkg);\n } else {\n // Deduplicate: keep the higher version when two specs resolve the same package\n const existing = allResolved.get(name)!;\n if (\n pkg.version !== existing.version &&\n compareVersions(pkg.version, existing.version) > 0\n ) {\n allResolved.set(name, pkg);\n }\n }\n }\n }\n\n const packages = Array.from(allResolved.values());\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n onProgress?.(`Downloading ${packages.length} packages...`);\n\n for (let i = 0; i < packages.length; i += concurrency) {\n const batch = packages.slice(i, i + concurrency);\n await Promise.all(\n batch.map(async pkg => {\n const destDir = this.layout.getPackageDir(\n this.cwd,\n pkg.name,\n pkg.version,\n );\n if (this.vfs.existsSync(destDir)) return;\n onProgress?.(`Installing ${pkg.name}@${pkg.version}`);\n await downloadAndExtract(\n pkg.dist.tarball,\n this.vfs,\n destDir,\n 1,\n this.cache,\n );\n added.push(`${pkg.name}@${pkg.version}`);\n\n this.layout.createTopLevelLink(\n this.vfs,\n this.cwd,\n pkg.name,\n pkg.version,\n );\n\n const binEntries = normalizeBin(pkg.name, pkg.bin);\n for (const [cmdName, binPath] of Object.entries(binEntries)) {\n const targetPath = path.join(destDir, binPath);\n this.layout.createBinStub(this.vfs, this.cwd, cmdName, targetPath);\n }\n }),\n );\n }\n\n for (const pkg of packages) {\n this.layout.createDependencyLinks(this.vfs, this.cwd, pkg, allResolved);\n }\n\n if (options.save || options.saveDev) {\n this.updatePackageJson(specs, allResolved, options.saveDev);\n }\n\n buildLockfile(this.vfs, allResolved, this.cwd);\n\n onProgress?.(`Installed ${added.length} packages.`);\n return { installed: allResolved, added };\n }\n\n async installFromPackageJson(\n options: InstallOptions = {},\n ): Promise<InstallResult> {\n const pkgJsonPath = path.join(this.cwd, \"package.json\");\n if (!this.vfs.existsSync(pkgJsonPath))\n throw new Error(\"No package.json found\");\n\n // Try lockfile-first installation (deterministic, no network for resolution)\n const lockfile = readLockfile(this.vfs, this.cwd);\n let resolved: Map<string, ResolvedPackage>;\n if (lockfile && lockfile.packages.size > 0) {\n options.onProgress?.(\"Using lockfile for deterministic install...\");\n resolved = lockfileToResolved(lockfile);\n } else {\n const pkgJson = JSON.parse(this.vfs.readFileSync(pkgJsonPath, \"utf8\"));\n resolved = await resolveFromPackageJson(pkgJson, {\n registry: this.registry,\n includeDev: options.includeDev,\n includeOptional: options.includeOptional,\n });\n }\n\n const added: string[] = [];\n const packages = Array.from(resolved.values());\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n options.onProgress?.(`Downloading ${packages.length} packages...`);\n\n for (let i = 0; i < packages.length; i += concurrency) {\n const batch = packages.slice(i, i + concurrency);\n await Promise.all(\n batch.map(async pkg => {\n const destDir = this.layout.getPackageDir(\n this.cwd,\n pkg.name,\n pkg.version,\n );\n if (this.vfs.existsSync(destDir)) return;\n options.onProgress?.(`Installing ${pkg.name}@${pkg.version}`);\n await downloadAndExtract(\n pkg.dist.tarball,\n this.vfs,\n destDir,\n 1,\n this.cache,\n );\n added.push(`${pkg.name}@${pkg.version}`);\n\n this.layout.createTopLevelLink(\n this.vfs,\n this.cwd,\n pkg.name,\n pkg.version,\n );\n\n const binEntries = normalizeBin(pkg.name, pkg.bin);\n for (const [cmdName, binPath] of Object.entries(binEntries)) {\n const targetPath = path.join(destDir, binPath);\n this.layout.createBinStub(this.vfs, this.cwd, cmdName, targetPath);\n }\n }),\n );\n }\n\n for (const pkg of packages) {\n this.layout.createDependencyLinks(this.vfs, this.cwd, pkg, resolved);\n }\n\n buildLockfile(this.vfs, resolved, this.cwd);\n\n return { installed: resolved, added };\n }\n\n list(): string[] {\n const nmDir = path.join(this.cwd, \"node_modules\");\n if (!this.vfs.existsSync(nmDir)) return [];\n const entries = this.vfs.readdirSync(nmDir);\n const packages: string[] = [];\n for (const entry of entries) {\n if (entry.startsWith(\".\")) continue;\n if (entry.startsWith(\"@\")) {\n const scopeDir = path.join(nmDir, entry);\n const scoped = this.vfs.readdirSync(scopeDir);\n for (const s of scoped) packages.push(`${entry}/${s}`);\n } else {\n packages.push(entry);\n }\n }\n return packages;\n }\n\n private updatePackageJson(\n specs: string[],\n resolved: Map<string, ResolvedPackage>,\n isDev?: boolean,\n ): void {\n const pkgJsonPath = path.join(this.cwd, \"package.json\");\n let pkgJson: Record<string, unknown> = {};\n if (this.vfs.existsSync(pkgJsonPath)) {\n pkgJson = JSON.parse(this.vfs.readFileSync(pkgJsonPath, \"utf8\"));\n }\n const field = isDev ? \"devDependencies\" : \"dependencies\";\n if (!pkgJson[field]) pkgJson[field] = {};\n const deps = pkgJson[field] as Record<string, string>;\n for (const spec of specs) {\n const { name } = parsePackageSpec(spec);\n const pkg = resolved.get(name);\n if (pkg) deps[name] = `^${pkg.version}`;\n }\n this.vfs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n }\n}\n\nexport function buildLockfile(\n vfs: MemFS,\n resolved: Map<string, ResolvedPackage>,\n cwd: string = \"/\",\n): void {\n const lockfile: Record<string, unknown> = {\n name: \"jiki-project\",\n lockfileVersion: 3,\n packages: {} as Record<\n string,\n {\n version: string;\n resolved: string;\n dependencies?: Record<string, string>;\n }\n >,\n };\n const packages = lockfile.packages as Record<string, any>;\n for (const [name, pkg] of resolved) {\n packages[`node_modules/${name}`] = {\n version: pkg.version,\n resolved: pkg.dist.tarball,\n dependencies:\n Object.keys(pkg.dependencies).length > 0 ? pkg.dependencies : undefined,\n };\n }\n const lockfilePath = path.join(cwd, \"package-lock.json\");\n vfs.writeFileSync(lockfilePath, JSON.stringify(lockfile, null, 2));\n}\n\nexport { Registry } from \"./registry\";\nexport type { RegistryOptions } from \"./registry\";\nexport type { ResolvedPackage } from \"./resolver\";\nexport { satisfies, compareVersions } from \"./resolver\";\nexport { readLockfile, lockfileToResolved } from \"./lockfile-reader\";\nexport type { LockfileData, LockfileEntry } from \"./lockfile-reader\";\n","import { MemFS } from \"../memfs\";\nimport { LayoutStrategy } from \"./index\";\nimport { ResolvedPackage } from \"./resolver\";\nimport * as path from \"../polyfills/path\";\n\n/**\n * pnpm-style content-addressable store layout.\n *\n * Structure:\n * node_modules/.pnpm/<name>@<version>/node_modules/<name>/ ← actual files\n * node_modules/<name> → symlink to store path above\n * node_modules/.pnpm/<name>@<version>/node_modules/<dep> → symlink to dep store\n */\nexport class PnpmLayout implements LayoutStrategy {\n private storePath(cwd: string, pkgName: string, pkgVersion: string): string {\n const storeKey = `${sanitiseName(pkgName)}@${pkgVersion}`;\n return path.join(\n cwd,\n \"node_modules\",\n \".pnpm\",\n storeKey,\n \"node_modules\",\n pkgName,\n );\n }\n\n getPackageDir(cwd: string, pkgName: string, pkgVersion: string): string {\n return this.storePath(cwd, pkgName, pkgVersion);\n }\n\n createTopLevelLink(\n vfs: MemFS,\n cwd: string,\n pkgName: string,\n pkgVersion: string,\n ): void {\n const linkPath = path.join(cwd, \"node_modules\", pkgName);\n\n if (pkgName.startsWith(\"@\")) {\n const scopeDir = path.join(cwd, \"node_modules\", pkgName.split(\"/\")[0]);\n if (!vfs.existsSync(scopeDir)) {\n vfs.mkdirSync(scopeDir, { recursive: true });\n }\n }\n\n if (vfs.existsSync(linkPath)) return;\n\n const target = this.storePath(cwd, pkgName, pkgVersion);\n vfs.symlinkSync(target, linkPath);\n }\n\n createDependencyLinks(\n vfs: MemFS,\n cwd: string,\n pkg: ResolvedPackage,\n allResolved: Map<string, ResolvedPackage>,\n ): void {\n const declared = pkg.dependencies;\n if (!declared || Object.keys(declared).length === 0) return;\n\n const storeKey = `${sanitiseName(pkg.name)}@${pkg.version}`;\n const parentNm = path.join(\n cwd,\n \"node_modules\",\n \".pnpm\",\n storeKey,\n \"node_modules\",\n );\n\n for (const depName of Object.keys(declared)) {\n const resolved = allResolved.get(depName);\n if (!resolved) continue;\n\n const depLink = path.join(parentNm, depName);\n if (vfs.existsSync(depLink)) continue;\n\n if (depName.startsWith(\"@\")) {\n const scopeDir = path.join(parentNm, depName.split(\"/\")[0]);\n if (!vfs.existsSync(scopeDir)) {\n vfs.mkdirSync(scopeDir, { recursive: true });\n }\n }\n\n const depStore = this.storePath(cwd, resolved.name, resolved.version);\n vfs.symlinkSync(depStore, depLink);\n }\n }\n\n createBinStub(\n vfs: MemFS,\n cwd: string,\n cmdName: string,\n targetPath: string,\n ): void {\n const binDir = path.join(cwd, \"node_modules\", \".bin\");\n vfs.mkdirSync(binDir, { recursive: true });\n const stubPath = path.join(binDir, cmdName);\n vfs.writeFileSync(\n stubPath,\n `#!/usr/bin/env node\\nrequire(\"${targetPath}\");\\n`,\n );\n }\n}\n\n/** Replace `/` in scoped names with `+` for flat store keys (matches real pnpm). */\nfunction sanitiseName(name: string): string {\n return name.replace(/\\//g, \"+\");\n}\n","import * as pathShim from \"./polyfills/path\";\nimport { Kernel } from \"./kernel\";\nimport { bundle, initTranspiler } from \"./transpiler\";\nimport {\n getStreamingState,\n setActiveProcessStdin,\n getActiveForkedChildren,\n setOnForkedChildExit,\n} from \"./polyfills/child_process\";\nimport type { ShellContext, ShellResult, CommandHandler } from \"./shell\";\n\nconst ok = (stdout = \"\"): ShellResult => ({ stdout, stderr: \"\", exitCode: 0 });\nconst fail = (stderr: string, code = 1): ShellResult => ({\n stdout: \"\",\n stderr,\n exitCode: code,\n});\n\nfunction echoCmd(args: string[]): ShellResult {\n return ok(args.join(\" \") + \"\\n\");\n}\n\nfunction cdCmd(args: string[], ctx: ShellContext): ShellResult {\n const target = args[0] || ctx.env.HOME || \"/\";\n const resolved = pathShim.isAbsolute(target)\n ? target\n : pathShim.resolve(ctx.cwd, target);\n if (\n ctx.vfs.existsSync(resolved) &&\n ctx.vfs.statSync(resolved).isDirectory()\n ) {\n ctx.setCwd(resolved);\n ctx.runtime.getProcess().chdir(resolved);\n return ok();\n }\n return fail(`cd: ${target}: No such file or directory\\n`);\n}\n\nfunction pwdCmd(_args: string[], ctx: ShellContext): ShellResult {\n return ok(ctx.cwd + \"\\n\");\n}\n\nfunction lsCmd(args: string[], ctx: ShellContext): ShellResult {\n const positional = args.filter(a => !a.startsWith(\"-\"));\n const dir = positional[0]\n ? pathShim.resolve(ctx.cwd, positional[0])\n : ctx.cwd;\n try {\n const entries = ctx.vfs.readdirSync(dir);\n const showAll =\n args.includes(\"-a\") || args.includes(\"-la\") || args.includes(\"-al\");\n const filtered = showAll\n ? entries\n : entries.filter(e => !e.startsWith(\".\"));\n return ok(filtered.join(\"\\n\") + \"\\n\");\n } catch (e) {\n return fail(`ls: cannot access '${dir}': ${(e as Error).message}\\n`);\n }\n}\n\nfunction catCmd(args: string[], ctx: ShellContext): ShellResult {\n if (args.length === 0) {\n // No file args: read from stdin (pipe data)\n return ok(ctx.stdinData || \"\");\n }\n let out = \"\",\n err = \"\",\n code = 0;\n for (const file of args) {\n const p = pathShim.resolve(ctx.cwd, file);\n try {\n out += ctx.vfs.readFileSync(p, \"utf8\");\n } catch {\n err += `cat: ${file}: No such file or directory\\n`;\n code = 1;\n }\n }\n return { stdout: out, stderr: err, exitCode: code };\n}\n\nfunction mkdirCmd(args: string[], ctx: ShellContext): ShellResult {\n const recursive = args.includes(\"-p\");\n for (const dir of args.filter(a => !a.startsWith(\"-\"))) {\n ctx.vfs.mkdirSync(pathShim.resolve(ctx.cwd, dir), { recursive });\n }\n return ok();\n}\n\nfunction rmCmd(args: string[], ctx: ShellContext): ShellResult {\n const recursive =\n args.includes(\"-r\") || args.includes(\"-rf\") || args.includes(\"-fr\");\n const force =\n args.includes(\"-f\") || args.includes(\"-rf\") || args.includes(\"-fr\");\n for (const file of args.filter(a => !a.startsWith(\"-\"))) {\n const p = pathShim.resolve(ctx.cwd, file);\n try {\n ctx.vfs.rmSync(p, { recursive, force });\n } catch (e) {\n if (!force) return fail(`rm: ${file}: ${(e as Error).message}\\n`);\n }\n }\n return ok();\n}\n\nfunction cpCmd(args: string[], ctx: ShellContext): ShellResult {\n const recursive =\n args.includes(\"-r\") ||\n args.includes(\"-R\") ||\n args.includes(\"-rp\") ||\n args.includes(\"-pr\");\n const positional = args.filter(a => !a.startsWith(\"-\"));\n if (positional.length < 2) return fail(\"cp: missing file operand\\n\");\n const src = pathShim.resolve(ctx.cwd, positional[0]);\n const dest = pathShim.resolve(ctx.cwd, positional[1]);\n\n if (ctx.vfs.existsSync(src) && ctx.vfs.statSync(src).isDirectory()) {\n if (!recursive)\n return fail(\n `cp: -r not specified; omitting directory '${positional[0]}'\\n`,\n );\n copyDirRecursive(ctx.vfs, src, dest);\n } else {\n ctx.vfs.copyFileSync(src, dest);\n }\n return ok();\n}\n\nfunction copyDirRecursive(\n vfs: import(\"./memfs\").MemFS,\n src: string,\n dest: string,\n): void {\n if (!vfs.existsSync(dest)) vfs.mkdirSync(dest, { recursive: true });\n const entries = vfs.readdirSync(src);\n for (const entry of entries) {\n const srcPath = pathShim.join(src, entry);\n const destPath = pathShim.join(dest, entry);\n const stat = vfs.statSync(srcPath);\n if (stat.isDirectory()) {\n copyDirRecursive(vfs, srcPath, destPath);\n } else {\n vfs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\nfunction mvCmd(args: string[], ctx: ShellContext): ShellResult {\n if (args.length < 2) return fail(\"mv: missing file operand\\n\");\n ctx.vfs.renameSync(\n pathShim.resolve(ctx.cwd, args[0]),\n pathShim.resolve(ctx.cwd, args[1]),\n );\n return ok();\n}\n\nfunction touchCmd(args: string[], ctx: ShellContext): ShellResult {\n for (const file of args.filter(a => !a.startsWith(\"-\"))) {\n const p = pathShim.resolve(ctx.cwd, file);\n if (ctx.vfs.existsSync(p)) {\n // Update mtime on existing file\n const now = new Date();\n ctx.vfs.utimesSync(p, now, now);\n } else {\n ctx.vfs.writeFileSync(p, \"\");\n }\n }\n return ok();\n}\n\nfunction whichCmd(args: string[], ctx: ShellContext): ShellResult {\n const target = args[0];\n if (!target) return fail(\"which: missing argument\\n\");\n if ([\"node\", \"npm\", \"npx\", \"pnpm\"].includes(target))\n return ok(`/usr/local/bin/${target}\\n`);\n\n // Search PATH directories\n const pathDirs = (ctx.env.PATH || \"\").split(\":\").filter(Boolean);\n for (const dir of pathDirs) {\n const candidate = pathShim.join(dir, target);\n if (ctx.vfs.existsSync(candidate)) return ok(candidate + \"\\n\");\n }\n\n return fail(`which: no ${target} in (${ctx.env.PATH || \"\"})\\n`);\n}\n\nasync function envCmd(args: string[], ctx: ShellContext): Promise<ShellResult> {\n // Parse VAR=val prefixes; if remaining args form a command, execute with modified env\n const envOverrides: Record<string, string> = {};\n let i = 0;\n while (i < args.length && args[i].includes(\"=\")) {\n const eqIdx = args[i].indexOf(\"=\");\n envOverrides[args[i].slice(0, eqIdx)] = args[i].slice(eqIdx + 1);\n i++;\n }\n const remaining = args.slice(i);\n if (remaining.length > 0) {\n // Execute remaining command with modified env\n const savedEnv = { ...ctx.env };\n Object.assign(ctx.env, envOverrides);\n try {\n return await ctx.exec(remaining.join(\" \"));\n } finally {\n // Restore env\n Object.keys(envOverrides).forEach(k => {\n if (k in savedEnv) ctx.env[k] = savedEnv[k];\n else delete ctx.env[k];\n });\n }\n }\n // No command: just print environment\n const merged = { ...ctx.env, ...envOverrides };\n return ok(\n Object.entries(merged)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"\\n\") + \"\\n\",\n );\n}\n\nfunction exportCmd(args: string[], ctx: ShellContext): ShellResult {\n const validName = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n for (const arg of args) {\n const [k, ...rest] = arg.split(\"=\");\n if (!validName.test(k)) {\n return {\n stdout: \"\",\n stderr: `export: '${k}': not a valid identifier\\n`,\n exitCode: 1,\n };\n }\n if (rest.length) ctx.env[k] = rest.join(\"=\");\n }\n return ok();\n}\n\nasync function nodeCmd(\n args: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n if (args.includes(\"-e\") || args.includes(\"--eval\")) {\n const idx =\n args.indexOf(\"-e\") >= 0 ? args.indexOf(\"-e\") : args.indexOf(\"--eval\");\n const code = args[idx + 1];\n if (code) {\n try {\n ctx.runtime.execute(code);\n } catch (e) {\n return fail((e as Error).message + \"\\n\");\n }\n }\n return ok();\n }\n\n const scriptPath = args[0];\n if (!scriptPath) return ok();\n\n const resolvedPath = pathShim.resolve(ctx.cwd, scriptPath);\n if (!ctx.vfs.existsSync(resolvedPath)) {\n return fail(`Error: Cannot find module '${resolvedPath}'\\n`);\n }\n\n let stdout = \"\";\n let stderr = \"\";\n let exitCalled = false;\n let exitCode = 0;\n let syncExecution = true;\n let exitResolve: ((code: number) => void) | null = null;\n const exitPromise = new Promise<number>(resolve => {\n exitResolve = resolve;\n });\n\n const { streamStdout, streamStderr, abortSignal } = getStreamingState();\n\n const appendStdout = (data: string) => {\n stdout += data;\n if (streamStdout) streamStdout(data);\n };\n const appendStderr = (data: string) => {\n stderr += data;\n if (streamStderr) streamStderr(data);\n };\n\n // Pass the plugin registry from the parent runtime so plugins (onResolve,\n // onLoad, onTransform) are available inside `node` sub-processes.\n const parentPlugins = ctx.runtime.pluginRegistry;\n const runtime = new Kernel(\n ctx.vfs,\n {\n cwd: ctx.cwd,\n env: ctx.env,\n onConsole: (method: string, consoleArgs: unknown[]) => {\n const msg = consoleArgs.map(a => String(a)).join(\" \") + \"\\n\";\n if (method === \"error\") appendStderr(msg);\n else appendStdout(msg);\n },\n onStdout: (data: string) => {\n appendStdout(data);\n },\n onStderr: (data: string) => {\n appendStderr(data);\n },\n },\n parentPlugins,\n );\n\n const proc = runtime.getProcess();\n proc.exit = ((code = 0) => {\n if (!exitCalled) {\n exitCalled = true;\n exitCode = code;\n proc.emit(\"exit\", code);\n exitResolve!(code);\n }\n if (syncExecution) throw new Error(`Process exited with code ${code}`);\n }) as (code?: number) => never;\n\n proc.argv = [\"node\", resolvedPath, ...args.slice(1)];\n\n if (abortSignal) {\n proc.stdout.isTTY = true;\n proc.stderr.isTTY = true;\n proc.stdin.isTTY = true;\n (proc.stdin as any).setRawMode = () => proc.stdin;\n setActiveProcessStdin(proc.stdin as any);\n }\n\n try {\n await runtime.prepareFile(resolvedPath);\n runtime.runFile(resolvedPath);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.startsWith(\"Process exited with code\")\n ) {\n return { stdout, stderr, exitCode };\n }\n const errorMsg =\n error instanceof Error\n ? `${error.message}\\n${error.stack || \"\"}`\n : String(error);\n return { stdout, stderr: stderr + `Error: ${errorMsg}\\n`, exitCode: 1 };\n } finally {\n syncExecution = false;\n }\n\n if (exitCalled) return { stdout, stderr, exitCode };\n\n await new Promise(r => setTimeout(r, 0));\n if (exitCalled) return { stdout, stderr, exitCode };\n\n if (\n (stdout.length > 0 || stderr.length > 0) &&\n getActiveForkedChildren() <= 0\n ) {\n return { stdout, stderr, exitCode: 0 };\n }\n if (\n stdout.length === 0 &&\n stderr.length === 0 &&\n getActiveForkedChildren() <= 0\n ) {\n return { stdout, stderr, exitCode: 0 };\n }\n\n const addRejectionHandler = typeof globalThis.addEventListener === \"function\";\n const rejectionHandler = (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n if (\n reason instanceof Error &&\n reason.message.startsWith(\"Process exited with code\")\n ) {\n event.preventDefault();\n return;\n }\n const msg =\n reason instanceof Error\n ? `Unhandled rejection: ${reason.message}\\n${reason.stack || \"\"}\\n`\n : `Unhandled rejection: ${String(reason)}\\n`;\n appendStderr(msg);\n };\n if (addRejectionHandler) {\n globalThis.addEventListener(\"unhandledrejection\", rejectionHandler);\n }\n\n let childrenExited = false;\n const prevChildExitHandler = setOnForkedChildExit(null);\n setOnForkedChildExit(() => {\n if (getActiveForkedChildren() <= 0) childrenExited = true;\n if (typeof prevChildExitHandler === \"function\") prevChildExitHandler();\n });\n\n try {\n const MAX_TOTAL_MS = 60000;\n const IDLE_TIMEOUT_MS = 500;\n const POST_CHILD_EXIT_IDLE_MS = 100;\n const CHECK_MS = 50;\n const startTime = Date.now();\n let lastOutputLen = stdout.length + stderr.length;\n let idleMs = 0;\n const isLongRunning = !!abortSignal;\n\n while (!exitCalled) {\n if (abortSignal?.aborted) break;\n const raceResult = await Promise.race([\n exitPromise.then(() => \"exit\" as const),\n new Promise<\"tick\">(r => setTimeout(() => r(\"tick\"), CHECK_MS)),\n ]);\n if (raceResult === \"exit\" || exitCalled) break;\n if (abortSignal?.aborted) break;\n\n const currentLen = stdout.length + stderr.length;\n if (currentLen > lastOutputLen) {\n lastOutputLen = currentLen;\n idleMs = 0;\n } else {\n idleMs += CHECK_MS;\n }\n if (!isLongRunning) {\n const effectiveIdle = childrenExited\n ? POST_CHILD_EXIT_IDLE_MS\n : IDLE_TIMEOUT_MS;\n if (lastOutputLen > 0 && idleMs >= effectiveIdle) break;\n }\n if (!isLongRunning && Date.now() - startTime >= MAX_TOTAL_MS) break;\n }\n\n return { stdout, stderr, exitCode: exitCalled ? exitCode : 0 };\n } finally {\n setActiveProcessStdin(null);\n setOnForkedChildExit(prevChildExitHandler as (() => void) | null);\n if (addRejectionHandler) {\n globalThis.removeEventListener(\"unhandledrejection\", rejectionHandler);\n }\n }\n}\n\nasync function npmCmd(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const subCmd = args[0] || \"help\";\n switch (subCmd) {\n case \"install\":\n case \"i\":\n case \"add\": {\n const packages = args.slice(1).filter(a => !a.startsWith(\"-\"));\n const saveDev = args.includes(\"-D\") || args.includes(\"--save-dev\");\n const noSave = args.includes(\"--no-save\");\n const lines: string[] = [];\n if (packages.length > 0) {\n const result = await ctx.pm.install(packages, {\n save: !noSave && !saveDev,\n saveDev,\n onProgress: msg => {\n lines.push(msg);\n ctx.write?.(msg + \"\\n\");\n },\n });\n const summary = `added ${result.added.length} packages`;\n lines.push(summary);\n ctx.write?.(summary + \"\\n\");\n } else {\n const result = await ctx.pm.installFromPackageJson({\n onProgress: msg => {\n lines.push(msg);\n ctx.write?.(msg + \"\\n\");\n },\n });\n const summary = `added ${result.added.length} packages`;\n lines.push(summary);\n ctx.write?.(summary + \"\\n\");\n }\n return ok(lines.join(\"\\n\") + \"\\n\");\n }\n case \"run\":\n case \"run-script\": {\n const scriptName = args[1];\n if (!scriptName) return fail(\"npm run: missing script name\\n\");\n return runNpmScript(scriptName, ctx);\n }\n case \"test\":\n case \"t\":\n case \"tst\":\n return runNpmScript(\"test\", ctx);\n case \"start\":\n return runNpmScript(\"start\", ctx);\n case \"stop\":\n return runNpmScript(\"stop\", ctx);\n case \"ls\":\n case \"list\":\n return ok(ctx.pm.list().join(\"\\n\") + \"\\n\");\n case \"init\": {\n const pkgJson = {\n name: pathShim.basename(ctx.cwd),\n version: \"1.0.0\",\n description: \"\",\n main: \"index.js\",\n scripts: { test: 'echo \"Error: no test specified\" && exit 1' },\n keywords: [],\n author: \"\",\n license: \"ISC\",\n };\n ctx.vfs.writeFileSync(\n pathShim.join(ctx.cwd, \"package.json\"),\n JSON.stringify(pkgJson, null, 2),\n );\n return ok(\"Created package.json\\n\");\n }\n default:\n return fail(`npm ${subCmd}: unknown command\\n`);\n }\n}\n\nasync function runNpmScript(\n scriptName: string,\n ctx: ShellContext,\n): Promise<ShellResult> {\n const pkgJsonPath = pathShim.join(ctx.cwd, \"package.json\");\n if (!ctx.vfs.existsSync(pkgJsonPath))\n return fail(\"npm run: no package.json found\\n\");\n const pkgJson = JSON.parse(ctx.vfs.readFileSync(pkgJsonPath, \"utf8\"));\n const script = pkgJson.scripts?.[scriptName];\n if (!script) return fail(`npm run: script \"${scriptName}\" not found\\n`);\n return ctx.exec(script);\n}\n\nasync function npxCmd(args: string[], ctx: ShellContext): Promise<ShellResult> {\n const pkgName = args[0];\n if (!pkgName) return fail(\"npx: missing package name\\n\");\n await ctx.pm.install(pkgName);\n const binPath = pathShim.join(\"/node_modules/.bin\", pkgName);\n if (ctx.vfs.existsSync(binPath)) {\n try {\n ctx.runtime.runFile(binPath);\n } catch (e) {\n return fail((e as Error).message + \"\\n\");\n }\n }\n return ok();\n}\n\nasync function pnpmCmd(\n args: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n const pm = ctx.pnpmPm;\n if (!pm)\n return fail(\n 'pnpm: not configured – set packageManager to \"pnpm\" in container options\\n',\n );\n\n const subCmd = args[0] || \"help\";\n switch (subCmd) {\n case \"install\":\n case \"i\":\n case \"add\": {\n const packages = args.slice(1).filter(a => !a.startsWith(\"-\"));\n const saveDev = args.includes(\"-D\") || args.includes(\"--save-dev\");\n const noSave = args.includes(\"--no-save\");\n const lines: string[] = [];\n if (packages.length > 0) {\n const result = await pm.install(packages, {\n save: !noSave && !saveDev,\n saveDev,\n onProgress: msg => {\n lines.push(msg);\n ctx.write?.(msg + \"\\n\");\n },\n });\n const summary = `added ${result.added.length} packages`;\n lines.push(summary);\n ctx.write?.(summary + \"\\n\");\n } else {\n const result = await pm.installFromPackageJson({\n onProgress: msg => {\n lines.push(msg);\n ctx.write?.(msg + \"\\n\");\n },\n });\n const summary = `added ${result.added.length} packages`;\n lines.push(summary);\n ctx.write?.(summary + \"\\n\");\n }\n return ok(lines.join(\"\\n\") + \"\\n\");\n }\n case \"run\": {\n const scriptName = args[1];\n if (!scriptName) return fail(\"pnpm run: missing script name\\n\");\n const pkgJsonPath = pathShim.join(ctx.cwd, \"package.json\");\n if (!ctx.vfs.existsSync(pkgJsonPath))\n return fail(\"pnpm run: no package.json found\\n\");\n const pkgJson = JSON.parse(ctx.vfs.readFileSync(pkgJsonPath, \"utf8\"));\n const script = pkgJson.scripts?.[scriptName];\n if (!script) return fail(`pnpm run: script \"${scriptName}\" not found\\n`);\n return ctx.exec(script);\n }\n case \"ls\":\n case \"list\":\n return ok(pm.list().join(\"\\n\") + \"\\n\");\n default:\n return fail(`pnpm ${subCmd}: unknown command\\n`);\n }\n}\n\nasync function esbuildCmd(\n args: string[],\n ctx: ShellContext,\n): Promise<ShellResult> {\n const entryPoints: string[] = [];\n let outfile: string | undefined;\n let doBundle = false;\n let format: \"esm\" | \"cjs\" | \"iife\" = \"esm\";\n let platform: \"browser\" | \"node\" | \"neutral\" = \"browser\";\n let minify = false;\n const external: string[] = [];\n const loaderOverrides: Record<string, string> = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--bundle\") {\n doBundle = true;\n continue;\n }\n if (arg === \"--minify\") {\n minify = true;\n continue;\n }\n if (arg.startsWith(\"--outfile=\")) {\n outfile = arg.slice(\"--outfile=\".length);\n continue;\n }\n if (arg.startsWith(\"--format=\")) {\n format = arg.slice(\"--format=\".length) as typeof format;\n continue;\n }\n if (arg.startsWith(\"--platform=\")) {\n platform = arg.slice(\"--platform=\".length) as typeof platform;\n continue;\n }\n if (arg.startsWith(\"--external:\")) {\n external.push(arg.slice(\"--external:\".length));\n continue;\n }\n if (arg.startsWith(\"--loader:\")) {\n const rest = arg.slice(\"--loader:\".length);\n const eqIdx = rest.indexOf(\"=\");\n if (eqIdx > 0)\n loaderOverrides[rest.slice(0, eqIdx)] = rest.slice(eqIdx + 1);\n continue;\n }\n if (!arg.startsWith(\"-\")) entryPoints.push(arg);\n }\n\n if (entryPoints.length === 0)\n return fail(\"esbuild: no entry points specified\\n\");\n\n const entry = pathShim.resolve(ctx.cwd, entryPoints[0]);\n if (!ctx.vfs.existsSync(entry))\n return fail(`esbuild: entry not found: ${entry}\\n`);\n\n const resolvedOutfile = outfile\n ? pathShim.resolve(ctx.cwd, outfile)\n : undefined;\n\n try {\n await initTranspiler();\n const result = await bundle(ctx.vfs, {\n entryPoint: entry,\n format,\n platform,\n minify,\n external,\n outfile: resolvedOutfile,\n loader: loaderOverrides,\n });\n\n if (result.errors.length > 0) {\n return fail(\n `esbuild errors:\\n${result.errors.map(e => e.text).join(\"\\n\")}\\n`,\n );\n }\n return resolvedOutfile ? ok() : ok(result.code);\n } catch (e) {\n return fail(`esbuild: ${(e as Error).message}\\n`);\n }\n}\n\nexport function createDefaultCommands(): Map<string, CommandHandler> {\n const cmds = new Map<string, CommandHandler>();\n cmds.set(\"echo\", echoCmd);\n cmds.set(\"cd\", cdCmd);\n cmds.set(\"pwd\", pwdCmd);\n cmds.set(\"ls\", lsCmd);\n cmds.set(\"cat\", catCmd);\n cmds.set(\"mkdir\", mkdirCmd);\n cmds.set(\"rm\", rmCmd);\n cmds.set(\"cp\", cpCmd);\n cmds.set(\"mv\", mvCmd);\n cmds.set(\"touch\", touchCmd);\n cmds.set(\"which\", whichCmd);\n cmds.set(\"env\", (args, ctx) => envCmd(args, ctx));\n cmds.set(\"printenv\", (args, ctx) => envCmd(args, ctx));\n cmds.set(\"export\", exportCmd);\n cmds.set(\"true\", () => ok());\n cmds.set(\"false\", () => fail(\"\", 1));\n cmds.set(\"node\", nodeCmd);\n cmds.set(\"npm\", (args, ctx) => npmCmd(args, ctx));\n cmds.set(\"npx\", (args, ctx) => npxCmd(args, ctx));\n cmds.set(\"pnpm\", (args, ctx) => pnpmCmd(args, ctx));\n cmds.set(\"esbuild\", (args, ctx) => esbuildCmd(args, ctx));\n return cmds;\n}\n","import { MemFS } from \"./memfs\";\nimport { Kernel } from \"./kernel\";\nimport { PackageManager } from \"./npm/index\";\nimport * as pathShim from \"./polyfills/path\";\nimport { EventEmitter } from \"./polyfills/events\";\nimport { createDefaultCommands } from \"./shell-commands\";\n\nexport interface ShellOptions {\n cwd?: string;\n env?: Record<string, string>;\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n onExit?: (code: number) => void;\n pnpmPm?: PackageManager;\n lazyPnpmPm?: () => PackageManager;\n}\n\nexport interface ShellProcess {\n stdin: { write(data: string): void };\n stdout: EventEmitter;\n stderr: EventEmitter;\n kill(signal?: string): void;\n wait(): Promise<number>;\n pid: number;\n}\n\nexport interface ShellResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport interface ShellContext {\n vfs: MemFS;\n runtime: Kernel;\n pm: PackageManager;\n pnpmPm?: PackageManager;\n cwd: string;\n env: Record<string, string>;\n stdinData?: string;\n setCwd(dir: string): void;\n exec(command: string, options?: ShellOptions): Promise<ShellResult>;\n write?(text: string): void;\n writeErr?(text: string): void;\n}\n\nexport type CommandHandler = (\n args: string[],\n ctx: ShellContext,\n) => ShellResult | Promise<ShellResult>;\n\nconst ok = (stdout = \"\"): ShellResult => ({ stdout, stderr: \"\", exitCode: 0 });\nconst fail = (stderr: string, code = 1): ShellResult => ({\n stdout: \"\",\n stderr,\n exitCode: code,\n});\n\n/** Command history with up/down navigation. */\nexport class ShellHistory {\n private entries: string[] = [];\n private cursor = -1;\n private maxSize: number;\n\n constructor(maxSize = 1000) {\n this.maxSize = maxSize;\n }\n\n push(command: string): void {\n // Don't add duplicates of the last entry or empty commands.\n if (!command.trim()) return;\n if (\n this.entries.length > 0 &&\n this.entries[this.entries.length - 1] === command\n )\n return;\n this.entries.push(command);\n if (this.entries.length > this.maxSize) this.entries.shift();\n this.cursor = this.entries.length; // reset cursor to end\n }\n\n up(): string | undefined {\n if (this.cursor > 0) {\n this.cursor--;\n return this.entries[this.cursor];\n }\n return this.entries[0];\n }\n\n down(): string | undefined {\n if (this.cursor < this.entries.length - 1) {\n this.cursor++;\n return this.entries[this.cursor];\n }\n this.cursor = this.entries.length;\n return undefined; // past the end = empty input\n }\n\n reset(): void {\n this.cursor = this.entries.length;\n }\n\n getAll(): string[] {\n return [...this.entries];\n }\n\n get length(): number {\n return this.entries.length;\n }\n}\n\nexport class Shell {\n private vfs: MemFS;\n private runtime: Kernel;\n private packageManager: PackageManager;\n private pnpmPm?: PackageManager;\n private lazyPnpmPm?: () => PackageManager;\n private binCache = new Map<string, string>();\n private cwd: string;\n private env: Record<string, string>;\n private commands: Map<string, CommandHandler>;\n /** Command history for this shell session. */\n readonly history = new ShellHistory();\n /** Background jobs spawned with `&`. */\n private backgroundJobs: Array<{\n id: number;\n command: string;\n promise: Promise<ShellResult>;\n done: boolean;\n result?: ShellResult;\n }> = [];\n private nextJobId = 1;\n\n constructor(\n vfs: MemFS,\n runtime: Kernel,\n packageManager: PackageManager,\n options: ShellOptions = {},\n ) {\n this.vfs = vfs;\n this.runtime = runtime;\n this.packageManager = packageManager;\n this.pnpmPm = options.pnpmPm;\n this.lazyPnpmPm = options.lazyPnpmPm;\n this.cwd = options.cwd || \"/\";\n this.env = {\n PATH: \"/usr/local/bin:/usr/bin:/bin:/node_modules/.bin\",\n HOME: \"/\",\n ...options.env,\n };\n this.commands = createDefaultCommands();\n // Register built-in history/jobs/fg commands.\n this.commands.set(\"history\", (_args, ctx) => {\n const lines = this.history\n .getAll()\n .map((cmd, i) => ` ${i + 1} ${cmd}`)\n .join(\"\\n\");\n return ok(lines ? lines + \"\\n\" : \"\");\n });\n this.commands.set(\"jobs\", (_args, ctx) => {\n const lines = this.backgroundJobs\n .filter(j => !j.done)\n .map(j => `[${j.id}] Running ${j.command}`)\n .join(\"\\n\");\n return ok(lines ? lines + \"\\n\" : \"\");\n });\n this.commands.set(\"fg\", args => {\n const id = args[0]\n ? parseInt(args[0], 10)\n : this.backgroundJobs.length > 0\n ? this.backgroundJobs[this.backgroundJobs.length - 1].id\n : 0;\n const job = this.backgroundJobs.find(j => j.id === id);\n if (!job) return fail(`fg: no such job: ${id}\\n`);\n if (job.done && job.result) return job.result;\n return ok(`[${id}] ${job.command}\\n`);\n });\n }\n\n registerCommand(name: string, handler: CommandHandler): void {\n this.commands.set(name, handler);\n }\n\n /**\n * Tab completion for a partial input string.\n * Returns sorted candidate completions.\n */\n complete(partial: string): string[] {\n const trimmed = partial.trimStart();\n const parts = trimmed.split(/\\s+/);\n\n if (parts.length <= 1) {\n // Completing a command name\n const prefix = parts[0] || \"\";\n const candidates: string[] = [];\n // Built-in / registered commands\n for (const name of this.commands.keys()) {\n if (name.startsWith(prefix)) candidates.push(name);\n }\n // Binaries in .bin\n try {\n const binDir = pathShim.join(\"/node_modules/.bin\");\n if (this.vfs.existsSync(binDir)) {\n for (const name of this.vfs.readdirSync(binDir)) {\n if (name.startsWith(prefix) && !candidates.includes(name))\n candidates.push(name);\n }\n }\n } catch {}\n return candidates.sort();\n }\n\n // Completing a file path argument\n const lastToken = parts[parts.length - 1];\n return this.completeFilePath(lastToken);\n }\n\n private completeFilePath(partial: string): string[] {\n const abs = partial.startsWith(\"/\")\n ? partial\n : pathShim.resolve(this.cwd, partial);\n\n // Try to list the directory the partial is in.\n const dir = abs.endsWith(\"/\") ? abs : pathShim.dirname(abs);\n const prefix = abs.endsWith(\"/\") ? \"\" : pathShim.basename(abs);\n\n try {\n const entries = this.vfs.readdirSync(dir);\n return entries\n .filter(e => e.startsWith(prefix))\n .map(e => {\n const full = pathShim.join(dir, e);\n // Append / for directories\n try {\n if (this.vfs.statSync(full).isDirectory()) return e + \"/\";\n } catch {}\n return e;\n })\n .sort();\n } catch {\n return [];\n }\n }\n\n async exec(\n command: string,\n options: ShellOptions = {},\n ): Promise<ShellResult> {\n this.history.push(command);\n\n // Background job support: if command ends with `&`, run in background.\n const trimmedCmd = command.trim();\n if (trimmedCmd.endsWith(\"&\") && !trimmedCmd.endsWith(\"&&\")) {\n const fgCmd = trimmedCmd.slice(0, -1).trim();\n const jobId = this.nextJobId++;\n const job = {\n id: jobId,\n command: fgCmd,\n promise: this.exec(fgCmd, options).then(r => {\n job.done = true;\n job.result = r;\n return r;\n }),\n done: false,\n result: undefined as ShellResult | undefined,\n };\n this.backgroundJobs.push(job);\n return ok(`[${jobId}] started\\n`);\n }\n\n const segments = this.splitControlFlow(command);\n let stdout = \"\";\n let stderr = \"\";\n let exitCode = 0;\n\n let skip: \"&&\" | \"||\" | null = null;\n\n for (const { cmd, op } of segments) {\n if (!cmd) continue;\n\n // Skip logic: propagate skip through matching operator chains\n // e.g., `false && B && C` skips both B and C\n // e.g., `true || B || C` skips both B and C\n if (skip) {\n // A ';' always breaks the skip chain (unconditional separator)\n // A different operator type also breaks the chain:\n // `false && B || C` — skip B (&&), but C runs (|| sees prior failure)\n // `true || B && C` — skip B (||), but C runs (&& sees prior success)\n if (op === \";\") {\n skip = null;\n continue;\n }\n if (skip === \"&&\" && op === \"||\") {\n skip = null;\n continue;\n }\n if (skip === \"||\" && op === \"&&\") {\n skip = null;\n continue;\n }\n // Same operator type: keep skipping (propagate through chain)\n continue;\n }\n\n const result = await this.execPipeline(cmd, options);\n stdout += result.stdout;\n stderr += result.stderr;\n exitCode = result.exitCode;\n\n // Set skip for the NEXT segment based on operator + exit code\n if (op === \"&&\" && exitCode !== 0) {\n skip = \"&&\";\n } else if (op === \"||\" && exitCode === 0) {\n skip = \"||\";\n }\n // ';' always continues, skip stays null\n }\n return { stdout, stderr, exitCode };\n }\n\n private async execPipeline(\n command: string,\n options: ShellOptions = {},\n ): Promise<ShellResult> {\n let stderr = \"\";\n const onStderr = (data: string) => {\n stderr += data;\n options.onStderr?.(data);\n };\n\n const pipeSegments = command.split(\"|\").map(s => s.trim());\n let lastOutput = \"\";\n\n for (let i = 0; i < pipeSegments.length; i++) {\n const isLast = i === pipeSegments.length - 1;\n // Only forward stdout to the caller for the last segment in the pipeline;\n // intermediate segments' stdout is captured as stdin for the next segment.\n let segStdout = \"\";\n const onStdout = (data: string) => {\n segStdout += data;\n if (isLast) options.onStdout?.(data);\n };\n const result = await this.execSingle(\n pipeSegments[i],\n { ...options, onStdout, onStderr },\n lastOutput,\n );\n lastOutput = result.stdout;\n if (result.exitCode !== 0)\n return {\n stdout: isLast ? segStdout : \"\",\n stderr,\n exitCode: result.exitCode,\n };\n }\n\n return { stdout: lastOutput, stderr, exitCode: 0 };\n }\n\n private splitControlFlow(\n command: string,\n ): Array<{ cmd: string; op: \"&&\" | \"||\" | \";\" | null }> {\n const segments: Array<{ cmd: string; op: \"&&\" | \"||\" | \";\" | null }> = [];\n let current = \"\";\n let inQuote = \"\";\n\n for (let i = 0; i < command.length; i++) {\n const ch = command[i];\n if (inQuote) {\n current += ch;\n if (ch === inQuote) inQuote = \"\";\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n inQuote = ch;\n current += ch;\n continue;\n }\n if (ch === \"&\" && command[i + 1] === \"&\") {\n segments.push({ cmd: current.trim(), op: \"&&\" });\n current = \"\";\n i++; // skip second &\n continue;\n }\n if (ch === \"|\" && command[i + 1] === \"|\") {\n segments.push({ cmd: current.trim(), op: \"||\" });\n current = \"\";\n i++; // skip second |\n continue;\n }\n if (ch === \";\") {\n segments.push({ cmd: current.trim(), op: \";\" });\n current = \"\";\n continue;\n }\n current += ch;\n }\n if (current.trim()) segments.push({ cmd: current.trim(), op: null });\n return segments;\n }\n\n private parseRedirects(tokens: string[]): {\n args: string[];\n stdoutFile?: string;\n append?: boolean;\n } {\n const args: string[] = [];\n let stdoutFile: string | undefined;\n let append = false;\n\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i] === \">>\" && tokens[i + 1]) {\n stdoutFile = tokens[++i];\n append = true;\n } else if (tokens[i] === \">\" && tokens[i + 1]) {\n stdoutFile = tokens[++i];\n append = false;\n } else if (tokens[i].endsWith(\">>\")) {\n stdoutFile = tokens[i].slice(0, -2) || tokens[++i];\n append = true;\n } else {\n args.push(tokens[i]);\n }\n }\n return { args, stdoutFile, append };\n }\n\n private async execSingle(\n command: string,\n options: ShellOptions & {\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n },\n stdinData?: string,\n ): Promise<ShellResult> {\n const parts = this.parseCommand(command);\n if (parts.length === 0) return ok();\n\n const redirect = this.parseRedirects(parts);\n const [cmd, ...args] = redirect.args;\n\n const resolvePnpmPm = () => this.pnpmPm ?? this.lazyPnpmPm?.();\n const ctx: ShellContext = {\n vfs: this.vfs,\n runtime: this.runtime,\n pm: this.packageManager,\n get pnpmPm() {\n return resolvePnpmPm();\n },\n cwd: this.cwd,\n env: this.env,\n stdinData,\n setCwd: (dir: string) => {\n this.cwd = dir;\n },\n exec: (cmd: string, opts?: ShellOptions) => this.exec(cmd, opts),\n write: (text: string) => options.onStdout?.(text),\n writeErr: (text: string) => options.onStderr?.(text),\n };\n\n let result: ShellResult;\n\n const handler = this.commands.get(cmd);\n if (handler) {\n try {\n result = await handler(args, ctx);\n if (result.stderr) options.onStderr?.(result.stderr);\n } catch (e) {\n const errMsg = `${cmd}: ${(e as Error).message}\\n`;\n options.onStderr?.(errMsg);\n return fail(errMsg);\n }\n } else {\n const binPath = this.resolveBin(cmd);\n if (binPath) {\n try {\n this.runtime.runFile(binPath);\n result = ok();\n } catch (e) {\n const errMsg = `${cmd}: ${(e as Error).message}\\n`;\n options.onStderr?.(errMsg);\n return fail(errMsg);\n }\n } else {\n const errMsg = `${cmd}: command not found\\n`;\n options.onStderr?.(errMsg);\n return { stdout: \"\", stderr: errMsg, exitCode: 127 };\n }\n }\n\n // Handle stdout redirects\n if (redirect.stdoutFile) {\n const filePath = pathShim.isAbsolute(redirect.stdoutFile)\n ? redirect.stdoutFile\n : pathShim.resolve(this.cwd, redirect.stdoutFile);\n try {\n if (redirect.append) {\n const existing = this.vfs.existsSync(filePath)\n ? (this.vfs.readFileSync(filePath, \"utf-8\") as string)\n : \"\";\n this.vfs.writeFileSync(filePath, existing + result.stdout);\n } else {\n this.vfs.writeFileSync(filePath, result.stdout);\n }\n result = { ...result, stdout: \"\" };\n } catch (e) {\n const errMsg = `${(e as Error).message}\\n`;\n options.onStderr?.(errMsg);\n return { stdout: \"\", stderr: errMsg, exitCode: 1 };\n }\n } else {\n if (result.stdout) options.onStdout?.(result.stdout);\n }\n\n return result;\n }\n\n private expandVar(name: string): string {\n return this.env[name] || \"\";\n }\n\n private parseCommand(cmd: string): string[] {\n const tokens: string[] = [];\n const quoted: boolean[] = []; // track whether each token was quoted\n let current = \"\";\n let wasQuoted = false;\n\n for (let i = 0; i < cmd.length; i++) {\n const ch = cmd[i];\n if (wasQuoted === false && ch === \"'\") {\n // Single quotes: no variable expansion\n wasQuoted = true;\n i++;\n while (i < cmd.length && cmd[i] !== \"'\") {\n current += cmd[i];\n i++;\n }\n // i now points at closing quote (or end of string)\n continue;\n } else if (wasQuoted === false && ch === '\"') {\n // Double quotes: expand variables inside\n wasQuoted = true;\n i++;\n while (i < cmd.length && cmd[i] !== '\"') {\n if (cmd[i] === \"$\") {\n const varStr = this.consumeVariable(cmd, i);\n current += varStr.value;\n i = varStr.end;\n } else {\n current += cmd[i];\n i++;\n }\n }\n // i now points at closing quote (or end of string)\n continue;\n } else if (ch === \" \" || ch === \"\\t\") {\n if (current) {\n tokens.push(current);\n quoted.push(wasQuoted);\n current = \"\";\n wasQuoted = false;\n }\n } else if (ch === \"\\\\\" && i + 1 < cmd.length) {\n current += cmd[++i];\n } else if (ch === \"$\") {\n // Unquoted variable expansion\n const varStr = this.consumeVariable(cmd, i);\n current += varStr.value;\n i = varStr.end - 1; // -1 because for loop will i++\n } else {\n current += ch;\n }\n }\n if (current) {\n tokens.push(current);\n quoted.push(wasQuoted);\n }\n\n // Expand globs on unquoted tokens\n const result: string[] = [];\n for (let i = 0; i < tokens.length; i++) {\n if (\n !quoted[i] &&\n (tokens[i].includes(\"*\") ||\n tokens[i].includes(\"?\") ||\n tokens[i].includes(\"{\"))\n ) {\n result.push(...this.expandGlob(tokens[i], this.cwd));\n } else {\n result.push(tokens[i]);\n }\n }\n return result;\n }\n\n /** Consume a $VAR or ${VAR} starting at position i (pointing at '$'), returning expanded value and end index */\n private consumeVariable(\n cmd: string,\n i: number,\n ): { value: string; end: number } {\n i++; // skip '$'\n if (i < cmd.length && cmd[i] === \"{\") {\n // ${VAR} syntax\n i++; // skip '{'\n let name = \"\";\n while (i < cmd.length && cmd[i] !== \"}\") {\n name += cmd[i];\n i++;\n }\n if (i < cmd.length) i++; // skip '}'\n return { value: this.expandVar(name), end: i };\n } else {\n // $VAR syntax — consume word characters\n let name = \"\";\n while (i < cmd.length && /\\w/.test(cmd[i])) {\n name += cmd[i];\n i++;\n }\n if (!name) return { value: \"$\", end: i };\n return { value: this.expandVar(name), end: i };\n }\n }\n\n private expandGlob(pattern: string, cwd: string): string[] {\n if (\n !pattern.includes(\"*\") &&\n !pattern.includes(\"?\") &&\n !pattern.includes(\"{\")\n )\n return [pattern];\n\n // Brace expansion: {a,b} → expand into multiple patterns\n if (pattern.includes(\"{\")) {\n const expanded = this.expandBraces(pattern);\n const results: string[] = [];\n for (const p of expanded) {\n results.push(...this.expandGlob(p, cwd));\n }\n return results.length > 0 ? [...new Set(results)].sort() : [pattern];\n }\n\n // Recursive glob: ** support\n if (pattern.includes(\"**\")) {\n return this.expandRecursiveGlob(pattern, cwd);\n }\n\n // Simple single-level glob\n const dir = pattern.includes(\"/\")\n ? pattern.substring(0, pattern.lastIndexOf(\"/\")) || \"/\"\n : cwd;\n const filePattern = pattern.includes(\"/\")\n ? pattern.substring(pattern.lastIndexOf(\"/\") + 1)\n : pattern;\n\n const regexStr = filePattern\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*/g, \".*\")\n .replace(/\\?/g, \".\");\n const regex = new RegExp(\"^\" + regexStr + \"$\");\n try {\n const entries = this.vfs.readdirSync(dir);\n const matches = entries\n .filter(e => regex.test(e))\n .map(e => (dir === cwd ? e : `${dir}/${e}`));\n return matches.length > 0 ? matches.sort() : [pattern];\n } catch {\n return [pattern];\n }\n }\n\n /** Expand brace patterns like `{a,b}` into multiple strings. */\n private expandBraces(pattern: string): string[] {\n const start = pattern.indexOf(\"{\");\n if (start === -1) return [pattern];\n const end = pattern.indexOf(\"}\", start);\n if (end === -1) return [pattern];\n\n const prefix = pattern.slice(0, start);\n const suffix = pattern.slice(end + 1);\n const parts = pattern.slice(start + 1, end).split(\",\");\n\n const results: string[] = [];\n for (const part of parts) {\n results.push(...this.expandBraces(prefix + part + suffix));\n }\n return results;\n }\n\n /** Expand `**` recursive glob patterns. */\n private expandRecursiveGlob(pattern: string, cwd: string): string[] {\n const isAbsolute = pattern.startsWith(\"/\");\n const base = isAbsolute ? \"/\" : cwd;\n\n // Split pattern into segments\n const patternSegs = pattern.split(\"/\").filter(Boolean);\n\n const results: string[] = [];\n this.matchGlobSegments(base, patternSegs, 0, results);\n return results.length > 0 ? results.sort() : [pattern];\n }\n\n private matchGlobSegments(\n dir: string,\n segments: string[],\n segIdx: number,\n results: string[],\n ): void {\n if (segIdx >= segments.length) return;\n\n const seg = segments[segIdx];\n const isLast = segIdx === segments.length - 1;\n\n if (seg === \"**\") {\n // ** matches zero or more directories\n // Match zero directories: skip this segment\n this.matchGlobSegments(dir, segments, segIdx + 1, results);\n\n // Match one or more directories: recurse into each subdirectory\n try {\n const entries = this.vfs.readdirSync(dir);\n for (const entry of entries) {\n const full = dir === \"/\" ? `/${entry}` : `${dir}/${entry}`;\n try {\n if (this.vfs.statSync(full).isDirectory()) {\n this.matchGlobSegments(full, segments, segIdx, results); // keep ** active\n this.matchGlobSegments(full, segments, segIdx + 1, results); // move past **\n }\n } catch {}\n }\n } catch {}\n return;\n }\n\n // Normal segment (may contain * or ?)\n const regexStr = seg\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*/g, \".*\")\n .replace(/\\?/g, \".\");\n const regex = new RegExp(\"^\" + regexStr + \"$\");\n\n try {\n const entries = this.vfs.readdirSync(dir);\n for (const entry of entries) {\n if (!regex.test(entry)) continue;\n const full = dir === \"/\" ? `/${entry}` : `${dir}/${entry}`;\n if (isLast) {\n results.push(full);\n } else {\n try {\n if (this.vfs.statSync(full).isDirectory()) {\n this.matchGlobSegments(full, segments, segIdx + 1, results);\n }\n } catch {}\n }\n }\n } catch {}\n }\n\n private resolveBin(cmd: string): string | null {\n const cached = this.binCache.get(cmd);\n if (cached !== undefined) return cached;\n const binPath = pathShim.join(\"/node_modules/.bin\", cmd);\n if (this.vfs.existsSync(binPath)) {\n this.binCache.set(cmd, binPath);\n return binPath;\n }\n return null;\n }\n\n clearBinCache(): void {\n this.binCache.clear();\n }\n\n getCwd(): string {\n return this.cwd;\n }\n setCwd(dir: string): void {\n this.cwd = dir;\n }\n getEnv(): Record<string, string> {\n return { ...this.env };\n }\n setEnv(key: string, value: string): void {\n this.env[key] = value;\n }\n}\n\nexport function createShell(\n vfs: MemFS,\n runtime: Kernel,\n pm: PackageManager,\n options?: ShellOptions,\n): Shell {\n return new Shell(vfs, runtime, pm, options);\n}\n","import pako from \"pako\";\nimport { MemFS } from \"../memfs\";\nimport * as pathShim from \"../polyfills/path\";\nimport type { AutoInstallProvider } from \"../module-resolver\";\nimport type { LayoutStrategy } from \"./index\";\n\nconst BLOCK = 512;\nconst decoder = new TextDecoder();\n\nfunction decodeField(buf: Uint8Array, start: number, len: number): string {\n let i = start;\n const limit = start + len;\n while (i < limit && buf[i] !== 0) i++;\n return decoder.decode(buf.subarray(start, i));\n}\n\nfunction readSize(buf: Uint8Array, offset: number, len: number): number {\n return parseInt(decodeField(buf, offset, len), 8) || 0;\n}\n\nfunction isZeroBlock(buf: Uint8Array): boolean {\n for (let i = 0; i < buf.length; i++) {\n if (buf[i] !== 0) return false;\n }\n return true;\n}\n\nfunction unpackTarSync(tar: Uint8Array, vfs: MemFS, dest: string): void {\n vfs.mkdirSync(dest, { recursive: true });\n let pos = 0;\n\n while (pos + BLOCK <= tar.length) {\n const hdr = tar.subarray(pos, pos + BLOCK);\n pos += BLOCK;\n if (isZeroBlock(hdr)) break;\n\n const rawName = decodeField(hdr, 0, 100);\n if (!rawName) break;\n\n const size = readSize(hdr, 124, 12);\n const type = hdr[156];\n const linkTarget = decodeField(hdr, 157, 100);\n const prefix = decodeField(hdr, 345, 155);\n const fullName = prefix ? `${prefix}/${rawName}` : rawName;\n\n const relative = fullName.split(\"/\").slice(1).join(\"/\");\n if (!relative || relative === \".\") {\n pos += Math.ceil(size / BLOCK) * BLOCK;\n continue;\n }\n\n const target = pathShim.join(dest, relative);\n const parentDir = pathShim.dirname(target);\n\n if (type === 53 || fullName.endsWith(\"/\")) {\n vfs.mkdirSync(target, { recursive: true });\n } else if (type === 0 || type === 48) {\n vfs.mkdirSync(parentDir, { recursive: true });\n const data =\n size > 0 && pos + size <= tar.length\n ? new Uint8Array(tar.subarray(pos, pos + size))\n : new Uint8Array(0);\n vfs.writeFileSync(target, data);\n } else if (type === 50 && linkTarget) {\n try {\n vfs.mkdirSync(parentDir, { recursive: true });\n vfs.symlinkSync(linkTarget, target);\n } catch {\n /* skip symlink errors */\n }\n }\n\n pos += Math.ceil(size / BLOCK) * BLOCK;\n }\n}\n\nfunction syncFetch(url: string): Uint8Array {\n if (typeof XMLHttpRequest === \"undefined\") {\n throw new Error(\n \"Synchronous auto-install requires XMLHttpRequest (browser environment)\",\n );\n }\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, false);\n xhr.responseType = \"arraybuffer\";\n xhr.send();\n if (xhr.status < 200 || xhr.status >= 300) {\n throw new Error(`Failed to fetch ${url}: ${xhr.status}`);\n }\n return new Uint8Array(xhr.response as ArrayBuffer);\n}\n\ninterface ManifestVersion {\n name: string;\n version: string;\n dependencies?: Record<string, string>;\n dist: { tarball: string; shasum: string };\n bin?: string | Record<string, string>;\n}\n\ninterface Manifest {\n name: string;\n \"dist-tags\": Record<string, string>;\n versions: Record<string, ManifestVersion>;\n}\n\nfunction normalizeBin(\n pkgName: string,\n bin?: Record<string, string> | string,\n): Record<string, string> {\n if (!bin) return {};\n if (typeof bin === \"string\") {\n const cmdName = pkgName.includes(\"/\") ? pkgName.split(\"/\").pop()! : pkgName;\n return { [cmdName]: bin };\n }\n return bin;\n}\n\nexport class SyncAutoInstaller implements AutoInstallProvider {\n private vfs: MemFS;\n private registryUrl: string;\n private cwd: string;\n private layout: LayoutStrategy;\n private manifestCache = new Map<string, Manifest>();\n private installed = new Set<string>();\n\n constructor(\n vfs: MemFS,\n layout: LayoutStrategy,\n options: { cwd?: string; registry?: string } = {},\n ) {\n this.vfs = vfs;\n this.cwd = options.cwd || \"/\";\n this.registryUrl = (\n options.registry || \"https://registry.npmjs.org\"\n ).replace(/\\/$/, \"\");\n this.layout = layout;\n }\n\n installSync(name: string): void {\n if (this.installed.has(name)) return;\n const destDir = this.layout.getPackageDir(this.cwd, name, \"latest\");\n if (this.vfs.existsSync(destDir)) {\n this.installed.add(name);\n return;\n }\n\n const manifest = this.fetchManifestSync(name);\n const latestTag = manifest[\"dist-tags\"]?.latest;\n if (!latestTag) throw new Error(`No latest version for ${name}`);\n\n const version = manifest.versions[latestTag];\n if (!version) throw new Error(`Version ${latestTag} not found for ${name}`);\n\n this.installPackageSync(version);\n this.installed.add(name);\n }\n\n private installPackageSync(pkg: ManifestVersion): void {\n const destDir = this.layout.getPackageDir(this.cwd, pkg.name, pkg.version);\n if (this.vfs.existsSync(destDir)) return;\n\n const compressed = syncFetch(pkg.dist.tarball);\n let tar: Uint8Array;\n try {\n tar = pako.ungzip(compressed);\n } catch {\n tar = compressed;\n }\n\n unpackTarSync(tar, this.vfs, destDir);\n this.layout.createTopLevelLink(this.vfs, this.cwd, pkg.name, pkg.version);\n\n const binEntries = normalizeBin(pkg.name, pkg.bin);\n for (const [cmdName, binPath] of Object.entries(binEntries)) {\n const targetPath = pathShim.join(destDir, binPath);\n this.layout.createBinStub(this.vfs, this.cwd, cmdName, targetPath);\n }\n\n if (pkg.dependencies) {\n for (const depName of Object.keys(pkg.dependencies)) {\n try {\n this.installSync(depName);\n } catch {\n /* skip optional failures */\n }\n }\n }\n }\n\n private fetchManifestSync(name: string): Manifest {\n if (this.manifestCache.has(name)) return this.manifestCache.get(name)!;\n\n const encodedName = name.startsWith(\"@\")\n ? `@${encodeURIComponent(name.slice(1))}`\n : encodeURIComponent(name);\n const url = `${this.registryUrl}/${encodedName}`;\n\n if (typeof XMLHttpRequest === \"undefined\") {\n throw new Error(\n \"Synchronous auto-install requires XMLHttpRequest (browser environment)\",\n );\n }\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, false);\n xhr.setRequestHeader(\"Accept\", \"application/json\");\n xhr.send();\n\n if (xhr.status < 200 || xhr.status >= 300) {\n throw new Error(`Failed to fetch manifest for ${name}: ${xhr.status}`);\n }\n\n const manifest = JSON.parse(xhr.responseText) as Manifest;\n this.manifestCache.set(name, manifest);\n return manifest;\n }\n}\n","/**\n * Plugin system for jiki.\n *\n * Provides lifecycle hooks that let external code intercept and extend\n * jiki's behaviour at key points: module resolution, module loading,\n * code transformation, shell command registration, package installation,\n * and container boot.\n *\n * The API mirrors esbuild's plugin conventions so it feels familiar to\n * most JavaScript developers.\n *\n * @example\n * ```ts\n * const myPlugin: JikiPlugin = {\n * name: 'my-plugin',\n * setup(hooks) {\n * hooks.onResolve(/^virtual:/, (args) => ({\n * path: `/virtual/${args.path.slice(8)}`,\n * }));\n * hooks.onLoad(/^\\/virtual\\//, (args) => ({\n * contents: `module.exports = \"hello from ${args.path}\";`,\n * }));\n * },\n * };\n *\n * const container = boot({ plugins: [myPlugin] });\n * ```\n */\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/** Arguments passed to an `onResolve` callback. */\nexport interface OnResolveArgs {\n /** The raw module specifier (e.g. `\"virtual:config\"` or `\"./foo\"`). */\n path: string;\n /** Directory the import originates from. */\n resolveDir: string;\n}\n\n/** Return value from an `onResolve` callback. */\nexport interface OnResolveResult {\n /** Resolved absolute path. Returning this skips the default resolver. */\n path: string;\n}\n\n/** Arguments passed to an `onLoad` callback. */\nexport interface OnLoadArgs {\n /** The fully-resolved module path. */\n path: string;\n}\n\n/** Return value from an `onLoad` callback. */\nexport interface OnLoadResult {\n /** Source code to use instead of reading from the VFS. */\n contents: string;\n}\n\n/** Arguments passed to an `onTransform` callback. */\nexport interface OnTransformArgs {\n /** The fully-resolved file path. */\n path: string;\n /** Source code *after* previous transforms in the pipeline. */\n contents: string;\n}\n\n/** Return value from an `onTransform` callback. */\nexport interface OnTransformResult {\n /** Transformed source code. */\n contents: string;\n}\n\n/** Callback types for lifecycle hooks. */\nexport type OnResolveCallback = (\n args: OnResolveArgs,\n) => OnResolveResult | null | undefined | void;\nexport type OnLoadCallback = (\n args: OnLoadArgs,\n) => OnLoadResult | null | undefined | void;\nexport type OnTransformCallback = (\n args: OnTransformArgs,\n) => OnTransformResult | null | undefined | void;\nexport type OnInstallCallback = (packages: string[]) => void;\nexport type OnBootCallback = () => void;\n\nimport type { CommandHandler } from \"./shell\";\n\n/** Hook registration API handed to {@link JikiPlugin.setup}. */\nexport interface PluginHooks {\n /**\n * Intercept module resolution. The first callback whose `filter` matches\n * **and** returns a non-null result wins — later callbacks are skipped.\n */\n onResolve(filter: RegExp, callback: OnResolveCallback): void;\n /**\n * Intercept module loading. The first callback whose `filter` matches\n * **and** returns a non-null result wins — later callbacks are skipped.\n */\n onLoad(filter: RegExp, callback: OnLoadCallback): void;\n /**\n * Intercept code transformation. Unlike resolve/load, this is a\n * **pipeline**: every matching callback runs in registration order,\n * each receiving the output of the previous one.\n */\n onTransform(filter: RegExp, callback: OnTransformCallback): void;\n /** Register a custom shell command. */\n onCommand(name: string, handler: CommandHandler): void;\n /** Called after packages are installed. */\n onInstall(callback: OnInstallCallback): void;\n /** Called after the container is fully initialised. */\n onBoot(callback: OnBootCallback): void;\n}\n\n/** A jiki plugin. */\nexport interface JikiPlugin {\n /** Human-readable name (used in error messages and debugging). */\n name: string;\n /** Called once during container construction. Register hooks here. */\n setup(hooks: PluginHooks): void;\n}\n\n// ---------------------------------------------------------------------------\n// Internal registry\n// ---------------------------------------------------------------------------\n\ninterface ResolveEntry {\n filter: RegExp;\n callback: OnResolveCallback;\n plugin: string;\n}\ninterface LoadEntry {\n filter: RegExp;\n callback: OnLoadCallback;\n plugin: string;\n}\ninterface TransformEntry {\n filter: RegExp;\n callback: OnTransformCallback;\n plugin: string;\n}\ninterface CommandEntry {\n name: string;\n handler: CommandHandler;\n plugin: string;\n}\ninterface InstallEntry {\n callback: OnInstallCallback;\n plugin: string;\n}\ninterface BootEntry {\n callback: OnBootCallback;\n plugin: string;\n}\n\n/**\n * Central registry that collects hooks from all plugins and exposes\n * methods for the runtime to invoke them.\n *\n * Intentionally not a singleton — each {@link Container} gets its own\n * `PluginRegistry` so plugins cannot leak between containers.\n */\nexport class PluginRegistry {\n private resolveHooks: ResolveEntry[] = [];\n private loadHooks: LoadEntry[] = [];\n private transformHooks: TransformEntry[] = [];\n private commandHooks: CommandEntry[] = [];\n private installHooks: InstallEntry[] = [];\n private bootHooks: BootEntry[] = [];\n\n /** True if at least one plugin has been registered. */\n get hasPlugins(): boolean {\n return (\n this.resolveHooks.length > 0 ||\n this.loadHooks.length > 0 ||\n this.transformHooks.length > 0 ||\n this.commandHooks.length > 0 ||\n this.installHooks.length > 0 ||\n this.bootHooks.length > 0\n );\n }\n\n /** Number of registered resolve hooks. */\n get resolveHookCount(): number {\n return this.resolveHooks.length;\n }\n /** Number of registered load hooks. */\n get loadHookCount(): number {\n return this.loadHooks.length;\n }\n /** Number of registered transform hooks. */\n get transformHookCount(): number {\n return this.transformHooks.length;\n }\n /** Number of registered command hooks. */\n get commandHookCount(): number {\n return this.commandHooks.length;\n }\n\n // -- Registration ---------------------------------------------------------\n\n /** Register all hooks from a single plugin. */\n register(plugin: JikiPlugin): void {\n const hooks: PluginHooks = {\n onResolve: (filter, callback) => {\n this.resolveHooks.push({ filter, callback, plugin: plugin.name });\n },\n onLoad: (filter, callback) => {\n this.loadHooks.push({ filter, callback, plugin: plugin.name });\n },\n onTransform: (filter, callback) => {\n this.transformHooks.push({ filter, callback, plugin: plugin.name });\n },\n onCommand: (name, handler) => {\n this.commandHooks.push({ name, handler, plugin: plugin.name });\n },\n onInstall: callback => {\n this.installHooks.push({ callback, plugin: plugin.name });\n },\n onBoot: callback => {\n this.bootHooks.push({ callback, plugin: plugin.name });\n },\n };\n plugin.setup(hooks);\n }\n\n // -- Invocation -----------------------------------------------------------\n\n /**\n * Run resolve hooks. First matching callback that returns a result wins.\n * Returns `null` if no plugin handled the specifier.\n */\n runResolve(path: string, resolveDir: string): OnResolveResult | null {\n for (const entry of this.resolveHooks) {\n if (entry.filter.test(path)) {\n const result = entry.callback({ path, resolveDir });\n if (result && result.path) return result;\n }\n }\n return null;\n }\n\n /**\n * Run load hooks. First matching callback that returns a result wins.\n * Returns `null` if no plugin provided contents.\n */\n runLoad(path: string): OnLoadResult | null {\n for (const entry of this.loadHooks) {\n if (entry.filter.test(path)) {\n const result = entry.callback({ path });\n if (result && result.contents !== undefined) return result;\n }\n }\n return null;\n }\n\n /**\n * Run transform hooks as a pipeline.\n * Every matching callback runs in order, each receiving the output of the\n * previous one. Returns the final transformed source.\n */\n runTransform(path: string, contents: string): string {\n let current = contents;\n for (const entry of this.transformHooks) {\n if (entry.filter.test(path)) {\n const result = entry.callback({ path, contents: current });\n if (result && result.contents !== undefined) {\n current = result.contents;\n }\n }\n }\n return current;\n }\n\n /** Return all command hooks so the shell can register them. */\n getCommandHooks(): CommandEntry[] {\n return this.commandHooks;\n }\n\n /** Notify all install hooks. */\n runInstall(packages: string[]): void {\n for (const entry of this.installHooks) {\n entry.callback(packages);\n }\n }\n\n /** Notify all boot hooks. */\n runBoot(): void {\n for (const entry of this.bootHooks) {\n entry.callback();\n }\n }\n}\n","/**\n * Worker runtime configuration.\n *\n * When `worker` mode is enabled, CPU-intensive operations (transpilation via\n * esbuild-wasm) are offloaded to a Web Worker. This prevents UI freezes\n * during TypeScript/JSX compilation.\n *\n * The `worker` option on Container controls this:\n * - `false` (default) — everything runs on the main thread\n * - `true` — enable worker-based transpilation\n * - `'auto'` — use workers when `Worker` is available (browser), skip in Node.js\n *\n * Full kernel isolation (executing `require()` and `new Function()` in a\n * worker) is planned for a future release and requires SharedArrayBuffer\n * for synchronous VFS access from the worker.\n *\n * @module\n */\n\nexport type WorkerMode = boolean | \"auto\";\n\n/**\n * Determine whether to use worker-based transpilation.\n * Returns `true` if workers should be enabled based on the mode\n * and the current runtime environment.\n */\nexport function shouldUseWorker(mode: WorkerMode): boolean {\n if (mode === false) return false;\n if (mode === true) return true;\n // 'auto' — use workers in browser environments where Worker is available\n return typeof Worker !== \"undefined\" && typeof window !== \"undefined\";\n}\n\n/**\n * Configuration for the worker runtime.\n * Currently only affects transpilation; future versions will support\n * full kernel isolation.\n */\nexport interface WorkerRuntimeConfig {\n /** Whether to use Web Workers for transpilation. */\n useWorker: boolean;\n}\n","/**\n * Resource limits and sandboxing for jiki containers.\n *\n * Provides configurable limits for memory, execution time, file count,\n * network access, and filesystem path boundaries. Essential for\n * production deployments where untrusted code runs.\n *\n * @example\n * ```ts\n * const container = boot({\n * sandbox: {\n * limits: { maxMemoryMB: 256, maxExecutionMs: 30000, maxFileCount: 10000 },\n * network: { allowedHosts: ['registry.npmjs.org'] },\n * fs: { allowedPaths: ['/app', '/node_modules'] },\n * },\n * });\n * ```\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SandboxLimits {\n /** Maximum total VFS memory in megabytes. Default: unlimited. */\n maxMemoryMB?: number;\n /** Maximum execution time per run/execute call in milliseconds. Default: unlimited. */\n maxExecutionMs?: number;\n /** Maximum number of files in the VFS. Default: unlimited. */\n maxFileCount?: number;\n /** Maximum single file size in megabytes. Default: unlimited. */\n maxFileSizeMB?: number;\n}\n\nexport interface SandboxNetwork {\n /** List of allowed hostnames for network requests. */\n allowedHosts?: string[];\n /** Block all network requests. */\n blockAll?: boolean;\n}\n\nexport interface SandboxFs {\n /** List of allowed path prefixes. Writes outside these paths are rejected. */\n allowedPaths?: string[];\n /** Make the entire VFS read-only. */\n readOnly?: boolean;\n}\n\nexport interface SandboxOptions {\n limits?: SandboxLimits;\n network?: SandboxNetwork;\n fs?: SandboxFs;\n}\n\n// ---------------------------------------------------------------------------\n// SandboxGuard\n// ---------------------------------------------------------------------------\n\n/**\n * Enforces resource limits and access controls for a container.\n */\nexport class SandboxGuard {\n private opts: SandboxOptions;\n private fileCount = 0;\n private totalBytes = 0;\n\n constructor(options: SandboxOptions = {}) {\n this.opts = options;\n }\n\n /** Check if the sandbox has any restrictions configured. */\n get isActive(): boolean {\n return !!(this.opts.limits || this.opts.network || this.opts.fs);\n }\n\n // -- VFS limits -----------------------------------------------------------\n\n /** Check if a file write is allowed by size and count limits. */\n checkWrite(path: string, sizeBytes: number): void {\n if (this.opts.fs?.readOnly) {\n throw new Error(\n `[sandbox] VFS is read-only: write to '${path}' rejected`,\n );\n }\n\n if (this.opts.fs?.allowedPaths) {\n const allowed = this.opts.fs.allowedPaths.some(\n prefix => path === prefix || path.startsWith(prefix + \"/\"),\n );\n if (!allowed) {\n throw new Error(\n `[sandbox] Write to '${path}' rejected: outside allowed paths`,\n );\n }\n }\n\n const limits = this.opts.limits;\n if (limits?.maxFileSizeMB) {\n const maxBytes = limits.maxFileSizeMB * 1024 * 1024;\n if (sizeBytes > maxBytes) {\n throw new Error(\n `[sandbox] File '${path}' exceeds max file size (${(sizeBytes / 1024 / 1024).toFixed(1)} MB > ${limits.maxFileSizeMB} MB)`,\n );\n }\n }\n\n if (limits?.maxMemoryMB) {\n const maxBytes = limits.maxMemoryMB * 1024 * 1024;\n if (this.totalBytes + sizeBytes > maxBytes) {\n throw new Error(\n `[sandbox] VFS memory limit exceeded (${limits.maxMemoryMB} MB)`,\n );\n }\n }\n\n if (limits?.maxFileCount && this.fileCount >= limits.maxFileCount) {\n throw new Error(\n `[sandbox] VFS file count limit exceeded (${limits.maxFileCount})`,\n );\n }\n }\n\n /** Track a file being added to the VFS. */\n trackWrite(sizeBytes: number): void {\n this.fileCount++;\n this.totalBytes += sizeBytes;\n }\n\n /** Track a file being removed from the VFS. */\n trackDelete(sizeBytes: number): void {\n this.fileCount = Math.max(0, this.fileCount - 1);\n this.totalBytes = Math.max(0, this.totalBytes - sizeBytes);\n }\n\n // -- Network limits -------------------------------------------------------\n\n /** Check if a network request to the given URL is allowed. */\n checkNetwork(url: string): void {\n if (!this.opts.network) return;\n\n if (this.opts.network.blockAll) {\n throw new Error(`[sandbox] All network requests are blocked`);\n }\n\n if (this.opts.network.allowedHosts) {\n try {\n const hostname = new URL(url).hostname;\n if (!this.opts.network.allowedHosts.includes(hostname)) {\n throw new Error(\n `[sandbox] Network request to '${hostname}' rejected: not in allowed hosts`,\n );\n }\n } catch (e) {\n if (e instanceof Error && e.message.startsWith(\"[sandbox]\")) throw e;\n throw new Error(`[sandbox] Invalid URL: ${url}`);\n }\n }\n }\n\n // -- Execution limits -----------------------------------------------------\n\n /** Get the execution timeout in milliseconds, or `undefined` if unlimited. */\n get executionTimeout(): number | undefined {\n return this.opts.limits?.maxExecutionMs;\n }\n\n // -- Diagnostics ----------------------------------------------------------\n\n get currentFileCount(): number {\n return this.fileCount;\n }\n get currentMemoryBytes(): number {\n return this.totalBytes;\n }\n get currentMemoryMB(): number {\n return this.totalBytes / (1024 * 1024);\n }\n}\n","/**\n * Performance metrics for jiki containers.\n *\n * Tracks timing and counts for key operations: module resolution,\n * transpilation, file I/O, cache hits/misses, and package installs.\n *\n * @example\n * ```ts\n * const container = boot();\n * // ... do work ...\n * const m = container.metrics.snapshot();\n * console.log(`Resolved ${m.resolveCount} modules in ${m.resolveTimeMs}ms`);\n * ```\n */\n\nexport interface MetricsSnapshot {\n /** Total module resolutions performed. */\n resolveCount: number;\n /** Total time spent in module resolution (ms). */\n resolveTimeMs: number;\n /** Total transpilation calls. */\n transpileCount: number;\n /** Total time spent in transpilation (ms). */\n transpileTimeMs: number;\n /** Total VFS read operations. */\n vfsReadCount: number;\n /** Total VFS write operations. */\n vfsWriteCount: number;\n /** Module cache hits. */\n cacheHits: number;\n /** Module cache misses. */\n cacheMisses: number;\n /** Cache hit rate (0–1). */\n cacheHitRate: number;\n /** Total shell commands executed. */\n commandCount: number;\n /** Total packages installed. */\n installCount: number;\n /** Total time spent installing packages (ms). */\n installTimeMs: number;\n /** Timestamp of when metrics collection started. */\n startedAt: number;\n /** Elapsed time since metrics collection started (ms). */\n uptimeMs: number;\n}\n\nexport class Metrics {\n private _resolveCount = 0;\n private _resolveTimeMs = 0;\n private _transpileCount = 0;\n private _transpileTimeMs = 0;\n private _vfsReadCount = 0;\n private _vfsWriteCount = 0;\n private _cacheHits = 0;\n private _cacheMisses = 0;\n private _commandCount = 0;\n private _installCount = 0;\n private _installTimeMs = 0;\n private _startedAt = Date.now();\n\n /** Record a module resolution. */\n trackResolve(durationMs: number): void {\n this._resolveCount++;\n this._resolveTimeMs += durationMs;\n }\n\n /** Record a transpilation. */\n trackTranspile(durationMs: number): void {\n this._transpileCount++;\n this._transpileTimeMs += durationMs;\n }\n\n /** Record a VFS read. */\n trackRead(): void {\n this._vfsReadCount++;\n }\n\n /** Record a VFS write. */\n trackWrite(): void {\n this._vfsWriteCount++;\n }\n\n /** Record a cache hit. */\n trackCacheHit(): void {\n this._cacheHits++;\n }\n\n /** Record a cache miss. */\n trackCacheMiss(): void {\n this._cacheMisses++;\n }\n\n /** Record a shell command execution. */\n trackCommand(): void {\n this._commandCount++;\n }\n\n /** Record a package install. */\n trackInstall(durationMs: number): void {\n this._installCount++;\n this._installTimeMs += durationMs;\n }\n\n /** Get a snapshot of all metrics. */\n snapshot(): MetricsSnapshot {\n const total = this._cacheHits + this._cacheMisses;\n return {\n resolveCount: this._resolveCount,\n resolveTimeMs: Math.round(this._resolveTimeMs * 100) / 100,\n transpileCount: this._transpileCount,\n transpileTimeMs: Math.round(this._transpileTimeMs * 100) / 100,\n vfsReadCount: this._vfsReadCount,\n vfsWriteCount: this._vfsWriteCount,\n cacheHits: this._cacheHits,\n cacheMisses: this._cacheMisses,\n cacheHitRate: total > 0 ? this._cacheHits / total : 0,\n commandCount: this._commandCount,\n installCount: this._installCount,\n installTimeMs: Math.round(this._installTimeMs * 100) / 100,\n startedAt: this._startedAt,\n uptimeMs: Date.now() - this._startedAt,\n };\n }\n\n /** Reset all metrics. */\n reset(): void {\n this._resolveCount = 0;\n this._resolveTimeMs = 0;\n this._transpileCount = 0;\n this._transpileTimeMs = 0;\n this._vfsReadCount = 0;\n this._vfsWriteCount = 0;\n this._cacheHits = 0;\n this._cacheMisses = 0;\n this._commandCount = 0;\n this._installCount = 0;\n this._installTimeMs = 0;\n this._startedAt = Date.now();\n }\n}\n","/**\n * Network request interception and mocking for jiki containers.\n *\n * Allows intercepting and mocking outgoing `fetch()` calls from executed\n * code. Useful for testing, offline scenarios, and CORS avoidance.\n *\n * @example\n * ```ts\n * const container = boot();\n * container.mockFetch('/api/users', { json: [{ name: 'Alice' }] });\n * container.execute('fetch(\"/api/users\").then(r => r.json()).then(console.log)');\n * ```\n */\n\nexport interface MockResponse {\n /** HTTP status code. Default: 200. */\n status?: number;\n /** Response headers. */\n headers?: Record<string, string>;\n /** Response body as string. */\n body?: string;\n /** Response body as JSON (auto-serialized). Overrides `body`. */\n json?: unknown;\n}\n\nexport type FetchHandler = (\n url: string,\n init?: RequestInit,\n) => MockResponse | null | undefined | Promise<MockResponse | null | undefined>;\n\ninterface MockRule {\n pattern: string | RegExp;\n response?: MockResponse;\n handler?: FetchHandler;\n}\n\n/**\n * Intercepts fetch calls and returns mock responses when a URL matches\n * a registered pattern.\n */\nexport class NetworkInterceptor {\n private rules: MockRule[] = [];\n private handlers: FetchHandler[] = [];\n\n /**\n * Register a static mock response for a URL pattern.\n *\n * @param pattern - String (exact match or prefix) or RegExp\n * @param response - Mock response to return\n */\n mock(pattern: string | RegExp, response: MockResponse): void {\n this.rules.push({ pattern, response });\n }\n\n /**\n * Register a dynamic handler that can inspect the request and return\n * a response. Return `null` to pass through to the next handler or\n * the real network.\n */\n onFetch(handler: FetchHandler): void {\n this.handlers.push(handler);\n }\n\n /**\n * Remove all mock rules and handlers.\n */\n clear(): void {\n this.rules.length = 0;\n this.handlers.length = 0;\n }\n\n /** Number of registered rules. */\n get ruleCount(): number {\n return this.rules.length;\n }\n\n /** Number of registered handlers. */\n get handlerCount(): number {\n return this.handlers.length;\n }\n\n /**\n * Try to match a URL against registered rules and handlers.\n * Returns a Response-like object if matched, or `null` to pass through.\n */\n async intercept(\n url: string,\n init?: RequestInit,\n ): Promise<MockResponse | null> {\n // Check static rules first\n for (const rule of this.rules) {\n if (this.matches(url, rule.pattern)) {\n return rule.response || { status: 200 };\n }\n }\n\n // Check dynamic handlers\n for (const handler of this.handlers) {\n const result = await handler(url, init);\n if (result) return result;\n }\n\n return null;\n }\n\n private matches(url: string, pattern: string | RegExp): boolean {\n if (pattern instanceof RegExp) return pattern.test(url);\n // String: exact match or prefix match\n return url === pattern || url.startsWith(pattern);\n }\n}\n\n/**\n * Convert a MockResponse to a format suitable for the `fetch` polyfill.\n */\nexport function mockResponseToFetchResponse(mock: MockResponse): {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n text: () => Promise<string>;\n json: () => Promise<unknown>;\n arrayBuffer: () => Promise<ArrayBuffer>;\n} {\n const status = mock.status ?? 200;\n const body =\n mock.json !== undefined ? JSON.stringify(mock.json) : (mock.body ?? \"\");\n const headers = {\n \"Content-Type\": mock.json !== undefined ? \"application/json\" : \"text/plain\",\n ...mock.headers,\n };\n\n return {\n ok: status >= 200 && status < 300,\n status,\n statusText: status === 200 ? \"OK\" : String(status),\n headers,\n text: async () => body,\n json: async () => (mock.json !== undefined ? mock.json : JSON.parse(body)),\n arrayBuffer: async () =>\n new TextEncoder().encode(body).buffer as ArrayBuffer,\n };\n}\n","import { MemFS } from \"./memfs\";\nimport { Kernel, RuntimeOptions } from \"./kernel\";\nimport {\n PackageManager,\n InstallOptions,\n InstallResult,\n NpmLayout,\n} from \"./npm/index\";\nimport { PnpmLayout } from \"./npm/pnpm\";\nimport { Shell, ShellOptions, createShell } from \"./shell\";\nimport type { IExecuteResult, VFSSnapshot } from \"./runtime-interface\";\nimport * as pathShim from \"./polyfills/path\";\nimport { base64ToUint8 } from \"./utils/binary-encoding\";\nimport {\n setStreamingCallbacks,\n clearStreamingCallbacks,\n sendStdin,\n} from \"./polyfills/child_process\";\nimport { SyncAutoInstaller } from \"./npm/sync-installer\";\nimport { PluginRegistry, type JikiPlugin } from \"./plugin\";\nimport type { PersistenceAdapter } from \"./persistence\";\nimport {\n registerBuiltin,\n registerBuiltins,\n unregisterBuiltin,\n} from \"./builtins\";\nimport { shouldUseWorker, type WorkerMode } from \"./worker-runtime\";\nimport { SandboxGuard, type SandboxOptions } from \"./sandbox\";\nimport { Metrics } from \"./metrics\";\nimport { NetworkInterceptor, type MockResponse } from \"./network-interceptor\";\n\nexport interface ContainerOptions {\n cwd?: string;\n env?: Record<string, string>;\n registry?: string;\n /** `'npm'` (default) or `'pnpm'` */\n packageManager?: \"npm\" | \"pnpm\";\n /** Automatically install missing packages on require() */\n autoInstall?: boolean;\n onConsole?: (method: string, args: unknown[]) => void;\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n /** Plugins to register on this container. */\n plugins?: JikiPlugin[];\n /** Persistence adapter for surviving page refreshes. */\n persistence?: PersistenceAdapter;\n /** Enable inline source maps for TypeScript/JSX transpilation (default: false). */\n sourceMaps?: boolean;\n /**\n * Worker mode for CPU-intensive operations.\n * - `false` (default) — everything on the main thread\n * - `true` — transpilation runs in a Web Worker\n * - `'auto'` — use workers when available (browser), skip in Node.js\n */\n worker?: boolean | \"auto\";\n /** Resource limits and access controls. */\n sandbox?: SandboxOptions;\n}\n\nexport interface RunOptions extends ShellOptions {\n signal?: AbortSignal;\n}\n\nexport interface RunResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport class Container {\n readonly vfs: MemFS;\n readonly runtime: Kernel;\n readonly packageManager: PackageManager;\n readonly shell: Shell;\n /** Plugin registry for this container. */\n readonly plugins: PluginRegistry;\n /** Sandbox guard enforcing resource limits. */\n readonly sandbox: SandboxGuard;\n /** Performance metrics for this container. */\n readonly metrics: Metrics;\n /** Network request interceptor for mocking fetch calls. */\n readonly network: NetworkInterceptor;\n private _pnpmPm?: PackageManager;\n private _containerCwd: string;\n private _containerRegistry?: string;\n private _workerMode: WorkerMode;\n\n constructor(options: ContainerOptions = {}) {\n const cwd = options.cwd || \"/\";\n const usePnpm = options.packageManager === \"pnpm\";\n this._containerCwd = cwd;\n this._containerRegistry = options.registry;\n this._workerMode = options.worker ?? false;\n\n // Initialise plugin registry, sandbox, and metrics before other subsystems.\n this.plugins = new PluginRegistry();\n this.sandbox = new SandboxGuard(options.sandbox || {});\n this.metrics = new Metrics();\n this.network = new NetworkInterceptor();\n if (options.plugins) {\n for (const p of options.plugins) this.plugins.register(p);\n }\n\n this.vfs = new MemFS({\n persistence: options.persistence,\n sandbox: this.sandbox,\n });\n\n const layout = usePnpm ? new PnpmLayout() : new NpmLayout();\n this.packageManager = new PackageManager(this.vfs, {\n cwd,\n registry: options.registry,\n layout,\n });\n\n const autoInstallProvider = options.autoInstall\n ? new SyncAutoInstaller(this.vfs, layout, {\n cwd,\n registry: options.registry,\n })\n : undefined;\n\n this.runtime = new Kernel(\n this.vfs,\n {\n cwd,\n env: options.env,\n onConsole: options.onConsole,\n onStdout: options.onStdout,\n onStderr: options.onStderr,\n autoInstall: options.autoInstall,\n autoInstallProvider,\n sourceMaps: options.sourceMaps,\n },\n this.plugins,\n );\n\n if (usePnpm) {\n this._pnpmPm = this.packageManager;\n }\n\n this.shell = createShell(this.vfs, this.runtime, this.packageManager, {\n cwd,\n env: options.env,\n onStdout: options.onStdout,\n onStderr: options.onStderr,\n pnpmPm: usePnpm ? this.packageManager : undefined,\n lazyPnpmPm: usePnpm ? undefined : () => this.lazyPnpmPm,\n });\n\n // Register plugin-provided shell commands.\n for (const entry of this.plugins.getCommandHooks()) {\n this.shell.registerCommand(entry.name, entry.handler);\n }\n }\n\n private get lazyPnpmPm(): PackageManager {\n if (!this._pnpmPm) {\n this._pnpmPm = new PackageManager(this.vfs, {\n cwd: this._containerCwd,\n registry: this._containerRegistry,\n layout: new PnpmLayout(),\n });\n }\n return this._pnpmPm;\n }\n\n async init(options?: { wasmURL?: string | URL }): Promise<void> {\n await this.vfs.hydrate();\n await this.runtime.init({\n ...options,\n useWorker: shouldUseWorker(this._workerMode),\n });\n this.plugins.runBoot();\n }\n\n writeFile(path: string, content: string | Uint8Array): void {\n const dir = pathShim.dirname(path);\n if (dir !== \"/\" && !this.vfs.existsSync(dir)) {\n this.vfs.mkdirSync(dir, { recursive: true });\n }\n // Sandbox checks are enforced at the VFS level (MemFS.putFile)\n // so they apply to all write paths: Container, Shell, executed code.\n this.vfs.writeFileSync(path, content);\n this.metrics.trackWrite();\n }\n\n readFile(path: string): string;\n readFile(path: string, encoding: null): Uint8Array;\n readFile(path: string, encoding?: null): string | Uint8Array {\n this.metrics.trackRead();\n return encoding === null\n ? this.vfs.readFileSync(path)\n : this.vfs.readFileSync(path, \"utf8\");\n }\n\n mkdir(path: string): void {\n this.vfs.mkdirSync(path, { recursive: true });\n }\n readdir(path: string): string[] {\n return this.vfs.readdirSync(path);\n }\n exists(path: string): boolean {\n return this.vfs.existsSync(path);\n }\n rm(path: string): void {\n this.vfs.rmSync(path, { recursive: true, force: true });\n }\n\n execute(code: string, filename?: string): IExecuteResult {\n return this.runtime.execute(code, filename);\n }\n\n runFile(filename: string): IExecuteResult {\n return this.runtime.runFile(filename);\n }\n\n async run(command: string, options?: RunOptions): Promise<RunResult> {\n this.metrics.trackCommand();\n if (options?.onStdout || options?.onStderr || options?.signal) {\n setStreamingCallbacks({\n onStdout: options.onStdout,\n onStderr: options.onStderr,\n signal: options.signal,\n });\n }\n try {\n return await this.shell.exec(command, options);\n } finally {\n clearStreamingCallbacks();\n }\n }\n\n sendInput(data: string): void {\n sendStdin(data);\n // Also push to process.stdin so readline/inquirer can receive it.\n (this.runtime.process.stdin as any)?._push?.(data);\n }\n\n /** Register a custom polyfill for a built-in module. */\n registerPolyfill(name: string, factory: () => unknown): void {\n registerBuiltin(name, factory);\n }\n\n /** Register multiple custom polyfills at once. */\n registerPolyfills(map: Record<string, () => unknown>): void {\n registerBuiltins(map);\n }\n\n /** Unregister a custom polyfill. */\n unregisterPolyfill(name: string): void {\n unregisterBuiltin(name);\n }\n\n /** Mock a fetch URL with a static response. */\n mockFetch(pattern: string | RegExp, response: MockResponse): void {\n this.network.mock(pattern, response);\n }\n\n /** Register a dynamic fetch interceptor. */\n onFetch(\n handler: (\n url: string,\n init?: RequestInit,\n ) =>\n | MockResponse\n | null\n | undefined\n | Promise<MockResponse | null | undefined>,\n ): void {\n this.network.onFetch(handler);\n }\n\n /** Get a snapshot of performance metrics. */\n getMetrics() {\n return this.metrics.snapshot();\n }\n\n async install(\n packages: string | string[],\n options?: InstallOptions,\n ): Promise<InstallResult> {\n const start = Date.now();\n const result = await this.packageManager.install(packages, options);\n this.metrics.trackInstall(Date.now() - start);\n const names = Array.isArray(packages) ? packages : [packages];\n this.plugins.runInstall(names);\n return result;\n }\n\n async installDependencies(options?: InstallOptions): Promise<InstallResult> {\n const result = await this.packageManager.installFromPackageJson(options);\n this.plugins.runInstall([]);\n return result;\n }\n\n toSnapshot(): VFSSnapshot {\n return this.vfs.toSnapshot();\n }\n\n static fromSnapshot(\n snapshot: VFSSnapshot,\n options?: ContainerOptions,\n ): Container {\n const container = new Container(options);\n\n for (const entry of snapshot.files) {\n if (entry.path === \"/\") continue;\n if (entry.type === \"directory\") {\n container.vfs.mkdirSync(entry.path, { recursive: true });\n } else if (entry.type === \"file\" && entry.content) {\n const dir = pathShim.dirname(entry.path);\n if (dir !== \"/\") container.vfs.mkdirSync(dir, { recursive: true });\n container.vfs.writeFileSync(entry.path, base64ToUint8(entry.content));\n } else if (entry.type === \"symlink\" && entry.target) {\n container.vfs.symlinkSync(entry.target, entry.path);\n }\n }\n return container;\n }\n\n export(path = \"/\"): Record<string, unknown> {\n return this.vfs.export(path);\n }\n\n destroy(): void {\n this.runtime.clearCache();\n }\n}\n\n/** Register a plugin on an existing container (post-construction). */\nexport function registerPlugin(container: Container, plugin: JikiPlugin): void {\n container.plugins.register(plugin);\n for (const entry of container.plugins.getCommandHooks()) {\n container.shell.registerCommand(entry.name, entry.handler);\n }\n}\n\nexport function boot(options?: ContainerOptions): Container {\n return new Container(options);\n}\n\nexport { boot as createContainer };\n","/**\n * Monorepo workspace support.\n *\n * Parses `workspaces` field from package.json or `pnpm-workspace.yaml`\n * and resolves `workspace:*` version specifiers to local packages.\n *\n * @example\n * ```ts\n * const workspaces = discoverWorkspaces(vfs, '/');\n * // [{ name: '@myapp/utils', path: '/packages/utils', version: '1.0.0' }]\n * ```\n */\n\nimport type { MemFS } from \"../memfs\";\nimport * as pathShim from \"../polyfills/path\";\n\nexport interface WorkspacePackage {\n /** Package name from its package.json. */\n name: string;\n /** Absolute path to the workspace package directory. */\n path: string;\n /** Version from its package.json. */\n version: string;\n}\n\n/**\n * Discover all workspace packages in a monorepo.\n *\n * Checks for:\n * 1. `workspaces` field in root package.json (npm/yarn format)\n * 2. `pnpm-workspace.yaml` (pnpm format)\n *\n * Returns an array of discovered workspace packages with their names,\n * paths, and versions.\n */\nexport function discoverWorkspaces(\n vfs: MemFS,\n cwd: string,\n): WorkspacePackage[] {\n const patterns = getWorkspacePatterns(vfs, cwd);\n if (patterns.length === 0) return [];\n\n const packages: WorkspacePackage[] = [];\n\n for (const pattern of patterns) {\n // Expand glob-like patterns (e.g. \"packages/*\")\n const dirs = expandWorkspacePattern(vfs, cwd, pattern);\n for (const dir of dirs) {\n const pkgJsonPath = pathShim.join(dir, \"package.json\");\n try {\n if (!vfs.existsSync(pkgJsonPath)) continue;\n const pkg = JSON.parse(vfs.readFileSync(pkgJsonPath, \"utf8\"));\n if (pkg.name) {\n packages.push({\n name: pkg.name,\n path: dir,\n version: pkg.version || \"0.0.0\",\n });\n }\n } catch {\n // Skip invalid package.json\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Read workspace patterns from package.json or pnpm-workspace.yaml.\n */\nfunction getWorkspacePatterns(vfs: MemFS, cwd: string): string[] {\n // Check package.json workspaces field\n const pkgJsonPath = pathShim.join(cwd, \"package.json\");\n try {\n if (vfs.existsSync(pkgJsonPath)) {\n const pkg = JSON.parse(vfs.readFileSync(pkgJsonPath, \"utf8\"));\n if (Array.isArray(pkg.workspaces)) {\n return pkg.workspaces;\n }\n if (pkg.workspaces?.packages && Array.isArray(pkg.workspaces.packages)) {\n return pkg.workspaces.packages;\n }\n }\n } catch {\n /* skip */\n }\n\n // Check pnpm-workspace.yaml\n const pnpmWsPath = pathShim.join(cwd, \"pnpm-workspace.yaml\");\n try {\n if (vfs.existsSync(pnpmWsPath)) {\n const content = vfs.readFileSync(pnpmWsPath, \"utf8\");\n return parsePnpmWorkspaceYaml(content);\n }\n } catch {\n /* skip */\n }\n\n return [];\n}\n\n/**\n * Parse a simple pnpm-workspace.yaml to extract package patterns.\n * Handles the common format:\n * ```yaml\n * packages:\n * - 'packages/*'\n * - 'apps/*'\n * ```\n */\nfunction parsePnpmWorkspaceYaml(content: string): string[] {\n const patterns: string[] = [];\n let inPackages = false;\n\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed === \"packages:\" || trimmed === \"packages :\") {\n inPackages = true;\n continue;\n }\n if (inPackages) {\n if (trimmed.startsWith(\"- \")) {\n // Strip quotes and the leading \"- \"\n const pattern = trimmed\n .slice(2)\n .replace(/^['\"]|['\"]$/g, \"\")\n .trim();\n if (pattern) patterns.push(pattern);\n } else if (trimmed && !trimmed.startsWith(\"#\")) {\n // Non-list item means we've left the packages section\n break;\n }\n }\n }\n\n return patterns;\n}\n\n/**\n * Expand a workspace pattern like \"packages/*\" into actual directory paths.\n */\nfunction expandWorkspacePattern(\n vfs: MemFS,\n cwd: string,\n pattern: string,\n): string[] {\n // Remove trailing /\n pattern = pattern.replace(/\\/+$/, \"\");\n\n if (pattern.endsWith(\"/*\")) {\n // Glob: list children of the directory\n const parentDir = pathShim.join(cwd, pattern.slice(0, -2));\n try {\n if (!vfs.existsSync(parentDir)) return [];\n return vfs\n .readdirSync(parentDir)\n .filter(name => {\n const full = pathShim.join(parentDir, name);\n try {\n return vfs.statSync(full).isDirectory();\n } catch {\n return false;\n }\n })\n .map(name => pathShim.join(parentDir, name));\n } catch {\n return [];\n }\n }\n\n if (pattern.endsWith(\"/**\")) {\n // Recursive glob: find all directories containing package.json\n const parentDir = pathShim.join(cwd, pattern.slice(0, -3));\n const results: string[] = [];\n findPackageDirs(vfs, parentDir, results);\n return results;\n }\n\n // Exact path\n const dir = pathShim.join(cwd, pattern);\n return vfs.existsSync(dir) ? [dir] : [];\n}\n\nfunction findPackageDirs(vfs: MemFS, dir: string, results: string[]): void {\n try {\n const pkgJson = pathShim.join(dir, \"package.json\");\n if (vfs.existsSync(pkgJson)) results.push(dir);\n\n for (const name of vfs.readdirSync(dir)) {\n if (name === \"node_modules\" || name.startsWith(\".\")) continue;\n const full = pathShim.join(dir, name);\n try {\n if (vfs.statSync(full).isDirectory()) {\n findPackageDirs(vfs, full, results);\n }\n } catch {\n /* skip */\n }\n }\n } catch {\n /* skip */\n }\n}\n\n/**\n * Resolve a `workspace:*` version specifier to the local package path.\n * Returns the workspace package if found, or `null` if not a workspace dep.\n */\nexport function resolveWorkspaceDep(\n specifier: string,\n workspaces: WorkspacePackage[],\n): WorkspacePackage | null {\n for (const ws of workspaces) {\n if (ws.name === specifier) return ws;\n }\n return null;\n}\n\n/**\n * Check if a version string is a workspace protocol specifier.\n */\nexport function isWorkspaceProtocol(version: string): boolean {\n return version.startsWith(\"workspace:\");\n}\n\n/**\n * Create symlinks in node_modules for workspace packages, similar to\n * how pnpm/yarn link local packages.\n */\nexport function linkWorkspaces(\n vfs: MemFS,\n cwd: string,\n workspaces: WorkspacePackage[],\n): void {\n const nmDir = pathShim.join(cwd, \"node_modules\");\n vfs.mkdirSync(nmDir, { recursive: true });\n\n for (const ws of workspaces) {\n const linkPath = pathShim.join(nmDir, ws.name);\n // Create parent for scoped packages\n if (ws.name.includes(\"/\")) {\n const scope = pathShim.dirname(linkPath);\n vfs.mkdirSync(scope, { recursive: true });\n }\n // Only create if not already present\n if (!vfs.existsSync(linkPath)) {\n try {\n vfs.symlinkSync(ws.path, linkPath);\n } catch {\n // Symlink may already exist\n }\n }\n }\n}\n","/**\n * Lightweight TypeScript type-checker for jiki.\n *\n * Provides on-demand batch type checking by analyzing TypeScript files\n * in the VFS. Uses a simple heuristic-based approach that catches common\n * type errors without requiring the full TypeScript compiler.\n *\n * For full type checking, the TypeScript compiler can be installed as an\n * npm package and run via the shell: `npx tsc --noEmit`.\n *\n * @example\n * ```ts\n * const checker = new TypeChecker(container.vfs);\n * const diagnostics = checker.check(['/src/app.ts', '/src/utils.ts']);\n * for (const d of diagnostics) {\n * console.log(`${d.file}:${d.line} - ${d.message}`);\n * }\n * ```\n */\n\nimport type { MemFS } from \"./memfs\";\nimport * as pathShim from \"./polyfills/path\";\n\nexport interface Diagnostic {\n file: string;\n line: number;\n column: number;\n message: string;\n severity: \"error\" | \"warning\" | \"info\";\n code?: string;\n}\n\nexport interface TypeCheckerOptions {\n /** Strict mode (default: true). */\n strict?: boolean;\n /** Check for unused variables (default: false). */\n noUnusedLocals?: boolean;\n /** Check for implicit any (default: true in strict mode). */\n noImplicitAny?: boolean;\n}\n\n/**\n * Lightweight TypeScript type-checker that catches common errors\n * using pattern matching and heuristics. Not a full type system,\n * but catches the most common mistakes quickly.\n */\nexport class TypeChecker {\n private vfs: MemFS;\n private opts: Required<TypeCheckerOptions>;\n\n constructor(vfs: MemFS, options: TypeCheckerOptions = {}) {\n this.vfs = vfs;\n this.opts = {\n strict: options.strict ?? true,\n noUnusedLocals: options.noUnusedLocals ?? false,\n noImplicitAny: options.noImplicitAny ?? options.strict !== false,\n };\n }\n\n /**\n * Check a list of TypeScript files for common errors.\n * Returns diagnostics sorted by file and line number.\n */\n check(files: string[]): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n for (const file of files) {\n if (!file.match(/\\.(ts|tsx)$/)) continue;\n try {\n const source = this.vfs.readFileSync(file, \"utf8\");\n diagnostics.push(...this.checkFile(file, source));\n } catch {\n diagnostics.push({\n file,\n line: 0,\n column: 0,\n message: `Cannot read file: ${file}`,\n severity: \"error\",\n });\n }\n }\n\n return diagnostics.sort(\n (a, b) => a.file.localeCompare(b.file) || a.line - b.line,\n );\n }\n\n /**\n * Discover all .ts/.tsx files in a directory and check them.\n */\n checkAll(dir: string = \"/src\"): Diagnostic[] {\n const files = this.discoverFiles(dir);\n return this.check(files);\n }\n\n private discoverFiles(dir: string): string[] {\n const files: string[] = [];\n try {\n for (const entry of this.vfs.readdirSync(dir)) {\n const full = pathShim.join(dir, entry);\n try {\n if (this.vfs.statSync(full).isDirectory()) {\n if (entry !== \"node_modules\" && !entry.startsWith(\".\")) {\n files.push(...this.discoverFiles(full));\n }\n } else if (entry.match(/\\.(ts|tsx)$/) && !entry.endsWith(\".d.ts\")) {\n files.push(full);\n }\n } catch {\n /* skip */\n }\n }\n } catch {\n /* dir may not exist */\n }\n return files;\n }\n\n private checkFile(file: string, source: string): Diagnostic[] {\n const diags: Diagnostic[] = [];\n const lines = source.split(\"\\n\");\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n\n // Check for common TypeScript errors\n\n // 1. Missing return type on exported functions (noImplicitAny)\n if (this.opts.noImplicitAny) {\n const exportFnMatch = line.match(\n /^export\\s+(?:default\\s+)?function\\s+(\\w+)\\s*\\([^)]*\\)\\s*\\{/,\n );\n if (exportFnMatch && !line.includes(\"):\")) {\n diags.push({\n file,\n line: lineNum,\n column: 0,\n message: `Function '${exportFnMatch[1]}' has no return type annotation`,\n severity: \"warning\",\n code: \"TS7030\",\n });\n }\n }\n\n // 2. Duplicate variable declarations in same scope\n const constMatch = line.match(/^\\s*(const|let|var)\\s+(\\w+)/);\n if (constMatch) {\n const varName = constMatch[2];\n // Check for redeclaration in subsequent lines (same indentation level)\n for (let j = i + 1; j < lines.length && j < i + 50; j++) {\n const reDecl = lines[j].match(\n new RegExp(`^\\\\s*(const|let)\\\\s+${varName}\\\\b`),\n );\n if (\n reDecl &&\n lines[j].match(/^\\s*/)?.[0] === line.match(/^\\s*/)?.[0]\n ) {\n diags.push({\n file,\n line: j + 1,\n column: 0,\n message: `Cannot redeclare block-scoped variable '${varName}'`,\n severity: \"error\",\n code: \"TS2451\",\n });\n break;\n }\n }\n }\n\n // 3. Using `any` when noImplicitAny is enabled\n if (this.opts.noImplicitAny && this.opts.strict) {\n const anyTypeMatch = line.match(/:\\s*any\\b/);\n if (\n anyTypeMatch &&\n !line.includes(\"// @ts-ignore\") &&\n !line.includes(\"eslint-disable\")\n ) {\n diags.push({\n file,\n line: lineNum,\n column: anyTypeMatch.index ?? 0,\n message: \"Unexpected use of 'any' type\",\n severity: \"warning\",\n code: \"TS7006\",\n });\n }\n }\n\n // 4. Unreachable code after return/throw\n if (line.match(/^\\s*(return|throw)\\b/) && i + 1 < lines.length) {\n const nextLine = lines[i + 1]?.trim();\n if (\n nextLine &&\n !nextLine.startsWith(\"}\") &&\n !nextLine.startsWith(\"//\") &&\n !nextLine.startsWith(\"/*\") &&\n nextLine !== \"\"\n ) {\n diags.push({\n file,\n line: lineNum + 1,\n column: 0,\n message: \"Unreachable code detected\",\n severity: \"warning\",\n code: \"TS7027\",\n });\n }\n }\n\n // 5. Syntax: missing semicolons at statement boundaries (if strict)\n // Only flag obvious cases: variable declarations without semicolons\n if (this.opts.strict) {\n const stmtMatch = line.match(\n /^\\s*(const|let|var)\\s+\\w+\\s*=\\s*.+[^;{,\\s]\\s*$/,\n );\n if (\n stmtMatch &&\n !line.includes(\"//\") &&\n !line.endsWith(\"=>\") &&\n !line.endsWith(\"(\")\n ) {\n // Skip multi-line expressions\n const nextLine = lines[i + 1]?.trim() || \"\";\n if (\n nextLine &&\n !nextLine.startsWith(\".\") &&\n !nextLine.startsWith(\"+\") &&\n !nextLine.startsWith(\"?\") &&\n !nextLine.startsWith(\":\")\n ) {\n // This is a potential missing semicolon — but too noisy, skip for now\n }\n }\n }\n }\n\n return diags;\n }\n}\n","import { posix } from \"../polyfills/path\";\n\n/**\n * Resolve a URL path safely within a root directory.\n * Strips query/hash, decodes, normalizes, and ensures the result\n * never escapes outside root via .. traversal.\n */\nexport function safePath(root: string, urlPath: string): string {\n // Strip query string and hash\n let p = urlPath.split(\"?\")[0].split(\"#\")[0];\n\n // Decode percent-encoded characters\n try {\n p = decodeURIComponent(p);\n } catch {\n /* keep as-is */\n }\n\n // Ensure leading slash\n if (!p.startsWith(\"/\")) p = \"/\" + p;\n\n // Normalize (resolves .., ., double slashes)\n p = posix.normalize(p);\n\n // Join with root\n const full = root === \"/\" ? p : posix.normalize(root + \"/\" + p);\n\n // Verify the result starts with root\n const normalRoot = root === \"/\" ? \"/\" : posix.normalize(root);\n if (\n !full.startsWith(normalRoot === \"/\" ? \"/\" : normalRoot + \"/\") &&\n full !== normalRoot\n ) {\n return normalRoot;\n }\n\n return full;\n}\n","import { EventEmitter } from \"./polyfills/events\";\nimport { MemFS } from \"./memfs\";\nimport { BufferImpl as Buffer } from \"./polyfills/stream\";\nimport { safePath } from \"./utils/safe-path\";\n\nexport interface DevServerOptions {\n port: number;\n root?: string;\n}\n\nexport interface ResponseData {\n statusCode: number;\n statusMessage: string;\n headers: Record<string, string>;\n body: Buffer;\n}\n\nexport interface HMRUpdate {\n type: \"update\" | \"full-reload\";\n path: string;\n timestamp?: number;\n}\n\n/**\n * Check if a filename contains a content hash (e.g., app.a1b2c3d4.js, chunk-HASH.css).\n * Content-hashed files are safe to cache immutably since the hash changes when content changes.\n */\nfunction hasContentHash(filepath: string): boolean {\n // Match patterns like: file.abc123ef.js, file-abc123ef.css, file.ABCDEF01.chunk.js\n // The hash segment should be 8+ hex characters between dots or after a dash before the extension\n return /[.\\-][a-fA-F0-9]{8,}[.\\-]/.test(filepath);\n}\n\n/**\n * Determine the appropriate Cache-Control header for a given file path.\n * - Content-hashed assets get immutable caching (1 year)\n * - HTML and non-hashed assets get no-cache for development freshness\n */\nfunction inferCacheControl(filepath: string): string {\n const ext = filepath.split(\".\").pop()?.toLowerCase() || \"\";\n // HTML files should never be cached immutably\n if (ext === \"html\" || ext === \"htm\") {\n return \"no-cache\";\n }\n // Content-hashed files are safe to cache immutably\n if (hasContentHash(filepath)) {\n return \"public, max-age=31536000, immutable\";\n }\n return \"no-cache\";\n}\n\nfunction inferMimeType(filepath: string): string {\n const ext = filepath.split(\".\").pop()?.toLowerCase() || \"\";\n switch (ext) {\n case \"html\":\n case \"htm\":\n return \"text/html; charset=utf-8\";\n case \"css\":\n return \"text/css; charset=utf-8\";\n case \"js\":\n case \"mjs\":\n case \"cjs\":\n case \"jsx\":\n case \"ts\":\n case \"tsx\":\n return \"application/javascript; charset=utf-8\";\n case \"json\":\n case \"map\":\n return \"application/json; charset=utf-8\";\n case \"png\":\n return \"image/png\";\n case \"jpg\":\n case \"jpeg\":\n return \"image/jpeg\";\n case \"gif\":\n return \"image/gif\";\n case \"svg\":\n return \"image/svg+xml\";\n case \"ico\":\n return \"image/x-icon\";\n case \"webp\":\n return \"image/webp\";\n case \"woff\":\n return \"font/woff\";\n case \"woff2\":\n return \"font/woff2\";\n case \"ttf\":\n return \"font/ttf\";\n case \"otf\":\n return \"font/otf\";\n case \"mp3\":\n return \"audio/mpeg\";\n case \"wav\":\n return \"audio/wav\";\n case \"mp4\":\n return \"video/mp4\";\n case \"webm\":\n return \"video/webm\";\n case \"pdf\":\n return \"application/pdf\";\n case \"xml\":\n return \"application/xml\";\n case \"txt\":\n return \"text/plain; charset=utf-8\";\n case \"md\":\n return \"text/markdown; charset=utf-8\";\n case \"wasm\":\n return \"application/wasm\";\n default:\n return \"application/octet-stream\";\n }\n}\n\ninterface FileContent {\n path: string;\n data: Uint8Array;\n mime: string;\n}\n\nclass HttpResponder {\n static fromContent(fc: FileContent): ResponseData {\n const buf = Buffer.from(fc.data);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": fc.mime,\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": inferCacheControl(fc.path),\n },\n body: buf,\n };\n }\n\n static text(code: number, statusMsg: string, body: string): ResponseData {\n const buf = Buffer.from(body);\n return {\n statusCode: code,\n statusMessage: statusMsg,\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n },\n body: buf,\n };\n }\n\n static redirect(\n location: string,\n status: 301 | 302 | 307 | 308 = 302,\n ): ResponseData {\n const labels: Record<number, string> = {\n 301: \"Moved Permanently\",\n 302: \"Found\",\n 307: \"Temporary Redirect\",\n 308: \"Permanent Redirect\",\n };\n return {\n statusCode: status,\n statusMessage: labels[status] || \"Found\",\n headers: {\n Location: location,\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"Content-Length\": \"0\",\n },\n body: Buffer.from(\"\"),\n };\n }\n}\n\nexport abstract class DevServer extends EventEmitter {\n protected vfs: MemFS;\n protected port: number;\n protected root: string;\n protected running = false;\n\n constructor(vfs: MemFS, options: DevServerOptions) {\n super();\n this.vfs = vfs;\n this.port = options.port;\n this.root = options.root || \"/\";\n }\n\n abstract handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData>;\n\n abstract startWatching(): void;\n\n /**\n * CORS headers added to all responses for cross-origin iframe support.\n * This is essential since the dev server is typically accessed from\n * a sandboxed iframe on a different origin.\n */\n private static readonly CORS_HEADERS: Record<string, string> = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, PATCH, OPTIONS\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Max-Age\": \"86400\",\n };\n\n /**\n * Add CORS headers to a response.\n */\n protected addCorsHeaders(response: ResponseData): ResponseData {\n return {\n ...response,\n headers: { ...response.headers, ...DevServer.CORS_HEADERS },\n };\n }\n\n /**\n * Handle CORS preflight OPTIONS requests.\n */\n protected handleOptionsRequest(): ResponseData {\n return {\n statusCode: 204,\n statusMessage: \"No Content\",\n headers: {\n ...DevServer.CORS_HEADERS,\n \"Content-Length\": \"0\",\n },\n body: Buffer.from(\"\"),\n };\n }\n\n stop(): void {\n this.running = false;\n this.emit(\"close\");\n }\n\n start(): void {\n this.running = true;\n this.startWatching();\n this.emit(\"listening\", this.port);\n }\n\n isRunning(): boolean {\n return this.running;\n }\n getPort(): number {\n return this.port;\n }\n\n protected serveFile(filePath: string): ResponseData {\n const resolved = this.resolvePath(filePath);\n let raw: Uint8Array;\n try {\n raw = this.vfs.readFileSync(resolved);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return this.notFound(filePath);\n }\n return this.serverError(err);\n }\n return HttpResponder.fromContent({\n path: resolved,\n data: raw,\n mime: this.getMimeType(filePath),\n });\n }\n\n protected resolvePath(urlPath: string): string {\n return safePath(this.root, urlPath);\n }\n\n protected notFound(path: string): ResponseData {\n return HttpResponder.text(404, \"Not Found\", `Not found: ${path}`);\n }\n\n protected serverError(error: unknown): ResponseData {\n const msg =\n error instanceof Error ? error.message : \"Internal Server Error\";\n return HttpResponder.text(\n 500,\n \"Internal Server Error\",\n `Server Error: ${msg}`,\n );\n }\n\n protected redirect(\n location: string,\n status: 301 | 302 | 307 | 308 = 302,\n ): ResponseData {\n return HttpResponder.redirect(location, status);\n }\n\n protected getMimeType(path: string): string {\n return inferMimeType(path);\n }\n\n protected exists(path: string): boolean {\n return this.vfs.existsSync(path);\n }\n\n protected isDirectory(path: string): boolean {\n try {\n return this.vfs.statSync(path).isDirectory();\n } catch {\n return false;\n }\n }\n\n protected broadcastChange(update: HMRUpdate): void {\n this.emit(\"hmr-update\", {\n ...update,\n timestamp: update.timestamp || Date.now(),\n });\n }\n\n /** @deprecated Use broadcastChange instead */\n protected emitHMRUpdate(update: HMRUpdate): void {\n this.broadcastChange(update);\n }\n}\n\nexport { hasContentHash, inferCacheControl };\nexport default DevServer;\n","/**\n * Next.js shim constants\n * Static HTML/JS strings used by NextDevServer for browser-side Next.js emulation.\n * These are injected into generated HTML pages as inline scripts or served as virtual modules.\n */\n\nimport { REACT_REFRESH_CDN, TAILWIND_CDN_URL } from \"../config/cdn\";\n\n/**\n * Tailwind CSS CDN script for runtime JIT compilation\n */\nexport const TAILWIND_CDN_SCRIPT = `<script src=\"${TAILWIND_CDN_URL}\"></script>`;\n\n/**\n * CORS Proxy script - provides proxyFetch function in the iframe\n * Reads proxy URL from localStorage (set by parent window)\n */\nexport const CORS_PROXY_SCRIPT = `\n<script>\n // CORS Proxy support for external API calls\n window.__getCorsProxy = function() {\n return localStorage.getItem('__corsProxyUrl') || null;\n };\n\n window.__setCorsProxy = function(url) {\n if (url) {\n localStorage.setItem('__corsProxyUrl', url);\n } else {\n localStorage.removeItem('__corsProxyUrl');\n }\n };\n\n window.__proxyFetch = async function(url, options) {\n const proxyUrl = window.__getCorsProxy();\n if (proxyUrl) {\n const proxiedUrl = proxyUrl + encodeURIComponent(url);\n return fetch(proxiedUrl, options);\n }\n return fetch(url, options);\n };\n</script>\n`;\n\n/**\n * React Refresh preamble - MUST run before React is loaded\n */\nexport const REACT_REFRESH_PREAMBLE = `\n<script type=\"module\">\n// Block until React Refresh is loaded and initialized\nconst RefreshRuntime = await import('${REACT_REFRESH_CDN}').then(m => m.default || m);\n\nRefreshRuntime.injectIntoGlobalHook(window);\nwindow.$RefreshRuntime$ = RefreshRuntime;\nwindow.$RefreshRegCount$ = 0;\n\nwindow.$RefreshReg$ = (type, id) => {\n window.$RefreshRegCount$++;\n RefreshRuntime.register(type, id);\n};\n\nwindow.$RefreshSig$ = () => (type) => type;\n\nconsole.log('[HMR] React Refresh initialized');\n</script>\n`;\n\n/**\n * HMR client script for Next.js\n */\nexport const HMR_CLIENT_SCRIPT = `\n<script type=\"module\">\n(function() {\n const hotModules = new Map();\n const pendingUpdates = new Map();\n\n window.__vite_hot_context__ = function createHotContext(ownerPath) {\n if (hotModules.has(ownerPath)) {\n return hotModules.get(ownerPath);\n }\n\n const hot = {\n data: {},\n accept(callback) {\n hot._acceptCallback = callback;\n },\n dispose(callback) {\n hot._disposeCallback = callback;\n },\n invalidate() {\n location.reload();\n },\n prune(callback) {\n hot._pruneCallback = callback;\n },\n on(event, cb) {},\n off(event, cb) {},\n send(event, data) {},\n _acceptCallback: null,\n _disposeCallback: null,\n _pruneCallback: null,\n };\n\n hotModules.set(ownerPath, hot);\n return hot;\n };\n\n // Listen for HMR updates via postMessage (works with sandboxed iframes)\n window.addEventListener('message', async (event) => {\n // Filter for HMR messages only\n if (!event.data || event.data.channel !== 'next-hmr') return;\n const { type, path, timestamp } = event.data;\n\n if (type === 'update') {\n console.log('[HMR] Update:', path);\n\n if (path.endsWith('.css')) {\n const links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n links.forEach(link => {\n const href = link.getAttribute('href');\n if (href && href.includes(path.replace(/^\\\\//, ''))) {\n link.href = href.split('?')[0] + '?t=' + timestamp;\n }\n });\n\n const styles = document.querySelectorAll('style[data-next-dev-id]');\n styles.forEach(style => {\n const id = style.getAttribute('data-next-dev-id');\n if (id && id.includes(path.replace(/^\\\\//, ''))) {\n import(path + '?t=' + timestamp).catch(() => {});\n }\n });\n } else if (path.match(/\\\\.(jsx?|tsx?)$/)) {\n await handleJSUpdate(path, timestamp);\n }\n } else if (type === 'full-reload') {\n console.log('[HMR] Full reload');\n location.reload();\n }\n });\n\n async function handleJSUpdate(path, timestamp) {\n const normalizedPath = path.startsWith('/') ? path : '/' + path;\n const hot = hotModules.get(normalizedPath);\n\n try {\n if (hot && hot._disposeCallback) {\n hot._disposeCallback(hot.data);\n }\n\n if (window.$RefreshRuntime$) {\n pendingUpdates.set(normalizedPath, timestamp);\n\n if (pendingUpdates.size === 1) {\n setTimeout(async () => {\n try {\n for (const [modulePath, ts] of pendingUpdates) {\n const moduleUrl = '.' + modulePath + '?t=' + ts;\n await import(moduleUrl);\n }\n\n window.$RefreshRuntime$.performReactRefresh();\n console.log('[HMR] Updated', pendingUpdates.size, 'module(s)');\n\n pendingUpdates.clear();\n } catch (error) {\n console.error('[HMR] Failed to apply update:', error);\n pendingUpdates.clear();\n location.reload();\n }\n }, 30);\n }\n } else {\n console.log('[HMR] React Refresh not available, reloading page');\n location.reload();\n }\n } catch (error) {\n console.error('[HMR] Update failed:', error);\n location.reload();\n }\n }\n\n console.log('[HMR] Next.js client ready');\n})();\n</script>\n`;\n\n/**\n * Next.js Link shim code\n */\nexport const NEXT_LINK_SHIM = `\nimport React from 'react';\n\nconst getVirtualBasePath = () => {\n const match = window.location.pathname.match(/^\\\\/__virtual__\\\\/\\\\d+(?:\\\\/|$)/);\n if (!match) return '';\n return match[0].endsWith('/') ? match[0] : match[0] + '/';\n};\n\nconst getBasePath = () => window.__NEXT_BASE_PATH__ || '';\n\nconst applyVirtualBase = (url) => {\n if (typeof url !== 'string') return url;\n if (!url || url.startsWith('#') || url.startsWith('?')) return url;\n if (/^(https?:)?\\\\/\\\\//.test(url)) return url;\n\n // Apply basePath first\n const bp = getBasePath();\n if (bp && url.startsWith('/') && !url.startsWith(bp + '/') && url !== bp) {\n url = bp + url;\n }\n\n const base = getVirtualBasePath();\n if (!base) return url;\n if (url.startsWith(base)) return url;\n if (url.startsWith('/')) return base + url.slice(1);\n return base + url;\n};\n\nexport default function Link({ href, children, ...props }) {\n const handleClick = (e) => {\n console.log('[Link] Click handler called, href:', href);\n\n if (props.onClick) {\n props.onClick(e);\n }\n\n // Allow cmd/ctrl click to open in new tab\n if (e.metaKey || e.ctrlKey) {\n console.log('[Link] Meta/Ctrl key pressed, allowing default behavior');\n return;\n }\n\n if (typeof href !== 'string' || !href || href.startsWith('#') || href.startsWith('?')) {\n console.log('[Link] Skipping navigation for href:', href);\n return;\n }\n\n if (/^(https?:)?\\\\/\\\\//.test(href)) {\n console.log('[Link] External URL, allowing default behavior:', href);\n return;\n }\n\n e.preventDefault();\n const resolvedHref = applyVirtualBase(href);\n console.log('[Link] Navigating to:', resolvedHref);\n window.history.pushState({}, '', resolvedHref);\n window.dispatchEvent(new PopStateEvent('popstate'));\n };\n\n return React.createElement('a', { href, onClick: handleClick, ...props }, children);\n}\n\nexport { Link };\n`;\n\n/**\n * Next.js Router shim code\n */\nexport const NEXT_ROUTER_SHIM = `\nimport React, { useState, useEffect, createContext, useContext } from 'react';\n\nconst RouterContext = createContext(null);\n\nconst getVirtualBasePath = () => {\n const match = window.location.pathname.match(/^\\\\/__virtual__\\\\/\\\\d+(?:\\\\/|$)/);\n if (!match) return '';\n return match[0].endsWith('/') ? match[0] : match[0] + '/';\n};\n\nconst applyVirtualBase = (url) => {\n if (typeof url !== 'string') return url;\n if (!url || url.startsWith('#') || url.startsWith('?')) return url;\n if (/^(https?:)?\\\\/\\\\//.test(url)) return url;\n\n const base = getVirtualBasePath();\n if (!base) return url;\n if (url.startsWith(base)) return url;\n if (url.startsWith('/')) return base + url.slice(1);\n return base + url;\n};\n\nconst stripVirtualBase = (pathname) => {\n const match = pathname.match(/^\\\\/__virtual__\\\\/\\\\d+(?:\\\\/|$)/);\n if (!match) return pathname;\n return '/' + pathname.slice(match[0].length);\n};\n\nexport function useRouter() {\n const [pathname, setPathname] = useState(\n typeof window !== 'undefined' ? stripVirtualBase(window.location.pathname) : '/'\n );\n const [query, setQuery] = useState({});\n\n useEffect(() => {\n const updateRoute = () => {\n setPathname(stripVirtualBase(window.location.pathname));\n setQuery(Object.fromEntries(new URLSearchParams(window.location.search)));\n };\n\n window.addEventListener('popstate', updateRoute);\n updateRoute();\n\n return () => window.removeEventListener('popstate', updateRoute);\n }, []);\n\n return {\n pathname,\n query,\n asPath: pathname + window.location.search,\n push: (url, as, options) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return Promise.resolve(true);\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.pushState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n return Promise.resolve(true);\n },\n replace: (url, as, options) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return Promise.resolve(true);\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.replaceState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n return Promise.resolve(true);\n },\n prefetch: (url) => {\n // Preload the target page module in the background\n if (typeof url === 'string' && url.startsWith('/')) {\n try {\n const resolvedUrl = applyVirtualBase(url);\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = resolvedUrl;\n link.as = 'document';\n document.head.appendChild(link);\n } catch (e) {\n // Silently fail - prefetch is best-effort\n }\n }\n return Promise.resolve();\n },\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n reload: () => window.location.reload(),\n events: {\n on: () => {},\n off: () => {},\n emit: () => {},\n },\n isFallback: false,\n isReady: true,\n isPreview: false,\n };\n}\n\nexport const Router = {\n events: {\n on: () => {},\n off: () => {},\n emit: () => {},\n },\n push: (url) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return Promise.resolve(true);\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.pushState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n return Promise.resolve(true);\n },\n replace: (url) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return Promise.resolve(true);\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.replaceState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n return Promise.resolve(true);\n },\n};\n\nexport default { useRouter, Router };\n`;\n\n/**\n * Next.js Navigation shim code (App Router)\n *\n * This shim provides App Router-specific navigation hooks from 'next/navigation'.\n * These are DIFFERENT from the Pages Router hooks in 'next/router':\n *\n * Pages Router (next/router):\n * - useRouter() returns { pathname, query, push, replace, events, ... }\n * - Has router.events for route change subscriptions\n * - query object contains URL params\n *\n * App Router (next/navigation):\n * - useRouter() returns { push, replace, back, forward, refresh, prefetch }\n * - usePathname() for current path\n * - useSearchParams() for URL search params\n * - useParams() for dynamic route segments\n * - No events - use useEffect with pathname/searchParams instead\n *\n * @see https://nextjs.org/docs/app/api-reference/functions/use-router\n */\nexport const NEXT_NAVIGATION_SHIM = `\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\n\nconst getVirtualBasePath = () => {\n const match = window.location.pathname.match(/^\\\\/__virtual__\\\\/\\\\d+(?:\\\\/|$)/);\n if (!match) return '';\n return match[0].endsWith('/') ? match[0] : match[0] + '/';\n};\n\nconst applyVirtualBase = (url) => {\n if (typeof url !== 'string') return url;\n if (!url || url.startsWith('#') || url.startsWith('?')) return url;\n if (/^(https?:)?\\\\/\\\\//.test(url)) return url;\n\n const base = getVirtualBasePath();\n if (!base) return url;\n if (url.startsWith(base)) return url;\n if (url.startsWith('/')) return base + url.slice(1);\n return base + url;\n};\n\nconst stripVirtualBase = (pathname) => {\n const match = pathname.match(/^\\\\/__virtual__\\\\/\\\\d+(?:\\\\/|$)/);\n if (!match) return pathname;\n return '/' + pathname.slice(match[0].length);\n};\n\n/**\n * App Router's useRouter hook\n * Returns navigation methods only (no pathname, no query)\n * Use usePathname() and useSearchParams() for URL info\n */\nexport function useRouter() {\n const push = useCallback((url, options) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return;\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.pushState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }, []);\n\n const replace = useCallback((url, options) => {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return;\n }\n const resolvedUrl = applyVirtualBase(url);\n window.history.replaceState({}, '', resolvedUrl);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }, []);\n\n const back = useCallback(() => window.history.back(), []);\n const forward = useCallback(() => window.history.forward(), []);\n const refresh = useCallback(() => window.location.reload(), []);\n const prefetch = useCallback((url) => {\n // Preload the target page module in the background\n if (typeof url === 'string' && url.startsWith('/')) {\n try {\n const resolvedUrl = applyVirtualBase(url);\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = resolvedUrl;\n link.as = 'document';\n document.head.appendChild(link);\n } catch (e) {\n // Silently fail - prefetch is best-effort\n }\n }\n return Promise.resolve();\n }, []);\n\n return useMemo(() => ({\n push,\n replace,\n back,\n forward,\n refresh,\n prefetch,\n }), [push, replace, back, forward, refresh, prefetch]);\n}\n\n/**\n * usePathname - Returns the current URL pathname\n * Reactively updates when navigation occurs\n * @example const pathname = usePathname(); // '/dashboard/settings'\n */\nexport function usePathname() {\n const [pathname, setPathname] = useState(\n typeof window !== 'undefined' ? stripVirtualBase(window.location.pathname) : '/'\n );\n\n useEffect(() => {\n const handler = () => setPathname(stripVirtualBase(window.location.pathname));\n window.addEventListener('popstate', handler);\n return () => window.removeEventListener('popstate', handler);\n }, []);\n\n return pathname;\n}\n\n/**\n * useSearchParams - Returns the current URL search parameters\n * @example const searchParams = useSearchParams();\n * const query = searchParams.get('q'); // '?q=hello' -> 'hello'\n */\nexport function useSearchParams() {\n const [searchParams, setSearchParams] = useState(() => {\n if (typeof window === 'undefined') return new URLSearchParams();\n return new URLSearchParams(window.location.search);\n });\n\n useEffect(() => {\n const handler = () => {\n setSearchParams(new URLSearchParams(window.location.search));\n };\n window.addEventListener('popstate', handler);\n return () => window.removeEventListener('popstate', handler);\n }, []);\n\n return searchParams;\n}\n\n/**\n * useParams - Returns dynamic route parameters\n * For route /users/[id]/page.jsx with URL /users/123:\n * @example const { id } = useParams(); // { id: '123' }\n *\n * Fetches params from the server's route-info endpoint for dynamic routes.\n */\nexport function useParams() {\n const [params, setParams] = useState(() => {\n // Check if initial params were embedded by the server\n if (typeof window !== 'undefined' && window.__NEXT_ROUTE_PARAMS__) {\n return window.__NEXT_ROUTE_PARAMS__;\n }\n return {};\n });\n\n useEffect(() => {\n let cancelled = false;\n\n const fetchParams = async () => {\n const pathname = stripVirtualBase(window.location.pathname);\n const base = getVirtualBasePath();\n const baseUrl = base ? base.replace(/\\\\/$/, '') : '';\n\n try {\n const response = await fetch(baseUrl + '/_next/route-info?pathname=' + encodeURIComponent(pathname));\n const info = await response.json();\n if (!cancelled && info.params) {\n setParams(info.params);\n }\n } catch (e) {\n // Silently fail - static routes won't have params\n }\n };\n\n fetchParams();\n\n const handler = () => fetchParams();\n window.addEventListener('popstate', handler);\n return () => {\n cancelled = true;\n window.removeEventListener('popstate', handler);\n };\n }, []);\n\n return params;\n}\n\n/**\n * useSelectedLayoutSegment - Returns the active child segment one level below\n * Useful for styling active nav items in layouts\n * @example For /dashboard/settings, returns 'settings' in dashboard layout\n */\nexport function useSelectedLayoutSegment() {\n const pathname = usePathname();\n const segments = pathname.split('/').filter(Boolean);\n return segments[0] || null;\n}\n\n/**\n * useSelectedLayoutSegments - Returns all active child segments\n * @example For /dashboard/settings/profile, returns ['dashboard', 'settings', 'profile']\n */\nexport function useSelectedLayoutSegments() {\n const pathname = usePathname();\n return pathname.split('/').filter(Boolean);\n}\n\n/**\n * redirect - Programmatic redirect (typically used in Server Components)\n * In this browser implementation, performs immediate navigation\n */\nexport function redirect(url) {\n if (typeof url === 'string' && /^(https?:)?\\\\/\\\\//.test(url)) {\n window.location.href = url;\n return;\n }\n window.location.href = applyVirtualBase(url);\n}\n\n/**\n * notFound - Trigger the not-found UI\n * In this browser implementation, throws an error\n */\nexport function notFound() {\n throw new Error('NEXT_NOT_FOUND');\n}\n\n// Re-export Link for convenience (can import from next/navigation or next/link)\nexport { default as Link } from 'next/link';\n`;\n\n/**\n * Next.js Head shim code\n */\nexport const NEXT_HEAD_SHIM = `\nimport React, { useEffect } from 'react';\n\nexport default function Head({ children }) {\n useEffect(() => {\n // Process children and update document.head\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n\n const { type, props } = child;\n\n if (type === 'title' && props.children) {\n document.title = Array.isArray(props.children)\n ? props.children.join('')\n : props.children;\n } else if (type === 'meta') {\n const existingMeta = props.name\n ? document.querySelector(\\`meta[name=\"\\${props.name}\"]\\`)\n : props.property\n ? document.querySelector(\\`meta[property=\"\\${props.property}\"]\\`)\n : null;\n\n if (existingMeta) {\n Object.keys(props).forEach(key => {\n existingMeta.setAttribute(key, props[key]);\n });\n } else {\n const meta = document.createElement('meta');\n Object.keys(props).forEach(key => {\n meta.setAttribute(key, props[key]);\n });\n document.head.appendChild(meta);\n }\n } else if (type === 'link') {\n const link = document.createElement('link');\n Object.keys(props).forEach(key => {\n link.setAttribute(key, props[key]);\n });\n document.head.appendChild(link);\n }\n });\n }, [children]);\n\n return null;\n}\n`;\n\n/**\n * Next.js Image shim code\n * Provides a simple img-based implementation of next/image\n */\nexport const NEXT_IMAGE_SHIM = `\nimport React from 'react';\n\nfunction Image({\n src,\n alt = '',\n width,\n height,\n fill,\n loader,\n quality = 75,\n priority,\n loading,\n placeholder,\n blurDataURL,\n unoptimized,\n onLoad,\n onError,\n style,\n className,\n sizes,\n ...rest\n}) {\n // Handle src - could be string or StaticImageData object\n const imageSrc = typeof src === 'object' ? src.src : src;\n\n // Build style object\n const imgStyle = { ...style };\n if (fill) {\n imgStyle.position = 'absolute';\n imgStyle.width = '100%';\n imgStyle.height = '100%';\n imgStyle.objectFit = imgStyle.objectFit || 'cover';\n imgStyle.inset = '0';\n }\n\n return React.createElement('img', {\n src: imageSrc,\n alt,\n width: fill ? undefined : width,\n height: fill ? undefined : height,\n loading: priority ? 'eager' : (loading || 'lazy'),\n decoding: 'async',\n style: imgStyle,\n className,\n onLoad,\n onError,\n ...rest\n });\n}\n\nexport default Image;\nexport { Image };\n`;\n\n/**\n * next/dynamic shim - Dynamic imports with loading states\n */\nexport const NEXT_DYNAMIC_SHIM = `\nimport React from 'react';\n\nfunction dynamic(importFn, options = {}) {\n const {\n loading: LoadingComponent,\n ssr = true,\n } = options;\n\n // Create a lazy component\n const LazyComponent = React.lazy(importFn);\n\n // Wrapper component that handles loading state\n function DynamicComponent(props) {\n const fallback = LoadingComponent\n ? React.createElement(LoadingComponent, { isLoading: true })\n : null;\n\n return React.createElement(\n React.Suspense,\n { fallback },\n React.createElement(LazyComponent, props)\n );\n }\n\n return DynamicComponent;\n}\n\nexport default dynamic;\nexport { dynamic };\n`;\n\n/**\n * next/script shim - Loads external scripts\n */\nexport const NEXT_SCRIPT_SHIM = `\nimport React from 'react';\n\nfunction Script({\n src,\n strategy = 'afterInteractive',\n onLoad,\n onReady,\n onError,\n children,\n dangerouslySetInnerHTML,\n ...rest\n}) {\n React.useEffect(function() {\n if (!src && !children && !dangerouslySetInnerHTML) return;\n\n var script = document.createElement('script');\n\n if (src) {\n script.src = src;\n script.async = strategy !== 'beforeInteractive';\n }\n\n Object.keys(rest).forEach(function(key) {\n script.setAttribute(key, rest[key]);\n });\n\n if (children) {\n script.textContent = children;\n } else if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n script.textContent = dangerouslySetInnerHTML.__html;\n }\n\n script.onload = function() {\n if (onLoad) onLoad();\n if (onReady) onReady();\n };\n script.onerror = onError;\n\n document.head.appendChild(script);\n\n return function() {\n if (script.parentNode) {\n script.parentNode.removeChild(script);\n }\n };\n }, [src]);\n\n return null;\n}\n\nexport default Script;\nexport { Script };\n`;\n\n/**\n * next/font/google shim - Loads Google Fonts via CDN\n * Uses a Proxy to dynamically handle ANY Google Font without hardcoding\n */\nexport const NEXT_FONT_GOOGLE_SHIM = `\n// Track loaded fonts to avoid duplicate style injections\nconst loadedFonts = new Set();\nconst addedPreconnects = new Set();\n\n/**\n * Convert font function name to Google Fonts family name\n * Examples:\n * DM_Sans -> DM Sans\n * Open_Sans -> Open Sans\n * Fraunces -> Fraunces\n */\nfunction toFontFamily(fontName) {\n return fontName.replace(/_/g, ' ');\n}\n\nfunction addPreconnect(url, crossOrigin) {\n if (addedPreconnects.has(url)) return;\n addedPreconnects.add(url);\n if (typeof document === 'undefined') return;\n const link = document.createElement('link');\n link.rel = 'preconnect';\n link.href = url;\n if (crossOrigin) link.crossOrigin = crossOrigin;\n document.head.appendChild(link);\n}\n\n/**\n * Inject font CSS into document\n * - Adds preconnect links for faster font loading\n * - Loads the font from Google Fonts CDN\n * - Creates a CSS class that sets the CSS variable\n */\nfunction injectFontCSS(fontFamily, variableName, weight, style) {\n const fontKey = fontFamily + '-' + (variableName || 'default');\n if (loadedFonts.has(fontKey)) {\n return;\n }\n loadedFonts.add(fontKey);\n\n if (typeof document === 'undefined') {\n return;\n }\n\n // Add preconnect links for faster loading (deduplicated via Set)\n addPreconnect('https://fonts.googleapis.com');\n addPreconnect('https://fonts.gstatic.com', 'anonymous');\n\n // Build Google Fonts URL\n const escapedFamily = fontFamily.replace(/ /g, '+');\n\n // Build axis list based on options\n let axisList = '';\n const axes = [];\n\n // Handle italic style\n if (style === 'italic') {\n axes.push('ital');\n }\n\n // Handle weight - use specific weight or variable range\n if (weight && weight !== '400' && !Array.isArray(weight)) {\n // Specific weight requested\n axes.push('wght');\n if (style === 'italic') {\n axisList = ':ital,wght@1,' + weight;\n } else {\n axisList = ':wght@' + weight;\n }\n } else if (Array.isArray(weight)) {\n // Multiple weights\n axes.push('wght');\n axisList = ':wght@' + weight.join(';');\n } else {\n // Default: request common weights for flexibility\n axisList = ':wght@400;500;600;700';\n }\n\n const fontUrl = 'https://fonts.googleapis.com/css2?family=' +\n escapedFamily + axisList + '&display=swap';\n\n // Add link element for Google Fonts (if not already present)\n if (!document.querySelector('link[href*=\"family=' + escapedFamily + '\"]')) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = fontUrl;\n document.head.appendChild(link);\n }\n\n // Create style element for CSS variable at :root level (globally available)\n // This makes the variable work without needing to apply the class to body\n if (variableName) {\n const styleEl = document.createElement('style');\n styleEl.setAttribute('data-font-var', variableName);\n styleEl.textContent = ':root { ' + variableName + ': \"' + fontFamily + '\", ' + (fontFamily.includes('Serif') ? 'serif' : 'sans-serif') + '; }';\n document.head.appendChild(styleEl);\n }\n}\n\n/**\n * Create a font loader function for a specific font\n */\nfunction createFontLoader(fontName) {\n const fontFamily = toFontFamily(fontName);\n\n return function(options = {}) {\n const {\n weight,\n style = 'normal',\n subsets = ['latin'],\n variable,\n display = 'swap',\n preload = true,\n fallback = ['sans-serif'],\n adjustFontFallback = true\n } = options;\n\n // Inject the font CSS\n injectFontCSS(fontFamily, variable, weight, style);\n\n // Generate class name from variable (--font-inter -> __font-inter)\n const className = variable\n ? variable.replace('--', '__')\n : '__font-' + fontName.toLowerCase().replace(/_/g, '-');\n\n return {\n className,\n variable: className,\n style: {\n fontFamily: '\"' + fontFamily + '\", ' + fallback.join(', ')\n }\n };\n };\n}\n\n/**\n * Use a Proxy to dynamically create font loaders for ANY font name\n * This allows: import { AnyGoogleFont } from \"next/font/google\"\n */\nconst fontProxy = new Proxy({}, {\n get(target, prop) {\n // Handle special properties\n if (prop === '__esModule') return true;\n if (prop === 'default') return fontProxy;\n if (typeof prop !== 'string') return undefined;\n\n // Create a font loader for this font name\n return createFontLoader(prop);\n }\n});\n\n// Export the proxy as both default and named exports\nexport default fontProxy;\n\n// Re-export through proxy for named imports\nexport const {\n Fraunces, Inter, DM_Sans, DM_Serif_Text, Roboto, Open_Sans, Lato,\n Montserrat, Poppins, Playfair_Display, Merriweather, Raleway, Nunito,\n Ubuntu, Oswald, Quicksand, Work_Sans, Fira_Sans, Barlow, Mulish, Rubik,\n Noto_Sans, Manrope, Space_Grotesk, Geist, Geist_Mono\n} = fontProxy;\n`;\n\n/**\n * next/font/local shim - Loads local font files\n * Accepts font source path and creates @font-face declaration + CSS variable\n */\nexport const NEXT_FONT_LOCAL_SHIM = `\nconst loadedLocalFonts = new Set();\n\nfunction localFont(options = {}) {\n const {\n src,\n weight,\n style = 'normal',\n variable,\n display = 'swap',\n fallback = ['sans-serif'],\n declarations = [],\n adjustFontFallback = true\n } = options;\n\n // Determine font family name from variable or src\n const familyName = variable\n ? variable.replace('--', '').replace(/-/g, ' ')\n : 'local-font-' + Math.random().toString(36).slice(2, 8);\n\n const fontKey = familyName + '-' + (variable || 'default');\n if (typeof document !== 'undefined' && !loadedLocalFonts.has(fontKey)) {\n loadedLocalFonts.add(fontKey);\n\n // Build @font-face declarations\n let fontFaces = '';\n\n if (typeof src === 'string') {\n // Single source\n fontFaces = '@font-face {\\\\n' +\n ' font-family: \"' + familyName + '\";\\\\n' +\n ' src: url(\"' + src + '\");\\\\n' +\n ' font-weight: ' + (weight || '400') + ';\\\\n' +\n ' font-style: ' + style + ';\\\\n' +\n ' font-display: ' + display + ';\\\\n' +\n '}';\n } else if (Array.isArray(src)) {\n // Multiple sources (different weights/styles)\n fontFaces = src.map(function(s) {\n const path = typeof s === 'string' ? s : s.path;\n const w = (typeof s === 'object' && s.weight) || weight || '400';\n const st = (typeof s === 'object' && s.style) || style;\n return '@font-face {\\\\n' +\n ' font-family: \"' + familyName + '\";\\\\n' +\n ' src: url(\"' + path + '\");\\\\n' +\n ' font-weight: ' + w + ';\\\\n' +\n ' font-style: ' + st + ';\\\\n' +\n ' font-display: ' + display + ';\\\\n' +\n '}';\n }).join('\\\\n');\n }\n\n // Inject font-face CSS\n if (fontFaces) {\n var styleEl = document.createElement('style');\n styleEl.setAttribute('data-local-font', fontKey);\n styleEl.textContent = fontFaces;\n document.head.appendChild(styleEl);\n }\n\n // Inject CSS variable at :root level\n if (variable) {\n var varStyle = document.createElement('style');\n varStyle.setAttribute('data-font-var', variable);\n varStyle.textContent = ':root { ' + variable + ': \"' + familyName + '\", ' + fallback.join(', ') + '; }';\n document.head.appendChild(varStyle);\n }\n }\n\n const className = variable\n ? variable.replace('--', '__')\n : '__font-' + familyName.toLowerCase().replace(/\\\\s+/g, '-');\n\n return {\n className,\n variable: className,\n style: {\n fontFamily: '\"' + familyName + '\", ' + fallback.join(', ')\n }\n };\n}\n\nexport default localFont;\nexport { localFont };\n`;\n","/**\n * Next.js HTML page generation\n * Standalone functions extracted from NextDevServer for generating\n * App Router HTML, Pages Router HTML, and 404 pages.\n */\n\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport { ResponseData } from \"../dev-server\";\nimport {\n TAILWIND_CDN_SCRIPT,\n CORS_PROXY_SCRIPT,\n REACT_REFRESH_PREAMBLE,\n HMR_CLIENT_SCRIPT,\n} from \"./next-shims\";\nimport { REACT_CDN, REACT_DOM_CDN } from \"../config/cdn\";\n\n/** Resolved App Router route with page, layouts, and UI convention files */\nexport interface AppRoute {\n page: string;\n layouts: string[];\n params: Record<string, string | string[]>;\n loading?: string;\n error?: string;\n notFound?: string;\n}\n\n/** Context needed by HTML generation functions */\nexport interface HtmlGeneratorContext {\n port: number;\n exists: (path: string) => boolean;\n generateEnvScript: () => string;\n loadTailwindConfigIfNeeded: () => Promise<string>;\n /** Additional import map entries (e.g., framework-specific CDN mappings) */\n additionalImportMap?: Record<string, string>;\n}\n\n/**\n * Generate HTML for App Router with nested layouts\n */\nexport async function generateAppRouterHtml(\n ctx: HtmlGeneratorContext,\n route: AppRoute,\n pathname: string,\n): Promise<string> {\n // Use virtual server prefix for all file imports so the service worker can intercept them\n const virtualPrefix = `/__virtual__/${ctx.port}`;\n\n // Check for global CSS files\n const globalCssLinks: string[] = [];\n const cssLocations = [\n \"/app/globals.css\",\n \"/styles/globals.css\",\n \"/styles/global.css\",\n ];\n for (const cssPath of cssLocations) {\n if (ctx.exists(cssPath)) {\n globalCssLinks.push(\n `<link rel=\"stylesheet\" href=\"${virtualPrefix}${cssPath}\">`,\n );\n }\n }\n\n // Build convention file paths for the inline script\n const loadingModulePath = route.loading\n ? `${virtualPrefix}${route.loading}`\n : \"\";\n const errorModulePath = route.error ? `${virtualPrefix}${route.error}` : \"\";\n const notFoundModulePath = route.notFound\n ? `${virtualPrefix}${route.notFound}`\n : \"\";\n\n // Build additional import map entries from context\n const additionalImportMapEntries = ctx.additionalImportMap\n ? Object.entries(ctx.additionalImportMap)\n .map(([key, value]) => `\\n \"${key}\": \"${value}\",`)\n .join(\"\")\n : \"\";\n\n // Generate env script for NEXT_PUBLIC_* variables\n const envScript = ctx.generateEnvScript();\n\n // Load Tailwind config if available (must be injected BEFORE CDN script)\n const tailwindConfigScript = await ctx.loadTailwindConfigIfNeeded();\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <base href=\"${virtualPrefix}/\">\n <title>Next.js App</title>\n ${envScript}\n ${TAILWIND_CDN_SCRIPT}\n ${tailwindConfigScript}\n ${CORS_PROXY_SCRIPT}\n ${globalCssLinks.join(\"\\n \")}\n <script type=\"importmap\">\n {\n \"imports\": {\n \"react\": \"${REACT_CDN}?dev\",\n \"react/\": \"${REACT_CDN}&dev/\",\n \"react-dom\": \"${REACT_DOM_CDN}?dev\",\n \"react-dom/\": \"${REACT_DOM_CDN}&dev/\",\n \"react-dom/client\": \"${REACT_DOM_CDN}/client?dev\",${additionalImportMapEntries}\n \"next/link\": \"${virtualPrefix}/_next/shims/link.js\",\n \"next/router\": \"${virtualPrefix}/_next/shims/router.js\",\n \"next/head\": \"${virtualPrefix}/_next/shims/head.js\",\n \"next/navigation\": \"${virtualPrefix}/_next/shims/navigation.js\",\n \"next/image\": \"${virtualPrefix}/_next/shims/image.js\",\n \"next/dynamic\": \"${virtualPrefix}/_next/shims/dynamic.js\",\n \"next/script\": \"${virtualPrefix}/_next/shims/script.js\",\n \"next/font/google\": \"${virtualPrefix}/_next/shims/font/google.js\",\n \"next/font/local\": \"${virtualPrefix}/_next/shims/font/local.js\"\n }\n }\n </script>\n ${REACT_REFRESH_PREAMBLE}\n ${HMR_CLIENT_SCRIPT}\n</head>\n<body>\n <div id=\"__next\"></div>\n <script type=\"module\">\n import React from 'react';\n import ReactDOM from 'react-dom/client';\n\n const virtualBase = '${virtualPrefix}';\n\n // Initial route params (embedded by server for initial page load)\n const initialRouteParams = ${JSON.stringify(route.params)};\n const initialPathname = '${pathname}';\n\n // Expose initial params for useParams() hook\n window.__NEXT_ROUTE_PARAMS__ = initialRouteParams;\n\n // Convention file paths (loading.tsx, error.tsx, not-found.tsx)\n const loadingModulePath = '${loadingModulePath}';\n const errorModulePath = '${errorModulePath}';\n const notFoundModulePath = '${notFoundModulePath}';\n\n // Route info cache: pathname -> Promise<{ found, params, page, layouts }>\n // Uses promise-based caching to deduplicate concurrent requests\n const routeInfoCache = new Map();\n\n // Pre-seed cache with server-resolved initial route data\n routeInfoCache.set(initialPathname, Promise.resolve({\n found: true,\n params: initialRouteParams,\n page: '${route.page}',\n layouts: ${JSON.stringify(route.layouts)},\n }));\n\n // Resolve route via server — handles route groups, dynamic segments, catch-all, etc.\n function resolveRoute(pathname) {\n let route = pathname;\n if (route.startsWith(virtualBase)) {\n route = route.slice(virtualBase.length);\n }\n route = route.replace(/^\\\\/+/, '/') || '/';\n\n if (!routeInfoCache.has(route)) {\n routeInfoCache.set(route,\n fetch(virtualBase + '/_next/route-info?pathname=' + encodeURIComponent(route))\n .then(r => r.json())\n .catch(e => {\n console.error('[Router] Failed to resolve route:', e);\n routeInfoCache.delete(route);\n return { found: false, params: {}, page: null, layouts: [] };\n })\n );\n }\n return routeInfoCache.get(route);\n }\n\n // Dynamic page loader with retry (SW may need time to recover after idle termination)\n async function loadPage(pathname) {\n const info = await resolveRoute(pathname);\n if (!info.found || !info.page) return null;\n const modulePath = virtualBase + '/_next/app' + info.page;\n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const module = await import(/* @vite-ignore */ modulePath + (attempt > 0 ? '?retry=' + attempt : ''));\n return module.default;\n } catch (e) {\n console.warn('[Navigation] Load attempt ' + (attempt + 1) + ' failed:', modulePath, e.message);\n if (attempt < 2) await new Promise(r => setTimeout(r, 1000));\n }\n }\n console.error('[Navigation] Failed to load page after 3 attempts:', modulePath);\n return null;\n }\n\n // Load layouts (with caching)\n const layoutCache = new Map();\n async function loadLayouts(pathname) {\n const info = await resolveRoute(pathname);\n const layoutPaths = (info.layouts || []).map(l => virtualBase + '/_next/app' + l);\n const layouts = [];\n for (const path of layoutPaths) {\n if (layoutCache.has(path)) {\n layouts.push(layoutCache.get(path));\n } else {\n try {\n const module = await import(/* @vite-ignore */ path);\n layoutCache.set(path, module.default);\n layouts.push(module.default);\n } catch (e) {\n // Layout might not exist for this segment, skip\n }\n }\n }\n return layouts;\n }\n\n // Load convention components (loading.tsx, error.tsx)\n let LoadingComponent = null;\n let ErrorComponent = null;\n let NotFoundComponent = null;\n\n async function loadConventionComponents() {\n if (loadingModulePath) {\n try {\n const mod = await import(/* @vite-ignore */ loadingModulePath);\n LoadingComponent = mod.default;\n } catch (e) { /* loading.tsx not available */ }\n }\n if (errorModulePath) {\n try {\n const mod = await import(/* @vite-ignore */ errorModulePath);\n ErrorComponent = mod.default;\n } catch (e) { /* error.tsx not available */ }\n }\n if (notFoundModulePath) {\n try {\n const mod = await import(/* @vite-ignore */ notFoundModulePath);\n NotFoundComponent = mod.default;\n } catch (e) { /* not-found.tsx not available */ }\n }\n }\n await loadConventionComponents();\n\n // Error boundary class component\n class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch(error, info) {\n console.error('[ErrorBoundary]', error, info);\n }\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return React.createElement(this.props.fallback, {\n error: this.state.error,\n reset: () => this.setState({ error: null })\n });\n }\n return React.createElement('div', { style: { color: 'red', padding: '20px' } },\n 'Error: ' + this.state.error.message\n );\n }\n return this.props.children;\n }\n }\n\n // Wrapper that provides searchParams/params props and handles errors\n function PageWrapper({ component: Component, pathname, search }) {\n const [searchParams, setSearchParams] = React.useState(() => {\n const url = new URL(window.location.href);\n return Promise.resolve(Object.fromEntries(url.searchParams));\n });\n const [params, setParams] = React.useState(() => Promise.resolve(initialRouteParams));\n const [isNotFound, setIsNotFound] = React.useState(false);\n\n React.useEffect(() => {\n // Update searchParams when search changes\n const url = new URL(window.location.href);\n setSearchParams(Promise.resolve(Object.fromEntries(url.searchParams)));\n }, [search]);\n\n React.useEffect(() => {\n // Update route params when pathname changes\n let cancelled = false;\n resolveRoute(pathname).then(info => {\n if (!cancelled) setParams(Promise.resolve(info.params || {}));\n });\n return () => { cancelled = true; };\n }, [pathname]);\n\n if (isNotFound && NotFoundComponent) {\n return React.createElement(NotFoundComponent);\n }\n if (isNotFound) {\n return React.createElement('div', { style: { padding: '20px', textAlign: 'center' } },\n React.createElement('h2', null, '404'),\n React.createElement('p', null, 'This page could not be found.')\n );\n }\n\n // Render the component via createElement so hooks work correctly\n try {\n return React.createElement(Component, { searchParams, params });\n } catch (e) {\n if (e && e.message === 'NEXT_NOT_FOUND') {\n // Will re-render with notFound on next tick\n if (!isNotFound) setIsNotFound(true);\n return null;\n }\n throw e; // Let ErrorBoundary handle it\n }\n }\n\n // Router component\n function Router() {\n const [Page, setPage] = React.useState(null);\n const [layouts, setLayouts] = React.useState([]);\n const [path, setPath] = React.useState(window.location.pathname);\n const [search, setSearch] = React.useState(window.location.search);\n\n React.useEffect(() => {\n Promise.all([loadPage(path), loadLayouts(path)]).then(([P, L]) => {\n if (P) setPage(() => P);\n setLayouts(L);\n });\n }, []);\n\n React.useEffect(() => {\n const handleNavigation = async () => {\n const newPath = window.location.pathname;\n const newSearch = window.location.search;\n console.log('[Router] handleNavigation called, newPath:', newPath, 'current path:', path);\n\n // Always update search params\n if (newSearch !== search) {\n setSearch(newSearch);\n }\n\n if (newPath !== path) {\n console.log('[Router] Path changed, loading new page...');\n setPath(newPath);\n const [P, L, routeInfo] = await Promise.all([loadPage(newPath), loadLayouts(newPath), resolveRoute(newPath)]);\n window.__NEXT_ROUTE_PARAMS__ = routeInfo.params || {};\n console.log('[Router] Page loaded:', !!P, 'Layouts:', L.length);\n if (P) setPage(() => P);\n setLayouts(L);\n } else {\n console.log('[Router] Path unchanged, skipping navigation');\n }\n };\n window.addEventListener('popstate', handleNavigation);\n console.log('[Router] Added popstate listener for path:', path);\n return () => window.removeEventListener('popstate', handleNavigation);\n }, [path, search]);\n\n if (!Page) return null;\n\n // Render page via PageWrapper so hooks work correctly\n // Pass search to force re-render when query params change\n let content = React.createElement(PageWrapper, { component: Page, pathname: path, search: search });\n\n // Wrap with loading.tsx Suspense fallback if it exists\n if (LoadingComponent) {\n content = React.createElement(React.Suspense,\n { fallback: React.createElement(LoadingComponent) },\n content\n );\n }\n\n // Wrap with error boundary if error.tsx exists\n if (ErrorComponent) {\n content = React.createElement(ErrorBoundary, { fallback: ErrorComponent }, content);\n }\n\n for (let i = layouts.length - 1; i >= 0; i--) {\n content = React.createElement(layouts[i], null, content);\n }\n return content;\n }\n\n // Mark that we've initialized (for testing no-reload)\n window.__NEXT_INITIALIZED__ = Date.now();\n\n ReactDOM.createRoot(document.getElementById('__next')).render(\n React.createElement(React.StrictMode, null, React.createElement(Router))\n );\n </script>\n</body>\n</html>`;\n}\n\n/**\n * Generate HTML shell for a Pages Router page\n */\nexport async function generatePageHtml(\n ctx: HtmlGeneratorContext,\n pageFile: string,\n pathname: string,\n): Promise<string> {\n // Use virtual server prefix for all file imports so the service worker can intercept them\n // Without this, /pages/index.jsx would go to localhost:5173/pages/index.jsx\n // instead of /__virtual__/3001/pages/index.jsx\n const virtualPrefix = `/__virtual__/${ctx.port}`;\n const pageModulePath = virtualPrefix + pageFile; // pageFile already starts with /\n\n // Check for global CSS files\n const globalCssLinks: string[] = [];\n const cssLocations = [\n \"/styles/globals.css\",\n \"/styles/global.css\",\n \"/app/globals.css\",\n ];\n for (const cssPath of cssLocations) {\n if (ctx.exists(cssPath)) {\n globalCssLinks.push(\n `<link rel=\"stylesheet\" href=\"${virtualPrefix}${cssPath}\">`,\n );\n }\n }\n\n // Generate env script for NEXT_PUBLIC_* variables\n const envScript = ctx.generateEnvScript();\n\n // Load Tailwind config if available (must be injected BEFORE CDN script)\n const tailwindConfigScript = await ctx.loadTailwindConfigIfNeeded();\n\n // Build additional import map entries from context\n const pagesAdditionalEntries = ctx.additionalImportMap\n ? Object.entries(ctx.additionalImportMap)\n .map(([key, value]) => `\\n \"${key}\": \"${value}\",`)\n .join(\"\")\n : \"\";\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <base href=\"${virtualPrefix}/\">\n <title>Next.js App</title>\n ${envScript}\n ${TAILWIND_CDN_SCRIPT}\n ${tailwindConfigScript}\n ${CORS_PROXY_SCRIPT}\n ${globalCssLinks.join(\"\\n \")}\n <script type=\"importmap\">\n {\n \"imports\": {\n \"react\": \"${REACT_CDN}?dev\",\n \"react/\": \"${REACT_CDN}&dev/\",\n \"react-dom\": \"${REACT_DOM_CDN}?dev\",\n \"react-dom/\": \"${REACT_DOM_CDN}&dev/\",\n \"react-dom/client\": \"${REACT_DOM_CDN}/client?dev\",${pagesAdditionalEntries}\n \"next/link\": \"${virtualPrefix}/_next/shims/link.js\",\n \"next/router\": \"${virtualPrefix}/_next/shims/router.js\",\n \"next/head\": \"${virtualPrefix}/_next/shims/head.js\",\n \"next/navigation\": \"${virtualPrefix}/_next/shims/navigation.js\",\n \"next/image\": \"${virtualPrefix}/_next/shims/image.js\",\n \"next/dynamic\": \"${virtualPrefix}/_next/shims/dynamic.js\",\n \"next/script\": \"${virtualPrefix}/_next/shims/script.js\",\n \"next/font/google\": \"${virtualPrefix}/_next/shims/font/google.js\",\n \"next/font/local\": \"${virtualPrefix}/_next/shims/font/local.js\"\n }\n }\n </script>\n ${REACT_REFRESH_PREAMBLE}\n ${HMR_CLIENT_SCRIPT}\n</head>\n<body>\n <div id=\"__next\"></div>\n <script type=\"module\">\n import React from 'react';\n import ReactDOM from 'react-dom/client';\n\n const virtualBase = '${virtualPrefix}';\n\n // Convert URL path to page module path\n function getPageModulePath(pathname) {\n let route = pathname;\n if (route.startsWith(virtualBase)) {\n route = route.slice(virtualBase.length);\n }\n route = route.replace(/^\\\\/+/, '/') || '/';\n const modulePath = route === '/' ? '/index' : route;\n return virtualBase + '/_next/pages' + modulePath + '.js';\n }\n\n // Dynamic page loader\n async function loadPage(pathname) {\n const modulePath = getPageModulePath(pathname);\n try {\n const module = await import(/* @vite-ignore */ modulePath);\n return module.default;\n } catch (e) {\n console.error('[Navigation] Failed to load:', modulePath, e);\n return null;\n }\n }\n\n // Router component\n function Router() {\n const [Page, setPage] = React.useState(null);\n const [path, setPath] = React.useState(window.location.pathname);\n\n React.useEffect(() => {\n loadPage(path).then(C => C && setPage(() => C));\n }, []);\n\n React.useEffect(() => {\n const handleNavigation = async () => {\n const newPath = window.location.pathname;\n if (newPath !== path) {\n setPath(newPath);\n const C = await loadPage(newPath);\n if (C) setPage(() => C);\n }\n };\n window.addEventListener('popstate', handleNavigation);\n return () => window.removeEventListener('popstate', handleNavigation);\n }, [path]);\n\n if (!Page) return null;\n return React.createElement(Page);\n }\n\n // Mark that we've initialized (for testing no-reload)\n window.__NEXT_INITIALIZED__ = Date.now();\n\n ReactDOM.createRoot(document.getElementById('__next')).render(\n React.createElement(React.StrictMode, null, React.createElement(Router))\n );\n </script>\n</body>\n</html>`;\n}\n\n/**\n * Serve a basic 404 page\n */\nexport function serve404Page(port: number): ResponseData {\n const virtualPrefix = `/__virtual__/${port}`;\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <base href=\"${virtualPrefix}/\">\n <title>404 - Page Not Found</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n margin: 0;\n background: #fafafa;\n }\n h1 { font-size: 48px; margin: 0; }\n p { color: #666; margin-top: 10px; }\n a { color: #0070f3; text-decoration: none; }\n a:hover { text-decoration: underline; }\n </style>\n</head>\n<body>\n <h1>404</h1>\n <p>This page could not be found.</p>\n <p><a href=\"/\">Go back home</a></p>\n</body>\n</html>`;\n\n const buffer = Buffer.from(html);\n return {\n statusCode: 404,\n statusMessage: \"Not Found\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n },\n body: buffer,\n };\n}\n","/**\n * Next.js route resolution\n * Standalone functions for resolving App Router routes, Pages Router routes,\n * API routes, and file extensions.\n */\n\nimport { type AppRoute } from \"./next-html-generator\";\n\n/** Context needed by route resolution functions */\nexport interface RouteResolverContext {\n exists: (path: string) => boolean;\n isDirectory: (path: string) => boolean;\n readdir: (path: string) => string[];\n}\n\nconst PAGE_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\"];\nconst API_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n\nexport function hasAppRouter(\n appDir: string,\n ctx: RouteResolverContext,\n): boolean {\n try {\n if (!ctx.exists(appDir)) return false;\n\n for (const ext of PAGE_EXTENSIONS) {\n if (ctx.exists(`${appDir}/page${ext}`)) return true;\n }\n\n try {\n const entries = ctx.readdir(appDir);\n for (const entry of entries) {\n if (\n /^\\([^)]+\\)$/.test(entry) &&\n ctx.isDirectory(`${appDir}/${entry}`)\n ) {\n for (const ext of PAGE_EXTENSIONS) {\n if (ctx.exists(`${appDir}/${entry}/page${ext}`)) return true;\n }\n }\n }\n } catch {\n /* ignore */\n }\n\n for (const ext of PAGE_EXTENSIONS) {\n if (ctx.exists(`${appDir}/layout${ext}`)) return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\nexport function resolveAppRoute(\n appDir: string,\n pathname: string,\n ctx: RouteResolverContext,\n): AppRoute | null {\n const segments = pathname === \"/\" ? [] : pathname.split(\"/\").filter(Boolean);\n return resolveAppDynamicRoute(appDir, segments, ctx);\n}\n\nfunction resolveAppDynamicRoute(\n appDir: string,\n segments: string[],\n ctx: RouteResolverContext,\n): AppRoute | null {\n const collectLayout = (dirPath: string, layouts: string[]): string[] => {\n for (const ext of PAGE_EXTENSIONS) {\n const layoutPath = `${dirPath}/layout${ext}`;\n if (ctx.exists(layoutPath) && !layouts.includes(layoutPath)) {\n return [...layouts, layoutPath];\n }\n }\n return layouts;\n };\n\n const findPage = (dirPath: string): string | null => {\n for (const ext of PAGE_EXTENSIONS) {\n const pagePath = `${dirPath}/page${ext}`;\n if (ctx.exists(pagePath)) return pagePath;\n }\n return null;\n };\n\n const findConventionFile = (dirPath: string, name: string): string | null => {\n for (const ext of PAGE_EXTENSIONS) {\n const filePath = `${dirPath}/${name}${ext}`;\n if (ctx.exists(filePath)) return filePath;\n }\n return null;\n };\n\n const findNearestConventionFile = (\n dirPath: string,\n name: string,\n ): string | null => {\n let current = dirPath;\n while (current.startsWith(appDir)) {\n const file = findConventionFile(current, name);\n if (file) return file;\n const parent = current.replace(/\\/[^/]+$/, \"\");\n if (parent === current) break;\n current = parent;\n }\n return null;\n };\n\n const getRouteGroups = (dirPath: string): string[] => {\n try {\n const entries = ctx.readdir(dirPath);\n return entries.filter(\n e => /^\\([^)]+\\)$/.test(e) && ctx.isDirectory(`${dirPath}/${e}`),\n );\n } catch {\n return [];\n }\n };\n\n const tryPath = (\n dirPath: string,\n remainingSegments: string[],\n layouts: string[],\n params: Record<string, string | string[]>,\n ): AppRoute | null => {\n layouts = collectLayout(dirPath, layouts);\n\n if (remainingSegments.length === 0) {\n const page = findPage(dirPath);\n if (page) {\n return {\n page,\n layouts,\n params,\n loading: findNearestConventionFile(dirPath, \"loading\") || undefined,\n error: findNearestConventionFile(dirPath, \"error\") || undefined,\n notFound:\n findNearestConventionFile(dirPath, \"not-found\") || undefined,\n };\n }\n\n const groups = getRouteGroups(dirPath);\n for (const group of groups) {\n const groupPath = `${dirPath}/${group}`;\n const groupLayouts = collectLayout(groupPath, layouts);\n const page = findPage(groupPath);\n if (page) {\n return {\n page,\n layouts: groupLayouts,\n params,\n loading:\n findNearestConventionFile(groupPath, \"loading\") || undefined,\n error: findNearestConventionFile(groupPath, \"error\") || undefined,\n notFound:\n findNearestConventionFile(groupPath, \"not-found\") || undefined,\n };\n }\n }\n\n return null;\n }\n\n const [current, ...rest] = remainingSegments;\n\n const exactPath = `${dirPath}/${current}`;\n if (ctx.isDirectory(exactPath)) {\n const result = tryPath(exactPath, rest, layouts, params);\n if (result) return result;\n }\n\n const groups = getRouteGroups(dirPath);\n for (const group of groups) {\n const groupPath = `${dirPath}/${group}`;\n const groupLayouts = collectLayout(groupPath, layouts);\n\n const groupExactPath = `${groupPath}/${current}`;\n if (ctx.isDirectory(groupExactPath)) {\n const result = tryPath(groupExactPath, rest, groupLayouts, params);\n if (result) return result;\n }\n\n try {\n const groupEntries = ctx.readdir(groupPath);\n for (const entry of groupEntries) {\n if (entry.startsWith(\"[...\") && entry.endsWith(\"]\")) {\n const dynamicPath = `${groupPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(4, -1);\n const newParams = { ...params, [paramName]: [current, ...rest] };\n const result = tryPath(dynamicPath, [], groupLayouts, newParams);\n if (result) return result;\n }\n } else if (entry.startsWith(\"[[...\") && entry.endsWith(\"]]\")) {\n const dynamicPath = `${groupPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(5, -2);\n const newParams = { ...params, [paramName]: [current, ...rest] };\n const result = tryPath(dynamicPath, [], groupLayouts, newParams);\n if (result) return result;\n }\n } else if (\n entry.startsWith(\"[\") &&\n entry.endsWith(\"]\") &&\n !entry.includes(\".\")\n ) {\n const dynamicPath = `${groupPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(1, -1);\n const newParams = { ...params, [paramName]: current };\n const result = tryPath(\n dynamicPath,\n rest,\n groupLayouts,\n newParams,\n );\n if (result) return result;\n }\n }\n }\n } catch {\n /* ignore */\n }\n }\n\n try {\n const entries = ctx.readdir(dirPath);\n for (const entry of entries) {\n if (entry.startsWith(\"[...\") && entry.endsWith(\"]\")) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(4, -1);\n const newParams = { ...params, [paramName]: [current, ...rest] };\n const result = tryPath(dynamicPath, [], layouts, newParams);\n if (result) return result;\n }\n } else if (entry.startsWith(\"[[...\") && entry.endsWith(\"]]\")) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(5, -2);\n const newParams = { ...params, [paramName]: [current, ...rest] };\n const result = tryPath(dynamicPath, [], layouts, newParams);\n if (result) return result;\n }\n } else if (\n entry.startsWith(\"[\") &&\n entry.endsWith(\"]\") &&\n !entry.includes(\".\")\n ) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const paramName = entry.slice(1, -1);\n const newParams = { ...params, [paramName]: current };\n const result = tryPath(dynamicPath, rest, layouts, newParams);\n if (result) return result;\n }\n }\n }\n } catch {\n /* ignore */\n }\n\n return null;\n };\n\n const layouts: string[] = [];\n for (const ext of PAGE_EXTENSIONS) {\n const rootLayout = `${appDir}/layout${ext}`;\n if (ctx.exists(rootLayout)) {\n layouts.push(rootLayout);\n break;\n }\n }\n\n return tryPath(appDir, segments, layouts, {});\n}\n\nexport function resolveAppRouteHandler(\n appDir: string,\n pathname: string,\n ctx: RouteResolverContext,\n): string | null {\n const segments = pathname === \"/\" ? [] : pathname.split(\"/\").filter(Boolean);\n let dirPath = appDir;\n for (const segment of segments) dirPath = `${dirPath}/${segment}`;\n\n for (const ext of API_EXTENSIONS) {\n const routePath = `${dirPath}/route${ext}`;\n if (ctx.exists(routePath)) return routePath;\n }\n\n return resolveAppRouteHandlerDynamic(appDir, segments, ctx);\n}\n\nfunction resolveAppRouteHandlerDynamic(\n appDir: string,\n segments: string[],\n ctx: RouteResolverContext,\n): string | null {\n const tryPath = (\n dirPath: string,\n remainingSegments: string[],\n ): string | null => {\n if (remainingSegments.length === 0) {\n for (const ext of API_EXTENSIONS) {\n const routePath = `${dirPath}/route${ext}`;\n if (ctx.exists(routePath)) return routePath;\n }\n\n try {\n const entries = ctx.readdir(dirPath);\n for (const entry of entries) {\n if (\n /^\\([^)]+\\)$/.test(entry) &&\n ctx.isDirectory(`${dirPath}/${entry}`)\n ) {\n for (const ext of API_EXTENSIONS) {\n const routePath = `${dirPath}/${entry}/route${ext}`;\n if (ctx.exists(routePath)) return routePath;\n }\n }\n }\n } catch {\n /* ignore */\n }\n\n return null;\n }\n\n const [current, ...rest] = remainingSegments;\n\n const exactPath = `${dirPath}/${current}`;\n if (ctx.isDirectory(exactPath)) {\n const result = tryPath(exactPath, rest);\n if (result) return result;\n }\n\n try {\n const entries = ctx.readdir(dirPath);\n for (const entry of entries) {\n if (\n /^\\([^)]+\\)$/.test(entry) &&\n ctx.isDirectory(`${dirPath}/${entry}`)\n ) {\n const groupExact = `${dirPath}/${entry}/${current}`;\n if (ctx.isDirectory(groupExact)) {\n const result = tryPath(groupExact, rest);\n if (result) return result;\n }\n }\n if (\n entry.startsWith(\"[\") &&\n entry.endsWith(\"]\") &&\n !entry.includes(\".\")\n ) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const result = tryPath(dynamicPath, rest);\n if (result) return result;\n }\n }\n if (entry.startsWith(\"[...\") && entry.endsWith(\"]\")) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const result = tryPath(dynamicPath, []);\n if (result) return result;\n }\n }\n }\n } catch {\n /* ignore */\n }\n\n return null;\n };\n\n return tryPath(appDir, segments);\n}\n\nexport function resolvePageFile(\n pagesDir: string,\n pathname: string,\n ctx: RouteResolverContext,\n): string | null {\n if (pathname === \"/\") pathname = \"/index\";\n\n for (const ext of PAGE_EXTENSIONS) {\n const filePath = `${pagesDir}${pathname}${ext}`;\n if (ctx.exists(filePath)) return filePath;\n }\n\n for (const ext of PAGE_EXTENSIONS) {\n const filePath = `${pagesDir}${pathname}/index${ext}`;\n if (ctx.exists(filePath)) return filePath;\n }\n\n return resolveDynamicRoute(pagesDir, pathname, ctx);\n}\n\nfunction resolveDynamicRoute(\n pagesDir: string,\n pathname: string,\n ctx: RouteResolverContext,\n): string | null {\n const segments = pathname.split(\"/\").filter(Boolean);\n if (segments.length === 0) return null;\n\n const tryPath = (\n dirPath: string,\n remainingSegments: string[],\n ): string | null => {\n if (remainingSegments.length === 0) {\n for (const ext of PAGE_EXTENSIONS) {\n const indexPath = `${dirPath}/index${ext}`;\n if (ctx.exists(indexPath)) return indexPath;\n }\n return null;\n }\n\n const [current, ...rest] = remainingSegments;\n const exactPath = `${dirPath}/${current}`;\n\n for (const ext of PAGE_EXTENSIONS) {\n if (rest.length === 0 && ctx.exists(exactPath + ext))\n return exactPath + ext;\n }\n\n if (ctx.isDirectory(exactPath)) {\n const exactResult = tryPath(exactPath, rest);\n if (exactResult) return exactResult;\n }\n\n try {\n const entries = ctx.readdir(dirPath);\n for (const entry of entries) {\n for (const ext of PAGE_EXTENSIONS) {\n const dynamicFilePattern = /^\\[([^\\]]+)\\]$/;\n const nameWithoutExt = entry.replace(ext, \"\");\n if (entry.endsWith(ext) && dynamicFilePattern.test(nameWithoutExt)) {\n if (rest.length === 0) {\n const filePath = `${dirPath}/${entry}`;\n if (ctx.exists(filePath)) return filePath;\n }\n }\n }\n\n if (\n entry.startsWith(\"[\") &&\n entry.endsWith(\"]\") &&\n !entry.includes(\".\")\n ) {\n const dynamicPath = `${dirPath}/${entry}`;\n if (ctx.isDirectory(dynamicPath)) {\n const dynamicResult = tryPath(dynamicPath, rest);\n if (dynamicResult) return dynamicResult;\n }\n }\n\n for (const ext of PAGE_EXTENSIONS) {\n if (entry.startsWith(\"[...\") && entry.endsWith(\"]\" + ext)) {\n const filePath = `${dirPath}/${entry}`;\n if (ctx.exists(filePath)) return filePath;\n }\n }\n }\n } catch {\n /* ignore */\n }\n\n return null;\n };\n\n return tryPath(pagesDir, segments);\n}\n\nexport function resolveApiFile(\n pagesDir: string,\n pathname: string,\n ctx: RouteResolverContext,\n): string | null {\n const apiPath = pathname.replace(/^\\/api/, `${pagesDir}/api`);\n\n for (const ext of API_EXTENSIONS) {\n const filePath = apiPath + ext;\n if (ctx.exists(filePath)) return filePath;\n }\n\n for (const ext of API_EXTENSIONS) {\n const filePath = `${apiPath}/index${ext}`;\n if (ctx.exists(filePath)) return filePath;\n }\n\n return null;\n}\n\nexport function resolveFileWithExtension(\n pathname: string,\n ctx: RouteResolverContext,\n): string | null {\n if (/\\.\\w+$/.test(pathname) && ctx.exists(pathname)) return pathname;\n\n const extensions = [\".tsx\", \".ts\", \".jsx\", \".js\"];\n\n for (const ext of extensions) {\n const withExt = pathname + ext;\n if (ctx.exists(withExt)) return withExt;\n }\n\n for (const ext of extensions) {\n const indexPath = pathname + \"/index\" + ext;\n if (ctx.exists(indexPath)) return indexPath;\n }\n\n return null;\n}\n\nexport function needsTransform(path: string): boolean {\n return /\\.(jsx|tsx|ts)$/.test(path);\n}\n","/**\n * Next.js API route handling\n * Standalone functions extracted from NextDevServer for creating mock\n * request/response objects and executing API handlers.\n */\n\nimport { ResponseData } from \"../dev-server\";\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport * as pathPolyfill from \"../polyfills/path\";\nimport * as urlPolyfill from \"../polyfills/url\";\nimport * as querystringPolyfill from \"../polyfills/querystring\";\nimport * as utilPolyfill from \"../polyfills/util\";\nimport * as eventsPolyfill from \"../polyfills/events\";\nimport * as streamPolyfill from \"../polyfills/stream\";\nimport * as cryptoPolyfill from \"../polyfills/crypto\";\n\n/**\n * Parse cookie header into key-value pairs\n */\nexport function parseCookies(cookieHeader: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n if (!cookieHeader) return cookies;\n\n cookieHeader.split(\";\").forEach(cookie => {\n const [name, value] = cookie.trim().split(\"=\");\n if (name && value) {\n cookies[name] = decodeURIComponent(value);\n }\n });\n\n return cookies;\n}\n\n/**\n * Create mock Next.js request object\n */\nexport function createMockRequest(\n method: string,\n pathname: string,\n headers: Record<string, string>,\n body?: Buffer,\n) {\n const url = new URL(pathname, \"http://localhost\");\n\n return {\n method,\n url: pathname,\n headers,\n query: Object.fromEntries(url.searchParams),\n body: body ? JSON.parse(body.toString()) : undefined,\n cookies: parseCookies(headers.cookie || \"\"),\n };\n}\n\n/**\n * Create mock Next.js response object with streaming support\n */\nexport function createMockResponse() {\n let statusCode = 200;\n let statusMessage = \"OK\";\n const headers: Record<string, string> = {};\n let responseBody = \"\";\n let ended = false;\n let resolveEnded: (() => void) | null = null;\n let headersSent = false;\n\n // Promise that resolves when response is ended\n const endedPromise = new Promise<void>(resolve => {\n resolveEnded = resolve;\n });\n\n const markEnded = () => {\n if (!ended) {\n ended = true;\n if (resolveEnded) resolveEnded();\n }\n };\n\n return {\n // Track if headers have been sent (for streaming)\n headersSent: false,\n\n status(code: number) {\n statusCode = code;\n return this;\n },\n setHeader(name: string, value: string) {\n headers[name] = value;\n return this;\n },\n getHeader(name: string) {\n return headers[name];\n },\n // Write data to response body (for streaming)\n write(chunk: string | Buffer): boolean {\n if (!headersSent) {\n headersSent = true;\n this.headersSent = true;\n }\n responseBody += typeof chunk === \"string\" ? chunk : chunk.toString();\n return true;\n },\n // Writable stream interface for AI SDK compatibility\n get writable() {\n return true;\n },\n json(data: unknown) {\n headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\n responseBody = JSON.stringify(data);\n markEnded();\n return this;\n },\n send(data: string | object) {\n if (typeof data === \"object\") {\n return this.json(data);\n }\n responseBody = data;\n markEnded();\n return this;\n },\n end(data?: string) {\n if (data) responseBody += data;\n markEnded();\n return this;\n },\n redirect(statusOrUrl: number | string, url?: string) {\n if (typeof statusOrUrl === \"number\") {\n statusCode = statusOrUrl;\n headers[\"Location\"] = url || \"/\";\n } else {\n statusCode = 307;\n headers[\"Location\"] = statusOrUrl;\n }\n markEnded();\n return this;\n },\n isEnded() {\n return ended;\n },\n waitForEnd() {\n return endedPromise;\n },\n toResponse(): ResponseData {\n const buffer = Buffer.from(responseBody);\n headers[\"Content-Length\"] = String(buffer.length);\n return {\n statusCode,\n statusMessage,\n headers,\n body: buffer,\n };\n },\n };\n}\n\n/**\n * Create a streaming mock response that calls callbacks as data is written\n */\nexport function createStreamingMockResponse(\n onStart: (\n statusCode: number,\n statusMessage: string,\n headers: Record<string, string>,\n ) => void,\n onChunk: (chunk: string | Uint8Array) => void,\n onEnd: () => void,\n) {\n let statusCode = 200;\n let statusMessage = \"OK\";\n const headers: Record<string, string> = {};\n let ended = false;\n let headersSent = false;\n let resolveEnded: (() => void) | null = null;\n\n const endedPromise = new Promise<void>(resolve => {\n resolveEnded = resolve;\n });\n\n const sendHeaders = () => {\n if (!headersSent) {\n headersSent = true;\n onStart(statusCode, statusMessage, headers);\n }\n };\n\n const markEnded = () => {\n if (!ended) {\n sendHeaders();\n ended = true;\n onEnd();\n if (resolveEnded) resolveEnded();\n }\n };\n\n return {\n headersSent: false,\n\n status(code: number) {\n statusCode = code;\n return this;\n },\n setHeader(name: string, value: string) {\n headers[name] = value;\n return this;\n },\n getHeader(name: string) {\n return headers[name];\n },\n // Write data and stream it immediately\n write(chunk: string | Buffer): boolean {\n sendHeaders();\n const data = typeof chunk === \"string\" ? chunk : chunk.toString();\n onChunk(data);\n return true;\n },\n get writable() {\n return true;\n },\n json(data: unknown) {\n headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\n sendHeaders();\n onChunk(JSON.stringify(data));\n markEnded();\n return this;\n },\n send(data: string | object) {\n if (typeof data === \"object\") {\n return this.json(data);\n }\n sendHeaders();\n onChunk(data);\n markEnded();\n return this;\n },\n end(data?: string) {\n if (data) {\n sendHeaders();\n onChunk(data);\n }\n markEnded();\n return this;\n },\n redirect(statusOrUrl: number | string, url?: string) {\n if (typeof statusOrUrl === \"number\") {\n statusCode = statusOrUrl;\n headers[\"Location\"] = url || \"/\";\n } else {\n statusCode = 307;\n headers[\"Location\"] = statusOrUrl;\n }\n markEnded();\n return this;\n },\n isEnded() {\n return ended;\n },\n waitForEnd() {\n return endedPromise;\n },\n toResponse(): ResponseData {\n // This shouldn't be called for streaming responses\n return {\n statusCode,\n statusMessage,\n headers,\n body: Buffer.from(\"\"),\n };\n },\n };\n}\n\n/** Type for mock response objects */\nexport type MockResponse = ReturnType<typeof createMockResponse>;\nexport type MockRequest = ReturnType<typeof createMockRequest>;\nexport type StreamingMockResponse = ReturnType<\n typeof createStreamingMockResponse\n>;\n\n/**\n * Create builtin modules map for API handler execution.\n */\nexport function createBuiltinModules(): Record<string, unknown> {\n return {\n path: pathPolyfill,\n url: urlPolyfill,\n querystring: querystringPolyfill,\n util: utilPolyfill,\n events: eventsPolyfill,\n stream: streamPolyfill,\n crypto: cryptoPolyfill,\n };\n}\n\n/**\n * Execute API handler code in a sandboxed context\n */\nexport async function executeApiHandler(\n code: string,\n req: MockRequest,\n res: MockResponse | StreamingMockResponse,\n env: Record<string, string> | undefined,\n builtinModules: Record<string, unknown>,\n vfsRequire?: (id: string) => unknown,\n): Promise<unknown> {\n try {\n const require = (id: string): unknown => {\n // Handle node: prefix\n const modId = id.startsWith(\"node:\") ? id.slice(5) : id;\n if (builtinModules[modId]) {\n return builtinModules[modId];\n }\n // Fall back to VFS-based require (npm packages from node_modules)\n if (vfsRequire) {\n return vfsRequire(modId);\n }\n throw new Error(`Module not found: ${id}`);\n };\n\n // Create module context\n const module = { exports: {} as Record<string, unknown> };\n const exports = module.exports;\n\n // Create process object with environment variables\n const process = {\n env: { ...env },\n cwd: () => \"/\",\n platform: \"browser\",\n version: \"v18.0.0\",\n versions: { node: \"18.0.0\" },\n };\n\n // Execute the transformed code\n const fn = new Function(\"exports\", \"require\", \"module\", \"process\", code);\n fn(exports, require, module, process);\n\n // Get the handler - check both module.exports and module.exports.default\n let handler: unknown = module.exports.default || module.exports;\n\n // If handler is still an object with a default property, unwrap it\n if (\n typeof handler === \"object\" &&\n handler !== null &&\n \"default\" in handler\n ) {\n handler = (handler as { default: unknown }).default;\n }\n\n if (typeof handler !== \"function\") {\n throw new Error(\"No default export handler found\");\n }\n\n // Call the handler - it may be async\n let result = (handler as (req: unknown, res: unknown) => unknown)(req, res);\n\n // If the handler returns a promise, wait for it\n if (result instanceof Promise) {\n result = await result;\n }\n\n // Return the handler's return value so callers can detect Response objects\n return result;\n } catch (error) {\n console.error(\"[NextDevServer] API handler error:\", error);\n throw error;\n }\n}\n","/**\n * NextDevServer - Next.js-compatible dev server for the web-containers environment.\n * Implements file-based routing, API routes, and HMR via postMessage.\n *\n * ## Framework Dev Server Roadmap\n *\n * Currently supported:\n * - **Next.js** (Pages Router + App Router) — implemented in this file.\n *\n * Planned framework support:\n * - **Vite SSR** — generic Vite-based dev server with SSR support.\n * - **Remix** — loader/action-based routing with nested layouts.\n * - **SvelteKit** — file-based routing with server-side load functions.\n * - **Nuxt** — Vue-based file-system routing and server routes.\n * - **Astro** — content-focused with island architecture.\n * - **SolidStart** — SolidJS file-based routing with SSR.\n *\n * To add a new framework dev server, implement the {@link DevServer} base class\n * from `../dev-server.ts`. The base class provides `handleRequest()` dispatch,\n * static file serving, HMR event emission, and port management. The subclass\n * must implement route resolution, code transformation, and HTML generation.\n *\n * ## Unsupported Next.js Features\n *\n * The following Next.js features are NOT supported in this browser-based runtime:\n *\n * - **Middleware** (`middleware.ts`): Edge runtime middleware is not executed.\n * Requests go directly to route handlers without middleware interception.\n *\n * - **Server Actions**: React Server Actions (`\"use server\"` directive) are not\n * supported. Form submissions using server actions will not work.\n *\n * - **React Server Components (RSC)**: All components run as client components.\n * The `\"use client\"` directive is accepted but has no effect since everything\n * is already client-side.\n *\n * - **Incremental Static Regeneration (ISR)**: `revalidate` options in\n * `getStaticProps` or route segment configs are ignored. Pages are always\n * rendered on demand.\n *\n * - **Internationalization (i18n)**: The `i18n` configuration in `next.config.js`\n * is not processed. Locale detection and routing are not performed.\n *\n * - **Rewrites and Redirects**: Configuration-based rewrites and redirects from\n * `next.config.js` are not applied. Use client-side routing instead.\n *\n * - **Parallel Routes and Intercepting Routes**: Advanced App Router patterns\n * like `@slot` parallel routes and `(..)` intercepting routes are not supported.\n *\n * - **Image Optimization**: The `next/image` component renders a plain `<img>` tag.\n * No server-side image optimization is performed.\n *\n * - **Edge Runtime**: API routes and pages cannot use `export const runtime = 'edge'`.\n * All execution happens in the browser's main thread.\n */\n\nimport {\n DevServer,\n type DevServerOptions,\n type ResponseData,\n type HMRUpdate,\n} from \"../dev-server\";\nimport { MemFS } from \"../memfs\";\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport { simpleHash } from \"../utils/hash\";\nimport { safePath } from \"../utils/safe-path\";\nimport {\n redirectNpmImports as _redirectNpmImports,\n stripCssImports as _stripCssImports,\n addReactRefresh as _addReactRefresh,\n transformEsmToCjsSimple,\n type CssModuleContext,\n} from \"./code-transforms\";\nimport {\n NEXT_LINK_SHIM,\n NEXT_ROUTER_SHIM,\n NEXT_NAVIGATION_SHIM,\n NEXT_HEAD_SHIM,\n NEXT_IMAGE_SHIM,\n NEXT_DYNAMIC_SHIM,\n NEXT_SCRIPT_SHIM,\n NEXT_FONT_GOOGLE_SHIM,\n NEXT_FONT_LOCAL_SHIM,\n} from \"./next-shims\";\nimport {\n type AppRoute,\n generateAppRouterHtml as _generateAppRouterHtml,\n generatePageHtml as _generatePageHtml,\n serve404Page as _serve404Page,\n} from \"./next-html-generator\";\nimport {\n type RouteResolverContext,\n hasAppRouter,\n resolveAppRoute,\n resolveAppRouteHandler,\n resolvePageFile,\n resolveApiFile,\n resolveFileWithExtension,\n needsTransform,\n} from \"./next-route-resolver\";\nimport {\n createMockRequest,\n createMockResponse,\n createBuiltinModules,\n executeApiHandler,\n} from \"./next-api-handler\";\nimport { ESBUILD_WASM_ESM_CDN, ESBUILD_WASM_BINARY_CDN } from \"../config/cdn\";\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.navigator !== \"undefined\" &&\n \"serviceWorker\" in window.navigator;\n\ndeclare global {\n interface Window {\n __esbuild?: typeof import(\"esbuild-wasm\");\n __esbuildInitPromise?: Promise<void>;\n }\n}\n\nasync function initEsbuild(): Promise<void> {\n if (!isBrowser) return;\n if (window.__esbuild) return;\n if (window.__esbuildInitPromise) return window.__esbuildInitPromise;\n\n window.__esbuildInitPromise = (async () => {\n try {\n const mod = await import(/* @vite-ignore */ ESBUILD_WASM_ESM_CDN);\n const esbuildMod = mod.default || mod;\n\n try {\n await esbuildMod.initialize({ wasmURL: ESBUILD_WASM_BINARY_CDN });\n } catch (initError) {\n if (\n initError instanceof Error &&\n initError.message.includes('Cannot call \"initialize\" more than once')\n ) {\n // Already initialized, reuse\n } else {\n throw initError;\n }\n }\n\n window.__esbuild = esbuildMod;\n } catch (error) {\n console.error(\"[NextDevServer] Failed to initialize esbuild:\", error);\n window.__esbuildInitPromise = undefined;\n throw error;\n }\n })();\n\n return window.__esbuildInitPromise;\n}\n\nfunction getEsbuild(): typeof import(\"esbuild-wasm\") | undefined {\n return isBrowser ? window.__esbuild : undefined;\n}\n\nexport interface NextDevServerOptions extends DevServerOptions {\n pagesDir?: string;\n appDir?: string;\n publicDir?: string;\n preferAppRouter?: boolean;\n env?: Record<string, string>;\n basePath?: string;\n additionalImportMap?: Record<string, string>;\n additionalLocalPackages?: string[];\n esmShDeps?: string;\n /** Timeout in milliseconds for API handler execution. Defaults to 30000 (30s). */\n apiHandlerTimeout?: number;\n}\n\nexport class NextDevServer extends DevServer {\n private pagesDir: string;\n private appDir: string;\n private publicDir: string;\n private useAppRouter: boolean;\n private watcherCleanup: (() => void) | null = null;\n private hmrTargetWindow: Window | null = null;\n private options: NextDevServerOptions;\n private transformCache: Map<string, { code: string; hash: string }> =\n new Map();\n private pathAliases: Map<string, string> = new Map();\n private basePath: string = \"\";\n\n private get routeCtx(): RouteResolverContext {\n return {\n exists: (path: string) => this.exists(path),\n isDirectory: (path: string) => this.isDirectory(path),\n readdir: (path: string) => this.vfs.readdirSync(path) as string[],\n };\n }\n\n constructor(vfs: MemFS, options: NextDevServerOptions) {\n super(vfs, options);\n this.options = options;\n\n this.pagesDir = options.pagesDir || \"/pages\";\n this.appDir = options.appDir || \"/app\";\n this.publicDir = options.publicDir || \"/public\";\n\n if (options.preferAppRouter !== undefined) {\n this.useAppRouter = options.preferAppRouter;\n } else {\n this.useAppRouter = hasAppRouter(this.appDir, this.routeCtx);\n }\n\n this.loadPathAliases();\n this.basePath = options.basePath || \"\";\n }\n\n private loadPathAliases(): void {\n try {\n const tsconfigPath = \"/tsconfig.json\";\n if (!this.vfs.existsSync(tsconfigPath)) return;\n\n const content = this.vfs.readFileSync(tsconfigPath, \"utf-8\") as string;\n const tsconfig = JSON.parse(content);\n const paths = tsconfig?.compilerOptions?.paths;\n if (!paths) return;\n\n for (const [alias, targets] of Object.entries(paths)) {\n if (Array.isArray(targets) && targets.length > 0) {\n const aliasPrefix = alias.replace(/\\*$/, \"\");\n const targetPrefix = (targets[0] as string)\n .replace(/\\*$/, \"\")\n .replace(/^\\./, \"\");\n this.pathAliases.set(aliasPrefix, targetPrefix);\n }\n }\n } catch {\n /* ignore */\n }\n }\n\n private resolvePathAliases(code: string, currentFile: string): string {\n if (this.pathAliases.size === 0) return code;\n\n const virtualBase = `/__virtual__/${this.port}`;\n let result = code;\n\n for (const [alias, target] of this.pathAliases) {\n const aliasEscaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(\n `(from\\\\s*['\"]|import\\\\s*\\\\(\\\\s*['\"])${aliasEscaped}([^'\"]+)(['\"])`,\n \"g\",\n );\n\n result = result.replace(pattern, (match, prefix, path, quote) => {\n const resolvedPath = `${virtualBase}${target}${path}`;\n return `${prefix}${resolvedPath}${quote}`;\n });\n }\n\n return result;\n }\n\n setEnv(key: string, value: string): void {\n this.options.env = this.options.env || {};\n this.options.env[key] = value;\n }\n\n getEnv(): Record<string, string> {\n return { ...this.options.env };\n }\n\n /**\n * Set the target window for HMR updates (typically iframe.contentWindow).\n * Enables postMessage-based HMR delivery to sandboxed iframes.\n */\n setHMRTarget(targetWindow: Window): void {\n this.hmrTargetWindow = targetWindow;\n }\n\n private generateEnvScript(): string {\n const env = this.options.env || {};\n const publicEnvVars: Record<string, string> = {};\n for (const [key, value] of Object.entries(env)) {\n if (key.startsWith(\"NEXT_PUBLIC_\")) {\n publicEnvVars[key] = value;\n }\n }\n\n return `<script>\n window.process = window.process || {};\n window.process.env = window.process.env || {};\n Object.assign(window.process.env, ${JSON.stringify(publicEnvVars)});\n window.__NEXT_BASE_PATH__ = ${JSON.stringify(this.basePath)};\n</script>`;\n }\n\n async handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData> {\n const urlObj = new URL(url, \"http://localhost\");\n let pathname = urlObj.pathname;\n\n const virtualPrefixMatch = pathname.match(/^\\/__virtual__\\/\\d+/);\n if (virtualPrefixMatch) {\n pathname = pathname.slice(virtualPrefixMatch[0].length) || \"/\";\n }\n\n if (this.basePath && pathname.startsWith(this.basePath)) {\n const rest = pathname.slice(this.basePath.length);\n if (rest === \"\" || rest.startsWith(\"/\")) {\n pathname = rest || \"/\";\n }\n }\n\n if (pathname.startsWith(\"/_next/shims/\"))\n return this.serveNextShim(pathname);\n if (pathname === \"/_next/route-info\")\n return this.serveRouteInfo(urlObj.searchParams.get(\"pathname\") || \"/\");\n if (pathname.startsWith(\"/_next/pages/\"))\n return this.servePageComponent(pathname);\n if (pathname.startsWith(\"/_next/app/\"))\n return this.serveAppComponent(pathname);\n\n if (pathname.startsWith(\"/_npm/\"))\n return this.serveNpmModule(pathname.slice(5));\n\n if (this.useAppRouter) {\n const appRouteFile = resolveAppRouteHandler(\n this.appDir,\n pathname,\n this.routeCtx,\n );\n if (appRouteFile) {\n return this.handleAppRouteHandler(\n method,\n pathname,\n headers,\n body,\n appRouteFile,\n urlObj.search,\n );\n }\n }\n\n if (pathname.startsWith(\"/api/\")) {\n return this.handleApiRoute(method, pathname, headers, body);\n }\n\n const publicPath = this.publicDir + pathname;\n if (this.exists(publicPath) && !this.isDirectory(publicPath)) {\n return this.serveFile(publicPath);\n }\n\n if (needsTransform(pathname) && this.exists(pathname)) {\n return this.transformAndServe(pathname, pathname);\n }\n\n const resolvedFile = resolveFileWithExtension(pathname, this.routeCtx);\n if (resolvedFile) {\n if (needsTransform(resolvedFile))\n return this.transformAndServe(resolvedFile, pathname);\n return this.serveFile(resolvedFile);\n }\n\n if (this.exists(pathname) && !this.isDirectory(pathname)) {\n return this.serveFile(pathname);\n }\n\n return this.handlePageRoute(pathname, urlObj.search);\n }\n\n private serveNextShim(pathname: string): ResponseData {\n const shimName = pathname.replace(\"/_next/shims/\", \"\").replace(\".js\", \"\");\n\n const SHIM_MAP: Record<string, string> = {\n link: NEXT_LINK_SHIM,\n router: NEXT_ROUTER_SHIM,\n head: NEXT_HEAD_SHIM,\n navigation: NEXT_NAVIGATION_SHIM,\n image: NEXT_IMAGE_SHIM,\n dynamic: NEXT_DYNAMIC_SHIM,\n script: NEXT_SCRIPT_SHIM,\n \"font/google\": NEXT_FONT_GOOGLE_SHIM,\n \"font/local\": NEXT_FONT_LOCAL_SHIM,\n };\n\n const code = SHIM_MAP[shimName];\n if (!code) return this.notFound(pathname);\n\n const buffer = Buffer.from(code);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buffer,\n };\n }\n\n private serveRouteInfo(pathname: string): ResponseData {\n const route = resolveAppRoute(this.appDir, pathname, this.routeCtx);\n const info = route\n ? {\n params: route.params,\n found: true,\n page: route.page,\n layouts: route.layouts,\n }\n : { params: {}, found: false };\n\n const json = JSON.stringify(info);\n const buffer = Buffer.from(json);\n\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buffer,\n };\n }\n\n private async servePageComponent(pathname: string): Promise<ResponseData> {\n const route = pathname.replace(\"/_next/pages\", \"\").replace(/\\.js$/, \"\");\n const pageFile = resolvePageFile(this.pagesDir, route, this.routeCtx);\n if (!pageFile) return this.notFound(pathname);\n return this.transformAndServe(pageFile, pageFile);\n }\n\n private async serveAppComponent(pathname: string): Promise<ResponseData> {\n const rawFilePath = pathname.replace(\"/_next/app\", \"\");\n\n if (this.exists(rawFilePath) && !this.isDirectory(rawFilePath)) {\n return this.transformAndServe(rawFilePath, rawFilePath);\n }\n\n const filePath = rawFilePath.replace(/\\.js$/, \"\");\n const extensions = [\".tsx\", \".jsx\", \".ts\", \".js\"];\n for (const ext of extensions) {\n const fullPath = filePath + ext;\n if (this.exists(fullPath))\n return this.transformAndServe(fullPath, fullPath);\n }\n\n return this.notFound(pathname);\n }\n\n private async handleApiRoute(\n method: string,\n pathname: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData> {\n const apiFile = resolveApiFile(this.pagesDir, pathname, this.routeCtx);\n if (!apiFile) {\n return {\n statusCode: 404,\n statusMessage: \"Not Found\",\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\n body: Buffer.from(JSON.stringify({ error: \"API route not found\" })),\n };\n }\n\n try {\n const code = this.vfs.readFileSync(apiFile, \"utf8\") as string;\n const transformed = await this.transformApiHandler(code, apiFile);\n const req = createMockRequest(method, pathname, headers, body);\n const res = createMockResponse();\n\n const builtins = await createBuiltinModules();\n await executeApiHandler(\n transformed,\n req,\n res,\n this.options.env,\n builtins,\n );\n\n if (!res.isEnded()) {\n const timeoutMs = this.options.apiHandlerTimeout ?? 30000;\n const timeout = new Promise<void>((_, reject) => {\n setTimeout(\n () => reject(new Error(`API handler timeout after ${timeoutMs}ms`)),\n timeoutMs,\n );\n });\n await Promise.race([res.waitForEnd(), timeout]);\n }\n\n return res.toResponse();\n } catch (error) {\n console.error(\"[NextDevServer] API error:\", error);\n return {\n statusCode: 500,\n statusMessage: \"Internal Server Error\",\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\n body: Buffer.from(\n JSON.stringify({\n error:\n error instanceof Error ? error.message : \"Internal Server Error\",\n }),\n ),\n };\n }\n }\n\n private async handleAppRouteHandler(\n method: string,\n pathname: string,\n headers: Record<string, string>,\n body: Buffer | undefined,\n routeFile: string,\n search?: string,\n ): Promise<ResponseData> {\n try {\n const code = this.vfs.readFileSync(routeFile, \"utf8\") as string;\n const transformed = await this.transformApiHandler(code, routeFile);\n\n const builtinModules = await createBuiltinModules();\n const require = (id: string): unknown => {\n const modId = id.startsWith(\"node:\") ? id.slice(5) : id;\n if ((builtinModules as Record<string, unknown>)[modId])\n return (builtinModules as Record<string, unknown>)[modId];\n throw new Error(`Module not found: ${id}`);\n };\n\n const moduleObj = { exports: {} as Record<string, unknown> };\n const exports = moduleObj.exports;\n const process = {\n env: { ...this.options.env },\n cwd: () => \"/\",\n platform: \"browser\",\n version: \"v18.0.0\",\n versions: { node: \"18.0.0\" },\n };\n\n const fn = new Function(\n \"exports\",\n \"require\",\n \"module\",\n \"process\",\n transformed,\n );\n fn(exports, require, moduleObj, process);\n\n const methodUpper = method.toUpperCase();\n const handler =\n moduleObj.exports[methodUpper] ||\n moduleObj.exports[methodUpper.toLowerCase()];\n\n if (typeof handler !== \"function\") {\n return {\n statusCode: 405,\n statusMessage: \"Method Not Allowed\",\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\n body: Buffer.from(\n JSON.stringify({ error: `Method ${method} not allowed` }),\n ),\n };\n }\n\n const requestUrl = new URL(pathname + (search || \"\"), \"http://localhost\");\n const requestInit: RequestInit = {\n method: methodUpper,\n headers: new Headers(headers),\n };\n if (body && methodUpper !== \"GET\" && methodUpper !== \"HEAD\") {\n requestInit.body = body;\n }\n const request = new Request(requestUrl.toString(), requestInit);\n const route = resolveAppRoute(this.appDir, pathname, this.routeCtx);\n const params = route?.params || {};\n\n const response = await handler(request, {\n params: Promise.resolve(params),\n });\n\n if (response instanceof Response) {\n const respHeaders: Record<string, string> = {};\n response.headers.forEach((value: string, key: string) => {\n respHeaders[key] = value;\n });\n const respBody = await response.text();\n return {\n statusCode: response.status,\n statusMessage: response.statusText || \"OK\",\n headers: respHeaders,\n body: Buffer.from(respBody),\n };\n }\n\n if (response && typeof response === \"object\") {\n const json = JSON.stringify(response);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\n body: Buffer.from(json),\n };\n }\n\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n body: Buffer.from(String(response || \"\")),\n };\n } catch (error) {\n console.error(\"[NextDevServer] App Route handler error:\", error);\n return {\n statusCode: 500,\n statusMessage: \"Internal Server Error\",\n headers: { \"Content-Type\": \"application/json; charset=utf-8\" },\n body: Buffer.from(\n JSON.stringify({\n error:\n error instanceof Error ? error.message : \"Internal Server Error\",\n }),\n ),\n };\n }\n }\n\n private async handlePageRoute(\n pathname: string,\n search: string,\n ): Promise<ResponseData> {\n if (this.useAppRouter) return this.handleAppRouterPage(pathname, search);\n\n const pageFile = resolvePageFile(this.pagesDir, pathname, this.routeCtx);\n if (!pageFile) {\n const notFoundPage = resolvePageFile(\n this.pagesDir,\n \"/404\",\n this.routeCtx,\n );\n if (notFoundPage) {\n const html = await this.generatePageHtml(notFoundPage, \"/404\");\n return {\n statusCode: 404,\n statusMessage: \"Not Found\",\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n body: Buffer.from(html),\n };\n }\n return this.serve404Page();\n }\n\n if (needsTransform(pathname))\n return this.transformAndServe(pageFile, pathname);\n\n const html = await this.generatePageHtml(pageFile, pathname);\n const buffer = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buffer,\n };\n }\n\n private async handleAppRouterPage(\n pathname: string,\n _search: string,\n ): Promise<ResponseData> {\n const route = resolveAppRoute(this.appDir, pathname, this.routeCtx);\n\n if (!route) {\n const notFoundRoute = resolveAppRoute(\n this.appDir,\n \"/not-found\",\n this.routeCtx,\n );\n if (notFoundRoute) {\n const html = await this.generateAppRouterHtml(\n notFoundRoute,\n \"/not-found\",\n );\n return {\n statusCode: 404,\n statusMessage: \"Not Found\",\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n body: Buffer.from(html),\n };\n }\n return this.serve404Page();\n }\n\n const html = await this.generateAppRouterHtml(route, pathname);\n const buffer = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buffer,\n };\n }\n\n private _tailwindConfigCache: string | undefined;\n\n private async loadTailwindConfig(): Promise<string> {\n if (this._tailwindConfigCache !== undefined)\n return this._tailwindConfigCache;\n\n const configFiles = [\n \"/tailwind.config.ts\",\n \"/tailwind.config.js\",\n \"/tailwind.config.mjs\",\n ];\n\n let content: string | null = null;\n for (const file of configFiles) {\n const full = this.root === \"/\" ? file : `${this.root}${file}`;\n try {\n const raw = this.vfs.readFileSync(full, \"utf-8\");\n content =\n typeof raw === \"string\"\n ? raw\n : new TextDecoder().decode(raw as Uint8Array);\n break;\n } catch {\n /* try next */\n }\n }\n\n if (!content) {\n this._tailwindConfigCache = \"\";\n return \"\";\n }\n\n try {\n let js = content;\n js = js.replace(\n /import\\s+type\\s+\\{[^}]*\\}\\s+from\\s+['\"][^'\"]*['\"]\\s*;?\\s*/g,\n \"\",\n );\n js = js.replace(\n /import\\s+\\{[^}]*\\}\\s+from\\s+['\"][^'\"]*['\"]\\s*;?\\s*/g,\n \"\",\n );\n js = js.replace(/\\s+satisfies\\s+\\w+\\s*;?\\s*$/gm, \"\");\n js = js.replace(/:\\s*[A-Z]\\w*\\s*=/g, \" =\");\n js = js.replace(/\\s+as\\s+const\\s*/g, \" \");\n\n const expMatch = js.match(/export\\s+default\\s*/);\n if (!expMatch || expMatch.index === undefined) {\n this._tailwindConfigCache = \"\";\n return \"\";\n }\n\n const after = js\n .substring(expMatch.index + expMatch[0].length)\n .trimStart();\n if (!after.startsWith(\"{\")) {\n this._tailwindConfigCache = \"\";\n return \"\";\n }\n\n const objStart =\n expMatch.index +\n expMatch[0].length +\n (js.substring(expMatch.index + expMatch[0].length).length -\n after.length);\n const objContent = js.substring(objStart);\n\n let braces = 0,\n inStr = false,\n strCh = \"\",\n esc = false,\n endIdx = -1;\n for (let i = 0; i < objContent.length; i++) {\n const c = objContent[i];\n if (esc) {\n esc = false;\n continue;\n }\n if (c === \"\\\\\") {\n esc = true;\n continue;\n }\n if (inStr) {\n if (c === strCh) inStr = false;\n continue;\n }\n if (c === '\"' || c === \"'\" || c === \"`\") {\n inStr = true;\n strCh = c;\n continue;\n }\n if (c === \"{\") braces++;\n else if (c === \"}\") {\n braces--;\n if (braces === 0) {\n endIdx = i + 1;\n break;\n }\n }\n }\n\n if (endIdx === -1) {\n this._tailwindConfigCache = \"\";\n return \"\";\n }\n\n const configObj = objContent.substring(0, endIdx);\n this._tailwindConfigCache = `<script>\\n tailwind.config = ${configObj};\\n</script>`;\n } catch {\n this._tailwindConfigCache = \"\";\n }\n\n return this._tailwindConfigCache;\n }\n\n private htmlContext() {\n return {\n port: this.port,\n exists: (path: string) => this.exists(path),\n generateEnvScript: () => this.generateEnvScript(),\n loadTailwindConfigIfNeeded: () => this.loadTailwindConfig(),\n additionalImportMap: this.options.additionalImportMap,\n };\n }\n\n private async generateAppRouterHtml(\n route: AppRoute,\n pathname: string,\n ): Promise<string> {\n return _generateAppRouterHtml(this.htmlContext(), route, pathname);\n }\n\n private async generatePageHtml(\n pageFile: string,\n pathname: string,\n ): Promise<string> {\n return _generatePageHtml(this.htmlContext(), pageFile, pathname);\n }\n\n private serve404Page(): ResponseData {\n return _serve404Page(this.port);\n }\n\n private async transformAndServe(\n filePath: string,\n urlPath: string,\n ): Promise<ResponseData> {\n try {\n const content = this.vfs.readFileSync(filePath, \"utf8\") as string;\n const hash = simpleHash(content);\n\n const cached = this.transformCache.get(filePath);\n if (cached && cached.hash === hash) {\n const buffer = Buffer.from(cached.code);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n \"X-Transformed\": \"true\",\n \"X-Cache\": \"hit\",\n },\n body: buffer,\n };\n }\n\n const transformed = await this.transformCode(content, filePath);\n\n this.transformCache.set(filePath, { code: transformed, hash });\n if (this.transformCache.size > 500) {\n const firstKey = this.transformCache.keys().next().value;\n if (firstKey) this.transformCache.delete(firstKey);\n }\n\n const buffer = Buffer.from(transformed);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n \"X-Transformed\": \"true\",\n },\n body: buffer,\n };\n } catch (error) {\n console.error(\"[NextDevServer] Transform error:\", error);\n const message =\n error instanceof Error ? error.message : \"Transform failed\";\n const errorJs = `// Transform Error: ${message}\\nconsole.error(${JSON.stringify(\n message,\n )});`;\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"X-Transform-Error\": \"true\",\n },\n body: Buffer.from(errorJs),\n };\n }\n }\n\n private async transformCode(code: string, filename: string): Promise<string> {\n if (!isBrowser) {\n return this.doStripCssImports(code, filename);\n }\n\n await initEsbuild();\n const esbuild = getEsbuild();\n if (!esbuild) throw new Error(\"esbuild not available\");\n\n const codeWithoutCss = this.doStripCssImports(code, filename);\n const codeWithAliases = this.resolvePathAliases(codeWithoutCss, filename);\n\n let loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\" = \"js\";\n if (filename.endsWith(\".jsx\")) loader = \"jsx\";\n else if (filename.endsWith(\".tsx\")) loader = \"tsx\";\n else if (filename.endsWith(\".ts\")) loader = \"ts\";\n\n const result = await esbuild.transform(codeWithAliases, {\n loader,\n format: \"esm\",\n target: \"esnext\",\n jsx: \"automatic\",\n jsxImportSource: \"react\",\n sourcemap: \"inline\",\n sourcefile: filename,\n });\n\n const codeWithCdnImports = this.doRedirectNpmImports(result.code);\n\n if (/\\.(jsx|tsx)$/.test(filename)) {\n return _addReactRefresh(codeWithCdnImports, filename);\n }\n\n return codeWithCdnImports;\n }\n\n private _dependencies: Record<string, string> | undefined;\n\n private getDependencies(): Record<string, string> {\n if (this._dependencies) return this._dependencies;\n let deps: Record<string, string> = {};\n try {\n const pkgPath = `${this.root}/package.json`;\n if (this.vfs.existsSync(pkgPath)) {\n const pkg = JSON.parse(\n this.vfs.readFileSync(pkgPath, \"utf-8\") as string,\n );\n deps = { ...pkg.dependencies, ...pkg.devDependencies };\n }\n } catch {\n /* ignore */\n }\n this._dependencies = deps;\n return deps;\n }\n\n private _installedPackages: Set<string> | undefined;\n\n private getInstalledPackages(): Set<string> {\n if (this._installedPackages) return this._installedPackages;\n const installed = new Set<string>();\n try {\n const nmDir = `${this.root === \"/\" ? \"\" : this.root}/node_modules`;\n if (this.vfs.existsSync(nmDir)) {\n const entries = this.vfs.readdirSync(nmDir) as string[];\n for (const entry of entries) {\n if (entry.startsWith(\".\")) continue;\n if (entry.startsWith(\"@\")) {\n try {\n const scopeDir = `${nmDir}/${entry}`;\n const scoped = this.vfs.readdirSync(scopeDir) as string[];\n for (const s of scoped) installed.add(`${entry}/${s}`);\n } catch {\n /* ignore */\n }\n } else {\n installed.add(entry);\n }\n }\n }\n } catch {\n /* ignore */\n }\n this._installedPackages = installed;\n return installed;\n }\n\n invalidatePackageCache(): void {\n this._dependencies = undefined;\n this._installedPackages = undefined;\n }\n\n private doRedirectNpmImports(code: string): string {\n return _redirectNpmImports(\n code,\n this.options.additionalLocalPackages,\n this.getDependencies(),\n this.options.esmShDeps,\n this.getInstalledPackages(),\n );\n }\n\n private doStripCssImports(code: string, currentFile?: string): string {\n return _stripCssImports(code, currentFile, this.getCssModuleContext());\n }\n\n private getCssModuleContext(): CssModuleContext {\n return {\n readFile: (path: string) =>\n this.vfs.readFileSync(path, \"utf-8\") as string,\n exists: (path: string) => this.exists(path),\n };\n }\n\n private async transformApiHandler(\n code: string,\n filename: string,\n ): Promise<string> {\n const codeWithAliases = this.resolvePathAliases(code, filename);\n\n if (isBrowser) {\n await initEsbuild();\n const esbuild = getEsbuild();\n if (!esbuild) throw new Error(\"esbuild not available\");\n\n let loader: \"js\" | \"jsx\" | \"ts\" | \"tsx\" = \"js\";\n if (filename.endsWith(\".jsx\")) loader = \"jsx\";\n else if (filename.endsWith(\".tsx\")) loader = \"tsx\";\n else if (filename.endsWith(\".ts\")) loader = \"ts\";\n\n const result = await esbuild.transform(codeWithAliases, {\n loader,\n format: \"cjs\",\n target: \"esnext\",\n platform: \"neutral\",\n sourcefile: filename,\n });\n\n return result.code;\n }\n\n return transformEsmToCjsSimple(codeWithAliases);\n }\n\n protected serveFile(filePath: string): ResponseData {\n if (filePath.endsWith(\".json\")) {\n try {\n const normalizedPath = this.resolvePath(filePath);\n const content = this.vfs.readFileSync(normalizedPath);\n let jsonContent: string;\n if (typeof content === \"string\") {\n jsonContent = content;\n } else if (content instanceof Uint8Array) {\n jsonContent = new TextDecoder(\"utf-8\").decode(content);\n } else {\n jsonContent = Buffer.from(content).toString(\"utf-8\");\n }\n\n const esModuleContent = `export default ${jsonContent};`;\n const buffer = Buffer.from(esModuleContent);\n\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buffer.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buffer,\n };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\")\n return this.notFound(filePath);\n return this.serverError(error);\n }\n }\n\n return super.serveFile(filePath);\n }\n\n /**\n * Serve an npm module from /node_modules/ with ESM-to-CJS transform.\n * Accessed via /_npm/{package}/{file} URLs from the import map.\n */\n private serveNpmModule(modulePath: string): ResponseData {\n const fsPath = safePath(\"/node_modules\", \"/\" + modulePath);\n\n if (!modulePath || modulePath === \"/\") {\n return this.notFound(fsPath);\n }\n\n let source: string;\n try {\n source = this.vfs.readFileSync(fsPath, \"utf-8\") as string;\n } catch {\n return this.notFound(fsPath);\n }\n\n if (fsPath.endsWith(\".json\")) {\n const js = `export default ${source};`;\n const buf = Buffer.from(js);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n\n let transformed = source;\n try {\n transformed = transformEsmToCjsSimple(source);\n } catch {\n /* serve original on transform failure */\n }\n\n const buf = Buffer.from(transformed);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n\n /**\n * Start file watching for HMR.\n * Watches /pages, /app, and /public for changes and emits HMR updates.\n */\n startWatching(): void {\n const watchers: Array<{ close: () => void }> = [];\n\n try {\n const pagesWatcher = this.vfs.watch(\n this.pagesDir,\n { recursive: true },\n (eventType, filename) => {\n if (eventType === \"change\" && filename) {\n const fullPath = filename.startsWith(\"/\")\n ? filename\n : `${this.pagesDir}/${filename}`;\n this.handleFileChange(fullPath);\n }\n },\n );\n watchers.push(pagesWatcher);\n } catch {\n /* pages dir may not exist */\n }\n\n if (this.useAppRouter) {\n try {\n const appWatcher = this.vfs.watch(\n this.appDir,\n { recursive: true },\n (eventType, filename) => {\n if (eventType === \"change\" && filename) {\n const fullPath = filename.startsWith(\"/\")\n ? filename\n : `${this.appDir}/${filename}`;\n this.handleFileChange(fullPath);\n }\n },\n );\n watchers.push(appWatcher);\n } catch {\n /* app dir may not exist */\n }\n }\n\n try {\n const publicWatcher = this.vfs.watch(\n this.publicDir,\n { recursive: true },\n (eventType, filename) => {\n if (eventType === \"change\" && filename) {\n this.handleFileChange(`${this.publicDir}/${filename}`);\n }\n },\n );\n watchers.push(publicWatcher);\n } catch {\n /* public dir may not exist */\n }\n\n this.watcherCleanup = () => {\n watchers.forEach(w => w.close());\n };\n }\n\n private handleFileChange(path: string): void {\n const isCSS = path.endsWith(\".css\");\n const isJS = /\\.(jsx?|tsx?)$/.test(path);\n const updateType = isCSS || isJS ? \"update\" : \"full-reload\";\n\n this.transformCache.delete(path);\n\n if (path.includes(\"tailwind.config\")) this._tailwindConfigCache = undefined;\n if (path.includes(\"node_modules\")) this._installedPackages = undefined;\n\n const update: HMRUpdate = { type: updateType, path, timestamp: Date.now() };\n this.emitHMRUpdate(update);\n\n if (this.hmrTargetWindow) {\n try {\n this.hmrTargetWindow.postMessage(\n { ...update, channel: \"next-hmr\" },\n \"*\",\n );\n } catch {\n /* window may be closed */\n }\n }\n }\n\n stop(): void {\n if (this.watcherCleanup) {\n this.watcherCleanup();\n this.watcherCleanup = null;\n }\n this.hmrTargetWindow = null;\n super.stop();\n }\n}\n\nexport default NextDevServer;\n","/**\n * Vite-compatible dev server for jiki.\n *\n * Serves files as ES modules with on-the-fly esbuild-wasm transpilation.\n * Supports React, Vue, Svelte, and any Vite-compatible framework by\n * transforming files before serving.\n *\n * Features:\n * - ESM-based module serving (no bundling, fast per-module transforms)\n * - `/@modules/<pkg>` for bare import resolution from node_modules\n * - CSS → JS module injection (injects `<style>` tags at runtime)\n * - HMR update emission on file changes\n * - HTML generation with module script tags\n */\n\nimport {\n DevServer,\n type DevServerOptions,\n type ResponseData,\n type HMRUpdate,\n} from \"../dev-server\";\nimport { MemFS } from \"../memfs\";\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport * as pathShim from \"../polyfills/path\";\nimport { processSource, transformEsmToCjs } from \"../code-transform\";\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface ViteDevServerOptions extends DevServerOptions {\n /** Entry HTML file (default: `/index.html`). */\n entry?: string;\n /** Framework preset for transform hints. */\n framework?: \"react\" | \"vue\" | \"svelte\" | \"solid\" | \"vanilla\";\n /** JSX import source (default: `react` for react, `solid-js` for solid). */\n jsxImportSource?: string;\n}\n\n// ---------------------------------------------------------------------------\n// ViteDevServer\n// ---------------------------------------------------------------------------\n\nexport class ViteDevServer extends DevServer {\n private entry: string;\n private framework: string;\n private jsxImportSource: string;\n\n constructor(vfs: MemFS, options: ViteDevServerOptions) {\n super(vfs, options);\n this.entry = options.entry || \"/index.html\";\n this.framework = options.framework || \"react\";\n this.jsxImportSource =\n options.jsxImportSource ||\n (this.framework === \"solid\" ? \"solid-js\" : \"react\");\n }\n\n async handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData> {\n if (method === \"OPTIONS\") return this.handleOptionsRequest();\n\n const parsed = new URL(url, \"http://localhost\");\n const pathname = decodeURIComponent(parsed.pathname);\n\n // Serve HMR client\n if (pathname === \"/@vite/client\") {\n return this.addCorsHeaders(this.serveHmrClient());\n }\n\n // Resolve bare imports: /@modules/react → node_modules/react\n if (pathname.startsWith(\"/@modules/\")) {\n const pkgPath = pathname.slice(\"/@modules/\".length);\n return this.addCorsHeaders(await this.serveBareImport(pkgPath));\n }\n\n // Serve HTML\n if (pathname === \"/\" || pathname.endsWith(\".html\")) {\n const htmlPath =\n pathname === \"/\" ? this.entry : pathShim.join(this.root, pathname);\n return this.addCorsHeaders(this.serveHtml(htmlPath));\n }\n\n // Serve and transform JS/TS/JSX/TSX\n if (this.isTransformable(pathname)) {\n return this.addCorsHeaders(await this.serveTransformed(pathname));\n }\n\n // Serve CSS as JS module\n if (pathname.endsWith(\".css\")) {\n return this.addCorsHeaders(this.serveCssAsModule(pathname));\n }\n\n // Serve static files as-is\n return this.addCorsHeaders(this.serveFile(pathname));\n }\n\n startWatching(): void {\n this.vfs.on(\"change\", (path: string) => {\n if (this.isTransformable(path) || path.endsWith(\".css\")) {\n this.broadcastChange({\n type: \"update\",\n path,\n timestamp: Date.now(),\n });\n } else if (path.endsWith(\".html\")) {\n this.broadcastChange({\n type: \"full-reload\",\n path,\n timestamp: Date.now(),\n });\n }\n });\n }\n\n // -- HTML serving ---------------------------------------------------------\n\n private serveHtml(htmlPath: string): ResponseData {\n const resolved = this.resolvePath(htmlPath);\n try {\n let html = this.vfs.readFileSync(resolved, \"utf8\");\n // Inject HMR client script\n html = html.replace(\n \"</head>\",\n `<script type=\"module\" src=\"/@vite/client\"></script>\\n</head>`,\n );\n const buf = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n } catch {\n // If no index.html, generate a minimal one\n return this.generateDefaultHtml();\n }\n }\n\n private generateDefaultHtml(): ResponseData {\n const html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Vite App</title>\n <script type=\"module\" src=\"/@vite/client\"></script>\n</head>\n<body>\n <div id=\"root\"></div>\n <div id=\"app\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n <script type=\"module\" src=\"/src/main.ts\"></script>\n <script type=\"module\" src=\"/src/main.jsx\"></script>\n <script type=\"module\" src=\"/src/main.js\"></script>\n</body>\n</html>`;\n const buf = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n\n // -- Module transforms ----------------------------------------------------\n\n private isTransformable(path: string): boolean {\n return /\\.(js|ts|tsx|jsx|mjs|cjs)$/.test(path);\n }\n\n private async serveTransformed(pathname: string): Promise<ResponseData> {\n const filePath = this.resolvePath(pathname);\n try {\n const source = this.vfs.readFileSync(filePath, \"utf8\");\n let code = this.transformModule(source, filePath);\n // Rewrite bare imports to /@modules/ prefix\n code = this.rewriteBareImports(code);\n // Rewrite relative CSS imports to request path\n code = this.rewriteCssImports(code, pathname);\n\n const buf = Buffer.from(code);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n } catch (err) {\n return this.serverError(err);\n }\n }\n\n private transformModule(source: string, filePath: string): string {\n try {\n return processSource(source, filePath);\n } catch {\n // If processSource fails (e.g. transpiler not initialised),\n // return the source with basic ESM-to-CJS conversion\n try {\n return transformEsmToCjs(source, filePath);\n } catch {\n return source;\n }\n }\n }\n\n /**\n * Rewrite bare import specifiers to /@modules/ URLs.\n * e.g. `import React from \"react\"` → `import React from \"/@modules/react\"`\n */\n private rewriteBareImports(code: string): string {\n // Match: require(\"pkg\"), require(\"@scope/pkg\"), require(\"pkg/sub\")\n return code.replace(\n /require\\([\"']([^./][^\"']*)[\"']\\)/g,\n (match, specifier) => {\n // Skip node: builtins\n if (specifier.startsWith(\"node:\")) return match;\n return `require(\"/@modules/${specifier}\")`;\n },\n );\n }\n\n /**\n * Rewrite CSS imports to use absolute paths.\n */\n private rewriteCssImports(code: string, fromPath: string): string {\n const dir = pathShim.dirname(fromPath);\n return code.replace(\n /require\\([\"'](\\.\\.?\\/[^\"']*\\.css)[\"']\\)/g,\n (_match, relPath) => {\n const abs = pathShim.resolve(dir, relPath);\n return `require(\"${abs}\")`;\n },\n );\n }\n\n // -- CSS as JS module -----------------------------------------------------\n\n private serveCssAsModule(pathname: string): ResponseData {\n const filePath = this.resolvePath(pathname);\n try {\n const css = this.vfs.readFileSync(filePath, \"utf8\");\n // Wrap CSS in a JS module that injects a <style> tag\n const escaped = css\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/`/g, \"\\\\`\")\n .replace(/\\$/g, \"\\\\$\");\n const code = [\n `const css = \\`${escaped}\\`;`,\n `if (typeof document !== 'undefined') {`,\n ` const style = document.createElement('style');`,\n ` style.setAttribute('data-vite-css', '${pathname}');`,\n ` style.textContent = css;`,\n ` document.head.appendChild(style);`,\n `}`,\n `module.exports = {};`,\n ].join(\"\\n\");\n\n const buf = Buffer.from(code);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n } catch {\n return this.notFound(pathname);\n }\n }\n\n // -- Bare import resolution -----------------------------------------------\n\n private async serveBareImport(pkgPath: string): Promise<ResponseData> {\n // Resolve from node_modules\n const nmPath = pathShim.join(this.root, \"node_modules\", pkgPath);\n\n // Check if it's a direct file\n if (this.exists(nmPath) && !this.isDirectory(nmPath)) {\n return this.serveTransformed(`/node_modules/${pkgPath}`);\n }\n\n // Try to resolve via package.json main/module/exports\n const pkgJsonPath = pathShim.join(nmPath, \"package.json\");\n if (this.exists(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(this.vfs.readFileSync(pkgJsonPath, \"utf8\"));\n const entry = pkg.module || pkg.main || \"index.js\";\n const entryPath = pathShim.join(nmPath, entry);\n if (this.exists(entryPath)) {\n return this.serveTransformed(`/node_modules/${pkgPath}/${entry}`);\n }\n } catch {}\n }\n\n // Try common index files\n for (const idx of [\"index.js\", \"index.mjs\", \"index.ts\"]) {\n const idxPath = pathShim.join(nmPath, idx);\n if (this.exists(idxPath)) {\n return this.serveTransformed(`/node_modules/${pkgPath}/${idx}`);\n }\n }\n\n return this.notFound(`/@modules/${pkgPath}`);\n }\n\n // -- HMR client -----------------------------------------------------------\n\n private serveHmrClient(): ResponseData {\n const code = `\n// Minimal Vite HMR client for jiki\nconst listeners = new Map();\n\nexport function createHotContext(ownerPath) {\n return {\n accept(deps, callback) {\n if (typeof deps === 'function') {\n listeners.set(ownerPath, deps);\n } else if (callback) {\n listeners.set(ownerPath, callback);\n }\n },\n dispose(cb) {},\n prune(cb) {},\n decline() {},\n invalidate() {},\n on(event, cb) {},\n };\n}\n\nexport const hot = createHotContext('/');\n\n// import.meta.hot compatibility\nif (typeof window !== 'undefined') {\n window.__vite_hot__ = { createHotContext, listeners };\n}\n`;\n const buf = Buffer.from(code);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"application/javascript; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n}\n","/**\n * SvelteKit-compatible dev server for jiki.\n *\n * Extends the ViteDevServer with SvelteKit's file-based routing conventions:\n * - `+page.svelte` for pages\n * - `+layout.svelte` for layouts\n * - `+server.ts` for API routes\n * - `+error.svelte` for error pages\n */\n\nimport { ViteDevServer, type ViteDevServerOptions } from \"./vite-dev-server\";\nimport { MemFS } from \"../memfs\";\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport * as pathShim from \"../polyfills/path\";\nimport type { ResponseData } from \"../dev-server\";\n\nexport interface SvelteKitDevServerOptions extends ViteDevServerOptions {\n /** Routes directory (default: `/src/routes`). */\n routesDir?: string;\n}\n\ninterface SvelteKitRoute {\n route: string;\n pagePath?: string;\n layoutPath?: string;\n serverPath?: string;\n errorPath?: string;\n}\n\nexport class SvelteKitDevServer extends ViteDevServer {\n private routesDir: string;\n\n constructor(vfs: MemFS, options: SvelteKitDevServerOptions) {\n super(vfs, { ...options, framework: \"svelte\" });\n this.routesDir = options.routesDir || \"/src/routes\";\n }\n\n async handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData> {\n const parsed = new URL(url, \"http://localhost\");\n const pathname = decodeURIComponent(parsed.pathname);\n\n // Check for +server.ts API routes first\n const serverRoute = this.resolveServerRoute(pathname);\n if (serverRoute) {\n return this.addCorsHeaders(await this.serveTransformedFile(serverRoute));\n }\n\n // Check for +page.svelte routes\n const pageRoute = this.resolvePageRoute(pathname);\n if (pageRoute) {\n return this.addCorsHeaders(this.serveSvelteKitPage(pageRoute));\n }\n\n // Fall through to ViteDevServer for static files, CSS, etc.\n return super.handleRequest(method, url, headers, body);\n }\n\n private resolvePageRoute(pathname: string): SvelteKitRoute | null {\n const routePath = pathname === \"/\" ? \"\" : pathname;\n const dir = pathShim.join(this.routesDir, routePath);\n\n const pagePath = pathShim.join(dir, \"+page.svelte\");\n if (!this.exists(pagePath)) return null;\n\n const layoutPath = this.findLayout(dir);\n const errorPath = this.findError(dir);\n\n return { route: pathname, pagePath, layoutPath, errorPath };\n }\n\n private resolveServerRoute(pathname: string): string | null {\n const routePath = pathname === \"/\" ? \"\" : pathname;\n const dir = pathShim.join(this.routesDir, routePath);\n\n for (const ext of [\".ts\", \".js\"]) {\n const serverPath = pathShim.join(dir, `+server${ext}`);\n if (this.exists(serverPath)) return serverPath;\n }\n return null;\n }\n\n private findLayout(dir: string): string | undefined {\n let current = dir;\n while (current.startsWith(this.routesDir)) {\n const layoutPath = pathShim.join(current, \"+layout.svelte\");\n if (this.exists(layoutPath)) return layoutPath;\n current = pathShim.dirname(current);\n }\n return undefined;\n }\n\n private findError(dir: string): string | undefined {\n const errorPath = pathShim.join(dir, \"+error.svelte\");\n return this.exists(errorPath) ? errorPath : undefined;\n }\n\n private serveSvelteKitPage(route: SvelteKitRoute): ResponseData {\n const html = this.generateSvelteKitHtml(route);\n const buf = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n\n private async serveTransformedFile(filePath: string): Promise<ResponseData> {\n // Delegate to the parent ViteDevServer's transform pipeline\n return super.handleRequest(\n \"GET\",\n `http://localhost/${filePath.replace(/^\\//, \"\")}`,\n {},\n );\n }\n\n private generateSvelteKitHtml(route: SvelteKitRoute): string {\n const pageSource = route.pagePath\n ? this.safeRead(route.pagePath)\n : \"<p>Page not found</p>\";\n const layoutSource = route.layoutPath\n ? this.safeRead(route.layoutPath)\n : null;\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>SvelteKit App</title>\n <script type=\"module\" src=\"/@vite/client\"></script>\n</head>\n<body>\n <div id=\"svelte-app\">\n ${layoutSource ? `<!-- Layout: ${route.layoutPath} -->` : \"\"}\n <!-- Page: ${route.pagePath} -->\n </div>\n <script type=\"module\" src=\"${route.pagePath}\"></script>\n</body>\n</html>`;\n }\n\n /**\n * Discover all routes in the SvelteKit routes directory.\n */\n discoverRoutes(): SvelteKitRoute[] {\n const routes: SvelteKitRoute[] = [];\n this.walkRoutes(this.routesDir, \"\", routes);\n return routes;\n }\n\n private walkRoutes(\n dir: string,\n prefix: string,\n routes: SvelteKitRoute[],\n ): void {\n try {\n const entries = this.vfs.readdirSync(dir);\n const hasPage = entries.some(e => e.startsWith(\"+page.\"));\n\n if (hasPage) {\n routes.push(this.resolvePageRoute(prefix || \"/\")!);\n }\n\n for (const entry of entries) {\n if (entry.startsWith(\"+\") || entry.startsWith(\".\")) continue;\n const full = pathShim.join(dir, entry);\n try {\n if (this.vfs.statSync(full).isDirectory()) {\n this.walkRoutes(full, `${prefix}/${entry}`, routes);\n }\n } catch {\n /* skip */\n }\n }\n } catch {\n /* skip */\n }\n }\n\n private safeRead(path: string): string {\n try {\n return this.vfs.readFileSync(path, \"utf8\");\n } catch {\n return \"\";\n }\n }\n}\n","/**\n * Remix-compatible dev server for jiki.\n *\n * Extends the ViteDevServer with Remix's file-based routing conventions:\n * - `routes/` directory for flat file routing\n * - `loader`/`action` exports for data loading\n * - Nested layouts via dot-delimited filenames (e.g. `routes/dashboard.settings.tsx`)\n */\n\nimport { ViteDevServer, type ViteDevServerOptions } from \"./vite-dev-server\";\nimport { MemFS } from \"../memfs\";\nimport { BufferImpl as Buffer } from \"../polyfills/stream\";\nimport * as pathShim from \"../polyfills/path\";\nimport type { ResponseData } from \"../dev-server\";\n\nexport interface RemixDevServerOptions extends ViteDevServerOptions {\n /** Routes directory (default: `/app/routes`). */\n routesDir?: string;\n /** App directory (default: `/app`). */\n appDir?: string;\n}\n\nexport interface RemixRoute {\n /** URL route path. */\n route: string;\n /** File path in the VFS. */\n filePath: string;\n /** Whether this is a layout route. */\n isLayout: boolean;\n}\n\nexport class RemixDevServer extends ViteDevServer {\n private routesDir: string;\n private appDir: string;\n\n constructor(vfs: MemFS, options: RemixDevServerOptions) {\n super(vfs, { ...options, framework: \"react\" });\n this.routesDir = options.routesDir || \"/app/routes\";\n this.appDir = options.appDir || \"/app\";\n }\n\n async handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer,\n ): Promise<ResponseData> {\n const parsed = new URL(url, \"http://localhost\");\n const pathname = decodeURIComponent(parsed.pathname);\n\n // Try to resolve as a Remix route\n const route = this.resolveRoute(pathname);\n if (route) {\n return this.addCorsHeaders(this.serveRemixPage(route, pathname));\n }\n\n // Fall through to ViteDevServer\n return super.handleRequest(method, url, headers, body);\n }\n\n /**\n * Resolve a URL pathname to a Remix route file.\n * Remix uses flat file routing with dot-delimited nesting:\n * - `routes/_index.tsx` → `/`\n * - `routes/about.tsx` → `/about`\n * - `routes/dashboard.settings.tsx` → `/dashboard/settings`\n */\n private resolveRoute(pathname: string): RemixRoute | null {\n // Try _index for root\n if (pathname === \"/\") {\n const indexFile = this.findRouteFile(\"_index\");\n if (indexFile)\n return { route: \"/\", filePath: indexFile, isLayout: false };\n }\n\n // Convert URL path to flat filename\n const segments = pathname.split(\"/\").filter(Boolean);\n const flatName = segments.join(\".\");\n\n const file = this.findRouteFile(flatName);\n if (file) return { route: pathname, filePath: file, isLayout: false };\n\n // Try index under a layout\n const indexName = flatName ? `${flatName}._index` : \"_index\";\n const indexFile = this.findRouteFile(indexName);\n if (indexFile)\n return { route: pathname, filePath: indexFile, isLayout: false };\n\n return null;\n }\n\n private findRouteFile(name: string): string | null {\n for (const ext of [\".tsx\", \".ts\", \".jsx\", \".js\"]) {\n const filePath = pathShim.join(this.routesDir, `${name}${ext}`);\n if (this.exists(filePath)) return filePath;\n }\n return null;\n }\n\n private serveRemixPage(route: RemixRoute, pathname: string): ResponseData {\n const rootPath = pathShim.join(this.appDir, \"root.tsx\");\n const hasRoot = this.exists(rootPath);\n\n const html = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Remix App</title>\n <script type=\"module\" src=\"/@vite/client\"></script>\n</head>\n<body>\n <div id=\"root\"></div>\n ${hasRoot ? `<script type=\"module\" src=\"${rootPath}\"></script>` : \"\"}\n <script type=\"module\" src=\"${route.filePath}\"></script>\n</body>\n</html>`;\n const buf = Buffer.from(html);\n return {\n statusCode: 200,\n statusMessage: \"OK\",\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Content-Length\": String(buf.length),\n \"Cache-Control\": \"no-cache\",\n },\n body: buf,\n };\n }\n\n /**\n * Discover all routes in the Remix routes directory.\n */\n discoverRoutes(): RemixRoute[] {\n const routes: RemixRoute[] = [];\n try {\n const entries = this.vfs.readdirSync(this.routesDir);\n for (const entry of entries) {\n if (!entry.match(/\\.(tsx?|jsx?)$/)) continue;\n const name = entry.replace(/\\.(tsx?|jsx?)$/, \"\");\n const filePath = pathShim.join(this.routesDir, entry);\n const route = this.flatNameToRoute(name);\n routes.push({ route, filePath, isLayout: name.includes(\"_layout\") });\n }\n } catch {\n /* routes dir may not exist */\n }\n return routes;\n }\n\n private flatNameToRoute(name: string): string {\n if (name === \"_index\") return \"/\";\n // Convert dots to slashes, handle special chars\n return (\n \"/\" +\n name\n .replace(/\\._index$/, \"\")\n .replace(/\\./g, \"/\")\n .replace(/^\\$/, \":\")\n .replace(/\\/\\$/g, \"/:\")\n );\n }\n}\n","/**\n * Server Bridge\n * Connects Service Worker requests to virtual HTTP servers running in-memory.\n * Provides the illusion of real HTTP by intercepting /__virtual__/{port}/* URLs.\n */\n\nimport { EventEmitter } from \"./polyfills/events\";\nimport { BufferImpl as Buffer } from \"./polyfills/stream\";\nimport { uint8ToBase64 } from \"./utils/binary-encoding\";\nimport type { ResponseData } from \"./dev-server\";\n\nconst _encoder = new TextEncoder();\n\nexport interface IVirtualServer {\n handleRequest(\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: Buffer | string,\n ): Promise<ResponseData>;\n handleStreamingRequest?(\n method: string,\n url: string,\n headers: Record<string, string>,\n body: Buffer | undefined,\n onStart: (\n statusCode: number,\n statusMessage: string,\n headers: Record<string, string>,\n ) => void,\n onChunk: (chunk: string | Uint8Array) => void,\n onEnd: () => void,\n ): Promise<void>;\n}\n\nexport interface VirtualServer {\n server: IVirtualServer;\n port: number;\n hostname: string;\n}\n\nexport interface BridgeOptions {\n baseUrl?: string;\n onServerReady?: (port: number, url: string) => void;\n}\n\nexport interface InitServiceWorkerOptions {\n swUrl?: string;\n}\n\n/** A queued request waiting for a server to become available on a port. */\ninterface QueuedRequest {\n port: number;\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: ArrayBuffer;\n resolve: (response: ResponseData) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nexport class ServerBridge extends EventEmitter {\n static DEBUG = false;\n /** Maximum time (ms) a queued request will wait for a server to become available. */\n static REQUEST_QUEUE_TIMEOUT = 10_000;\n private servers: Map<number, VirtualServer> = new Map();\n private baseUrl: string;\n private options: BridgeOptions;\n private messageChannel: MessageChannel | null = null;\n private serviceWorkerReady = false;\n private keepaliveInterval: ReturnType<typeof setInterval> | null = null;\n /** Requests queued while waiting for a server to register on a given port. */\n private requestQueue: QueuedRequest[] = [];\n\n constructor(options: BridgeOptions = {}) {\n super();\n this.options = options;\n\n if (typeof location !== \"undefined\") {\n this.baseUrl =\n options.baseUrl || `${location.protocol}//${location.host}`;\n } else {\n this.baseUrl = options.baseUrl || \"http://localhost\";\n }\n }\n\n registerServer(\n server: IVirtualServer,\n port: number,\n hostname = \"0.0.0.0\",\n ): void {\n this.servers.set(port, { server, port, hostname });\n\n const url = this.getServerUrl(port);\n this.emit(\"server-ready\", port, url);\n this.options.onServerReady?.(port, url);\n\n this.notifyServiceWorker(\"server-registered\", { port, hostname });\n\n // Drain queued requests waiting for this port\n this.drainQueue(port);\n }\n\n /**\n * Process any queued requests waiting for a server on the given port.\n */\n private drainQueue(port: number): void {\n const pending = this.requestQueue.filter(q => q.port === port);\n this.requestQueue = this.requestQueue.filter(q => q.port !== port);\n\n for (const req of pending) {\n clearTimeout(req.timer);\n this.handleRequest(req.port, req.method, req.url, req.headers, req.body)\n .then(req.resolve)\n .catch(req.reject);\n }\n }\n\n unregisterServer(port: number): void {\n this.servers.delete(port);\n this.notifyServiceWorker(\"server-unregistered\", { port });\n }\n\n getServerUrl(port: number): string {\n return `${this.baseUrl}/__virtual__/${port}`;\n }\n\n getServerPorts(): number[] {\n return [...this.servers.keys()];\n }\n\n async handleRequest(\n port: number,\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: ArrayBuffer,\n ): Promise<ResponseData> {\n const entry = this.servers.get(port);\n if (!entry) {\n // Queue the request and wait for a server to register on this port\n return new Promise<ResponseData>((resolve, reject) => {\n const timer = setTimeout(() => {\n // Remove from queue on timeout\n this.requestQueue = this.requestQueue.filter(q => q !== queued);\n resolve({\n statusCode: 503,\n statusMessage: \"Service Unavailable\",\n headers: { \"Content-Type\": \"text/plain\" },\n body: Buffer.from(\n `No server listening on port ${port} (timed out after ${ServerBridge.REQUEST_QUEUE_TIMEOUT}ms)`,\n ),\n });\n }, ServerBridge.REQUEST_QUEUE_TIMEOUT);\n\n const queued: QueuedRequest = {\n port,\n method,\n url,\n headers,\n body,\n resolve,\n reject,\n timer,\n };\n this.requestQueue.push(queued);\n });\n }\n\n try {\n const bodyBuffer = body ? Buffer.from(new Uint8Array(body)) : undefined;\n return await entry.server.handleRequest(method, url, headers, bodyBuffer);\n } catch (error) {\n const msg =\n error instanceof Error ? error.message : \"Internal Server Error\";\n return {\n statusCode: 500,\n statusMessage: \"Internal Server Error\",\n headers: { \"Content-Type\": \"text/plain\" },\n body: Buffer.from(msg),\n };\n }\n }\n\n async initServiceWorker(options?: InitServiceWorkerOptions): Promise<void> {\n if (typeof navigator === \"undefined\" || !(\"serviceWorker\" in navigator)) {\n throw new Error(\"Service Workers not supported\");\n }\n\n const swUrl = options?.swUrl ?? \"/__sw__.js\";\n\n const controllerReady = navigator.serviceWorker.controller\n ? Promise.resolve()\n : new Promise<void>(resolve => {\n navigator.serviceWorker.addEventListener(\n \"controllerchange\",\n () => resolve(),\n { once: true },\n );\n });\n\n const registration = await navigator.serviceWorker.register(swUrl, {\n scope: \"/\",\n });\n\n const sw =\n registration.active || registration.waiting || registration.installing;\n if (!sw) throw new Error(\"Service Worker registration failed\");\n\n await new Promise<void>(resolve => {\n if (sw.state === \"activated\") {\n resolve();\n } else {\n const handler = () => {\n if (sw.state === \"activated\") {\n sw.removeEventListener(\"statechange\", handler);\n resolve();\n }\n };\n sw.addEventListener(\"statechange\", handler);\n }\n });\n\n this.messageChannel = new MessageChannel();\n this.messageChannel.port1.onmessage =\n this.handleServiceWorkerMessage.bind(this);\n\n sw.postMessage({ type: \"init\", port: this.messageChannel.port2 }, [\n this.messageChannel.port2,\n ]);\n\n await controllerReady;\n\n const reinit = () => {\n if (navigator.serviceWorker.controller) {\n this.messageChannel = new MessageChannel();\n this.messageChannel.port1.onmessage =\n this.handleServiceWorkerMessage.bind(this);\n navigator.serviceWorker.controller.postMessage(\n { type: \"init\", port: this.messageChannel.port2 },\n [this.messageChannel.port2],\n );\n }\n };\n navigator.serviceWorker.addEventListener(\"controllerchange\", reinit);\n navigator.serviceWorker.addEventListener(\"message\", event => {\n if (event.data?.type === \"sw-needs-init\") reinit();\n });\n\n this.keepaliveInterval = setInterval(() => {\n this.messageChannel?.port1.postMessage({ type: \"keepalive\" });\n }, 20_000);\n\n this.serviceWorkerReady = true;\n this.emit(\"sw-ready\");\n }\n\n private async handleServiceWorkerMessage(event: MessageEvent): Promise<void> {\n const { type, id, data } = event.data;\n\n if (type === \"request\") {\n const { port, method, url, headers, body, streaming } = data;\n try {\n if (streaming) {\n await this.handleStreamingBridge(\n id,\n port,\n method,\n url,\n headers,\n body,\n );\n } else {\n const response = await this.handleRequest(\n port,\n method,\n url,\n headers,\n body,\n );\n let bodyBase64 = \"\";\n if (response.body && response.body.length > 0) {\n const bytes =\n response.body instanceof Uint8Array\n ? response.body\n : new Uint8Array(0);\n bodyBase64 = uint8ToBase64(bytes);\n }\n this.messageChannel?.port1.postMessage({\n type: \"response\",\n id,\n data: {\n statusCode: response.statusCode,\n statusMessage: response.statusMessage,\n headers: response.headers,\n bodyBase64,\n },\n });\n }\n } catch (error) {\n this.messageChannel?.port1.postMessage({\n type: \"response\",\n id,\n error: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n }\n\n private async handleStreamingBridge(\n id: number,\n port: number,\n method: string,\n url: string,\n headers: Record<string, string>,\n body?: ArrayBuffer,\n ): Promise<void> {\n const entry = this.servers.get(port);\n if (!entry) {\n this.messageChannel?.port1.postMessage({\n type: \"stream-start\",\n id,\n data: {\n statusCode: 503,\n statusMessage: \"Service Unavailable\",\n headers: {},\n },\n });\n this.messageChannel?.port1.postMessage({ type: \"stream-end\", id });\n return;\n }\n\n const bodyBuffer = body ? Buffer.from(new Uint8Array(body)) : undefined;\n\n if (typeof entry.server.handleStreamingRequest === \"function\") {\n await entry.server.handleStreamingRequest(\n method,\n url,\n headers,\n bodyBuffer,\n (statusCode, statusMessage, respHeaders) => {\n this.messageChannel?.port1.postMessage({\n type: \"stream-start\",\n id,\n data: { statusCode, statusMessage, headers: respHeaders },\n });\n },\n chunk => {\n const bytes =\n typeof chunk === \"string\" ? _encoder.encode(chunk) : chunk;\n this.messageChannel?.port1.postMessage({\n type: \"stream-chunk\",\n id,\n data: { chunkBase64: uint8ToBase64(bytes) },\n });\n },\n () => {\n this.messageChannel?.port1.postMessage({\n type: \"stream-end\",\n id,\n });\n },\n );\n } else {\n const response = await entry.server.handleRequest(\n method,\n url,\n headers,\n bodyBuffer,\n );\n this.messageChannel?.port1.postMessage({\n type: \"stream-start\",\n id,\n data: {\n statusCode: response.statusCode,\n statusMessage: response.statusMessage,\n headers: response.headers,\n },\n });\n if (response.body && response.body.length > 0) {\n const bytes =\n response.body instanceof Uint8Array\n ? response.body\n : new Uint8Array(0);\n this.messageChannel?.port1.postMessage({\n type: \"stream-chunk\",\n id,\n data: { chunkBase64: uint8ToBase64(bytes) },\n });\n }\n this.messageChannel?.port1.postMessage({ type: \"stream-end\", id });\n }\n }\n\n createFetchHandler(): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const url = new URL(request.url);\n const match = url.pathname.match(/^\\/__virtual__\\/(\\d+)(\\/.*)?$/);\n if (!match) throw new Error(\"Not a virtual server request\");\n\n const port = parseInt(match[1], 10);\n const path = match[2] || \"/\";\n\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n let body: ArrayBuffer | undefined;\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n body = await request.arrayBuffer();\n }\n\n const response = await this.handleRequest(\n port,\n request.method,\n path + url.search,\n headers,\n body,\n );\n\n return new Response(response.body, {\n status: response.statusCode,\n statusText: response.statusMessage,\n headers: response.headers,\n });\n };\n }\n\n private notifyServiceWorker(type: string, data: unknown): void {\n if (this.serviceWorkerReady && this.messageChannel) {\n this.messageChannel.port1.postMessage({ type, data });\n }\n }\n\n dispose(): void {\n if (this.keepaliveInterval) {\n clearInterval(this.keepaliveInterval);\n this.keepaliveInterval = null;\n }\n // Clear any queued requests\n for (const req of this.requestQueue) {\n clearTimeout(req.timer);\n req.resolve({\n statusCode: 503,\n statusMessage: \"Service Unavailable\",\n headers: { \"Content-Type\": \"text/plain\" },\n body: Buffer.from(\"Server bridge disposed\"),\n });\n }\n this.requestQueue = [];\n this.servers.clear();\n this.serviceWorkerReady = false;\n this.messageChannel = null;\n }\n}\n\nlet globalBridge: ServerBridge | null = null;\n\nexport function getServerBridge(options?: BridgeOptions): ServerBridge {\n if (!globalBridge) {\n globalBridge = new ServerBridge(options);\n }\n return globalBridge;\n}\n\nexport function resetServerBridge(): void {\n if (globalBridge) {\n globalBridge.dispose();\n globalBridge = null;\n }\n}\n","import { MemFS } from \"./memfs\";\nimport { transformEsmToCjs, removeShebang } from \"./code-transform\";\nimport { isBuiltinModule } from \"./builtins\";\nimport * as pathShim from \"./polyfills/path\";\nimport type { PackageJson } from \"./types/package-json\";\nimport { resolve as resolveExports } from \"resolve.exports\";\n\nconst FILE_EXTENSIONS = [\n \".js\",\n \".ts\",\n \".tsx\",\n \".jsx\",\n \".json\",\n \".node\",\n \".mjs\",\n \".cjs\",\n];\nconst INDEX_NAMES = [\n \"index.js\",\n \"index.ts\",\n \"index.tsx\",\n \"index.json\",\n \"index.node\",\n];\n\nexport interface BrowserBundle {\n modules: Map<string, string>;\n entryPath: string;\n depMap: Map<string, string>;\n}\n\nexport interface BundleError {\n packageName: string;\n message: string;\n}\n\nfunction readPkg(vfs: MemFS, pkgPath: string): PackageJson | null {\n try {\n if (!vfs.existsSync(pkgPath)) return null;\n return JSON.parse(vfs.readFileSync(pkgPath, \"utf8\")) as PackageJson;\n } catch {\n return null;\n }\n}\n\nfunction probeFile(vfs: MemFS, base: string): string | null {\n if (vfs.existsSync(base)) {\n const st = vfs.statSync(base);\n if (st.isFile()) return base;\n if (st.isDirectory()) {\n const pkg = readPkg(vfs, pathShim.join(base, \"package.json\"));\n if (pkg) {\n for (const field of [\"main\", \"module\"] as const) {\n const val = pkg[field];\n if (typeof val === \"string\") {\n const hit = probeFile(vfs, pathShim.join(base, val));\n if (hit) return hit;\n }\n }\n }\n for (const idx of INDEX_NAMES) {\n const p = pathShim.join(base, idx);\n if (vfs.existsSync(p)) return p;\n }\n }\n }\n for (const ext of FILE_EXTENSIONS) {\n const p = base + ext;\n if (vfs.existsSync(p)) return p;\n }\n return null;\n}\n\n/**\n * Apply the `browser` field (object form) remapping for a given require id.\n * Returns the remapped path, `false` (meaning \"ignore this module\"), or `null`\n * (no remapping applies).\n */\nfunction applyBrowserFieldRemap(\n browserMap: Record<string, string | false>,\n id: string,\n pkgRoot: string,\n): string | false | null {\n if (id in browserMap) {\n const mapped = browserMap[id];\n if (mapped === false) return false;\n return pathShim.join(pkgRoot, mapped);\n }\n const relative = \"./\" + id;\n if (relative in browserMap) {\n const mapped = browserMap[relative];\n if (mapped === false) return false;\n return pathShim.join(pkgRoot, mapped);\n }\n return null;\n}\n\nfunction resolvePackageEntry(\n vfs: MemFS,\n pkgRoot: string,\n pkgName: string,\n subpath: string,\n): string | null {\n const pkg = readPkg(vfs, pathShim.join(pkgRoot, \"package.json\"));\n if (pkg) {\n if (pkg.exports) {\n const target = subpath ? `${pkgName}/${subpath}` : pkgName;\n for (const cond of [\n { browser: true, require: true } as const,\n { require: true } as const,\n { browser: true, import: true } as const,\n { import: true } as const,\n ]) {\n try {\n const resolved = resolveExports(pkg, target, cond);\n if (resolved?.length) {\n const hit = probeFile(vfs, pathShim.join(pkgRoot, resolved[0]));\n if (hit) return hit;\n }\n } catch {\n /* continue */\n }\n }\n }\n if (subpath) {\n const hit = probeFile(vfs, pathShim.join(pkgRoot, subpath));\n if (hit) return hit;\n }\n\n if (typeof pkg.browser === \"object\" && pkg.browser !== null) {\n const mainField = pkg.main || \"index.js\";\n const remap = applyBrowserFieldRemap(\n pkg.browser as Record<string, string | false>,\n mainField,\n pkgRoot,\n );\n if (typeof remap === \"string\") {\n const hit = probeFile(vfs, remap);\n if (hit) return hit;\n }\n }\n if (typeof pkg.browser === \"string\") {\n const hit = probeFile(vfs, pathShim.join(pkgRoot, pkg.browser));\n if (hit) return hit;\n }\n if (pkg.main) {\n const hit = probeFile(vfs, pathShim.join(pkgRoot, pkg.main));\n if (hit) return hit;\n }\n if (pkg.module) {\n const hit = probeFile(vfs, pathShim.join(pkgRoot, pkg.module));\n if (hit) return hit;\n }\n }\n return probeFile(vfs, subpath ? pathShim.join(pkgRoot, subpath) : pkgRoot);\n}\n\nexport function extractPackageName(id: string): string {\n const segments = id.split(\"/\");\n if (segments[0].startsWith(\"@\") && segments.length > 1) {\n return `${segments[0]}/${segments[1]}`;\n }\n return segments[0];\n}\n\nfunction resolveModuleId(\n vfs: MemFS,\n id: string,\n fromDir: string,\n): string | null {\n if (id.startsWith(\"./\") || id.startsWith(\"../\") || id.startsWith(\"/\")) {\n const abs = id.startsWith(\"/\") ? id : pathShim.resolve(fromDir, id);\n return probeFile(vfs, abs);\n }\n\n const pkgName = extractPackageName(id);\n const segments = id.split(\"/\");\n const subpath = segments.slice(pkgName.split(\"/\").length).join(\"/\");\n\n let dir = fromDir;\n while (true) {\n const nm = pathShim.join(dir, \"node_modules\");\n if (vfs.existsSync(nm)) {\n const pkgRoot = pathShim.join(nm, pkgName);\n const hit = resolvePackageEntry(vfs, pkgRoot, pkgName, subpath);\n if (hit) return hit;\n }\n if (dir === \"/\") break;\n dir = pathShim.dirname(dir);\n }\n return null;\n}\n\nconst REQUIRE_PATTERN = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\nconst DYNAMIC_IMPORT_PATTERN = /__dynamicImport\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n/**\n * Bundle a package from the VFS for browser consumption.\n * Reads the package entry point, transforms ESM to CJS, and recursively\n * bundles all local dependencies. External packages and Node builtins are skipped.\n */\nexport function bundlePackageForBrowser(\n vfs: MemFS,\n packageName: string,\n externals: Set<string>,\n): BrowserBundle {\n const modules = new Map<string, string>();\n const visited = new Set<string>();\n const depMap = new Map<string, string>();\n\n const entryPath = resolveModuleId(vfs, packageName, \"/\");\n if (!entryPath) {\n throw new Error(\n `Cannot resolve package \"${packageName}\" from /node_modules`,\n );\n }\n\n function walk(filePath: string): void {\n if (visited.has(filePath)) return;\n visited.add(filePath);\n\n let source: string;\n try {\n const raw = vfs.readFileSync(filePath, \"utf8\");\n source = removeShebang(raw);\n } catch {\n return;\n }\n\n if (filePath.endsWith(\".json\")) {\n modules.set(filePath, `module.exports = ${source};`);\n return;\n }\n\n let transformed: string;\n try {\n transformed = transformEsmToCjs(source, filePath);\n } catch {\n transformed = source;\n }\n modules.set(filePath, transformed);\n\n const depPatterns = [\n new RegExp(REQUIRE_PATTERN.source, \"g\"),\n new RegExp(DYNAMIC_IMPORT_PATTERN.source, \"g\"),\n ];\n for (const pattern of depPatterns) {\n let match;\n while ((match = pattern.exec(transformed)) !== null) {\n const dep = match[1];\n\n if (isBuiltinModule(dep)) continue;\n\n const depPkgName = extractPackageName(dep);\n if (externals.has(depPkgName)) continue;\n\n const resolved = resolveModuleId(vfs, dep, pathShim.dirname(filePath));\n if (resolved) {\n if (\n !dep.startsWith(\"./\") &&\n !dep.startsWith(\"../\") &&\n !dep.startsWith(\"/\")\n ) {\n depMap.set(dep, resolved);\n }\n walk(resolved);\n }\n }\n }\n }\n\n walk(entryPath);\n return { modules, entryPath, depMap };\n}\n\n/**\n * Escape code for safe embedding inside an HTML `<script>` tag.\n * Only needs to prevent premature closing of the script element.\n */\nfunction escapeForScriptEmbed(code: string): string {\n return code.replace(/<\\/script>/gi, \"<\\\\/script>\");\n}\n\n/**\n * Generate a `<script>` containing a require() shim and all bundled modules.\n * Globals map package names to window properties (e.g. { \"react\": \"React\" }).\n */\nexport function generateRequireScript(\n bundles: Map<string, BrowserBundle>,\n globals: Record<string, string>,\n): string {\n const pkgMap: Record<string, string> = {};\n const dedupedModules = new Map<string, string>();\n\n for (const [pkgName, bundle] of bundles) {\n pkgMap[pkgName] = bundle.entryPath;\n for (const [specifier, resolvedPath] of bundle.depMap) {\n if (!(specifier in pkgMap)) {\n pkgMap[specifier] = resolvedPath;\n }\n }\n for (const [modPath, code] of bundle.modules) {\n dedupedModules.set(modPath, code);\n }\n }\n\n if (\"react\" in globals) {\n pkgMap[\"react/jsx-runtime\"] = \"__jsx_runtime__\";\n pkgMap[\"react/jsx-dev-runtime\"] = \"__jsx_runtime__\";\n }\n\n const allModules = [...dedupedModules.entries()].map(([path, code]) => ({\n path,\n code,\n }));\n\n const globalsJson = JSON.stringify(globals);\n const pkgMapJson = JSON.stringify(pkgMap);\n\n const moduleRegistrations = allModules\n .map(({ path, code }) => {\n const escaped = escapeForScriptEmbed(code);\n return (\n \"__m[\" +\n JSON.stringify(path) +\n \"] = function(module, exports, require) {\\n\" +\n escaped +\n \"\\n};\"\n );\n })\n .join(\"\\n\");\n\n const jsxRuntimeShim =\n \"react\" in globals\n ? '\\n __m[\"__jsx_runtime__\"] = function(module, exports, require) {\\n' +\n ' var React = require(\"react\");\\n' +\n \" function jsx(type, props, key) {\\n\" +\n \" if (key !== undefined && props) props.key = key;\\n\" +\n \" return React.createElement(type, props);\\n\" +\n \" }\\n\" +\n \" exports.jsx = jsx;\\n\" +\n \" exports.jsxs = jsx;\\n\" +\n \" exports.jsxDEV = jsx;\\n\" +\n \" exports.Fragment = React.Fragment;\\n\" +\n \" };\\n\"\n : \"\";\n\n return (\n \"<script>\\n\" +\n \"(function() {\\n\" +\n \" var __m = {};\\n\" +\n \" var __c = {};\\n\" +\n \" var __pkg = \" +\n pkgMapJson +\n \";\\n\" +\n \" var __g = \" +\n globalsJson +\n \";\\n\" +\n ' var process = { env: { NODE_ENV: \"production\" } };\\n' +\n \"\\n\" +\n \" function __dirname(p) {\\n\" +\n ' var idx = p.lastIndexOf(\"/\");\\n' +\n ' return idx > 0 ? p.substring(0, idx) : \"/\";\\n' +\n \" }\\n\" +\n \"\\n\" +\n \" function __resolve(from, rel) {\\n\" +\n ' var parts = from.split(\"/\").filter(Boolean);\\n' +\n ' var segs = rel.split(\"/\");\\n' +\n \" for (var i = 0; i < segs.length; i++) {\\n\" +\n ' if (segs[i] === \"..\") parts.pop();\\n' +\n ' else if (segs[i] !== \".\") parts.push(segs[i]);\\n' +\n \" }\\n\" +\n ' return \"/\" + parts.join(\"/\");\\n' +\n \" }\\n\" +\n \"\\n\" +\n \" function __probe(id) {\\n\" +\n \" if (__m[id]) return id;\\n\" +\n ' var exts = [\".js\", \".cjs\", \".mjs\", \".json\", \"/index.js\", \"/index.cjs\", \"/index.mjs\"];\\n' +\n \" for (var i = 0; i < exts.length; i++) {\\n\" +\n \" if (__m[id + exts[i]]) return id + exts[i];\\n\" +\n \" }\\n\" +\n \" return null;\\n\" +\n \" }\\n\" +\n \"\\n\" +\n \" function require(id) {\\n\" +\n \" if (id in __g) return window[__g[id]];\\n\" +\n \"\\n\" +\n \" var resolved = __pkg[id] || id;\\n\" +\n \" if (!__m[resolved]) {\\n\" +\n \" var probed = __probe(resolved);\\n\" +\n \" if (probed) resolved = probed;\\n\" +\n \" }\\n\" +\n \"\\n\" +\n \" if (__c[resolved]) return __c[resolved].exports;\\n\" +\n \"\\n\" +\n \" var fn = __m[resolved];\\n\" +\n \" if (!fn) {\\n\" +\n \" if (id in __g) return window[__g[id]];\\n\" +\n ' console.warn(\"[require] Cannot find module: \" + id + \" (resolved: \" + resolved + \")\");\\n' +\n \" return {};\\n\" +\n \" }\\n\" +\n \" var mod = { exports: {} };\\n\" +\n \" __c[resolved] = mod;\\n\" +\n \" try {\\n\" +\n \" fn(mod, mod.exports, function localRequire(dep) {\\n\" +\n ' if (dep.startsWith(\".\") || dep.startsWith(\"/\")) {\\n' +\n ' var base = dep.startsWith(\"/\") ? dep : __resolve(__dirname(resolved), dep);\\n' +\n \" var found = __probe(base);\\n\" +\n \" if (found) return require(found);\\n\" +\n ' console.warn(\"[require] Cannot resolve: \" + dep + \" from \" + resolved);\\n' +\n \" return {};\\n\" +\n \" }\\n\" +\n \" return require(dep);\\n\" +\n \" });\\n\" +\n \" } catch (e) {\\n\" +\n ' console.error(\"[require] Error executing module: \" + resolved, e);\\n' +\n \" }\\n\" +\n \" return mod.exports;\\n\" +\n \" }\\n\" +\n \"\\n\" +\n \" \" +\n moduleRegistrations +\n \"\\n\" +\n jsxRuntimeShim +\n \"\\n\" +\n \" window.require = require;\\n\" +\n \" window.__dynamicImport = function(id) {\\n\" +\n \" return Promise.resolve().then(function() {\\n\" +\n \" var mod = require(id);\\n\" +\n ' if (mod && typeof mod === \"object\" && (\"default\" in mod || \"__esModule\" in mod)) {\\n' +\n \" return mod;\\n\" +\n \" }\\n\" +\n ' return Object.assign({ default: mod }, mod && typeof mod === \"object\" ? mod : {});\\n' +\n \" });\\n\" +\n \" };\\n\" +\n \"})();\\n\" +\n \"</script>\"\n );\n}\n\n/**\n * Transform ES module `import` statements into `window.require()` calls.\n * Used to pre-process component source before host-side JSX transpilation\n * via esbuild. The output is plain JS that can run in a regular `<script>` tag.\n *\n * Uses `var` (not `const`) so declarations hoist to function/global scope.\n * Uses `window.require` (not bare `require`) to avoid strict-mode scoping issues.\n */\nexport function preprocessImports(code: string): string {\n return code\n .replace(\n /^import\\s+type\\s+\\{[^}]*\\}\\s+from\\s+['\"][^'\"]+['\"]\\s*;?\\s*$/gm,\n \"\",\n )\n .replace(\n /^import\\s+(\\w+)\\s*,\\s*\\{([^}]+)\\}\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/gm,\n (_, def, named, mod) =>\n `var __imp = window.require(\"${mod}\"); var ${def} = __imp && __imp.__esModule ? __imp.default : __imp; var {${named}} = __imp;`,\n )\n .replace(\n /^import\\s+\\{([^}]+)\\}\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/gm,\n (_, imports, mod) => `var {${imports}} = window.require(\"${mod}\");`,\n )\n .replace(\n /^import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/gm,\n (_, name, mod) => `var ${name} = window.require(\"${mod}\");`,\n )\n .replace(\n /^import\\s+(\\w+)\\s+from\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/gm,\n (_, name, mod) =>\n `var ${name} = (function(m){return m&&m.__esModule?m.default:m})(window.require(\"${mod}\"));`,\n )\n .replace(/^import\\s+['\"][^'\"]+['\"]\\s*;?\\s*$/gm, \"\");\n}\n\n/**\n * Scan source files for bare-specifier imports (e.g. `import { X } from 'pkg'`\n * or `import { Y } from '@scope/pkg/subpath'`).\n * Returns a set of unique full import specifiers found, preserving subpaths\n * so they can be individually resolved and bundled.\n * Handles: named imports, default imports, namespace imports, multi-line destructuring.\n * Skips: `import type` (TS type-only imports), side-effect imports without a specifier.\n */\nexport function scanBareImports(sources: string[]): Set<string> {\n const found = new Set<string>();\n const pattern =\n /import\\s+(?:type\\s+)?(?:[\\w{},*\\s]+)\\s+from\\s+['\"]([^./][^'\"]*)['\"]/g;\n for (const src of sources) {\n let match;\n const re = new RegExp(pattern.source, \"g\");\n while ((match = re.exec(src)) !== null) {\n const full = match[0];\n if (/^import\\s+type\\s/.test(full)) continue;\n found.add(match[1]);\n }\n }\n return found;\n}\n","import type { NodeError } from \"./fs-errors\";\nimport type { BundleError } from \"./browser-bundle\";\n\nexport type ErrorCategory =\n | \"build\"\n | \"runtime\"\n | \"bundle\"\n | \"install\"\n | \"filesystem\";\n\nexport interface ContainerError {\n id: string;\n category: ErrorCategory;\n title: string;\n message: string;\n file?: string;\n line?: number;\n column?: number;\n stack?: string;\n timestamp: number;\n raw?: unknown;\n /** Actionable fix suggestions for the error. */\n suggestions?: string[];\n}\n\nlet errorSeq = 0;\n\nfunction uid(): string {\n return `err_${++errorSeq}_${Date.now().toString(36)}`;\n}\n\nconst FRIENDLY_FS_CODES: Record<string, string> = {\n ENOENT: \"File or directory not found\",\n ENOTDIR: \"Path is not a directory\",\n EISDIR: \"Expected a file but found a directory\",\n EEXIST: \"File already exists\",\n ENOTEMPTY: \"Directory is not empty\",\n ELOOP: \"Too many symbolic links\",\n};\n\nconst RUNTIME_ERROR_TITLES: Record<string, string> = {\n ReferenceError: \"Reference Error\",\n TypeError: \"Type Error\",\n SyntaxError: \"Syntax Error\",\n RangeError: \"Range Error\",\n URIError: \"URI Error\",\n EvalError: \"Eval Error\",\n};\n\nfunction extractLocation(stack?: string): {\n file?: string;\n line?: number;\n column?: number;\n} {\n if (!stack) return {};\n const match = stack.match(/(?:at\\s+.+?\\s+\\(|at\\s+)(.+?):(\\d+):(\\d+)/);\n if (match) {\n return {\n file: match[1],\n line: parseInt(match[2], 10),\n column: parseInt(match[3], 10),\n };\n }\n const simpleMatch = stack.match(/(.+?):(\\d+):(\\d+)/);\n if (simpleMatch) {\n return {\n file: simpleMatch[1],\n line: parseInt(simpleMatch[2], 10),\n column: parseInt(simpleMatch[3], 10),\n };\n }\n return {};\n}\n\nfunction parseBuildError(raw: unknown): Partial<ContainerError> {\n if (raw && typeof raw === \"object\" && \"text\" in raw) {\n const msg = raw as {\n text?: string;\n location?: {\n file?: string;\n line?: number;\n column?: number;\n lineText?: string;\n };\n };\n const loc = msg.location;\n let message = msg.text || \"Unknown build error\";\n if (loc?.lineText) {\n message += `\\n\\n ${loc.line} | ${loc.lineText}`;\n if (loc.column != null) {\n message += `\\n ${\" \".repeat(String(loc.line).length)} | ${\" \".repeat(loc.column)}^`;\n }\n }\n return {\n title: \"Build Error\",\n message,\n file: loc?.file,\n line: loc?.line,\n column: loc?.column,\n };\n }\n\n if (raw instanceof Error) {\n const loc = extractLocation(raw.stack);\n const isTranspile =\n raw.message.includes(\"Transform failed\") ||\n raw.message.includes(\"Parse error\");\n return {\n title: isTranspile ? \"Transpilation Error\" : \"Build Error\",\n message: raw.message,\n stack: raw.stack,\n ...loc,\n };\n }\n\n return {\n title: \"Build Error\",\n message: String(raw),\n };\n}\n\nfunction parseRuntimeError(raw: unknown): Partial<ContainerError> {\n if (raw instanceof Error) {\n const errorType = raw.constructor.name;\n const loc = extractLocation(raw.stack);\n return {\n title: RUNTIME_ERROR_TITLES[errorType] || \"Runtime Error\",\n message: raw.message,\n stack: raw.stack,\n ...loc,\n };\n }\n\n if (raw && typeof raw === \"object\" && \"message\" in raw) {\n const err = raw as {\n message: string;\n name?: string;\n stack?: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n };\n const loc = err.filename\n ? { file: err.filename, line: err.lineno, column: err.colno }\n : extractLocation(err.stack);\n return {\n title: RUNTIME_ERROR_TITLES[err.name || \"\"] || \"Runtime Error\",\n message: err.message,\n stack: err.stack,\n ...loc,\n };\n }\n\n return {\n title: \"Runtime Error\",\n message: String(raw),\n };\n}\n\nfunction parseBundleError(raw: unknown): Partial<ContainerError> {\n if (raw && typeof raw === \"object\" && \"packageName\" in raw) {\n const err = raw as BundleError;\n return {\n title: \"Bundle Error\",\n message: `Failed to bundle \"${err.packageName}\": ${err.message}`,\n };\n }\n\n if (raw instanceof Error) {\n const pkgMatch = raw.message.match(/Cannot resolve package \"([^\"]+)\"/);\n return {\n title: pkgMatch ? `Cannot resolve \"${pkgMatch[1]}\"` : \"Bundle Error\",\n message: raw.message,\n stack: raw.stack,\n };\n }\n\n return {\n title: \"Bundle Error\",\n message: String(raw),\n };\n}\n\nfunction parseInstallError(raw: unknown): Partial<ContainerError> {\n if (raw instanceof Error) {\n const versionMatch = raw.message.match(/No matching version for (.+)/);\n const notFoundMatch = raw.message.match(/Version (.+?) not found for (.+)/);\n\n let title = \"Install Error\";\n if (versionMatch) title = `No matching version: ${versionMatch[1]}`;\n else if (notFoundMatch)\n title = `Version not found: ${notFoundMatch[2]}@${notFoundMatch[1]}`;\n else if (raw.message.includes(\"fetch\")) title = \"Network Error\";\n\n return {\n title,\n message: raw.message,\n stack: raw.stack,\n };\n }\n\n return {\n title: \"Install Error\",\n message: String(raw),\n };\n}\n\nfunction parseFilesystemError(raw: unknown): Partial<ContainerError> {\n const nodeErr = raw as Partial<NodeError>;\n if (nodeErr && typeof nodeErr === \"object\" && nodeErr.code) {\n const friendly = FRIENDLY_FS_CODES[nodeErr.code] || nodeErr.code;\n return {\n title: friendly,\n message: nodeErr.path\n ? `${friendly}: ${nodeErr.path}`\n : nodeErr.message || friendly,\n file: nodeErr.path,\n };\n }\n\n if (raw instanceof Error) {\n return {\n title: \"Filesystem Error\",\n message: raw.message,\n stack: raw.stack,\n };\n }\n\n return {\n title: \"Filesystem Error\",\n message: String(raw),\n };\n}\n\nconst PARSERS: Record<\n ErrorCategory,\n (raw: unknown) => Partial<ContainerError>\n> = {\n build: parseBuildError,\n runtime: parseRuntimeError,\n bundle: parseBundleError,\n install: parseInstallError,\n filesystem: parseFilesystemError,\n};\n\n/**\n * Generate actionable fix suggestions based on the error message.\n */\nfunction generateSuggestions(\n category: ErrorCategory,\n message: string,\n): string[] {\n const suggestions: string[] = [];\n const msg = message.toLowerCase();\n\n // \"Cannot find module 'X'\" → suggest npm install\n const cannotFindModule = message.match(/Cannot find module ['\"]([^'\"]+)['\"]/);\n if (cannotFindModule) {\n const mod = cannotFindModule[1];\n if (!mod.startsWith(\".\") && !mod.startsWith(\"/\")) {\n const pkg =\n mod.includes(\"/\") && mod.startsWith(\"@\")\n ? mod.split(\"/\").slice(0, 2).join(\"/\")\n : mod.split(\"/\")[0];\n suggestions.push(`Run: npm install ${pkg}`);\n } else {\n suggestions.push(`Check that the file \"${mod}\" exists`);\n }\n }\n\n // \"X is not defined\" → suggest import\n const notDefined = message.match(/(\\w+) is not defined/);\n if (notDefined && category === \"runtime\") {\n const name = notDefined[1];\n if (/^[A-Z]/.test(name)) {\n suggestions.push(`Did you forget to import ${name}?`);\n }\n }\n\n // Transpiler not initialized\n if (msg.includes(\"transpiler not initialized\")) {\n suggestions.push(\n \"Call await container.init() before running TypeScript files\",\n );\n }\n\n // File not pre-transpiled\n if (msg.includes(\"has not been pre-transpiled\")) {\n suggestions.push(\n \"Call await container.init() to initialize the transpiler\",\n );\n suggestions.push(\"Or use kernel.prepareFile() to pre-transpile the file\");\n }\n\n // JSON parse errors\n if (msg.includes(\"unexpected token\") && msg.includes(\"json\")) {\n suggestions.push(\n \"Check the JSON file for syntax errors (trailing commas, missing quotes)\",\n );\n }\n\n // Network/fetch errors during install\n if (\n category === \"install\" &&\n (msg.includes(\"fetch\") || msg.includes(\"network\"))\n ) {\n suggestions.push(\"Check your internet connection\");\n suggestions.push(\"The npm registry may be temporarily unavailable\");\n }\n\n // Version not found\n if (msg.includes(\"version\") && msg.includes(\"not found\")) {\n suggestions.push(\n \"Check that the version exists: npm view <package> versions\",\n );\n suggestions.push('Try using \"latest\" instead of a specific version');\n }\n\n // Sandbox errors\n if (msg.includes(\"[sandbox]\")) {\n if (msg.includes(\"read-only\")) {\n suggestions.push(\n \"The container is in read-only mode — remove sandbox.fs.readOnly to allow writes\",\n );\n }\n if (msg.includes(\"outside allowed paths\")) {\n suggestions.push(\"Add the path to sandbox.fs.allowedPaths\");\n }\n if (msg.includes(\"file count limit\")) {\n suggestions.push(\n \"Increase sandbox.limits.maxFileCount or clear unused files\",\n );\n }\n if (msg.includes(\"memory limit\")) {\n suggestions.push(\n \"Increase sandbox.limits.maxMemoryMB or remove large files\",\n );\n }\n }\n\n return suggestions;\n}\n\nexport function parseError(\n category: ErrorCategory,\n raw: unknown,\n): ContainerError {\n const parsed = PARSERS[category](raw);\n const message = parsed.message || String(raw);\n return {\n id: uid(),\n category,\n title: parsed.title || \"Error\",\n message,\n file: parsed.file,\n line: parsed.line,\n column: parsed.column,\n stack: parsed.stack,\n timestamp: Date.now(),\n raw,\n suggestions: generateSuggestions(category, message),\n };\n}\n\nexport function formatErrorText(error: ContainerError): string {\n const parts: string[] = [];\n\n const tag = `[${error.category.toUpperCase()}]`;\n parts.push(`${tag} ${error.title}`);\n\n if (error.file) {\n let loc = error.file;\n if (error.line != null) {\n loc += `:${error.line}`;\n if (error.column != null) loc += `:${error.column}`;\n }\n parts.push(` at ${loc}`);\n }\n\n parts.push(\"\");\n parts.push(error.message);\n\n if (error.suggestions && error.suggestions.length > 0) {\n parts.push(\"\");\n parts.push(\"Suggestions:\");\n for (const s of error.suggestions) {\n parts.push(` - ${s}`);\n }\n }\n\n if (error.stack) {\n parts.push(\"\");\n parts.push(error.stack);\n }\n\n return parts.join(\"\\n\");\n}\n\nexport function formatErrorHtml(error: ContainerError): string {\n const esc = (s: string) =>\n s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/`/g, \"`\");\n\n let loc = \"\";\n if (error.file) {\n loc = esc(error.file);\n if (error.line != null) {\n loc += `:${error.line}`;\n if (error.column != null) loc += `:${error.column}`;\n }\n loc = `<div style=\"font-size:11px;color:#fca5a5;margin-top:4px;\">${loc}</div>`;\n }\n\n let stack = \"\";\n if (error.stack) {\n stack = `<pre style=\"font-size:11px;color:#a1a1aa;margin-top:8px;white-space:pre-wrap;max-height:120px;overflow:auto;\">${esc(error.stack)}</pre>`;\n }\n\n return `<div style=\"\n font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;\n background: #1c1017;\n border: 1px solid #7f1d1d;\n border-radius: 8px;\n padding: 12px 16px;\n color: #fecaca;\n max-width: 480px;\n \">\n <div style=\"font-weight:600;font-size:13px;color:#fca5a5;\">\n ${esc(error.title)}\n </div>\n <div style=\"font-size:12px;margin-top:6px;color:#e4e4e7;line-height:1.4;\">\n ${esc(error.message)}\n </div>\n ${loc}${stack}\n </div>`;\n}\n\nexport function errorOverlayScript(): string {\n function overlayIIFE() {\n var overlay: HTMLDivElement | null = null;\n var errors: Array<{\n title?: string;\n message: string;\n file?: string | null;\n line?: number | null;\n column?: number | null;\n stack?: string | null;\n }> = [];\n\n function esc(s: string) {\n return String(s)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/`/g, \"`\");\n }\n\n function dismiss() {\n if (overlay) {\n overlay.remove();\n overlay = null;\n }\n }\n\n function render() {\n if (errors.length === 0) {\n dismiss();\n return;\n }\n\n if (!overlay) {\n overlay = document.createElement(\"div\");\n overlay.id = \"__jiki_error_overlay\";\n overlay.style.cssText = [\n \"position:fixed\",\n \"bottom:12px\",\n \"right:12px\",\n \"z-index:2147483647\",\n \"max-width:420px\",\n \"max-height:260px\",\n \"overflow:auto\",\n \"font-family:ui-monospace,SFMono-Regular,Menlo,monospace\",\n \"background:rgba(24,8,14,0.95)\",\n \"border:1px solid #991b1b\",\n \"border-radius:10px\",\n \"padding:10px 14px\",\n \"color:#fecaca\",\n \"font-size:12px\",\n \"line-height:1.4\",\n \"box-shadow:0 8px 32px rgba(0,0,0,0.5)\",\n \"backdrop-filter:blur(8px)\",\n ].join(\";\");\n document.body.appendChild(overlay);\n }\n\n var last = errors[errors.length - 1];\n\n var badge = errors.length > 1 ? \" (\" + errors.length + \")\" : \"\";\n\n var loc = \"\";\n if (last.file) {\n loc = esc(last.file);\n if (last.line != null) loc += \":\" + last.line;\n if (last.column != null) loc += \":\" + last.column;\n }\n\n var header = document.createElement(\"div\");\n header.style.cssText =\n \"display:flex;align-items:center;justify-content:space-between;\";\n\n var titleEl = document.createElement(\"div\");\n titleEl.style.cssText = \"font-weight:600;font-size:12px;color:#fca5a5;\";\n titleEl.textContent = (last.title || \"Error\") + badge;\n\n var closeBtn = document.createElement(\"button\");\n closeBtn.style.cssText =\n \"background:none;border:none;color:#a1a1aa;cursor:pointer;\" +\n \"font-size:16px;padding:0 0 0 8px;line-height:1;\";\n closeBtn.innerHTML = \"×\";\n closeBtn.addEventListener(\"click\", function () {\n errors = [];\n dismiss();\n });\n\n header.appendChild(titleEl);\n header.appendChild(closeBtn);\n\n var msgEl = document.createElement(\"div\");\n msgEl.style.cssText =\n \"font-size:11px;color:#e4e4e7;margin-top:4px;word-break:break-word;\";\n msgEl.textContent = last.message;\n\n overlay.innerHTML = \"\";\n overlay.appendChild(header);\n overlay.appendChild(msgEl);\n\n if (loc) {\n var locEl = document.createElement(\"div\");\n locEl.style.cssText = \"font-size:10px;color:#fca5a5;margin-top:2px;\";\n locEl.textContent = loc;\n overlay.appendChild(locEl);\n }\n }\n\n function pushError(data: (typeof errors)[number]) {\n errors.push(data);\n render();\n try {\n window.parent.postMessage(\n {\n type: \"__jiki_error\",\n error: {\n message: data.message,\n title: data.title,\n file: data.file || null,\n line: data.line || null,\n column: data.column || null,\n stack: data.stack || null,\n },\n },\n \"*\",\n );\n } catch (_e) {\n /* cross-origin */\n }\n }\n\n window.addEventListener(\"error\", function (event: ErrorEvent) {\n var error = event.error;\n var name =\n (error && error.constructor && error.constructor.name) || \"Error\";\n pushError({\n title:\n name === \"Error\"\n ? \"Runtime Error\"\n : name.replace(/([a-z])([A-Z])/g, \"$1 $2\"),\n message: error ? error.message : event.message || \"Unknown error\",\n file: event.filename || null,\n line: event.lineno || null,\n column: event.colno || null,\n stack: error && error.stack ? error.stack : null,\n });\n });\n\n window.addEventListener(\n \"unhandledrejection\",\n function (event: PromiseRejectionEvent) {\n var reason = event.reason;\n var msg = reason instanceof Error ? reason.message : String(reason);\n var stack = reason instanceof Error ? reason.stack : null;\n pushError({\n title: \"Unhandled Promise Rejection\",\n message: msg,\n stack: stack,\n });\n },\n );\n }\n\n return \"<script>(\" + overlayIIFE.toString() + \")()</script>\";\n}\n"],"names":["path","type","resolve","request","store","parse","format","events","pathShim.isAbsolute","pathShim.resolve","_vfs","pathShim.join","pathShim.relative","pathShim.dirname","createServer","Server","hostname","Agent","URL","url","domain","sep","TextEncoder","TextDecoder","constants","result","performance","isBrowser","esbuild","Socket","acorn","Worker","MessageChannel","_pathMod","_eventsMod","_streamMod","_bufferMod","_httpMod.httpsModule","_urlMod","_qsMod","_utilMod","_cryptoMod","_assertMod","_stubsMod.async_hooks","_stubsMod.cluster","_stubsMod.dgram","_stubsMod.diagnostics_channel","_stubsMod.dns","_stubsMod.domain","_stubsMod.esbuild","_stubsMod.fsevents","_stubsMod.http2","_stubsMod.inspector","_stubsMod.rollup_stub","_stubsMod.tls","_utilMod.types","_pathMod.win32","jsxParser","imports","processSource","FILE_EXTENSIONS","INDEX_NAMES","entry","exports","resolveImports","resolveExports","transpileCache","bufferPolyfill","version","BLOCK","decoder","decodeField","readSize","isZeroBlock","relative","path.join","normalizeBin","atIdx","ok","fail","pathShim.basename","platform","cmd","isAbsolute","Buffer","location","layouts","groups","page","builtinModules","require","process","html","_generateAppRouterHtml","_generatePageHtml","_serve404Page","buffer","_addReactRefresh","_redirectNpmImports","_stripCssImports","buf","indexFile","bundle"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwJzB,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2N7B,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDvB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0DxB,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmC1B,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DzB,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuK9B,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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"}
|