@ricsam/isolate 0.1.12 → 0.1.13

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 (48) hide show
  1. package/README.md +15 -0
  2. package/dist/cjs/bridge/runtime-bindings.cjs +11 -10
  3. package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
  4. package/dist/cjs/bridge/sandbox-isolate.cjs +58 -2
  5. package/dist/cjs/bridge/sandbox-isolate.cjs.map +3 -3
  6. package/dist/cjs/host/create-isolate-host.cjs +7 -2
  7. package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
  8. package/dist/cjs/host/nested-host-controller.cjs +36 -4
  9. package/dist/cjs/host/nested-host-controller.cjs.map +3 -3
  10. package/dist/cjs/internal/client/connection.cjs +9 -9
  11. package/dist/cjs/internal/client/connection.cjs.map +3 -3
  12. package/dist/cjs/internal/runtime/index.cjs +5 -2
  13. package/dist/cjs/internal/runtime/index.cjs.map +3 -3
  14. package/dist/cjs/internal/typecheck/isolate-types.cjs +50 -1
  15. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
  16. package/dist/cjs/package.json +1 -1
  17. package/dist/cjs/runtime/namespaced-runtime.cjs +4 -1
  18. package/dist/cjs/runtime/namespaced-runtime.cjs.map +3 -3
  19. package/dist/cjs/runtime/test-event-subscriptions.cjs +76 -0
  20. package/dist/cjs/runtime/test-event-subscriptions.cjs.map +10 -0
  21. package/dist/cjs/runtime/test-runtime.cjs +26 -3
  22. package/dist/cjs/runtime/test-runtime.cjs.map +3 -3
  23. package/dist/mjs/bridge/runtime-bindings.mjs +11 -10
  24. package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
  25. package/dist/mjs/bridge/sandbox-isolate.mjs +58 -2
  26. package/dist/mjs/bridge/sandbox-isolate.mjs.map +3 -3
  27. package/dist/mjs/host/create-isolate-host.mjs +7 -2
  28. package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
  29. package/dist/mjs/host/nested-host-controller.mjs +36 -4
  30. package/dist/mjs/host/nested-host-controller.mjs.map +3 -3
  31. package/dist/mjs/internal/client/connection.mjs +9 -9
  32. package/dist/mjs/internal/client/connection.mjs.map +3 -3
  33. package/dist/mjs/internal/runtime/index.mjs +5 -2
  34. package/dist/mjs/internal/runtime/index.mjs.map +3 -3
  35. package/dist/mjs/internal/typecheck/isolate-types.mjs +50 -1
  36. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
  37. package/dist/mjs/package.json +1 -1
  38. package/dist/mjs/runtime/namespaced-runtime.mjs +4 -1
  39. package/dist/mjs/runtime/namespaced-runtime.mjs.map +3 -3
  40. package/dist/mjs/runtime/test-event-subscriptions.mjs +36 -0
  41. package/dist/mjs/runtime/test-event-subscriptions.mjs.map +10 -0
  42. package/dist/mjs/runtime/test-runtime.mjs +26 -3
  43. package/dist/mjs/runtime/test-runtime.mjs.map +3 -3
  44. package/dist/types/internal/typecheck/isolate-types.d.ts +2 -2
  45. package/dist/types/runtime/namespaced-runtime.d.ts +3 -1
  46. package/dist/types/runtime/test-event-subscriptions.d.ts +12 -0
  47. package/dist/types/types.d.ts +6 -0
  48. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@ricsam/isolate",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "commonjs"
5
5
  }
@@ -69,6 +69,7 @@ function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
69
69
  unsubscribe();
70
70
  }
71
71
  subscriptions.clear();
72
+ options?.testEvents.clear();
72
73
  options?.onRelease?.();
73
74
  };
74
75
  const ensureActive = () => {
@@ -76,6 +77,7 @@ function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
76
77
  throw createStateError(state, invalidationReason);
77
78
  }
78
79
  };
