@statewalker/cellb 0.8.8 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +11 -7
  2. package/dist/adapters/node-sqlite-module.d.ts +6 -0
  3. package/dist/adapters/node-sqlite-module.js +12 -0
  4. package/dist/adapters/node-sqlite-module.js.map +1 -1
  5. package/dist/adapters/node-sqlite.js +3 -3
  6. package/dist/adapters/node-sqlite.js.map +1 -1
  7. package/dist/adapters/wasm-sqlite.d.ts +2 -0
  8. package/dist/adapters/wasm-sqlite.js +15 -0
  9. package/dist/adapters/wasm-sqlite.js.map +1 -1
  10. package/dist/bindings/cjs-module.d.ts +7 -0
  11. package/dist/bindings/cjs-module.js +96 -0
  12. package/dist/bindings/cjs-module.js.map +1 -0
  13. package/dist/bindings/cron.js +9 -2
  14. package/dist/bindings/cron.js.map +1 -1
  15. package/dist/bindings/module-registry.d.ts +43 -0
  16. package/dist/bindings/module-registry.js +192 -0
  17. package/dist/bindings/module-registry.js.map +1 -0
  18. package/dist/bindings/worker-loader.d.ts +23 -5
  19. package/dist/bindings/worker-loader.js +75 -4
  20. package/dist/bindings/worker-loader.js.map +1 -1
  21. package/dist/bucket/sqlite-object-store.js +2 -2
  22. package/dist/bucket/sqlite-object-store.js.map +1 -1
  23. package/dist/core/alarms.js +12 -2
  24. package/dist/core/alarms.js.map +1 -1
  25. package/dist/core/handles.d.ts +21 -1
  26. package/dist/core/handles.js +49 -3
  27. package/dist/core/handles.js.map +1 -1
  28. package/dist/core/namespace.js +4 -1
  29. package/dist/core/namespace.js.map +1 -1
  30. package/dist/core/runtime.d.ts +8 -0
  31. package/dist/core/runtime.js +3 -3
  32. package/dist/core/runtime.js.map +1 -1
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.js +5 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/isolate/browser.d.ts +1 -1
  37. package/dist/isolate/browser.js +3 -1
  38. package/dist/isolate/browser.js.map +1 -1
  39. package/dist/isolate/function-imports.d.ts +10 -0
  40. package/dist/isolate/function-imports.js +93 -0
  41. package/dist/isolate/function-imports.js.map +1 -0
  42. package/dist/isolate/host.js +20 -2
  43. package/dist/isolate/host.js.map +1 -1
  44. package/dist/isolate/isolate-worker.js +18 -2
  45. package/dist/isolate/isolate-worker.js.map +1 -1
  46. package/dist/isolate/isolate.js +11 -0
  47. package/dist/isolate/isolate.js.map +1 -1
  48. package/dist/isolate/node-entry.js +33 -0
  49. package/dist/isolate/node-entry.js.map +1 -1
  50. package/dist/isolate/protocol.d.ts +1 -0
  51. package/dist/isolate/protocol.js +242 -13
  52. package/dist/isolate/protocol.js.map +1 -1
  53. package/dist/isolate/writable-globals.d.ts +9 -0
  54. package/dist/isolate/writable-globals.js +45 -0
  55. package/dist/isolate/writable-globals.js.map +1 -0
  56. package/dist/node-compat/bundle-files.d.ts +26 -0
  57. package/dist/node-compat/bundle-files.js +210 -0
  58. package/dist/node-compat/bundle-files.js.map +1 -0
  59. package/dist/node-compat/fs.d.ts +13 -1
  60. package/dist/node-compat/fs.js +54 -15
  61. package/dist/node-compat/fs.js.map +1 -1
  62. package/dist/project/browser-host.d.ts +2 -0
  63. package/dist/project/browser-host.js +2 -0
  64. package/dist/project/browser-host.js.map +1 -1
  65. package/dist/project/browser-load.js +1 -0
  66. package/dist/project/browser-load.js.map +1 -1
  67. package/dist/project/browser-modules.d.ts +8 -2
  68. package/dist/project/browser-modules.js +30 -6
  69. package/dist/project/browser-modules.js.map +1 -1
  70. package/dist/project/built-project.d.ts +7 -0
  71. package/dist/project/built-project.js.map +1 -1
  72. package/dist/project/cloudflare-workers.d.ts +9 -0
  73. package/dist/project/cloudflare-workers.js +14 -0
  74. package/dist/project/cloudflare-workers.js.map +1 -1
  75. package/dist/project/module-rules.js +31 -10
  76. package/dist/project/module-rules.js.map +1 -1
  77. package/dist/project/node-project.d.ts +2 -0
  78. package/dist/project/node-project.js +157 -25
  79. package/dist/project/node-project.js.map +1 -1
  80. package/dist/project/site-loader.js +2 -1
  81. package/dist/project/site-loader.js.map +1 -1
  82. package/dist/project/uint8array-base64.d.ts +7 -0
  83. package/dist/project/uint8array-base64.js +96 -0
  84. package/dist/project/uint8array-base64.js.map +1 -0
  85. package/dist/project/workers-globals-module.d.ts +1 -0
  86. package/dist/project/workers-globals-module.js +3 -0
  87. package/dist/project/workers-globals-module.js.map +1 -1
  88. package/dist/project/wrangler.js +8 -9
  89. package/dist/project/wrangler.js.map +1 -1
  90. package/dist/ws/upgrade.js +18 -1
  91. package/dist/ws/upgrade.js.map +1 -1
  92. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/isolate/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import { fetchOverDuplex, serveFetchOverDuplex } from \"@statewalker/webrun-http-streams\";\nimport {\n callPort,\n duplexOverPort,\n getPortCloseSignal,\n listenPort,\n type MessageTarget,\n multiplexPort,\n NO_TIMEOUT,\n type PortMux,\n serveDuplexOverPort,\n structuredCodec,\n} from \"@statewalker/webrun-rpc\";\nimport { cross, pipeTo, rpcPromise, STUB } from \"../core/handles.js\";\nimport { withUrl } from \"../core/request-body.js\";\nimport type { Frame } from \"../ws/frames.js\";\nimport { CellsResponse, CfWebSocket, takeClientEnd } from \"../ws/server.js\";\nimport { carryWebSocketHeaders } from \"../ws/upgrade.js\";\n\n/**\n * Isolation for loaded Workers (celld runs each in its own V8 isolate): the loaded code runs\n * in a separate realm — a worker thread on Node, a Dedicated Worker in browsers — and talks\n * to the host over one MessagePort, multiplexed with `@statewalker/webrun-rpc`. The host keeps\n * everything else: bindings in the loaded Worker's env are reached through stubs, and its logs\n * come back for Tail Workers. Errors cross with their own properties (`name`, `code`, …).\n * Functions, `RpcTarget`s and stubs anywhere in a call or result cross by reference (as\n * workerd passes them): the far side gets a stub whose calls come back.\n *\n * Calls (one port, both directions; each names an `answer`, which the serving side keeps until\n * the caller has the result, so calls on it can be sent before then — promise pipelining):\n * host → isolate load {source|url, env, outbound} → loaded {exports}\n * call {name, method, args, props} → result\n * isolate → host log {level, args}\n * either way ref {id|on, path, args} (a call on a stub of the other side's value, or\n * on answer `on`: `path` is the property path\n * called, [] the value itself)\n * release {id|answer} (that stub was disposed or collected; the caller\n * has that answer)\n * Fetches: one port per request (meta: its target and URL), HTTP/1.1 with streamed bodies,\n * as cells-http over a port (src/transport/port.ts): host → isolate to an export or facet,\n * isolate → host for the loaded code's global `fetch()` when a `globalOutbound` Fetcher routes it.\n * A WebSocket upgrade (host → isolate) has a port of its own instead, since HTTP/1.1 drops the\n * `Upgrade` header: its meta carries the request's method and headers; the isolate answers with\n * the response's head and closes the port. A 101's head carries the socket's own MessagePort,\n * transferred, and the frames the server sent before the 101 (replayed by the host's end): the\n * socket's frames then go straight between the client and the isolate, outside the multiplexer\n * and through no relay in the isolate, so open sockets hold none of its ports (it allows\n * `maxPorts` at once) and a socket's 1001 reaches its client before the isolate ends.\n */\nexport interface PortLike {\n postMessage(msg: unknown, transfer?: Transferable[]): void;\n addEventListener?(type: \"message\", fn: (e: { data: unknown }) => void): void;\n removeEventListener?(type: \"message\", fn: (e: { data: unknown }) => void): void;\n on?(type: \"message\", fn: (data: unknown) => void): void;\n off?(type: \"message\", fn: (data: unknown) => void): void;\n start?(): void;\n}\n\n/** Where a fetch goes in the isolate: an export of the loaded Worker, or one of its facets. */\nexport type FetchTarget =\n | { name: string; props?: unknown }\n | { className: string; cellKey: string };\ntype Fetch = (target: FetchTarget, req: Request) => Promise<Response>;\n\nexport type Call = <T = unknown>(msg: object) => Promise<T>;\ntype Handle = (msg: any) => Promise<unknown>;\n\n/**\n * The host's end of an isolate's port: one webrun-rpc multiplexer over it, a calls port on\n * which each side calls the other (`callPort`/`listenPort`, no timeout: a call lasts as long\n * as the work it starts), and a port per fetch. `outbound` serves the loaded code's global\n * `fetch()` (its `globalOutbound` Fetcher).\n */\nexport async function hostPort(\n port: PortLike,\n handle: Handle,\n outbound?: (req: Request) => Promise<Response>,\n): Promise<{ call: Call; fetch: Fetch }> {\n const mux = multiplexPort(messageTarget(port), {\n codec: structuredCodec,\n side: \"initiator\",\n maxPorts: maxPorts(),\n onPort(p, meta) {\n const m = meta as { kind?: string; url: string } | undefined;\n if (m?.kind !== \"outbound\" || !outbound) return false;\n serveFetch(p, m.url, outbound);\n return true;\n },\n });\n const call = callsOver(await mux.openPort({ kind: \"calls\" }), handle);\n const fetch: Fetch = (target, req) =>\n isUpgrade(req)\n ? upgradeOver(mux, { kind: \"upgrade\", target }, req)\n : fetchOver(mux, { kind: \"fetch\", target }, req);\n return { call, fetch };\n}\n\n/**\n * The isolate's end: accepts the ports the host opens. Everything the isolate calls the host\n * for happens while serving a host call, so the calls port is open by then. `outbound` sends\n * a fetch to the host's `globalOutbound`.\n */\nexport function isolatePort(\n port: PortLike,\n handle: Handle,\n fetch: Fetch,\n): { call: Call; outbound: (req: Request) => Promise<Response> } {\n let calls: Call | undefined;\n const mux = multiplexPort(messageTarget(port), {\n codec: structuredCodec,\n side: \"responder\",\n maxPorts: maxPorts(),\n onPort(p, meta) {\n const m = meta as { kind?: string; target: FetchTarget; url: string } | undefined;\n if (m?.kind === \"fetch\") {\n serveFetch(p, m.url, (r) => fetch(m.target, r));\n return true;\n }\n if (m?.kind === \"upgrade\") {\n serveUpgrade(p, m as unknown as UpgradeMeta, (r) => fetch(m.target, r));\n return true;\n }\n if (m?.kind !== \"calls\" || calls) return false;\n calls = callsOver(p, handle);\n return true;\n },\n });\n return {\n call: (msg) => calls!(msg),\n outbound: (req) => fetchOver(mux, { kind: \"outbound\" }, req),\n };\n}\n\n/** A fetch over a new port of `mux`; the URL rides in the meta (the HTTP/1.1 wire drops its scheme). */\nfunction fetchOver(mux: PortMux, meta: object, req: Request): Promise<Response> {\n return fetchOverDuplex(\n (input) =>\n (async function* () {\n yield* duplexOverPort(await mux.openPort({ ...meta, url: req.url }))(input);\n })(),\n req,\n );\n}\n\n/** Serves the fetch on port `p` (its URL from the meta) with `fetch`. */\nfunction serveFetch(p: MessageTarget, url: string, fetch: (req: Request) => Promise<Response>) {\n serveDuplexOverPort(\n p,\n serveFetchOverDuplex((req) => withUrl(req, url).then(fetch).catch(throwOwn)),\n );\n}\n\nconst isUpgrade = (req: Request) => req.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\";\n\ninterface UpgradeMeta {\n url: string;\n method: string;\n headers: [string, string][];\n}\n/**\n * Ports of an isolate's multiplexer open at once: the calls port, and one per fetch or upgrade\n * in flight (each closes when its exchange ends). `globalThis.__cellbMaxPorts` overrides it, as\n * for src/transport/port.ts.\n */\nconst maxPorts = () => (globalThis as { __cellbMaxPorts?: number }).__cellbMaxPorts ?? 4096;\n\n/** The isolate's answer to an upgrade: the head of its response, or the error it threw. */\ntype UpgradeHead =\n | {\n status: number;\n statusText?: string;\n headers: [string, string][];\n body: ArrayBuffer | null;\n /** A 101's socket: the port of its client end, transferred. */\n socket?: MessagePort;\n /** A 101's frames that reached its client end before the hand-over. */\n frames?: Frame[];\n }\n | { error: unknown };\n\n/** Statuses whose response has no body (`new Response(body, …)` refuses one). */\nconst nullBody = (status: number) => [101, 204, 205, 304].includes(status);\n\n/**\n * A WebSocket upgrade over a port of its own, closed once the isolate's answer is in. A 101\n * becomes a Workers response whose `webSocket` is a client end over the socket's own port.\n */\nasync function upgradeOver(mux: PortMux, meta: object, req: Request): Promise<Response> {\n const p = await mux.openPort({\n ...meta,\n url: req.url,\n method: req.method,\n headers: [...req.headers],\n } satisfies UpgradeMeta);\n return new Promise((resolve, reject) => {\n // A port closed without an answer (the isolate refused it, or could not post one)\n // fails the upgrade rather than leaving it pending.\n const closed = getPortCloseSignal(p);\n const onClosed = () => {\n p.removeEventListener(\"message\", onHead);\n reject(\n closed?.reason ?? new Error(\"cellb: the isolate closed the upgrade without an answer\"),\n );\n };\n closed?.addEventListener(\"abort\", onClosed, { once: true });\n const onHead = (e: MessageEvent) => {\n p.removeEventListener(\"message\", onHead);\n closed?.removeEventListener(\"abort\", onClosed);\n void p.close?.();\n try {\n const head = e.data as UpgradeHead;\n if (\"error\" in head) throw head.error;\n if (head.status === 101 && head.socket)\n return resolve(\n new CellsResponse(null, {\n status: 101,\n headers: head.headers,\n webSocket: new CfWebSocket(head.socket, head.frames),\n }),\n );\n resolve(\n new Response(nullBody(head.status) ? null : head.body, {\n status: head.status,\n statusText: head.statusText,\n headers: head.headers,\n }),\n );\n } catch (err) {\n reject(err);\n }\n };\n p.addEventListener(\"message\", onHead);\n void p.start?.();\n });\n}\n\n/** Serves an upgrade on port `p`: a 101 hands over its client end's port; then `p` closes. */\nfunction serveUpgrade(\n p: MessageTarget,\n meta: UpgradeMeta,\n fetch: (req: Request) => Promise<Response>,\n) {\n // A browser drops `Upgrade` and `Sec-WebSocket-*` from `new Request()`: carried over here.\n const headers = new Headers(meta.headers);\n const req = carryWebSocketHeaders(\n headers,\n new Request(meta.url, { method: meta.method, headers }),\n );\n const answer = (head: UpgradeHead, transfer: Transferable[] = []) => {\n try {\n // The multiplexer drops a message it cannot copy, so check before posting; a 101\n // head is not checked, since its socket port is transferred rather than copied.\n if (transfer.length === 0) cloneable(head);\n p.postMessage(head, transfer);\n } catch {\n // An error that cannot be copied (a function in its `cause`, say): its name and message.\n const e = (head as { error?: { name?: unknown; message?: unknown } }).error;\n p.postMessage({\n error: Object.assign(new Error(String(e?.message ?? e)), {\n name: String(e?.name ?? \"Error\"),\n }),\n } satisfies UpgradeHead);\n }\n };\n void (async () => {\n try {\n const res = await fetch(req);\n const ws = (res as { webSocket?: CfWebSocket | null }).webSocket;\n if (res.status === 101 && ws) {\n const { port: socket, frames } = takeClientEnd(ws);\n answer({ status: 101, headers: [...res.headers], body: null, socket, frames }, [socket]);\n } else\n answer({\n status: res.status,\n statusText: res.statusText,\n headers: [...res.headers],\n body: nullBody(res.status) ? null : await res.arrayBuffer(),\n });\n } catch (error) {\n answer({ error });\n }\n void p.close?.();\n })();\n}\n\n/** Marks a value passed by reference in a message: `{ [REF]: id }`. */\nconst REF = \"\\u0000cellb.ref\";\n\n/**\n * The calls of one port, with values passed by reference: each side keeps the values it\n * passed (by id, and how many ids hold each); the other side calls them through stubs. A\n * stub's `Symbol.dispose` (or its garbage collection) releases its id; the last release of a\n * value runs the value's own `Symbol.dispose`, as workerd does for an `RpcTarget`. A call\n * returns an RpcPromise: calls on it go to the other side at once, naming its answer.\n */\nfunction callsOver(port: MessageTarget, handle: Handle): Call {\n const values = new Map<number, any>();\n const answers = new Map<number, unknown>();\n let lastAnswer = 0;\n const holders = new Map<unknown, number>();\n let lastId = 0;\n const encode = (v: unknown) =>\n cloneable(\n cross(\n v,\n (x) => {\n values.set(++lastId, x);\n holders.set(x, (holders.get(x) ?? 0) + 1);\n return { [REF]: lastId };\n },\n (x) => x, // the port copies the rest\n ),\n );\n const release = (id: number) => {\n const v = values.get(id);\n if (!values.delete(id)) return;\n const n = (holders.get(v) ?? 1) - 1;\n if (n) holders.set(v, n);\n else {\n holders.delete(v);\n v[Symbol.dispose]?.();\n }\n };\n const send = (msg: object) => callPort(port, msg, { timeout: NO_TIMEOUT }).catch(() => {});\n const collected = new FinalizationRegistry<number>((id) => send({ type: \"release\", id }));\n const stubOf = (id: number) => {\n const invoke = (path: string[], args: unknown[]) => call({ type: \"ref\", id, path, args });\n const stub: any = new Proxy(() => {}, {\n apply: (_t, _this, args) => invoke([], args),\n get(_t, prop) {\n if (prop === STUB) return true;\n if (prop === Symbol.dispose)\n return () => {\n collected.unregister(stub);\n send({ type: \"release\", id });\n };\n if (prop === \"then\" || typeof prop === \"symbol\") return undefined;\n return (...args: unknown[]) => invoke([prop], args);\n },\n });\n collected.register(stub, id, stub);\n return stub;\n };\n // Messages arrive as fresh copies: stubs replace the markers in place.\n const decode = (v: any): any => {\n if (Array.isArray(v)) for (let i = 0; i < v.length; i++) v[i] = decode(v[i]);\n else if (v && Object.getPrototypeOf(v) === Object.prototype) {\n if (typeof v[REF] === \"number\") return stubOf(v[REF]);\n for (const k of Object.keys(v)) v[k] = decode(v[k]);\n }\n return v;\n };\n const run = (m: any): unknown => {\n if (m.type !== \"ref\") return handle(m);\n if (m.on !== undefined) return pipeTo(answers.get(m.on), m.path, m.args);\n const v = values.get(m.id);\n if (v === undefined) throw new Error(\"A stub was used after it was disposed.\");\n return pipeTo(v, m.path, m.args);\n };\n // The answer is kept as the message arrives: a pipelined call on it may arrive before it\n // settles.\n const serve = async (m: any) => {\n if (m.type === \"release\") {\n if (m.answer === undefined) release(m.id);\n else answers.delete(m.answer);\n return;\n }\n let r: unknown;\n try {\n r = run(m);\n } catch (e) {\n r = Promise.reject(e);\n }\n answers.set(m.answer, r);\n return r;\n };\n listenPort(port, (msg) => serve(decode(msg)).then(encode).catch(throwOwn));\n const call: Call = (msg) => {\n const answer = ++lastAnswer;\n const result = (async () =>\n decode(await callPort(port, encode({ ...msg, answer }), { timeout: NO_TIMEOUT })))();\n // Calls on the answer sent before now are ahead of this release on the port.\n const done = () => send({ type: \"release\", answer });\n result.then(done, done);\n return rpcPromise(result, (path, args) => call({ type: \"ref\", on: answer, path, args }));\n };\n return call;\n}\n\n/** Errors cross with their own properties (so `code` does); `name` is inherited, so copy it. */\nfunction throwOwn(e: unknown): never {\n if (e && typeof e === \"object\")\n Object.defineProperty(e, \"name\", { value: (e as Error).name, enumerable: true });\n throw e;\n}\n\n/**\n * Throws `DataCloneError` for a value the port cannot carry: the multiplexer drops a message\n * it fails to post, and the call would wait forever.\n */\nfunction cloneable<T>(value: T): T {\n structuredClone(value);\n return value;\n}\n\n/** A worker_threads Worker is an EventEmitter; MessagePorts and Dedicated Workers are targets. */\nfunction messageTarget(port: PortLike): MessageTarget {\n if (port.addEventListener) return port as MessageTarget;\n const on = port.on!.bind(port);\n const listeners = new Map<unknown, (data: unknown) => void>();\n return {\n postMessage: (msg, transfer) => port.postMessage(msg, transfer),\n addEventListener(_type, fn) {\n const listener = (data: unknown) => void fn({ data } as MessageEvent);\n listeners.set(fn, listener);\n on(\"message\", listener);\n },\n removeEventListener(_type, fn) {\n port.off?.(\"message\", listeners.get(fn)!);\n listeners.delete(fn);\n },\n };\n}\n"]}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/isolate/protocol.ts"],"names":[],"mappings":"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","sourcesContent":["import { fetchOverDuplex, serveFetchOverDuplex } from \"@statewalker/webrun-http-streams\";\nimport {\n callPort,\n duplexOverPort,\n getPortCloseSignal,\n listenPort,\n type MessageTarget,\n multiplexPort,\n NO_TIMEOUT,\n type PortMux,\n serveDuplexOverPort,\n structuredCodec,\n} from \"@statewalker/webrun-rpc\";\nimport { cross, pipeTo, rpcPromise, STUB } from \"../core/handles.js\";\nimport { withUrl } from \"../core/request-body.js\";\nimport type { Frame } from \"../ws/frames.js\";\nimport { CellsResponse, CfWebSocket, takeClientEnd } from \"../ws/server.js\";\nimport { carryWebSocketHeaders } from \"../ws/upgrade.js\";\n\n/**\n * Isolation for loaded Workers (celld runs each in its own V8 isolate): the loaded code runs\n * in a separate realm — a worker thread on Node, a Dedicated Worker in browsers — and talks\n * to the host over one MessagePort, multiplexed with `@statewalker/webrun-rpc`. The host keeps\n * everything else: bindings in the loaded Worker's env are reached through stubs, and its logs\n * come back for Tail Workers. Errors cross with their own properties (`name`, `code`, …).\n * Functions, `RpcTarget`s and stubs anywhere in a call or result cross by reference (as\n * workerd passes them): the far side gets a stub whose calls come back.\n *\n * Calls (one port, both directions; each names an `answer`, which the serving side keeps until\n * the caller has the result, so calls on it can be sent before then — promise pipelining):\n * host → isolate load {source|url, env, outbound} → loaded {exports}\n * call {name, method, args, props} → result\n * isolate → host log {level, args}\n * either way ref {id|on, path, args} (a call on a stub of the other side's value, or\n * on answer `on`: `path` is the property path\n * called, [] the value itself)\n * release {id|answer} (that stub was disposed or collected; the caller\n * has that answer)\n * Fetches: one port per request (meta: its target and URL), HTTP/1.1 with streamed bodies,\n * as cells-http over a port (src/transport/port.ts): host → isolate to an export or facet,\n * isolate → host for the loaded code's global `fetch()` when a `globalOutbound` Fetcher routes it.\n * A WebSocket upgrade (host → isolate) has a port of its own instead, since HTTP/1.1 drops the\n * `Upgrade` header: its meta carries the request's method and headers; the isolate answers with\n * the response's head and closes the port. A 101's head carries the socket's own MessagePort,\n * transferred, and the frames the server sent before the 101 (replayed by the host's end): the\n * socket's frames then go straight between the client and the isolate, outside the multiplexer\n * and through no relay in the isolate, so open sockets hold none of its ports (it allows\n * `maxPorts` at once) and a socket's 1001 reaches its client before the isolate ends.\n */\nexport interface PortLike {\n postMessage(msg: unknown, transfer?: Transferable[]): void;\n addEventListener?(type: \"message\", fn: (e: { data: unknown }) => void): void;\n removeEventListener?(type: \"message\", fn: (e: { data: unknown }) => void): void;\n on?(type: \"message\", fn: (data: unknown) => void): void;\n off?(type: \"message\", fn: (data: unknown) => void): void;\n start?(): void;\n}\n\n/** Where a fetch goes in the isolate: an export of the loaded Worker, or one of its facets. */\nexport type FetchTarget =\n | { name: string; props?: unknown }\n | { className: string; cellKey: string };\ntype Fetch = (target: FetchTarget, req: Request) => Promise<Response>;\n\nexport type Call = <T = unknown>(msg: object) => Promise<T>;\ntype Handle = (msg: any) => Promise<unknown>;\n\n/**\n * The host's end of an isolate's port: one webrun-rpc multiplexer over it, a calls port on\n * which each side calls the other (`callPort`/`listenPort`, no timeout: a call lasts as long\n * as the work it starts), and a port per fetch. `outbound` serves the loaded code's global\n * `fetch()` (its `globalOutbound` Fetcher).\n */\nexport async function hostPort(\n port: PortLike,\n handle: Handle,\n outbound?: (req: Request) => Promise<Response>,\n): Promise<{ call: Call; fetch: Fetch; close(reason: unknown): Promise<void> }> {\n const bodies = new Bodies();\n const mux = multiplexPort(messageTarget(port), {\n codec: structuredCodec,\n side: \"initiator\",\n maxPorts: maxPorts(),\n onPort(p, meta) {\n const m = meta as { kind?: string; url: string; id: number } | undefined;\n if (m?.kind === \"body\") return bodies.serve(p, m.id);\n if (m?.kind !== \"outbound\" || !outbound) return false;\n serveFetch(p, m.url, outbound);\n return true;\n },\n });\n const call = callsOver(await mux.openPort({ kind: \"calls\" }), handle, mux, bodies);\n const fetch: Fetch = (target, req) =>\n isUpgrade(req)\n ? upgradeOver(mux, { kind: \"upgrade\", target }, req)\n : fetchOver(mux, { kind: \"fetch\", target }, req);\n // Closing the multiplexer rejects every call in flight, and every later one, with `reason`.\n return { call, fetch, close: (reason) => mux.close(reason) };\n}\n\n/**\n * The isolate's end: accepts the ports the host opens. Everything the isolate calls the host\n * for happens while serving a host call, so the calls port is open by then. `outbound` sends\n * a fetch to the host's `globalOutbound`.\n */\nexport function isolatePort(\n port: PortLike,\n handle: Handle,\n fetch: Fetch,\n): { call: Call; outbound: (req: Request) => Promise<Response> } {\n let calls: Call | undefined;\n const bodies = new Bodies();\n const mux: PortMux = multiplexPort(messageTarget(port), {\n codec: structuredCodec,\n side: \"responder\",\n maxPorts: maxPorts(),\n onPort(p, meta) {\n const m = meta as { kind?: string; target: FetchTarget; url: string; id: number } | undefined;\n if (m?.kind === \"body\") return bodies.serve(p, m.id);\n if (m?.kind === \"fetch\") {\n serveFetch(p, m.url, (r) => fetch(m.target, r));\n return true;\n }\n if (m?.kind === \"upgrade\") {\n serveUpgrade(p, m as unknown as UpgradeMeta, (r) => fetch(m.target, r));\n return true;\n }\n if (m?.kind !== \"calls\" || calls) return false;\n calls = callsOver(p, handle, mux, bodies);\n return true;\n },\n });\n return {\n call: (msg) => calls!(msg),\n outbound: (req) => fetchOver(mux, { kind: \"outbound\" }, req),\n };\n}\n\n/** A fetch over a new port of `mux`; the URL rides in the meta (the HTTP/1.1 wire drops its scheme). */\nfunction fetchOver(mux: PortMux, meta: object, req: Request): Promise<Response> {\n return fetchOverDuplex(\n (input) =>\n (async function* () {\n yield* duplexOverPort(await mux.openPort({ ...meta, url: req.url }))(input);\n })(),\n req,\n );\n}\n\n/** Serves the fetch on port `p` (its URL from the meta) with `fetch`. */\nfunction serveFetch(p: MessageTarget, url: string, fetch: (req: Request) => Promise<Response>) {\n serveDuplexOverPort(\n p,\n serveFetchOverDuplex((req) => withUrl(req, url).then(fetch).catch(throwOwn)),\n );\n}\n\nconst isUpgrade = (req: Request) => req.headers.get(\"upgrade\")?.toLowerCase() === \"websocket\";\n\ninterface UpgradeMeta {\n url: string;\n method: string;\n headers: [string, string][];\n}\n/**\n * Ports of an isolate's multiplexer open at once: the calls port, and one per fetch or upgrade\n * in flight (each closes when its exchange ends). `globalThis.__cellbMaxPorts` overrides it, as\n * for src/transport/port.ts.\n */\nconst maxPorts = () => (globalThis as { __cellbMaxPorts?: number }).__cellbMaxPorts ?? 4096;\n\n/** The isolate's answer to an upgrade: the head of its response, or the error it threw. */\ntype UpgradeHead =\n | {\n status: number;\n statusText?: string;\n headers: [string, string][];\n body: ArrayBuffer | null;\n /** A 101's socket: the port of its client end, transferred. */\n socket?: MessagePort;\n /** A 101's frames that reached its client end before the hand-over. */\n frames?: Frame[];\n }\n | { error: unknown };\n\n/** Statuses whose response has no body (`new Response(body, …)` refuses one). */\nconst nullBody = (status: number) => [101, 204, 205, 304].includes(status);\n\n/**\n * A WebSocket upgrade over a port of its own, closed once the isolate's answer is in. A 101\n * becomes a Workers response whose `webSocket` is a client end over the socket's own port.\n */\nasync function upgradeOver(mux: PortMux, meta: object, req: Request): Promise<Response> {\n const p = await mux.openPort({\n ...meta,\n url: req.url,\n method: req.method,\n headers: [...req.headers],\n } satisfies UpgradeMeta);\n return new Promise((resolve, reject) => {\n // A port closed without an answer (the isolate refused it, or could not post one)\n // fails the upgrade rather than leaving it pending.\n const closed = getPortCloseSignal(p);\n const onClosed = () => {\n p.removeEventListener(\"message\", onHead);\n reject(\n closed?.reason ?? new Error(\"cellb: the isolate closed the upgrade without an answer\"),\n );\n };\n closed?.addEventListener(\"abort\", onClosed, { once: true });\n const onHead = (e: MessageEvent) => {\n p.removeEventListener(\"message\", onHead);\n closed?.removeEventListener(\"abort\", onClosed);\n void p.close?.();\n try {\n const head = e.data as UpgradeHead;\n if (\"error\" in head) throw head.error;\n if (head.status === 101 && head.socket)\n return resolve(\n new CellsResponse(null, {\n status: 101,\n headers: head.headers,\n webSocket: new CfWebSocket(head.socket, head.frames),\n }),\n );\n resolve(\n new Response(nullBody(head.status) ? null : head.body, {\n status: head.status,\n statusText: head.statusText,\n headers: head.headers,\n }),\n );\n } catch (err) {\n reject(err);\n }\n };\n p.addEventListener(\"message\", onHead);\n void p.start?.();\n });\n}\n\n/** Serves an upgrade on port `p`: a 101 hands over its client end's port; then `p` closes. */\nfunction serveUpgrade(\n p: MessageTarget,\n meta: UpgradeMeta,\n fetch: (req: Request) => Promise<Response>,\n) {\n // A browser drops `Upgrade` and `Sec-WebSocket-*` from `new Request()`: carried over here.\n const headers = new Headers(meta.headers);\n const req = carryWebSocketHeaders(\n headers,\n new Request(meta.url, { method: meta.method, headers }),\n );\n const answer = (head: UpgradeHead, transfer: Transferable[] = []) => {\n try {\n // The multiplexer drops a message it cannot copy, so check before posting; a 101\n // head is not checked, since its socket port is transferred rather than copied.\n if (transfer.length === 0) cloneable(head);\n p.postMessage(head, transfer);\n } catch {\n // An error that cannot be copied (a function in its `cause`, say): its name and message.\n const e = (head as { error?: { name?: unknown; message?: unknown } }).error;\n p.postMessage({\n error: Object.assign(new Error(String(e?.message ?? e)), {\n name: String(e?.name ?? \"Error\"),\n }),\n } satisfies UpgradeHead);\n }\n };\n void (async () => {\n try {\n const res = await fetch(req);\n const ws = (res as { webSocket?: CfWebSocket | null }).webSocket;\n if (res.status === 101 && ws) {\n const { port: socket, frames } = takeClientEnd(ws);\n answer({ status: 101, headers: [...res.headers], body: null, socket, frames }, [socket]);\n } else\n answer({\n status: res.status,\n statusText: res.statusText,\n headers: [...res.headers],\n body: nullBody(res.status) ? null : await res.arrayBuffer(),\n });\n } catch (error) {\n answer({ error });\n }\n void p.close?.();\n })();\n}\n\n/** Marks a Request, Response, Headers or ReadableStream in a message: `{ [WIRE]: kind, … }`. */\nconst WIRE = \"\\u0000cellb.wire\";\n\n// The realm's own classes, before the isolate entry replaces the globals with its subclasses\n// (CellsRequest, CellsResponse): instances of either are instances of these.\nconst NativeRequest = globalThis.Request;\nconst NativeResponse = globalThis.Response;\nconst NativeHeaders = globalThis.Headers;\nconst NativeReadableStream = globalThis.ReadableStream;\n\n/**\n * The bodies one side has sent and the other has not read yet, by id. The reader opens a port\n * `{ kind: \"body\", id }` on the multiplexer when it first pulls, and the body streams over it,\n * as a fetch's body does; a reader that drops the body unread sends `release {body}` instead.\n */\nclass Bodies {\n #last = 0;\n #streams = new Map<number, ReadableStream>();\n add(stream: ReadableStream): number {\n this.#streams.set(++this.#last, stream);\n return this.#last;\n }\n /** The last id handed out, for `releaseSince`. */\n mark(): number {\n return this.#last;\n }\n /** Releases the bodies added after `mark` (a message that could not be sent). */\n releaseSince(mark: number): void {\n for (let id = mark + 1; id <= this.#last; id++) this.release(id);\n }\n release(id: number): void {\n const stream = this.#streams.get(id);\n this.#streams.delete(id);\n void stream?.cancel().catch(() => {});\n }\n /** Serves body `id` on port `p`; false (the port is refused) if there is no such body. */\n serve(p: MessageTarget, id: number): boolean {\n const stream = this.#streams.get(id);\n if (!stream) return false;\n this.#streams.delete(id);\n const encoder = new TextEncoder();\n serveDuplexOverPort(p, async function* () {\n // A reader, not `for await`: not every engine iterates a ReadableStream (Safari).\n const reader = stream.getReader();\n try {\n for (;;) {\n const { done, value: chunk } = await reader.read();\n if (done) return;\n yield typeof chunk === \"string\"\n ? encoder.encode(chunk)\n : ArrayBuffer.isView(chunk)\n ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n : new Uint8Array(chunk as ArrayBuffer);\n }\n } finally {\n // The reader stopped early (the port was abandoned): the stream is cancelled.\n void reader.cancel().catch(() => {});\n }\n });\n return true;\n }\n}\n\n/**\n * A Request, Response, Headers or ReadableStream as a message can carry it (workerd's RPC passes\n * them; a port cannot clone them): its head copied, its body registered in `bodies` to stream\n * when read. Anything else is returned as it is.\n */\nfunction toWire(v: unknown, bodies: Bodies): unknown {\n if (v instanceof NativeHeaders) return { [WIRE]: \"headers\", entries: [...v] };\n if (v instanceof NativeReadableStream) return { [WIRE]: \"stream\", body: bodies.add(v) };\n if (v instanceof NativeResponse) {\n if ((v as { webSocket?: unknown }).webSocket)\n throw new DOMException(\n \"A WebSocket response cannot be passed in an RPC call; return it from fetch().\",\n \"DataCloneError\",\n );\n return {\n [WIRE]: \"response\",\n status: v.status,\n statusText: v.statusText,\n url: v.url,\n headers: [...v.headers],\n body: v.body ? bodies.add(v.body) : null,\n };\n }\n if (v instanceof NativeRequest)\n return {\n [WIRE]: \"request\",\n url: v.url,\n method: v.method,\n headers: [...v.headers],\n redirect: v.redirect,\n body: v.body ? bodies.add(v.body) : null,\n };\n return v;\n}\n\n/** Releases a body that was never read, once its stream is collected. */\nconst unread = new FinalizationRegistry<() => void>((release) => release());\n\n/**\n * The other side's body `id` as a stream: the first pull opens its port, so a body nobody\n * reads costs nothing but its release.\n */\nfunction remoteBody(mux: PortMux, id: number, release: (id: number) => void): ReadableStream {\n let chunks: AsyncIterator<Uint8Array> | undefined;\n const token = {};\n const stream = new NativeReadableStream<Uint8Array>({\n async pull(controller) {\n if (!chunks) {\n unread.unregister(token);\n const port = await mux.openPort({ kind: \"body\", id });\n chunks = duplexOverPort(port)([])[Symbol.asyncIterator]();\n }\n const { done, value } = await chunks.next();\n if (done) controller.close();\n else controller.enqueue(value);\n },\n async cancel(reason) {\n if (chunks) await chunks.return?.(reason);\n else {\n unread.unregister(token);\n release(id);\n }\n },\n });\n unread.register(stream, () => release(id), token);\n return stream;\n}\n\n/** Statuses whose Response has no body. */\nconst NULL_BODY = [101, 103, 204, 205, 304];\n\n/** The value `toWire` described, rebuilt; its body streams from the other side when read. */\nfunction fromWire(v: any, mux: PortMux, release: (id: number) => void): unknown {\n const body = (id: number | null) => (id === null ? null : remoteBody(mux, id, release));\n switch (v[WIRE]) {\n case \"headers\":\n return new Headers(v.entries);\n case \"stream\":\n return body(v.body);\n case \"response\": {\n // `Response.error()` (status 0) is rebuilt as one.\n if (v.status === 0) {\n if (v.body !== null) release(v.body);\n return NativeResponse.error();\n }\n // The constructor takes statuses 200-599 only: another one (a 1xx) comes back as a response\n // with no body that still reports its status.\n const constructible = v.status >= 200 && v.status <= 599;\n const noBody = !constructible || NULL_BODY.includes(v.status);\n if (noBody && v.body !== null) release(v.body);\n const res = new Response(noBody ? null : body(v.body), {\n status: constructible ? v.status : 200,\n statusText: v.statusText,\n headers: v.headers,\n });\n if (!constructible) {\n Object.defineProperty(res, \"status\", { value: v.status, enumerable: true });\n Object.defineProperty(res, \"ok\", { value: false, enumerable: true });\n }\n if (v.url) Object.defineProperty(res, \"url\", { value: v.url, enumerable: true });\n return res;\n }\n case \"request\":\n return new Request(v.url, {\n method: v.method,\n headers: v.headers,\n redirect: v.redirect,\n body: body(v.body),\n duplex: \"half\",\n } as RequestInit);\n }\n return v;\n}\n\n/** Marks a value passed by reference in a message: `{ [REF]: id }`. */\nconst REF = \"\\u0000cellb.ref\";\n\n/**\n * The calls of one port, with values passed by reference: each side keeps the values it\n * passed (by id, and how many ids hold each); the other side calls them through stubs. A\n * stub's `Symbol.dispose` (or its garbage collection) releases its id; the last release of a\n * value runs the value's own `Symbol.dispose`, as workerd does for an `RpcTarget`. A call\n * returns an RpcPromise: calls on it go to the other side at once, naming its answer.\n */\nfunction callsOver(port: MessageTarget, handle: Handle, mux: PortMux, bodies: Bodies): Call {\n const values = new Map<number, any>();\n const answers = new Map<number, unknown>();\n let lastAnswer = 0;\n const holders = new Map<unknown, number>();\n let lastId = 0;\n const encode = (v: unknown) => {\n const mark = bodies.mark();\n try {\n return cloneable(\n cross(\n v,\n (x) => {\n values.set(++lastId, x);\n holders.set(x, (holders.get(x) ?? 0) + 1);\n return { [REF]: lastId };\n },\n (x) => toWire(x, bodies), // Requests, Responses, Headers, streams; the port copies the rest\n ),\n );\n } catch (e) {\n bodies.releaseSince(mark); // the message is not sent: nobody will read its bodies\n throw e;\n }\n };\n const release = (id: number) => {\n const v = values.get(id);\n if (!values.delete(id)) return;\n const n = (holders.get(v) ?? 1) - 1;\n if (n) holders.set(v, n);\n else {\n holders.delete(v);\n v[Symbol.dispose]?.();\n }\n };\n const send = (msg: object) => callPort(port, msg, { timeout: NO_TIMEOUT }).catch(() => {});\n // Stubs of one id held here: `dup()` makes another, and the id is released (and the other\n // side's value with it, once no other id holds it) when the last of them is disposed or\n // collected.\n const local = new Map<number, number>();\n const drop = (id: number) => {\n const n = (local.get(id) ?? 1) - 1;\n if (n) local.set(id, n);\n else {\n local.delete(id);\n send({ type: \"release\", id });\n }\n };\n const collected = new FinalizationRegistry<number>(drop);\n const stubOf = (id: number) => {\n local.set(id, (local.get(id) ?? 0) + 1);\n let disposed = false;\n const live = () => {\n if (disposed) throw new Error(\"A stub was used after it was disposed.\");\n };\n const invoke = (path: string[], args: unknown[]) => {\n live();\n return call({ type: \"ref\", id, path, args });\n };\n const stub: any = new Proxy(() => {}, {\n apply: (_t, _this, args) => invoke([], args),\n get(_t, prop) {\n if (prop === STUB) return true;\n if (prop === Symbol.dispose)\n return () => {\n if (disposed) return;\n disposed = true;\n collected.unregister(stub);\n drop(id);\n };\n if (prop === \"then\" || typeof prop === \"symbol\") return undefined;\n // workerd's `stub.dup()`: another stub of the same value, disposed on its own.\n if (prop === \"dup\")\n return () => {\n live();\n return stubOf(id);\n };\n return (...args: unknown[]) => invoke([prop], args);\n },\n });\n collected.register(stub, id, stub);\n return stub;\n };\n // Messages arrive as fresh copies: stubs replace the markers in place.\n const decode = (v: any): any => {\n if (Array.isArray(v)) for (let i = 0; i < v.length; i++) v[i] = decode(v[i]);\n else if (v && Object.getPrototypeOf(v) === Object.prototype) {\n if (typeof v[WIRE] === \"string\")\n return fromWire(v, mux, (body) => send({ type: \"release\", body }));\n if (typeof v[REF] === \"number\") return stubOf(v[REF]);\n for (const k of Object.keys(v)) v[k] = decode(v[k]);\n }\n return v;\n };\n const run = (m: any): unknown => {\n if (m.type !== \"ref\") return handle(m);\n if (m.on !== undefined) return pipeTo(answers.get(m.on), m.path, m.args);\n const v = values.get(m.id);\n if (v === undefined) throw new Error(\"A stub was used after it was disposed.\");\n return pipeTo(v, m.path, m.args);\n };\n // The answer is kept as the message arrives: a pipelined call on it may arrive before it\n // settles.\n const serve = async (m: any) => {\n if (m.type === \"release\") {\n if (m.body !== undefined) bodies.release(m.body);\n else if (m.answer === undefined) release(m.id);\n else answers.delete(m.answer);\n return;\n }\n let r: unknown;\n try {\n r = run(m);\n } catch (e) {\n r = Promise.reject(e);\n }\n answers.set(m.answer, r);\n return r;\n };\n listenPort(port, (msg) => serve(decode(msg)).then(encode).catch(throwOwn));\n const call: Call = (msg) => {\n const answer = ++lastAnswer;\n const result = (async () =>\n decode(await callPort(port, encode({ ...msg, answer }), { timeout: NO_TIMEOUT })))();\n // Calls on the answer sent before now are ahead of this release on the port.\n const done = () => send({ type: \"release\", answer });\n result.then(done, done);\n return rpcPromise(result, (path, args) => call({ type: \"ref\", on: answer, path, args }));\n };\n return call;\n}\n\n/** Errors cross with their own properties (so `code` does); `name` is inherited, so copy it. */\nfunction throwOwn(e: unknown): never {\n if (e && typeof e === \"object\")\n Object.defineProperty(e, \"name\", { value: (e as Error).name, enumerable: true });\n throw e;\n}\n\n/**\n * Throws `DataCloneError` for a value the port cannot carry: the multiplexer drops a message\n * it fails to post, and the call would wait forever.\n */\nfunction cloneable<T>(value: T): T {\n structuredClone(value);\n return value;\n}\n\n/** A worker_threads Worker is an EventEmitter; MessagePorts and Dedicated Workers are targets. */\nfunction messageTarget(port: PortLike): MessageTarget {\n if (port.addEventListener) return port as MessageTarget;\n const on = port.on!.bind(port);\n const listeners = new Map<unknown, (data: unknown) => void>();\n return {\n postMessage: (msg, transfer) => port.postMessage(msg, transfer),\n addEventListener(_type, fn) {\n const listener = (data: unknown) => void fn({ data } as MessageEvent);\n listeners.set(fn, listener);\n on(\"message\", listener);\n },\n removeEventListener(_type, fn) {\n port.off?.(\"message\", listeners.get(fn)!);\n listeners.delete(fn);\n },\n };\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * workerd's globals are plain properties that Worker code may assign: Kitesurf's DOM shim sets