80
+ options.testEvents.setEnsureUsable(ensureActive);
79
81
  return {
80
82
  async eval(code, evalOptions) {
81
83
  ensureActive();
@@ -159,6 +161,7 @@ function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
159
161
  options?.abortBindings?.(reason);
160
162
  release();
161
163
  },
164
+ test: options.testEvents.api,
162
165
  events: {
163
166
  on: (event, handler) => {
164
167
  ensureActive();
@@ -178,4 +181,4 @@ function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
178
181
  };
179
182
  }
180
183
 
181
- //# debugId=C53D7A15A7B0203A64756E2164756E21
184
+ //# debugId=B2B656F046B5119964756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/runtime/namespaced-runtime.ts"],
4
4
  "sourcesContent": [
5
- "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.cjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): void;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void;\n onRelease?: () => void;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n"
5
+ "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type { TestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.cjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): void;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void;\n onRelease?: () => void;\n testEvents: TestEventSubscriptions;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.testEvents.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n options.testEvents.setEnsureUsable(ensureActive);\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n test: options.testEvents.api,\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "C53D7A15A7B0203A64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "B2B656F046B5119964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,76 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
8
+ var __toCommonJS = (from) => {
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
10
+ if (entry)
11
+ return entry;
12
+ entry = __defProp({}, "__esModule", { value: true });
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ __moduleCache.set(from, entry);
22
+ return entry;
23
+ };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
29
+ var __export = (target, all) => {
30
+ for (var name in all)
31
+ __defProp(target, name, {
32
+ get: all[name],
33
+ enumerable: true,
34
+ configurable: true,
35
+ set: __exportSetter.bind(all, name)
36
+ });
37
+ };
38
+
39
+ // src/runtime/test-event-subscriptions.ts
40
+ var exports_test_event_subscriptions = {};
41
+ __export(exports_test_event_subscriptions, {
42
+ createTestEventSubscriptions: () => createTestEventSubscriptions
43
+ });
44
+ module.exports = __toCommonJS(exports_test_event_subscriptions);
45
+ function createTestEventSubscriptions(ensureUsable) {
46
+ let currentEnsureUsable = ensureUsable;
47
+ const handlers = new Set;
48
+ return {
49
+ api: {
50
+ onEvent(handler) {
51
+ currentEnsureUsable?.();
52
+ handlers.add(handler);
53
+ return () => {
54
+ handlers.delete(handler);
55
+ };
56
+ }
57
+ },
58
+ emit(event) {
59
+ for (const handler of handlers) {
60
+ try {
61
+ handler(event);
62
+ } catch (error) {
63
+ console.error("[isolate-test] Test event handler failed.", error);
64
+ }
65
+ }
66
+ },
67
+ clear() {
68
+ handlers.clear();
69
+ },
70
+ setEnsureUsable(nextEnsureUsable) {
71
+ currentEnsureUsable = nextEnsureUsable;
72
+ }
73
+ };
74
+ }
75
+
76
+ //# debugId=E524F058E4A8586664756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/runtime/test-event-subscriptions.ts"],
4
+ "sourcesContent": [
5
+ "import type { TestEvent } from \"../types.cjs\";\n\ninterface TestEventApi {\n onEvent(handler: (event: TestEvent) => void): () => void;\n}\n\nexport interface TestEventSubscriptions {\n readonly api: TestEventApi;\n emit(event: TestEvent): void;\n clear(): void;\n setEnsureUsable(ensureUsable?: () => void): void;\n}\n\nexport function createTestEventSubscriptions(\n ensureUsable?: () => void,\n): TestEventSubscriptions {\n let currentEnsureUsable = ensureUsable;\n const handlers = new Set<(event: TestEvent) => void>();\n\n return {\n api: {\n onEvent(handler) {\n currentEnsureUsable?.();\n handlers.add(handler);\n return () => {\n handlers.delete(handler);\n };\n },\n },\n emit(event) {\n for (const handler of handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(\"[isolate-test] Test event handler failed.\", error);\n }\n }\n },\n clear() {\n handlers.clear();\n },\n setEnsureUsable(nextEnsureUsable) {\n currentEnsureUsable = nextEnsureUsable;\n },\n };\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,SAAS,4BAA4B,CAC1C,cACwB;AAAA,EACxB,IAAI,sBAAsB;AAAA,EAC1B,MAAM,WAAW,IAAI;AAAA,EAErB,OAAO;AAAA,IACL,KAAK;AAAA,MACH,OAAO,CAAC,SAAS;AAAA,QACf,sBAAsB;AAAA,QACtB,SAAS,IAAI,OAAO;AAAA,QACpB,OAAO,MAAM;AAAA,UACX,SAAS,OAAO,OAAO;AAAA;AAAA;AAAA,IAG7B;AAAA,IACA,IAAI,CAAC,OAAO;AAAA,MACV,WAAW,WAAW,UAAU;AAAA,QAC9B,IAAI;AAAA,UACF,QAAQ,KAAK;AAAA,UACb,OAAO,OAAO;AAAA,UACd,QAAQ,MAAM,6CAA6C,KAAK;AAAA;AAAA,MAEpE;AAAA;AAAA,IAEF,KAAK,GAAG;AAAA,MACN,SAAS,MAAM;AAAA;AAAA,IAEjB,eAAe,CAAC,kBAAkB;AAAA,MAChC,sBAAsB;AAAA;AAAA,EAE1B;AAAA;",
8
+ "debugId": "E524F058E4A8586664756E2164756E21",
9
+ "names": []
10
+ }
@@ -45,21 +45,36 @@ module.exports = __toCommonJS(exports_test_runtime);
45
45
  var import_diagnostics = require("../bridge/diagnostics.cjs");
46
46
  var import_runtime_bindings = require("../bridge/runtime-bindings.cjs");
47
47
  var import_client = require("../internal/client/index.cjs");
48
+ var import_test_event_subscriptions = require("./test-event-subscriptions.cjs");
49
+ function createDisposedTestRuntimeError() {
50
+ return new Error("Test runtime has already been disposed.");
51
+ }
48
52
  async function createTestRuntimeAdapter(createRuntime, options, adapterOptions) {
49
53
  const diagnostics = import_diagnostics.createRuntimeDiagnostics();
54
+ const testEvents = import_test_event_subscriptions.createTestEventSubscriptions();
50
55
  let runtimeId = options.key ?? "test-runtime";
56
+ let isDisposed = false;
51
57
  const bindingsAdapter = import_runtime_bindings.createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, adapterOptions);
52
58
  const runtime = await createRuntime({
53
59
  ...bindingsAdapter.runtimeOptions,
54
60
  cwd: options.cwd,
55
61
  memoryLimitMB: options.memoryLimitMB,
56
62
  executionTimeout: options.executionTimeout,
57
- testEnvironment: true
63
+ testEnvironment: {
64
+ onEvent: (event) => testEvents.emit(event)
65
+ }
58
66
  });
59
67
  runtimeId = runtime.id;
60
68
  let lastRun;
69
+ const ensureActive = () => {
70
+ if (isDisposed) {
71
+ throw createDisposedTestRuntimeError();
72
+ }
73
+ };
74
+ testEvents.setEnsureUsable(ensureActive);
61
75
  return {
62
76
  async run(code, runOptions) {
77
+ ensureActive();
63
78
  diagnostics.lifecycleState = "active";
64
79
  try {
65
80
  await runtime.testEnvironment.reset();
@@ -77,6 +92,7 @@ async function createTestRuntimeAdapter(createRuntime, options, adapterOptions)
77
92
  }
78
93
  },
79
94
  async diagnostics() {
95
+ ensureActive();
80
96
  const runtimeDiagnostics = {
81
97
  ...diagnostics,
82
98
  reused: runtime.reused
@@ -94,6 +110,11 @@ async function createTestRuntimeAdapter(createRuntime, options, adapterOptions)
94
110
  };
95
111
  },
96
112
  async dispose(disposeOptions) {
113
+ if (isDisposed) {
114
+ testEvents.clear();
115
+ return;
116
+ }
117
+ isDisposed = true;
97
118
  diagnostics.lifecycleState = "disposing";
98
119
  try {
99
120
  bindingsAdapter.abort(disposeOptions?.reason);
@@ -105,9 +126,11 @@ async function createTestRuntimeAdapter(createRuntime, options, adapterOptions)
105
126
  }
106
127
  } finally {
107
128
  diagnostics.lifecycleState = "idle";
129
+ testEvents.clear();
108
130
  }
109
- }
131
+ },
132
+ test: testEvents.api
110
133
  };
111
134
  }
112
135
 
113
- //# debugId=C4A9F9798611162364756E2164756E21
136
+ //# debugId=3C3652D67988D41064756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/runtime/test-runtime.ts"],
4
4
  "sourcesContent": [
5
- "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.cjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.cjs\";\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"test-runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: true,\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n\n return {\n async run(code, runOptions) {\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n };\n}\n"
5
+ "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.cjs\";\nimport { createTestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.cjs\";\n\nfunction createDisposedTestRuntimeError(): Error {\n return new Error(\"Test runtime has already been disposed.\");\n}\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = options.key ?? \"test-runtime\";\n let isDisposed = false;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: {\n onEvent: (event) => testEvents.emit(event),\n },\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedTestRuntimeError();\n }\n };\n testEvents.setEnsureUsable(ensureActive);\n\n return {\n async run(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n testEvents.clear();\n return;\n }\n\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n testEvents.clear();\n }\n },\n test: testEvents.api,\n };\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAHP;AAOO,IAHP;AAKqC,IAArC;AAOA,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,4CAAyB;AAAA,EAC7C,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,aACA,cACF;AAAA,EACA,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB;AAAA,EACnB,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EAEJ,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,4CAAyB,eAAe,gBAAgB,IACxD;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA;AAAA,SAEI,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,QAC5C,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,mCAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,EAGnC;AAAA;",
8
- "debugId": "C4A9F9798611162364756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAHP;AAOO,IAHP;AAKqC,IAArC;AAC6C,IAA7C;AAOA,SAAS,8BAA8B,GAAU;AAAA,EAC/C,OAAO,IAAI,MAAM,yCAAyC;AAAA;AAG5D,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,4CAAyB;AAAA,EAC7C,MAAM,aAAa,6DAA6B;AAAA,EAChD,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,IAAI,aAAa;AAAA,EACjB,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,aACA,cACF;AAAA,EACA,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB;AAAA,MACf,SAAS,CAAC,UAAU,WAAW,KAAK,KAAK;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EACJ,MAAM,eAAe,MAAY;AAAA,IAC/B,IAAI,YAAY;AAAA,MACd,MAAM,+BAA+B;AAAA,IACvC;AAAA;AAAA,EAEF,WAAW,gBAAgB,YAAY;AAAA,EAEvC,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,aAAa;AAAA,MACb,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,4CAAyB,eAAe,gBAAgB,IACxD;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA;AAAA,SAEI,QAAO,CAAC,gBAAgB;AAAA,MAC5B,IAAI,YAAY;AAAA,QACd,WAAW,MAAM;AAAA,QACjB;AAAA,MACF;AAAA,MAEA,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,QAC5C,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,mCAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA,QAC7B,WAAW,MAAM;AAAA;AAAA;AAAA,IAGrB,MAAM,WAAW;AAAA,EACnB;AAAA;",
8
+ "debugId": "3C3652D67988D41064756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -134,9 +134,9 @@ function createRuntimeBindingsAdapter(bindings, getRuntimeId, diagnostics, optio
134
134
  return {
135
135
  runtimeOptions: {
136
136
  console: bindings.console?.onEntry ? {
137
- onEntry: (entry) => {
137
+ onEntry: async (entry) => {
138
138
  const context = contextFactory.createHostCallContext(`console:${crypto.randomUUID()}`);
139
- bindings.console?.onEntry?.(entry, context);
139
+ await bindings.console?.onEntry?.(entry, context);
140
140
  }
141
141
  } : undefined,
142
142
  fetch: bindings.fetch ? async (url, init) => {
@@ -308,9 +308,9 @@ function createBrowserPlaywrightOptions(browser, createHostCallContext) {
308
308
  handler: browser.handler,
309
309
  hasDefaultPage: false,
310
310
  console: browser.captureConsole ?? false,
311
- onEvent: browser.onEvent ? (event) => {
311
+ onEvent: browser.onEvent ? async (event) => {
312
312
  const context = createHostCallContext(`browser:event:${event.type}:${crypto.randomUUID()}`);
313
- browser.onEvent?.(event, context);
313
+ await browser.onEvent?.(event, context);
314
314
  } : undefined
315
315
  };
316
316
  }
@@ -340,9 +340,9 @@ function createBrowserPlaywrightOptions(browser, createHostCallContext) {
340
340
  }),
341
341
  hasDefaultPage: false,
342
342
  console: browser.captureConsole ?? false,
343
- onEvent: browser.onEvent ? (event) => {
343
+ onEvent: browser.onEvent ? async (event) => {
344
344
  const context = createHostCallContext(`browser:event:${event.type}:${crypto.randomUUID()}`);
345
- browser.onEvent?.(event, context);
345
+ await browser.onEvent?.(event, context);
346
346
  } : undefined
347
347
  };
348
348
  }
@@ -467,9 +467,10 @@ function createCustomFunctions(tools, nestedHost, createHostCallContext, diagnos
467
467
  definitions.__isolateHost_drainCallbacks = {
468
468
  type: "async",
469
469
  fn: async (...args) => {
470
- const callback = args[0];
471
- if (typeof callback === "function") {
472
- await callback();
470
+ const settleTurns = typeof args[0] === "number" && Number.isFinite(args[0]) && args[0] > 0 ? Math.floor(args[0]) : 1;
471
+ for (let index = 0;index < settleTurns; index += 1) {
472
+ await Promise.resolve();
473
+ await new Promise((resolve) => setTimeout(resolve, 0));
473
474
  }
474
475
  }
475
476
  };
@@ -482,4 +483,4 @@ export {
482
483
  createRuntimeBindingsAdapter
483
484
  };
484
485
 
485
- //# debugId=E09A2881942578A764756E2164756E21
486
+ //# debugId=0DD0C4D7159651C164756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/bridge/runtime-bindings.ts"],
4
4
  "sourcesContent": [
5
- "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.mjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.mjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.mjs\";\nimport { getRequestContext } from \"./request-context.mjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n ModuleResolveResult,\n ModuleResolver,\n ModuleSource,\n ToolHandler,\n} from \"../types.mjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.mjs\";\n\nexport interface RuntimeBindingsAdapter {\n runtimeOptions: RuntimeOptions;\n abort(reason?: unknown): void;\n reset(reason?: unknown): void;\n}\n\nexport interface RuntimeBindingsAdapterOptions {\n nestedHost?: NestedHostBindings;\n}\n\ninterface ResponseDescriptor {\n __type: \"ResponseRef\";\n status: number;\n statusText: string;\n headers: Array<[string, string]>;\n body?: number[] | null;\n}\n\ninterface AsyncIteratorMarkedHandler {\n __isolateCallbackKind?: \"asyncGenerator\";\n}\n\nfunction createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n\n const error = new Error(\n typeof reason === \"string\" ? reason : \"The operation was aborted\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction createAbortSignalComposer() {\n const controllers = new Set<AbortController>();\n\n const compose = (...signals: Array<AbortSignal | undefined>): AbortSignal => {\n const activeSignals = signals.filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n\n if (activeSignals.length === 0) {\n return AbortSignal.abort(createAbortError());\n }\n\n const aborted = activeSignals.find((signal) => signal.aborted);\n if (aborted) {\n return AbortSignal.abort(aborted.reason ?? createAbortError());\n }\n\n if (activeSignals.length === 1) {\n return activeSignals[0]!;\n }\n\n const controller = new AbortController();\n controllers.add(controller);\n\n const cleanup = () => {\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n controllers.delete(controller);\n };\n\n const onAbort = (event: Event) => {\n cleanup();\n const signal = event.target as AbortSignal | null;\n controller.abort(signal?.reason ?? createAbortError());\n };\n\n for (const signal of activeSignals) {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n controller.signal.addEventListener(\"abort\", cleanup, { once: true });\n\n return controller.signal;\n };\n\n const abortAll = (reason?: unknown) => {\n const error = createAbortError(reason);\n for (const controller of controllers) {\n if (!controller.signal.aborted) {\n controller.abort(error);\n }\n }\n controllers.clear();\n };\n\n return { compose, abortAll };\n}\n\nfunction createHostCallContextFactory(getRuntimeId: () => string) {\n let runtimeController = new AbortController();\n const composedSignals = createAbortSignalComposer();\n\n const createHostCallContext = (\n resourceId: string,\n baseSignal?: AbortSignal,\n ): HostCallContext => {\n const requestContext = getRequestContext();\n const ownerSignal = requestContext.signal ?? runtimeController.signal;\n const signal = baseSignal\n ? composedSignals.compose(ownerSignal, baseSignal)\n : ownerSignal;\n\n return {\n signal,\n runtimeId: getRuntimeId(),\n requestId: requestContext.requestId,\n resourceId,\n metadata: requestContext.metadata,\n };\n };\n\n const abort = (reason?: unknown) => {\n if (!runtimeController.signal.aborted) {\n runtimeController.abort(createAbortError(reason));\n }\n composedSignals.abortAll(reason);\n };\n\n const reset = (reason?: unknown) => {\n abort(reason);\n runtimeController = new AbortController();\n };\n\n return { createHostCallContext, abort, reset };\n}\n\nasync function normalizeModuleResolveResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n const resolved = await result;\n if (resolved == null) {\n return null;\n }\n\n if (typeof resolved === \"string\") {\n const filename = path.posix.basename(specifier) || \"__virtual_module__.js\";\n const resolveDir = specifier.startsWith(\"/\")\n ? path.posix.dirname(specifier)\n : fallbackResolveDir ?? \"/\";\n return {\n code: resolved,\n filename,\n resolveDir,\n };\n }\n\n return {\n static: resolved.static,\n filename: resolved.filename,\n resolveDir: resolved.resolveDir,\n code: resolved.code,\n };\n}\n\nfunction isAsyncGeneratorFunction(handler: ToolHandler): boolean {\n return (\n handler.constructor.name === \"AsyncGeneratorFunction\" ||\n (handler as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n );\n}\n\nfunction isResponseDescriptor(value: unknown): value is ResponseDescriptor {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as { __type?: unknown }).__type === \"ResponseRef\" &&\n Array.isArray((value as { headers?: unknown }).headers),\n );\n}\n\nfunction normalizeFetchResponse(value: unknown): Response {\n if (value instanceof Response) {\n return value;\n }\n\n if (isResponseDescriptor(value)) {\n const body = value.body ? new Uint8Array(value.body) : null;\n return new Response(body, {\n status: value.status,\n statusText: value.statusText,\n headers: value.headers,\n });\n }\n\n throw new TypeError(\"Fetch bindings must return a Response.\");\n}\n\nexport function createRuntimeBindingsAdapter(\n bindings: HostBindings,\n getRuntimeId: () => string,\n diagnostics: MutableRuntimeDiagnostics,\n options?: RuntimeBindingsAdapterOptions,\n): RuntimeBindingsAdapter {\n const contextFactory = createHostCallContextFactory(getRuntimeId);\n const moduleLoader = createModuleLoader(\n bindings.modules,\n contextFactory.createHostCallContext,\n diagnostics,\n options?.nestedHost,\n );\n const customFunctions = createCustomFunctions(\n bindings.tools,\n options?.nestedHost,\n contextFactory.createHostCallContext,\n diagnostics,\n );\n const browserPlaywright = createBrowserPlaywrightOptions(\n bindings.browser,\n contextFactory.createHostCallContext,\n );\n\n return {\n runtimeOptions: {\n console: bindings.console?.onEntry\n ? {\n onEntry: (entry) => {\n const context = contextFactory.createHostCallContext(\n `console:${crypto.randomUUID()}`,\n );\n bindings.console?.onEntry?.(entry, context);\n },\n }\n : undefined,\n fetch: bindings.fetch\n ? async (url, init) => {\n diagnostics.pendingFetches += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `fetch:${crypto.randomUUID()}`,\n init.signal,\n );\n const request = new Request(url, {\n method: init.method,\n headers: init.headers,\n body: init.rawBody ? init.rawBody.slice(0) : null,\n signal: context.signal,\n });\n return normalizeFetchResponse(\n await bindings.fetch!(request, context),\n );\n } finally {\n diagnostics.pendingFetches -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n fs: bindings.files\n ? {\n readFile: bindings.files.readFile\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:read:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readFile!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n writeFile: bindings.files.writeFile\n ? async (filePath: string, data: ArrayBuffer) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:write:${crypto.randomUUID()}`,\n );\n return await bindings.files!.writeFile!(filePath, data, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n unlink: bindings.files.unlink\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:unlink:${crypto.randomUUID()}`,\n );\n return await bindings.files!.unlink!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n readdir: bindings.files.readdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:readdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n mkdir: bindings.files.mkdir\n ? async (dirPath: string, options?: { recursive?: boolean }) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:mkdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.mkdir!(dirPath, options, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rmdir: bindings.files.rmdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rmdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rmdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n stat: bindings.files.stat\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:stat:${crypto.randomUUID()}`,\n );\n return await bindings.files!.stat!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rename: bindings.files.rename\n ? async (from: string, to: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rename:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rename!(from, to, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n }\n : undefined,\n moduleLoader,\n customFunctions,\n playwright: browserPlaywright,\n },\n abort: contextFactory.abort,\n reset: contextFactory.reset,\n };\n}\n\nfunction createModuleLoader(\n resolver: ModuleResolver | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n diagnostics: MutableRuntimeDiagnostics,\n nestedHost: NestedHostBindings | undefined,\n): ModuleLoaderCallback | undefined {\n if (!resolver && !nestedHost) {\n return undefined;\n }\n\n return async (specifier, importer) => {\n if (nestedHost && specifier === SANDBOX_ISOLATE_MODULE_SPECIFIER) {\n return {\n code: SANDBOX_ISOLATE_MODULE_SOURCE,\n filename: \"isolate-sandbox.js\",\n resolveDir: \"/\",\n static: true,\n };\n }\n\n if (!resolver) {\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n diagnostics.pendingModules += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(`module:${crypto.randomUUID()}`);\n const resolved = await normalizeExplicitModuleResult(\n specifier,\n resolver.resolve(specifier, importer, context),\n importer.resolveDir,\n );\n if (!resolved) {\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n return resolved;\n } finally {\n diagnostics.pendingModules -= 1;\n diagnostics.activeResources -= 1;\n }\n };\n}\n\nexport async function tryResolveModule(\n resolver: ModuleResolver | undefined,\n specifier: string,\n importer: { path: string; resolveDir: string },\n context: HostCallContext,\n): Promise<ModuleSource | null> {\n if (!resolver) {\n return null;\n }\n return normalizeModuleResolveResult(\n specifier,\n resolver.resolve(specifier, importer, context),\n importer.resolveDir,\n );\n}\n\nexport async function normalizeExplicitModuleResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);\n}\n\nfunction createBrowserPlaywrightOptions(\n browser: HostBindings[\"browser\"] | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n): RuntimeOptions[\"playwright\"] | undefined {\n if (!browser) {\n return undefined;\n }\n\n const hasHandler = typeof browser.handler === \"function\";\n const hasFactoryBindings =\n typeof browser.createContext === \"function\" ||\n typeof browser.createPage === \"function\" ||\n typeof browser.readFile === \"function\" ||\n typeof browser.writeFile === \"function\";\n\n if (hasHandler && hasFactoryBindings) {\n throw new Error(\n \"browser bindings must use either handler-first or factory-first mode, not both.\",\n );\n }\n\n if (hasHandler) {\n return {\n handler: browser.handler,\n hasDefaultPage: false,\n console: browser.captureConsole ?? false,\n onEvent: browser.onEvent\n ? (event) => {\n const context = createHostCallContext(\n `browser:event:${event.type}:${crypto.randomUUID()}`,\n );\n browser.onEvent?.(event, context);\n }\n : undefined,\n };\n }\n\n return {\n handler: createPlaywrightFactoryHandler({\n createContext: browser.createContext\n ? async (options) => {\n const context = createHostCallContext(\n `browser:createContext:${crypto.randomUUID()}`,\n );\n return await browser.createContext!(options, context);\n }\n : undefined,\n createPage: browser.createPage\n ? async (contextHandle) => {\n const context = createHostCallContext(\n `browser:createPage:${crypto.randomUUID()}`,\n );\n return await browser.createPage!(contextHandle, context);\n }\n : undefined,\n readFile: browser.readFile\n ? async (filePath) => {\n const context = createHostCallContext(\n `browser:readFile:${crypto.randomUUID()}`,\n );\n const buffer = await browser.readFile!(filePath, context);\n return {\n name: path.basename(filePath),\n mimeType: \"application/octet-stream\",\n buffer,\n };\n }\n : undefined,\n writeFile: browser.writeFile\n ? async (filePath, data) => {\n const context = createHostCallContext(\n `browser:writeFile:${crypto.randomUUID()}`,\n );\n await browser.writeFile!(filePath, data, context);\n }\n : undefined,\n }),\n hasDefaultPage: false,\n console: browser.captureConsole ?? false,\n onEvent: browser.onEvent\n ? (event) => {\n const context = createHostCallContext(\n `browser:event:${event.type}:${crypto.randomUUID()}`,\n );\n browser.onEvent?.(event, context);\n }\n : undefined,\n };\n}\n\nfunction createCustomFunctions(\n tools: HostBindings[\"tools\"] | undefined,\n nestedHost: NestedHostBindings | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n diagnostics: MutableRuntimeDiagnostics,\n): RuntimeOptions[\"customFunctions\"] {\n const definitions: NonNullable<RuntimeOptions[\"customFunctions\"]> = {};\n\n if (tools) {\n for (const [name, handler] of Object.entries(tools)) {\n if (isAsyncGeneratorFunction(handler)) {\n definitions[name] = {\n type: \"asyncIterator\",\n fn: (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n const context = createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n const iteratorResult = handler(\n ...args,\n context,\n ) as\n | AsyncIterable<unknown>\n | Promise<AsyncIterable<unknown>>;\n return (async function* () {\n const iterator = await iteratorResult;\n const iterable =\n iterator &&\n typeof (iterator as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === \"function\"\n ? (iterator as AsyncIterable<unknown>)\n : iterator &&\n typeof (iterator as { next?: unknown }).next === \"function\"\n ? {\n [Symbol.asyncIterator]() {\n return iterator as unknown as AsyncIterator<unknown>;\n },\n }\n : null;\n try {\n if (!iterable) {\n throw new TypeError(\n `Tool ${name} did not return an async iterator.`,\n );\n }\n yield* iterable;\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n })();\n },\n };\n continue;\n }\n\n definitions[name] = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n return await handler(...args, context);\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n },\n };\n }\n }\n\n if (nestedHost) {\n const reservedNames = [\n \"__isolateHost_createHost\",\n \"__isolateHost_closeHost\",\n \"__isolateHost_hostDiagnostics\",\n \"__isolateHost_createResource\",\n \"__isolateHost_disposeNamespace\",\n \"__isolateHost_callResource\",\n \"__isolateHost_drainCallbacks\",\n ];\n for (const name of reservedNames) {\n if (definitions[name]) {\n throw new Error(\n `Tool name ${name} is reserved for internal sandbox host bindings.`,\n );\n }\n }\n\n definitions.__isolateHost_createHost = {\n type: \"async\",\n fn: async () => {\n const context = createHostCallContext(\n `nestedHost:createHost:${crypto.randomUUID()}`,\n );\n return await nestedHost.createHost(context);\n },\n };\n definitions.__isolateHost_closeHost = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const context = createHostCallContext(\n `nestedHost:closeHost:${crypto.randomUUID()}`,\n );\n await nestedHost.closeHost(hostId, context);\n },\n };\n definitions.__isolateHost_hostDiagnostics = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const context = createHostCallContext(\n `nestedHost:diagnostics:${crypto.randomUUID()}`,\n );\n return await nestedHost.diagnostics(hostId, context);\n },\n };\n definitions.__isolateHost_createResource = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const kind = args[1] as NestedResourceKind;\n const resourceOptions = args[2] as\n | CreateRuntimeOptions\n | CreateAppServerOptions\n | CreateTestRuntimeOptions\n | {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const context = createHostCallContext(\n `nestedHost:createResource:${kind}:${crypto.randomUUID()}`,\n );\n return await nestedHost.createResource(\n hostId,\n kind,\n resourceOptions,\n context,\n );\n },\n };\n definitions.__isolateHost_disposeNamespace = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const key = args[1] as string;\n const options =\n ((args[2] as { reason?: string } | null) ?? undefined);\n const context = createHostCallContext(\n `nestedHost:disposeNamespace:${crypto.randomUUID()}`,\n );\n await nestedHost.disposeNamespace(hostId, key, options, context);\n },\n };\n definitions.__isolateHost_callResource = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const kind = args[0] as NestedResourceKind;\n const resourceId = args[1] as string;\n const method = args[2] as string;\n const methodArgs = args[3] as unknown[];\n const context = createHostCallContext(\n `nestedHost:callResource:${kind}:${method}:${crypto.randomUUID()}`,\n );\n return await nestedHost.callResource(\n kind,\n resourceId,\n method,\n Array.isArray(methodArgs) ? methodArgs : [],\n context,\n );\n },\n };\n definitions.__isolateHost_drainCallbacks = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const callback = args[0];\n if (typeof callback === \"function\") {\n await callback();\n }\n },\n };\n }\n\n return Object.keys(definitions).length > 0 ? definitions : undefined;\n}\n"
5
+ "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.mjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.mjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.mjs\";\nimport { getRequestContext } from \"./request-context.mjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n ModuleResolveResult,\n ModuleResolver,\n ModuleSource,\n ToolHandler,\n} from \"../types.mjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.mjs\";\n\nexport interface RuntimeBindingsAdapter {\n runtimeOptions: RuntimeOptions;\n abort(reason?: unknown): void;\n reset(reason?: unknown): void;\n}\n\nexport interface RuntimeBindingsAdapterOptions {\n nestedHost?: NestedHostBindings;\n}\n\ninterface ResponseDescriptor {\n __type: \"ResponseRef\";\n status: number;\n statusText: string;\n headers: Array<[string, string]>;\n body?: number[] | null;\n}\n\ninterface AsyncIteratorMarkedHandler {\n __isolateCallbackKind?: \"asyncGenerator\";\n}\n\nfunction createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n\n const error = new Error(\n typeof reason === \"string\" ? reason : \"The operation was aborted\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction createAbortSignalComposer() {\n const controllers = new Set<AbortController>();\n\n const compose = (...signals: Array<AbortSignal | undefined>): AbortSignal => {\n const activeSignals = signals.filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n\n if (activeSignals.length === 0) {\n return AbortSignal.abort(createAbortError());\n }\n\n const aborted = activeSignals.find((signal) => signal.aborted);\n if (aborted) {\n return AbortSignal.abort(aborted.reason ?? createAbortError());\n }\n\n if (activeSignals.length === 1) {\n return activeSignals[0]!;\n }\n\n const controller = new AbortController();\n controllers.add(controller);\n\n const cleanup = () => {\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n controllers.delete(controller);\n };\n\n const onAbort = (event: Event) => {\n cleanup();\n const signal = event.target as AbortSignal | null;\n controller.abort(signal?.reason ?? createAbortError());\n };\n\n for (const signal of activeSignals) {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n controller.signal.addEventListener(\"abort\", cleanup, { once: true });\n\n return controller.signal;\n };\n\n const abortAll = (reason?: unknown) => {\n const error = createAbortError(reason);\n for (const controller of controllers) {\n if (!controller.signal.aborted) {\n controller.abort(error);\n }\n }\n controllers.clear();\n };\n\n return { compose, abortAll };\n}\n\nfunction createHostCallContextFactory(getRuntimeId: () => string) {\n let runtimeController = new AbortController();\n const composedSignals = createAbortSignalComposer();\n\n const createHostCallContext = (\n resourceId: string,\n baseSignal?: AbortSignal,\n ): HostCallContext => {\n const requestContext = getRequestContext();\n const ownerSignal = requestContext.signal ?? runtimeController.signal;\n const signal = baseSignal\n ? composedSignals.compose(ownerSignal, baseSignal)\n : ownerSignal;\n\n return {\n signal,\n runtimeId: getRuntimeId(),\n requestId: requestContext.requestId,\n resourceId,\n metadata: requestContext.metadata,\n };\n };\n\n const abort = (reason?: unknown) => {\n if (!runtimeController.signal.aborted) {\n runtimeController.abort(createAbortError(reason));\n }\n composedSignals.abortAll(reason);\n };\n\n const reset = (reason?: unknown) => {\n abort(reason);\n runtimeController = new AbortController();\n };\n\n return { createHostCallContext, abort, reset };\n}\n\nasync function normalizeModuleResolveResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n const resolved = await result;\n if (resolved == null) {\n return null;\n }\n\n if (typeof resolved === \"string\") {\n const filename = path.posix.basename(specifier) || \"__virtual_module__.js\";\n const resolveDir = specifier.startsWith(\"/\")\n ? path.posix.dirname(specifier)\n : fallbackResolveDir ?? \"/\";\n return {\n code: resolved,\n filename,\n resolveDir,\n };\n }\n\n return {\n static: resolved.static,\n filename: resolved.filename,\n resolveDir: resolved.resolveDir,\n code: resolved.code,\n };\n}\n\nfunction isAsyncGeneratorFunction(handler: ToolHandler): boolean {\n return (\n handler.constructor.name === \"AsyncGeneratorFunction\" ||\n (handler as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n );\n}\n\nfunction isResponseDescriptor(value: unknown): value is ResponseDescriptor {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as { __type?: unknown }).__type === \"ResponseRef\" &&\n Array.isArray((value as { headers?: unknown }).headers),\n );\n}\n\nfunction normalizeFetchResponse(value: unknown): Response {\n if (value instanceof Response) {\n return value;\n }\n\n if (isResponseDescriptor(value)) {\n const body = value.body ? new Uint8Array(value.body) : null;\n return new Response(body, {\n status: value.status,\n statusText: value.statusText,\n headers: value.headers,\n });\n }\n\n throw new TypeError(\"Fetch bindings must return a Response.\");\n}\n\nexport function createRuntimeBindingsAdapter(\n bindings: HostBindings,\n getRuntimeId: () => string,\n diagnostics: MutableRuntimeDiagnostics,\n options?: RuntimeBindingsAdapterOptions,\n): RuntimeBindingsAdapter {\n const contextFactory = createHostCallContextFactory(getRuntimeId);\n const moduleLoader = createModuleLoader(\n bindings.modules,\n contextFactory.createHostCallContext,\n diagnostics,\n options?.nestedHost,\n );\n const customFunctions = createCustomFunctions(\n bindings.tools,\n options?.nestedHost,\n contextFactory.createHostCallContext,\n diagnostics,\n );\n const browserPlaywright = createBrowserPlaywrightOptions(\n bindings.browser,\n contextFactory.createHostCallContext,\n );\n\n return {\n runtimeOptions: {\n console: bindings.console?.onEntry\n ? {\n onEntry: async (entry) => {\n const context = contextFactory.createHostCallContext(\n `console:${crypto.randomUUID()}`,\n );\n await bindings.console?.onEntry?.(entry, context);\n },\n }\n : undefined,\n fetch: bindings.fetch\n ? async (url, init) => {\n diagnostics.pendingFetches += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `fetch:${crypto.randomUUID()}`,\n init.signal,\n );\n const request = new Request(url, {\n method: init.method,\n headers: init.headers,\n body: init.rawBody ? init.rawBody.slice(0) : null,\n signal: context.signal,\n });\n return normalizeFetchResponse(\n await bindings.fetch!(request, context),\n );\n } finally {\n diagnostics.pendingFetches -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n fs: bindings.files\n ? {\n readFile: bindings.files.readFile\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:read:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readFile!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n writeFile: bindings.files.writeFile\n ? async (filePath: string, data: ArrayBuffer) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:write:${crypto.randomUUID()}`,\n );\n return await bindings.files!.writeFile!(filePath, data, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n unlink: bindings.files.unlink\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:unlink:${crypto.randomUUID()}`,\n );\n return await bindings.files!.unlink!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n readdir: bindings.files.readdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:readdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.readdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n mkdir: bindings.files.mkdir\n ? async (dirPath: string, options?: { recursive?: boolean }) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:mkdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.mkdir!(dirPath, options, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rmdir: bindings.files.rmdir\n ? async (dirPath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rmdir:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rmdir!(dirPath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n stat: bindings.files.stat\n ? async (filePath: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:stat:${crypto.randomUUID()}`,\n );\n return await bindings.files!.stat!(filePath, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n rename: bindings.files.rename\n ? async (from: string, to: string) => {\n diagnostics.pendingFiles += 1;\n diagnostics.activeResources += 1;\n try {\n const context = contextFactory.createHostCallContext(\n `files:rename:${crypto.randomUUID()}`,\n );\n return await bindings.files!.rename!(from, to, context);\n } finally {\n diagnostics.pendingFiles -= 1;\n diagnostics.activeResources -= 1;\n }\n }\n : undefined,\n }\n : undefined,\n moduleLoader,\n customFunctions,\n playwright: browserPlaywright,\n },\n abort: contextFactory.abort,\n reset: contextFactory.reset,\n };\n}\n\nfunction createModuleLoader(\n resolver: ModuleResolver | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n diagnostics: MutableRuntimeDiagnostics,\n nestedHost: NestedHostBindings | undefined,\n): ModuleLoaderCallback | undefined {\n if (!resolver && !nestedHost) {\n return undefined;\n }\n\n return async (specifier, importer) => {\n if (nestedHost && specifier === SANDBOX_ISOLATE_MODULE_SPECIFIER) {\n return {\n code: SANDBOX_ISOLATE_MODULE_SOURCE,\n filename: \"isolate-sandbox.js\",\n resolveDir: \"/\",\n static: true,\n };\n }\n\n if (!resolver) {\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n diagnostics.pendingModules += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(`module:${crypto.randomUUID()}`);\n const resolved = await normalizeExplicitModuleResult(\n specifier,\n resolver.resolve(specifier, importer, context),\n importer.resolveDir,\n );\n if (!resolved) {\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n return resolved;\n } finally {\n diagnostics.pendingModules -= 1;\n diagnostics.activeResources -= 1;\n }\n };\n}\n\nexport async function tryResolveModule(\n resolver: ModuleResolver | undefined,\n specifier: string,\n importer: { path: string; resolveDir: string },\n context: HostCallContext,\n): Promise<ModuleSource | null> {\n if (!resolver) {\n return null;\n }\n return normalizeModuleResolveResult(\n specifier,\n resolver.resolve(specifier, importer, context),\n importer.resolveDir,\n );\n}\n\nexport async function normalizeExplicitModuleResult(\n specifier: string,\n result: ModuleResolveResult,\n fallbackResolveDir?: string,\n): Promise<ModuleSource | null> {\n return normalizeModuleResolveResult(specifier, result, fallbackResolveDir);\n}\n\nfunction createBrowserPlaywrightOptions(\n browser: HostBindings[\"browser\"] | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n): RuntimeOptions[\"playwright\"] | undefined {\n if (!browser) {\n return undefined;\n }\n\n const hasHandler = typeof browser.handler === \"function\";\n const hasFactoryBindings =\n typeof browser.createContext === \"function\" ||\n typeof browser.createPage === \"function\" ||\n typeof browser.readFile === \"function\" ||\n typeof browser.writeFile === \"function\";\n\n if (hasHandler && hasFactoryBindings) {\n throw new Error(\n \"browser bindings must use either handler-first or factory-first mode, not both.\",\n );\n }\n\n if (hasHandler) {\n return {\n handler: browser.handler,\n hasDefaultPage: false,\n console: browser.captureConsole ?? false,\n onEvent: browser.onEvent\n ? async (event) => {\n const context = createHostCallContext(\n `browser:event:${event.type}:${crypto.randomUUID()}`,\n );\n await browser.onEvent?.(event, context);\n }\n : undefined,\n };\n }\n\n return {\n handler: createPlaywrightFactoryHandler({\n createContext: browser.createContext\n ? async (options) => {\n const context = createHostCallContext(\n `browser:createContext:${crypto.randomUUID()}`,\n );\n return await browser.createContext!(options, context);\n }\n : undefined,\n createPage: browser.createPage\n ? async (contextHandle) => {\n const context = createHostCallContext(\n `browser:createPage:${crypto.randomUUID()}`,\n );\n return await browser.createPage!(contextHandle, context);\n }\n : undefined,\n readFile: browser.readFile\n ? async (filePath) => {\n const context = createHostCallContext(\n `browser:readFile:${crypto.randomUUID()}`,\n );\n const buffer = await browser.readFile!(filePath, context);\n return {\n name: path.basename(filePath),\n mimeType: \"application/octet-stream\",\n buffer,\n };\n }\n : undefined,\n writeFile: browser.writeFile\n ? async (filePath, data) => {\n const context = createHostCallContext(\n `browser:writeFile:${crypto.randomUUID()}`,\n );\n await browser.writeFile!(filePath, data, context);\n }\n : undefined,\n }),\n hasDefaultPage: false,\n console: browser.captureConsole ?? false,\n onEvent: browser.onEvent\n ? async (event) => {\n const context = createHostCallContext(\n `browser:event:${event.type}:${crypto.randomUUID()}`,\n );\n await browser.onEvent?.(event, context);\n }\n : undefined,\n };\n}\n\nfunction createCustomFunctions(\n tools: HostBindings[\"tools\"] | undefined,\n nestedHost: NestedHostBindings | undefined,\n createHostCallContext: (\n resourceId: string,\n baseSignal?: AbortSignal,\n ) => HostCallContext,\n diagnostics: MutableRuntimeDiagnostics,\n): RuntimeOptions[\"customFunctions\"] {\n const definitions: NonNullable<RuntimeOptions[\"customFunctions\"]> = {};\n\n if (tools) {\n for (const [name, handler] of Object.entries(tools)) {\n if (isAsyncGeneratorFunction(handler)) {\n definitions[name] = {\n type: \"asyncIterator\",\n fn: (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n const context = createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n const iteratorResult = handler(\n ...args,\n context,\n ) as\n | AsyncIterable<unknown>\n | Promise<AsyncIterable<unknown>>;\n return (async function* () {\n const iterator = await iteratorResult;\n const iterable =\n iterator &&\n typeof (iterator as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === \"function\"\n ? (iterator as AsyncIterable<unknown>)\n : iterator &&\n typeof (iterator as { next?: unknown }).next === \"function\"\n ? {\n [Symbol.asyncIterator]() {\n return iterator as unknown as AsyncIterator<unknown>;\n },\n }\n : null;\n try {\n if (!iterable) {\n throw new TypeError(\n `Tool ${name} did not return an async iterator.`,\n );\n }\n yield* iterable;\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n })();\n },\n };\n continue;\n }\n\n definitions[name] = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n diagnostics.pendingTools += 1;\n diagnostics.activeResources += 1;\n try {\n const context = createHostCallContext(\n `tool:${name}:${crypto.randomUUID()}`,\n );\n return await handler(...args, context);\n } finally {\n diagnostics.pendingTools -= 1;\n diagnostics.activeResources -= 1;\n }\n },\n };\n }\n }\n\n if (nestedHost) {\n const reservedNames = [\n \"__isolateHost_createHost\",\n \"__isolateHost_closeHost\",\n \"__isolateHost_hostDiagnostics\",\n \"__isolateHost_createResource\",\n \"__isolateHost_disposeNamespace\",\n \"__isolateHost_callResource\",\n \"__isolateHost_drainCallbacks\",\n ];\n for (const name of reservedNames) {\n if (definitions[name]) {\n throw new Error(\n `Tool name ${name} is reserved for internal sandbox host bindings.`,\n );\n }\n }\n\n definitions.__isolateHost_createHost = {\n type: \"async\",\n fn: async () => {\n const context = createHostCallContext(\n `nestedHost:createHost:${crypto.randomUUID()}`,\n );\n return await nestedHost.createHost(context);\n },\n };\n definitions.__isolateHost_closeHost = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const context = createHostCallContext(\n `nestedHost:closeHost:${crypto.randomUUID()}`,\n );\n await nestedHost.closeHost(hostId, context);\n },\n };\n definitions.__isolateHost_hostDiagnostics = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const context = createHostCallContext(\n `nestedHost:diagnostics:${crypto.randomUUID()}`,\n );\n return await nestedHost.diagnostics(hostId, context);\n },\n };\n definitions.__isolateHost_createResource = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const kind = args[1] as NestedResourceKind;\n const resourceOptions = args[2] as\n | CreateRuntimeOptions\n | CreateAppServerOptions\n | CreateTestRuntimeOptions\n | {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const context = createHostCallContext(\n `nestedHost:createResource:${kind}:${crypto.randomUUID()}`,\n );\n return await nestedHost.createResource(\n hostId,\n kind,\n resourceOptions,\n context,\n );\n },\n };\n definitions.__isolateHost_disposeNamespace = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const hostId = args[0] as string;\n const key = args[1] as string;\n const options =\n ((args[2] as { reason?: string } | null) ?? undefined);\n const context = createHostCallContext(\n `nestedHost:disposeNamespace:${crypto.randomUUID()}`,\n );\n await nestedHost.disposeNamespace(hostId, key, options, context);\n },\n };\n definitions.__isolateHost_callResource = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const kind = args[0] as NestedResourceKind;\n const resourceId = args[1] as string;\n const method = args[2] as string;\n const methodArgs = args[3] as unknown[];\n const context = createHostCallContext(\n `nestedHost:callResource:${kind}:${method}:${crypto.randomUUID()}`,\n );\n return await nestedHost.callResource(\n kind,\n resourceId,\n method,\n Array.isArray(methodArgs) ? methodArgs : [],\n context,\n );\n },\n };\n definitions.__isolateHost_drainCallbacks = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const settleTurns =\n typeof args[0] === \"number\" &&\n Number.isFinite(args[0]) &&\n args[0] > 0\n ? Math.floor(args[0])\n : 1;\n\n for (let index = 0; index < settleTurns; index += 1) {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n },\n };\n }\n\n return Object.keys(definitions).length > 0 ? definitions : undefined;\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "E09A2881942578A764756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "0DD0C4D7159651C164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -70,10 +70,24 @@ function __normalizeEvalOptions(options) {
70
70
  return options ?? null;
71
71
  }
72
72
 
73
- async function __waitForNestedCallbacks() {
73
+ async function __waitForCallbackTurn() {
74
+ await Promise.resolve();
74
75
  await new Promise((resolve) => setTimeout(resolve, 0));
75
76
  }
76
77
 
78
+ async function __waitForNestedCallbacks() {
79
+ const settleTurns = 3;
80
+
81
+ if (typeof __isolateHost_drainCallbacks === "function") {
82
+ await __isolateHost_drainCallbacks(settleTurns);
83
+ return;
84
+ }
85
+
86
+ for (let index = 0; index < settleTurns; index += 1) {
87
+ await __waitForCallbackTurn();
88
+ }
89
+ }
90
+
77
91
  class NestedScriptRuntime {
78
92
  #resourceId;
79
93
 
@@ -273,6 +287,27 @@ class NestedTestRuntime {
273
287
  );
274
288
  await __waitForNestedCallbacks();
275
289
  }
290
+
291
+ test = {
292
+ onEvent: (handler) => {
293
+ const subscriptionPromise = __isolateHost_callResource(
294
+ "testRuntime",
295
+ this.#resourceId,
296
+ "test.on",
297
+ [handler],
298
+ );
299
+ return () => {
300
+ void subscriptionPromise
301
+ .then((subscriptionId) => __isolateHost_callResource(
302
+ "testRuntime",
303
+ this.#resourceId,
304
+ "test.off",
305
+ [subscriptionId],
306
+ ))
307
+ .catch(() => {});
308
+ };
309
+ },
310
+ };
276
311
  }
277
312
 
278
313
  class NestedNamespacedRuntime {
@@ -322,6 +357,27 @@ class NestedNamespacedRuntime {
322
357
  await __waitForNestedCallbacks();
323
358
  }
324
359
 
360
+ test = {
361
+ onEvent: (handler) => {
362
+ const subscriptionPromise = __isolateHost_callResource(
363
+ "namespacedRuntime",
364
+ this.#resourceId,
365
+ "test.on",
366
+ [handler],
367
+ );
368
+ return () => {
369
+ void subscriptionPromise
370
+ .then((subscriptionId) => __isolateHost_callResource(
371
+ "namespacedRuntime",
372
+ this.#resourceId,
373
+ "test.off",
374
+ [subscriptionId],
375
+ ))
376
+ .catch(() => {});
377
+ };
378
+ },
379
+ };
380
+
325
381
  events = {
326
382
  on: (event, handler) => {
327
383
  const subscriptionPromise = __isolateHost_callResource(
@@ -421,4 +477,4 @@ export {
421
477
  SANDBOX_ISOLATE_MODULE_SOURCE
422
478
  };
423
479
 
424
- //# debugId=9515F8C057E1AA7164756E2164756E21
480
+ //# debugId=9CE3670C55EE670464756E2164756E21