3
+ * `globalThis.navigator` and `globalThis.location`. The realm an isolate runs in has getters
4
+ * without setters for some of its own (Node's `navigator`; a Dedicated Worker's `location`,
5
+ * `navigator`, `origin`, … on WorkerGlobalScope.prototype), and assigning one throws in strict
6
+ * mode. The isolate is the loaded Worker's realm, so each such global becomes a writable data
7
+ * property of `globalThis` holding the value it has now.
8
+ */
9
+ export declare function makeGlobalsWritable(): string[];
@@ -0,0 +1,45 @@
1
+ /**
2
+ * workerd's globals are plain properties that Worker code may assign: Kitesurf's DOM shim sets
3
+ * `globalThis.navigator` and `globalThis.location`. The realm an isolate runs in has getters
4
+ * without setters for some of its own (Node's `navigator`; a Dedicated Worker's `location`,
5
+ * `navigator`, `origin`, … on WorkerGlobalScope.prototype), and assigning one throws in strict
6
+ * mode. The isolate is the loaded Worker's realm, so each such global becomes a writable data
7
+ * property of `globalThis` holding the value it has now.
8
+ */
9
+ export function makeGlobalsWritable() {
10
+ const changed = [];
11
+ const seen = new Set();
12
+ for (let o = globalThis; o && o !== Object.prototype; o = Object.getPrototypeOf(o)) {
13
+ for (const key of Reflect.ownKeys(o)) {
14
+ if (seen.has(key))
15
+ continue;
16
+ seen.add(key);
17
+ const d = Object.getOwnPropertyDescriptor(o, key);
18
+ if (!d?.get || d.set)
19
+ continue;
20
+ if (o === globalThis && !d.configurable)
21
+ continue;
22
+ let value;
23
+ try {
24
+ value = Reflect.get(globalThis, key);
25
+ }
26
+ catch {
27
+ continue; // a getter that throws here (an API this realm refuses) stays as it is
28
+ }
29
+ try {
30
+ Object.defineProperty(globalThis, key, {
31
+ value,
32
+ writable: true,
33
+ configurable: true,
34
+ enumerable: d.enumerable,
35
+ });
36
+ changed.push(String(key));
37
+ }
38
+ catch {
39
+ // not redefinable in this realm
40
+ }
41
+ }
42
+ }
43
+ return changed;
44
+ }
45
+ //# sourceMappingURL=writable-globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writable-globals.js","sourceRoot":"","sources":["../../src/isolate/writable-globals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,KACE,IAAI,CAAC,GAAkB,UAAU,EACjC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,EAC3B,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAC5B,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG;gBAAE,SAAS;YAC/B,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY;gBAAE,SAAS;YAClD,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,uEAAuE;YACnF,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE;oBACrC,KAAK;oBACL,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/**\n * workerd's globals are plain properties that Worker code may assign: Kitesurf's DOM shim sets\n * `globalThis.navigator` and `globalThis.location`. The realm an isolate runs in has getters\n * without setters for some of its own (Node's `navigator`; a Dedicated Worker's `location`,\n * `navigator`, `origin`, … on WorkerGlobalScope.prototype), and assigning one throws in strict\n * mode. The isolate is the loaded Worker's realm, so each such global becomes a writable data\n * property of `globalThis` holding the value it has now.\n */\nexport function makeGlobalsWritable(): string[] {\n const changed: string[] = [];\n const seen = new Set<PropertyKey>();\n for (\n let o: object | null = globalThis;\n o && o !== Object.prototype;\n o = Object.getPrototypeOf(o)\n ) {\n for (const key of Reflect.ownKeys(o)) {\n if (seen.has(key)) continue;\n seen.add(key);\n const d = Object.getOwnPropertyDescriptor(o, key);\n if (!d?.get || d.set) continue;\n if (o === globalThis && !d.configurable) continue;\n let value: unknown;\n try {\n value = Reflect.get(globalThis, key);\n } catch {\n continue; // a getter that throws here (an API this realm refuses) stays as it is\n }\n try {\n Object.defineProperty(globalThis, key, {\n value,\n writable: true,\n configurable: true,\n enumerable: d.enumerable,\n });\n changed.push(String(key));\n } catch {\n // not redefinable in this realm\n }\n }\n }\n return changed;\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * workerd's `/bundle` for `node:fs` (nodejs_compat): a read-only directory of the Worker's own
3
+ * modules. wrangler uploads each non-JS module a bundle imports (a `.wasm`, a Text or Data file)
4
+ * as a module named `<sha1 of its bytes>-<file name>`, and Worker code can read it there
5
+ * (Kitesurf reads its wasm with `fs.readFileSync("/bundle/…")`).
6
+ *
7
+ * The bundle's rule modules (module-rules.ts) register their bytes here when they are evaluated,
8
+ * under the same names. `bundleFs(base)` wraps a `node:fs` (Node's own, or the browser's, which
9
+ * has no file system) so that paths under `/bundle` read this registry and the rest go to `base`.
10
+ * The registry is the realm's, keyed by content hash, so bundles that share a realm share files.
11
+ */
12
+ export declare const BUNDLE_DIR = "/bundle";
13
+ type Entry = Uint8Array | (() => Uint8Array);
14
+ /** The realm's `/bundle` files: name → bytes, or a function that makes them. */
15
+ export declare function bundleFiles(): Map<string, Entry>;
16
+ /** Registers `/bundle/<name>` (what a rule module calls). Returns `bytes`. */
17
+ export declare function registerBundleFile<T extends Entry>(name: string, bytes: T): T;
18
+ /**
19
+ * `base` (a `node:fs`) with `/bundle` paths answered from the registry: `existsSync`,
20
+ * `readFileSync`, `statSync`, `lstatSync`, `readdirSync`, `accessSync`, their callback forms and
21
+ * `promises`. Other paths, and every other function, are `base`'s.
22
+ */
23
+ export declare function bundleFs<T extends Record<string, any>>(base: T): Record<string, unknown>;
24
+ /** `node:fs/promises` with `/bundle` paths answered from the registry. */
25
+ export declare function bundleFsPromises<T extends Record<string, any>>(base: T): Record<string, unknown>;
26
+ export {};
@@ -0,0 +1,210 @@
1
+ /**
2
+ * workerd's `/bundle` for `node:fs` (nodejs_compat): a read-only directory of the Worker's own
3
+ * modules. wrangler uploads each non-JS module a bundle imports (a `.wasm`, a Text or Data file)
4
+ * as a module named `<sha1 of its bytes>-<file name>`, and Worker code can read it there
5
+ * (Kitesurf reads its wasm with `fs.readFileSync("/bundle/…")`).
6
+ *
7
+ * The bundle's rule modules (module-rules.ts) register their bytes here when they are evaluated,
8
+ * under the same names. `bundleFs(base)` wraps a `node:fs` (Node's own, or the browser's, which
9
+ * has no file system) so that paths under `/bundle` read this registry and the rest go to `base`.
10
+ * The registry is the realm's, keyed by content hash, so bundles that share a realm share files.
11
+ */
12
+ export const BUNDLE_DIR = "/bundle";
13
+ const REGISTRY = "__cellsBundleFiles";
14
+ /** The realm's `/bundle` files: name → bytes, or a function that makes them. */
15
+ export function bundleFiles() {
16
+ const g = globalThis;
17
+ g[REGISTRY] ??= new Map();
18
+ return g[REGISTRY];
19
+ }
20
+ /** Registers `/bundle/<name>` (what a rule module calls). Returns `bytes`. */
21
+ export function registerBundleFile(name, bytes) {
22
+ bundleFiles().set(name, bytes);
23
+ return bytes;
24
+ }
25
+ /** The file name under `/bundle` of `path` ("" for `/bundle` itself), or `undefined` elsewhere. */
26
+ function bundleName(path) {
27
+ let p;
28
+ if (typeof path === "string")
29
+ p = path;
30
+ else if (path instanceof URL) {
31
+ if (path.protocol !== "file:")
32
+ return undefined;
33
+ p = decodeURIComponent(path.pathname);
34
+ }
35
+ else if (path instanceof Uint8Array)
36
+ p = new TextDecoder().decode(path);
37
+ else
38
+ return undefined;
39
+ p = p.replace(/\/+/g, "/").replace(/\/$/, "");
40
+ if (p === BUNDLE_DIR)
41
+ return "";
42
+ return p.startsWith(`${BUNDLE_DIR}/`) ? p.slice(BUNDLE_DIR.length + 1) : undefined;
43
+ }
44
+ const fsError = (code, syscall, path) => {
45
+ const text = code === "ENOENT"
46
+ ? "no such file or directory"
47
+ : code === "EISDIR"
48
+ ? "illegal operation on a directory"
49
+ : "not a directory";
50
+ return Object.assign(new Error(`${code}: ${text}, ${syscall} '${String(path)}'`), {
51
+ code,
52
+ syscall,
53
+ path: String(path),
54
+ errno: code === "ENOENT" ? -2 : code === "EISDIR" ? -21 : -20,
55
+ });
56
+ };
57
+ function bytesOf(name, syscall, path) {
58
+ const entry = bundleFiles().get(name);
59
+ if (entry === undefined)
60
+ throw fsError("ENOENT", syscall, path);
61
+ return typeof entry === "function" ? entry() : entry;
62
+ }
63
+ /** Node's Buffer where the realm has one, as `readFileSync` returns; else the bytes. */
64
+ function buffer(bytes) {
65
+ const B = globalThis.Buffer;
66
+ return B ? B.from(bytes) : bytes.slice();
67
+ }
68
+ function decode(bytes, options) {
69
+ const encoding = typeof options === "string" ? options : options?.encoding;
70
+ if (!encoding || encoding === "buffer")
71
+ return buffer(bytes);
72
+ const b = buffer(bytes);
73
+ return globalThis.Buffer && b.toString
74
+ ? b.toString(encoding)
75
+ : new TextDecoder(encoding === "utf-8" ? "utf8" : encoding).decode(bytes);
76
+ }
77
+ const MTIME = new Date(0);
78
+ function stats(kind, size) {
79
+ return {
80
+ dev: 0,
81
+ ino: 0,
82
+ mode: kind === "dir" ? 0o40555 : 0o100444,
83
+ nlink: 1,
84
+ uid: 0,
85
+ gid: 0,
86
+ rdev: 0,
87
+ size,
88
+ blksize: 4096,
89
+ blocks: Math.ceil(size / 512),
90
+ atimeMs: 0,
91
+ mtimeMs: 0,
92
+ ctimeMs: 0,
93
+ birthtimeMs: 0,
94
+ atime: MTIME,
95
+ mtime: MTIME,
96
+ ctime: MTIME,
97
+ birthtime: MTIME,
98
+ isFile: () => kind === "file",
99
+ isDirectory: () => kind === "dir",
100
+ isSymbolicLink: () => false,
101
+ isBlockDevice: () => false,
102
+ isCharacterDevice: () => false,
103
+ isFIFO: () => false,
104
+ isSocket: () => false,
105
+ };
106
+ }
107
+ const dirent = (name) => ({
108
+ name,
109
+ parentPath: BUNDLE_DIR,
110
+ path: BUNDLE_DIR,
111
+ isFile: () => true,
112
+ isDirectory: () => false,
113
+ isSymbolicLink: () => false,
114
+ isBlockDevice: () => false,
115
+ isCharacterDevice: () => false,
116
+ isFIFO: () => false,
117
+ isSocket: () => false,
118
+ });
119
+ // The synchronous operations on `/bundle`, by name; each throws as Node's does.
120
+ const sync = {
121
+ existsSync: (name) => name === "" || bundleFiles().has(name),
122
+ readFileSync: (name, path, options) => {
123
+ if (name === "")
124
+ throw fsError("EISDIR", "read", path);
125
+ return decode(bytesOf(name, "open", path), options);
126
+ },
127
+ statSync: (name, path, options) => {
128
+ if (name === "")
129
+ return stats("dir", 0);
130
+ // `throwIfNoEntry: false`: a missing file is `undefined`, as libraries probing for one expect.
131
+ if (!bundleFiles().has(name) &&
132
+ options?.throwIfNoEntry === false)
133
+ return undefined;
134
+ return stats("file", bytesOf(name, "stat", path).byteLength);
135
+ },
136
+ readdirSync: (name, path, options) => {
137
+ if (name !== "") {
138
+ bytesOf(name, "scandir", path);
139
+ throw fsError("ENOTDIR", "scandir", path);
140
+ }
141
+ const names = [...bundleFiles().keys()].sort();
142
+ return options?.withFileTypes ? names.map(dirent) : names;
143
+ },
144
+ accessSync: (name, path) => {
145
+ if (name !== "" && !bundleFiles().has(name))
146
+ throw fsError("ENOENT", "access", path);
147
+ },
148
+ };
149
+ /**
150
+ * `base` (a `node:fs`) with `/bundle` paths answered from the registry: `existsSync`,
151
+ * `readFileSync`, `statSync`, `lstatSync`, `readdirSync`, `accessSync`, their callback forms and
152
+ * `promises`. Other paths, and every other function, are `base`'s.
153
+ */
154
+ export function bundleFs(base) {
155
+ const over = (op, own) => function (path, ...rest) {
156
+ const name = bundleName(path);
157
+ if (name === undefined)
158
+ return own?.call(this, path, ...rest);
159
+ return sync[op](name, path, ...rest);
160
+ };
161
+ // Node's callback form: (path, [options], callback).
162
+ const callback = (op, own) => function (path, ...rest) {
163
+ const name = bundleName(path);
164
+ if (name === undefined)
165
+ return own?.call(this, path, ...rest);
166
+ const cb = rest.pop();
167
+ let result;
168
+ try {
169
+ result = sync[op](name, path, ...rest);
170
+ }
171
+ catch (e) {
172
+ return queueMicrotask(() => cb(e));
173
+ }
174
+ queueMicrotask(() => (op === "accessSync" ? cb(null) : cb(null, result)));
175
+ };
176
+ const p = (base.promises ?? {});
177
+ return {
178
+ existsSync: over("existsSync", base.existsSync),
179
+ readFileSync: over("readFileSync", base.readFileSync),
180
+ statSync: over("statSync", base.statSync),
181
+ lstatSync: over("statSync", base.lstatSync),
182
+ readdirSync: over("readdirSync", base.readdirSync),
183
+ accessSync: over("accessSync", base.accessSync),
184
+ readFile: callback("readFileSync", base.readFile),
185
+ stat: callback("statSync", base.stat),
186
+ lstat: callback("statSync", base.lstat),
187
+ readdir: callback("readdirSync", base.readdir),
188
+ access: callback("accessSync", base.access),
189
+ promises: bundleFsPromises(p),
190
+ };
191
+ }
192
+ /** `node:fs/promises` with `/bundle` paths answered from the registry. */
193
+ export function bundleFsPromises(base) {
194
+ const promised = (op, own) => async function (path, ...rest) {
195
+ const name = bundleName(path);
196
+ if (name === undefined)
197
+ return own?.call(this, path, ...rest);
198
+ const result = sync[op](name, path, ...rest);
199
+ return op === "accessSync" ? undefined : result;
200
+ };
201
+ return {
202
+ ...base,
203
+ readFile: promised("readFileSync", base.readFile),
204
+ stat: promised("statSync", base.stat),
205
+ lstat: promised("statSync", base.lstat),
206
+ readdir: promised("readdirSync", base.readdir),
207
+ access: promised("accessSync", base.access),
208
+ };
209
+ }
210
+ //# sourceMappingURL=bundle-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-files.js","sourceRoot":"","sources":["../../src/node-compat/bundle-files.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * workerd's `/bundle` for `node:fs` (nodejs_compat): a read-only directory of the Worker's own\n * modules. wrangler uploads each non-JS module a bundle imports (a `.wasm`, a Text or Data file)\n * as a module named `<sha1 of its bytes>-<file name>`, and Worker code can read it there\n * (Kitesurf reads its wasm with `fs.readFileSync(\"/bundle/…\")`).\n *\n * The bundle's rule modules (module-rules.ts) register their bytes here when they are evaluated,\n * under the same names. `bundleFs(base)` wraps a `node:fs` (Node's own, or the browser's, which\n * has no file system) so that paths under `/bundle` read this registry and the rest go to `base`.\n * The registry is the realm's, keyed by content hash, so bundles that share a realm share files.\n */\n\nexport const BUNDLE_DIR = \"/bundle\";\n\ntype Entry = Uint8Array | (() => Uint8Array);\nconst REGISTRY = \"__cellsBundleFiles\";\n\n/** The realm's `/bundle` files: name → bytes, or a function that makes them. */\nexport function bundleFiles(): Map<string, Entry> {\n const g = globalThis as Record<string, unknown>;\n g[REGISTRY] ??= new Map<string, Entry>();\n return g[REGISTRY] as Map<string, Entry>;\n}\n\n/** Registers `/bundle/<name>` (what a rule module calls). Returns `bytes`. */\nexport function registerBundleFile<T extends Entry>(name: string, bytes: T): T {\n bundleFiles().set(name, bytes);\n return bytes;\n}\n\n/** The file name under `/bundle` of `path` (\"\" for `/bundle` itself), or `undefined` elsewhere. */\nfunction bundleName(path: unknown): string | undefined {\n let p: string;\n if (typeof path === \"string\") p = path;\n else if (path instanceof URL) {\n if (path.protocol !== \"file:\") return undefined;\n p = decodeURIComponent(path.pathname);\n } else if (path instanceof Uint8Array) p = new TextDecoder().decode(path);\n else return undefined;\n p = p.replace(/\\/+/g, \"/\").replace(/\\/$/, \"\");\n if (p === BUNDLE_DIR) return \"\";\n return p.startsWith(`${BUNDLE_DIR}/`) ? p.slice(BUNDLE_DIR.length + 1) : undefined;\n}\n\nconst fsError = (code: string, syscall: string, path: unknown) => {\n const text =\n code === \"ENOENT\"\n ? \"no such file or directory\"\n : code === \"EISDIR\"\n ? \"illegal operation on a directory\"\n : \"not a directory\";\n return Object.assign(new Error(`${code}: ${text}, ${syscall} '${String(path)}'`), {\n code,\n syscall,\n path: String(path),\n errno: code === \"ENOENT\" ? -2 : code === \"EISDIR\" ? -21 : -20,\n });\n};\n\nfunction bytesOf(name: string, syscall: string, path: unknown): Uint8Array {\n const entry = bundleFiles().get(name);\n if (entry === undefined) throw fsError(\"ENOENT\", syscall, path);\n return typeof entry === \"function\" ? entry() : entry;\n}\n\n/** Node's Buffer where the realm has one, as `readFileSync` returns; else the bytes. */\nfunction buffer(bytes: Uint8Array): Uint8Array {\n const B = (globalThis as { Buffer?: { from(b: Uint8Array): Uint8Array } }).Buffer;\n return B ? B.from(bytes) : bytes.slice();\n}\n\nfunction decode(bytes: Uint8Array, options: unknown): Uint8Array | string {\n const encoding =\n typeof options === \"string\" ? options : (options as { encoding?: string })?.encoding;\n if (!encoding || encoding === \"buffer\") return buffer(bytes);\n const b = buffer(bytes) as Uint8Array & { toString?(enc: string): string };\n return (globalThis as { Buffer?: unknown }).Buffer && b.toString\n ? b.toString(encoding)\n : new TextDecoder(encoding === \"utf-8\" ? \"utf8\" : encoding).decode(bytes);\n}\n\nconst MTIME = new Date(0);\nfunction stats(kind: \"file\" | \"dir\", size: number) {\n return {\n dev: 0,\n ino: 0,\n mode: kind === \"dir\" ? 0o40555 : 0o100444,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: 0,\n mtimeMs: 0,\n ctimeMs: 0,\n birthtimeMs: 0,\n atime: MTIME,\n mtime: MTIME,\n ctime: MTIME,\n birthtime: MTIME,\n isFile: () => kind === \"file\",\n isDirectory: () => kind === \"dir\",\n isSymbolicLink: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\nconst dirent = (name: string) => ({\n name,\n parentPath: BUNDLE_DIR,\n path: BUNDLE_DIR,\n isFile: () => true,\n isDirectory: () => false,\n isSymbolicLink: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n});\n\n// The synchronous operations on `/bundle`, by name; each throws as Node's does.\nconst sync = {\n existsSync: (name: string) => name === \"\" || bundleFiles().has(name),\n readFileSync: (name: string, path: unknown, options?: unknown) => {\n if (name === \"\") throw fsError(\"EISDIR\", \"read\", path);\n return decode(bytesOf(name, \"open\", path), options);\n },\n statSync: (name: string, path: unknown, options?: unknown) => {\n if (name === \"\") return stats(\"dir\", 0);\n // `throwIfNoEntry: false`: a missing file is `undefined`, as libraries probing for one expect.\n if (\n !bundleFiles().has(name) &&\n (options as { throwIfNoEntry?: boolean })?.throwIfNoEntry === false\n )\n return undefined;\n return stats(\"file\", bytesOf(name, \"stat\", path).byteLength);\n },\n readdirSync: (name: string, path: unknown, options?: unknown) => {\n if (name !== \"\") {\n bytesOf(name, \"scandir\", path);\n throw fsError(\"ENOTDIR\", \"scandir\", path);\n }\n const names = [...bundleFiles().keys()].sort();\n return (options as { withFileTypes?: boolean })?.withFileTypes ? names.map(dirent) : names;\n },\n accessSync: (name: string, path: unknown) => {\n if (name !== \"\" && !bundleFiles().has(name)) throw fsError(\"ENOENT\", \"access\", path);\n },\n};\n\ntype AnyFn = (...args: any[]) => any;\n\n/**\n * `base` (a `node:fs`) with `/bundle` paths answered from the registry: `existsSync`,\n * `readFileSync`, `statSync`, `lstatSync`, `readdirSync`, `accessSync`, their callback forms and\n * `promises`. Other paths, and every other function, are `base`'s.\n */\nexport function bundleFs<T extends Record<string, any>>(base: T): Record<string, unknown> {\n const over = (op: keyof typeof sync, own: AnyFn | undefined) =>\n function (this: unknown, path: unknown, ...rest: unknown[]) {\n const name = bundleName(path);\n if (name === undefined) return own?.call(this, path, ...rest);\n return (sync[op] as AnyFn)(name, path, ...rest);\n };\n // Node's callback form: (path, [options], callback).\n const callback = (op: keyof typeof sync, own: AnyFn | undefined) =>\n function (this: unknown, path: unknown, ...rest: unknown[]) {\n const name = bundleName(path);\n if (name === undefined) return own?.call(this, path, ...rest);\n const cb = rest.pop() as AnyFn;\n let result: unknown;\n try {\n result = (sync[op] as AnyFn)(name, path, ...rest);\n } catch (e) {\n return queueMicrotask(() => cb(e));\n }\n queueMicrotask(() => (op === \"accessSync\" ? cb(null) : cb(null, result)));\n };\n const p = (base.promises ?? {}) as Record<string, AnyFn>;\n return {\n existsSync: over(\"existsSync\", base.existsSync),\n readFileSync: over(\"readFileSync\", base.readFileSync),\n statSync: over(\"statSync\", base.statSync),\n lstatSync: over(\"statSync\", base.lstatSync),\n readdirSync: over(\"readdirSync\", base.readdirSync),\n accessSync: over(\"accessSync\", base.accessSync),\n readFile: callback(\"readFileSync\", base.readFile),\n stat: callback(\"statSync\", base.stat),\n lstat: callback(\"statSync\", base.lstat),\n readdir: callback(\"readdirSync\", base.readdir),\n access: callback(\"accessSync\", base.access),\n promises: bundleFsPromises(p),\n };\n}\n\n/** `node:fs/promises` with `/bundle` paths answered from the registry. */\nexport function bundleFsPromises<T extends Record<string, any>>(base: T): Record<string, unknown> {\n const promised = (op: keyof typeof sync, own: AnyFn | undefined) =>\n async function (this: unknown, path: unknown, ...rest: unknown[]) {\n const name = bundleName(path);\n if (name === undefined) return own?.call(this, path, ...rest);\n const result = (sync[op] as AnyFn)(name, path, ...rest);\n return op === \"accessSync\" ? undefined : result;\n };\n return {\n ...base,\n readFile: promised(\"readFileSync\", base.readFile),\n stat: promised(\"statSync\", base.stat),\n lstat: promised(\"statSync\", base.lstat),\n readdir: promised(\"readdirSync\", base.readdir),\n access: promised(\"accessSync\", base.access),\n };\n}\n"]}
@@ -4,7 +4,13 @@ export declare const writeFileSync: (path?: unknown) => never;
4
4
  export declare const statSync: (path?: unknown) => never;
5
5
  export declare const lstatSync: (path?: unknown) => never;
6
6
  export declare const readdirSync: (path?: unknown) => never;
7
+ export declare const accessSync: (path?: unknown) => never;
7
8
  export declare const mkdirSync: (path?: unknown) => never;
9
+ export declare const readFile: (path: unknown, ...rest: unknown[]) => void;
10
+ export declare const stat: (path: unknown, ...rest: unknown[]) => void;
11
+ export declare const lstat: (path: unknown, ...rest: unknown[]) => void;
12
+ export declare const readdir: (path: unknown, ...rest: unknown[]) => void;
13
+ export declare const access: (path: unknown, ...rest: unknown[]) => void;
8
14
  export declare const promises: {
9
15
  readFile: (path?: unknown) => Promise<never>;
10
16
  writeFile: (path?: unknown) => Promise<never>;
@@ -15,13 +21,19 @@ export declare const promises: {
15
21
  access: (path?: unknown) => Promise<never>;
16
22
  };
17
23
  declare const _default: {
18
- existsSync: typeof existsSync;
24
+ existsSync: (_path?: unknown) => boolean;
19
25
  readFileSync: (path?: unknown) => never;
20
26
  writeFileSync: (path?: unknown) => never;
21
27
  statSync: (path?: unknown) => never;
22
28
  lstatSync: (path?: unknown) => never;
23
29
  readdirSync: (path?: unknown) => never;
30
+ accessSync: (path?: unknown) => never;
24
31
  mkdirSync: (path?: unknown) => never;
32
+ readFile: (path: unknown, ...rest: unknown[]) => void;
33
+ stat: (path: unknown, ...rest: unknown[]) => void;
34
+ lstat: (path: unknown, ...rest: unknown[]) => void;
35
+ readdir: (path: unknown, ...rest: unknown[]) => void;
36
+ access: (path: unknown, ...rest: unknown[]) => void;
25
37
  promises: {
26
38
  readFile: (path?: unknown) => Promise<never>;
27
39
  writeFile: (path?: unknown) => Promise<never>;