@ricsam/isolate 0.1.10 → 0.1.11

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 (128) hide show
  1. package/README.md +172 -18
  2. package/dist/cjs/bridge/diagnostics.cjs +37 -2
  3. package/dist/cjs/bridge/diagnostics.cjs.map +3 -3
  4. package/dist/cjs/bridge/runtime-bindings.cjs +203 -51
  5. package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
  6. package/dist/cjs/bridge/sandbox-isolate.cjs +365 -0
  7. package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
  8. package/dist/cjs/host/create-isolate-host.cjs +51 -25
  9. package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
  10. package/dist/cjs/host/nested-host-controller.cjs +311 -0
  11. package/dist/cjs/host/nested-host-controller.cjs.map +10 -0
  12. package/dist/cjs/index.cjs.map +1 -1
  13. package/dist/cjs/internal/browser-source.cjs +91 -0
  14. package/dist/cjs/internal/browser-source.cjs.map +10 -0
  15. package/dist/cjs/internal/client/connection.cjs +152 -172
  16. package/dist/cjs/internal/client/connection.cjs.map +3 -3
  17. package/dist/cjs/internal/daemon/callback-fs-handler.cjs +3 -3
  18. package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +3 -3
  19. package/dist/cjs/internal/daemon/connection.cjs +129 -4
  20. package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
  21. package/dist/cjs/internal/playwright/client.cjs +4 -2
  22. package/dist/cjs/internal/playwright/client.cjs.map +3 -3
  23. package/dist/cjs/internal/playwright/handler.cjs +298 -25
  24. package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
  25. package/dist/cjs/internal/playwright/index.cjs +54 -8
  26. package/dist/cjs/internal/playwright/index.cjs.map +3 -3
  27. package/dist/cjs/internal/playwright/types.cjs +3 -1
  28. package/dist/cjs/internal/playwright/types.cjs.map +3 -3
  29. package/dist/cjs/internal/protocol/codec.cjs +16 -5
  30. package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
  31. package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
  32. package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
  33. package/dist/cjs/internal/protocol/types.cjs.map +2 -2
  34. package/dist/cjs/internal/runtime/index.cjs +377 -22
  35. package/dist/cjs/internal/runtime/index.cjs.map +3 -3
  36. package/dist/cjs/internal/typecheck/index.cjs +2 -1
  37. package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
  38. package/dist/cjs/internal/typecheck/isolate-types.cjs +186 -13
  39. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
  40. package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
  41. package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
  42. package/dist/cjs/package.json +1 -1
  43. package/dist/cjs/runtime/script-runtime.cjs +14 -12
  44. package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
  45. package/dist/cjs/runtime/test-runtime.cjs +113 -0
  46. package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
  47. package/dist/cjs/server/app-server.cjs +16 -9
  48. package/dist/cjs/server/app-server.cjs.map +3 -3
  49. package/dist/cjs/typecheck/index.cjs +2 -1
  50. package/dist/cjs/typecheck/index.cjs.map +3 -3
  51. package/dist/mjs/bridge/diagnostics.mjs +37 -2
  52. package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
  53. package/dist/mjs/bridge/runtime-bindings.mjs +206 -51
  54. package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
  55. package/dist/mjs/bridge/sandbox-isolate.mjs +325 -0
  56. package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
  57. package/dist/mjs/host/create-isolate-host.mjs +53 -25
  58. package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
  59. package/dist/mjs/host/nested-host-controller.mjs +275 -0
  60. package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
  61. package/dist/mjs/index.mjs.map +1 -1
  62. package/dist/mjs/internal/browser-source.mjs +51 -0
  63. package/dist/mjs/internal/browser-source.mjs.map +10 -0
  64. package/dist/mjs/internal/client/connection.mjs +154 -173
  65. package/dist/mjs/internal/client/connection.mjs.map +3 -3
  66. package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
  67. package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
  68. package/dist/mjs/internal/daemon/connection.mjs +129 -4
  69. package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
  70. package/dist/mjs/internal/playwright/client.mjs +7 -3
  71. package/dist/mjs/internal/playwright/client.mjs.map +3 -3
  72. package/dist/mjs/internal/playwright/handler.mjs +300 -26
  73. package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
  74. package/dist/mjs/internal/playwright/index.mjs +59 -9
  75. package/dist/mjs/internal/playwright/index.mjs.map +3 -3
  76. package/dist/mjs/internal/playwright/types.mjs +3 -1
  77. package/dist/mjs/internal/playwright/types.mjs.map +3 -3
  78. package/dist/mjs/internal/protocol/codec.mjs +16 -5
  79. package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
  80. package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
  81. package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
  82. package/dist/mjs/internal/protocol/types.mjs.map +2 -2
  83. package/dist/mjs/internal/runtime/index.mjs +377 -22
  84. package/dist/mjs/internal/runtime/index.mjs.map +3 -3
  85. package/dist/mjs/internal/typecheck/index.mjs +3 -1
  86. package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
  87. package/dist/mjs/internal/typecheck/isolate-types.mjs +186 -13
  88. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
  89. package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
  90. package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
  91. package/dist/mjs/package.json +1 -1
  92. package/dist/mjs/runtime/script-runtime.mjs +16 -12
  93. package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
  94. package/dist/mjs/runtime/test-runtime.mjs +78 -0
  95. package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
  96. package/dist/mjs/server/app-server.mjs +23 -11
  97. package/dist/mjs/server/app-server.mjs.map +3 -3
  98. package/dist/mjs/typecheck/index.mjs +2 -1
  99. package/dist/mjs/typecheck/index.mjs.map +3 -3
  100. package/dist/types/bridge/diagnostics.d.ts +6 -1
  101. package/dist/types/bridge/runtime-bindings.d.ts +5 -1
  102. package/dist/types/bridge/sandbox-isolate.d.ts +15 -0
  103. package/dist/types/host/nested-host-controller.d.ts +11 -0
  104. package/dist/types/index.d.ts +1 -1
  105. package/dist/types/internal/browser-source.d.ts +11 -0
  106. package/dist/types/internal/client/types.d.ts +5 -0
  107. package/dist/types/internal/daemon/types.d.ts +0 -2
  108. package/dist/types/internal/playwright/client.d.ts +2 -2
  109. package/dist/types/internal/playwright/handler.d.ts +27 -4
  110. package/dist/types/internal/playwright/index.d.ts +2 -2
  111. package/dist/types/internal/playwright/types.d.ts +33 -1
  112. package/dist/types/internal/protocol/codec.d.ts +12 -2
  113. package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
  114. package/dist/types/internal/protocol/types.d.ts +25 -1
  115. package/dist/types/internal/runtime/index.d.ts +5 -0
  116. package/dist/types/internal/typecheck/index.d.ts +1 -1
  117. package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
  118. package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
  119. package/dist/types/runtime/script-runtime.d.ts +2 -1
  120. package/dist/types/runtime/test-runtime.d.ts +4 -0
  121. package/dist/types/server/app-server.d.ts +2 -1
  122. package/dist/types/types.d.ts +33 -33
  123. package/package.json +3 -3
  124. package/dist/cjs/browser/browser-runtime.cjs +0 -157
  125. package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
  126. package/dist/mjs/browser/browser-runtime.mjs +0 -93
  127. package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
  128. package/dist/types/browser/browser-runtime.d.ts +0 -3
@@ -0,0 +1,275 @@
1
+ // src/host/nested-host-controller.ts
2
+ import { randomUUID } from "node:crypto";
3
+ import {
4
+ createBrowserSourceFromUnknown,
5
+ isDefaultBrowserDescriptor,
6
+ requireBrowserSource
7
+ } from "../internal/browser-source.mjs";
8
+ function toRequest(serialized) {
9
+ return new Request(serialized.url, {
10
+ method: serialized.method ?? "GET",
11
+ headers: serialized.headers,
12
+ body: serialized.body ? new Uint8Array(serialized.body) : null
13
+ });
14
+ }
15
+ function normalizeBindings(bindings, defaultBrowserSource) {
16
+ const normalized = {
17
+ console: bindings?.console,
18
+ fetch: bindings?.fetch,
19
+ files: bindings?.files,
20
+ modules: bindings?.modules,
21
+ tools: bindings?.tools
22
+ };
23
+ if (!bindings || !("browser" in bindings) || bindings.browser === undefined) {
24
+ return normalized;
25
+ }
26
+ if (isDefaultBrowserDescriptor(bindings.browser)) {
27
+ normalized.browser = requireBrowserSource(defaultBrowserSource, "Nested browser bindings");
28
+ return normalized;
29
+ }
30
+ const browserSource = createBrowserSourceFromUnknown(bindings.browser);
31
+ if (!browserSource) {
32
+ throw new Error("Nested browser bindings must use the sandbox browser handle or expose createContext()/createPage().");
33
+ }
34
+ normalized.browser = browserSource;
35
+ return normalized;
36
+ }
37
+ function normalizeRuntimeOptions(options, defaultBrowserSource) {
38
+ return {
39
+ ...options,
40
+ bindings: normalizeBindings(options.bindings, defaultBrowserSource)
41
+ };
42
+ }
43
+ function normalizeAppServerOptions(options, defaultBrowserSource) {
44
+ return {
45
+ ...options,
46
+ bindings: normalizeBindings(options.bindings, defaultBrowserSource)
47
+ };
48
+ }
49
+ function toError(value) {
50
+ if (value instanceof Error) {
51
+ return value;
52
+ }
53
+ if (value && typeof value === "object" && "message" in value && typeof value.message === "string") {
54
+ const error = new Error(value.message);
55
+ if ("name" in value && typeof value.name === "string") {
56
+ error.name = value.name;
57
+ }
58
+ return error;
59
+ }
60
+ return new Error(String(value));
61
+ }
62
+ function createNestedHostBindings(factory, defaultBrowserSource) {
63
+ const hosts = new Map;
64
+ const resources = new Map;
65
+ const requireHost = (hostId) => {
66
+ const host = hosts.get(hostId);
67
+ if (!host || host.closed) {
68
+ throw new Error(`Nested host ${hostId} is not available.`);
69
+ }
70
+ return host;
71
+ };
72
+ const requireResource = (resourceId, expectedKind) => {
73
+ const resource = resources.get(resourceId);
74
+ if (!resource || resource.kind !== expectedKind) {
75
+ throw new Error(`Nested resource ${resourceId} is not available for ${expectedKind}.`);
76
+ }
77
+ return resource;
78
+ };
79
+ const unregisterResource = (resourceId) => {
80
+ const record = resources.get(resourceId);
81
+ if (!record) {
82
+ return;
83
+ }
84
+ const host = hosts.get(record.hostId);
85
+ if (host) {
86
+ if (record.kind === "appServer") {
87
+ host.serverIds.delete(resourceId);
88
+ } else {
89
+ host.runtimeIds.delete(resourceId);
90
+ }
91
+ }
92
+ if (record.kind === "runtime") {
93
+ for (const unsubscribe of record.subscriptions.values()) {
94
+ unsubscribe();
95
+ }
96
+ record.subscriptions.clear();
97
+ }
98
+ resources.delete(resourceId);
99
+ };
100
+ const disposeResource = async (resourceId, options) => {
101
+ const record = resources.get(resourceId);
102
+ if (!record) {
103
+ return;
104
+ }
105
+ try {
106
+ await record.resource.dispose(options);
107
+ } finally {
108
+ unregisterResource(resourceId);
109
+ }
110
+ };
111
+ return {
112
+ async createHost() {
113
+ const hostId = randomUUID();
114
+ hosts.set(hostId, {
115
+ runtimeIds: new Set,
116
+ serverIds: new Set,
117
+ closed: false
118
+ });
119
+ return hostId;
120
+ },
121
+ async closeHost(hostId) {
122
+ const host = requireHost(hostId);
123
+ host.closed = true;
124
+ const resourceIds = [
125
+ ...host.serverIds,
126
+ ...host.runtimeIds
127
+ ];
128
+ await Promise.allSettled(resourceIds.map(async (resourceId) => {
129
+ await disposeResource(resourceId, {
130
+ hard: true,
131
+ reason: "Nested isolate host closed"
132
+ });
133
+ }));
134
+ hosts.delete(hostId);
135
+ },
136
+ async diagnostics(hostId) {
137
+ const host = requireHost(hostId);
138
+ return {
139
+ runtimes: host.runtimeIds.size,
140
+ servers: host.serverIds.size,
141
+ connected: factory.isConnected()
142
+ };
143
+ },
144
+ async createResource(hostId, kind, rawOptions) {
145
+ const host = requireHost(hostId);
146
+ switch (kind) {
147
+ case "runtime": {
148
+ const options = normalizeRuntimeOptions(rawOptions, defaultBrowserSource);
149
+ const resource = await factory.createRuntime(options);
150
+ const resourceId = randomUUID();
151
+ resources.set(resourceId, {
152
+ kind,
153
+ hostId,
154
+ resource,
155
+ subscriptions: new Map
156
+ });
157
+ host.runtimeIds.add(resourceId);
158
+ return resourceId;
159
+ }
160
+ case "appServer": {
161
+ const options = normalizeAppServerOptions(rawOptions, defaultBrowserSource);
162
+ const resource = await factory.createAppServer(options);
163
+ const resourceId = randomUUID();
164
+ resources.set(resourceId, {
165
+ kind,
166
+ hostId,
167
+ resource
168
+ });
169
+ host.serverIds.add(resourceId);
170
+ return resourceId;
171
+ }
172
+ case "testRuntime": {
173
+ const options = normalizeRuntimeOptions(rawOptions, defaultBrowserSource);
174
+ const resource = await factory.createTestRuntime(options);
175
+ const resourceId = randomUUID();
176
+ resources.set(resourceId, {
177
+ kind,
178
+ hostId,
179
+ resource
180
+ });
181
+ host.runtimeIds.add(resourceId);
182
+ return resourceId;
183
+ }
184
+ }
185
+ },
186
+ async callResource(kind, resourceId, method, args) {
187
+ const record = requireResource(resourceId, kind);
188
+ switch (kind) {
189
+ case "runtime": {
190
+ const runtimeRecord = record;
191
+ switch (method) {
192
+ case "eval":
193
+ await runtimeRecord.resource.eval(args[0], args[1] ?? undefined);
194
+ return;
195
+ case "dispose":
196
+ await disposeResource(resourceId, args[0] ?? {});
197
+ return;
198
+ case "diagnostics":
199
+ return await runtimeRecord.resource.diagnostics();
200
+ case "events.on": {
201
+ const subscriptionId = randomUUID();
202
+ const unsubscribe = runtimeRecord.resource.events.on(args[0], args[1]);
203
+ runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);
204
+ return subscriptionId;
205
+ }
206
+ case "events.off": {
207
+ const subscriptionId = args[0];
208
+ const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);
209
+ if (unsubscribe) {
210
+ unsubscribe();
211
+ runtimeRecord.subscriptions.delete(subscriptionId);
212
+ }
213
+ return;
214
+ }
215
+ case "events.emit":
216
+ await runtimeRecord.resource.events.emit(args[0], args[1]);
217
+ return;
218
+ default:
219
+ throw new Error(`Unsupported nested runtime method: ${method}`);
220
+ }
221
+ }
222
+ case "appServer": {
223
+ const server = record.resource;
224
+ switch (method) {
225
+ case "handle": {
226
+ const result = await server.handle(toRequest(args[0]), args[1] ?? undefined);
227
+ return result;
228
+ }
229
+ case "ws.open":
230
+ await server.ws.open(args[0]);
231
+ return;
232
+ case "ws.message":
233
+ await server.ws.message(args[0], args[1]);
234
+ return;
235
+ case "ws.close":
236
+ await server.ws.close(args[0], args[1], args[2]);
237
+ return;
238
+ case "ws.error":
239
+ await server.ws.error(args[0], toError(args[1]));
240
+ return;
241
+ case "reload":
242
+ await server.reload(args[0] ?? undefined);
243
+ return;
244
+ case "dispose":
245
+ await disposeResource(resourceId, args[0] ?? {});
246
+ return;
247
+ case "diagnostics":
248
+ return await server.diagnostics();
249
+ default:
250
+ throw new Error(`Unsupported nested app server method: ${method}`);
251
+ }
252
+ }
253
+ case "testRuntime": {
254
+ const runtime = record.resource;
255
+ switch (method) {
256
+ case "run":
257
+ return await runtime.run(args[0], args[1] ?? undefined);
258
+ case "dispose":
259
+ await disposeResource(resourceId, args[0] ?? {});
260
+ return;
261
+ case "diagnostics":
262
+ return await runtime.diagnostics();
263
+ default:
264
+ throw new Error(`Unsupported nested test runtime method: ${method}`);
265
+ }
266
+ }
267
+ }
268
+ }
269
+ };
270
+ }
271
+ export {
272
+ createNestedHostBindings
273
+ };
274
+
275
+ //# debugId=CB3802C66526968E64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/host/nested-host-controller.ts"],
4
+ "sourcesContent": [
5
+ "import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.mjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n RequestResult,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\ninterface NestedHostFactory {\n createRuntime(options: CreateRuntimeOptions): Promise<ScriptRuntime>;\n createAppServer(options: CreateAppServerOptions): Promise<AppServer>;\n createTestRuntime(options: CreateTestRuntimeOptions): Promise<TestRuntime>;\n isConnected(): boolean;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord;\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch,\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n): CreateRuntimeOptions {\n return {\n ...options,\n bindings: normalizeBindings(options.bindings, defaultBrowserSource),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n): CreateAppServerOptions {\n return {\n ...options,\n bindings: normalizeBindings(options.bindings, defaultBrowserSource),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (record.kind === \"runtime\") {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n switch (kind) {\n case \"runtime\": {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createRuntime(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n }\n\n case \"appServer\": {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createAppServer(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n });\n host.serverIds.add(resourceId);\n return resourceId;\n }\n\n case \"testRuntime\": {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n );\n const resource = await factory.createTestRuntime(options);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n }\n }\n },\n async callResource(kind, resourceId, method, args) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n (args[1] as string | { filename?: string; executionTimeout?: number } | null) ??\n undefined,\n );\n return undefined;\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n args[1] as (payload: unknown) => void,\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const result = await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n ((args[1] as {\n requestId?: string;\n metadata?: Record<string, string>;\n } | null) ?? undefined),\n );\n return result;\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtime = (record as TestRuntimeResourceRecord).resource;\n switch (method) {\n case \"run\":\n return await runtime.run(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n }\n },\n };\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "CB3802C66526968E64756E2164756E21",
9
+ "names": []
10
+ }
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": [
5
- "export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n BrowserRuntime,\n BrowserRuntimeDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateBrowserRuntimeOptions,\n CreateIsolateHostOptions,\n CreateRuntimeOptions,\n FileBindings,\n HostBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n RequestResult,\n RunResults,\n ScriptRuntime,\n TestEvent,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.mjs\";\n"
5
+ "export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n RequestResult,\n RuntimeResourceDiagnostics,\n RunResults,\n ScriptRuntime,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.mjs\";\n"
6
6
  ],
7
7
  "mappings": ";AAAA;AACA;AACA;AACA;",
8
8
  "debugId": "CB823D2BFBB00D8F64756E2164756E21",
@@ -0,0 +1,51 @@
1
+ // src/internal/browser-source.ts
2
+ var ISOLATE_BROWSER_DESCRIPTOR_PROPERTY = "__isolateBrowserBinding";
3
+ var ISOLATE_BROWSER_DESCRIPTOR_VALUE = "default";
4
+ function isBrowserBindingLike(value) {
5
+ if (!value || typeof value !== "object") {
6
+ return false;
7
+ }
8
+ const candidate = value;
9
+ return typeof candidate.createContext === "function" || typeof candidate.createPage === "function";
10
+ }
11
+ function isDefaultBrowserDescriptor(value) {
12
+ return Boolean(value && typeof value === "object" && value[ISOLATE_BROWSER_DESCRIPTOR_PROPERTY] === ISOLATE_BROWSER_DESCRIPTOR_VALUE);
13
+ }
14
+ function createBrowserSourceFromBindings(browser) {
15
+ if (!browser) {
16
+ return;
17
+ }
18
+ return {
19
+ createContext: browser.createContext,
20
+ createPage: browser.createPage
21
+ };
22
+ }
23
+ function createBrowserSourceFromUnknown(browser) {
24
+ if (!isBrowserBindingLike(browser)) {
25
+ return;
26
+ }
27
+ return createBrowserSourceFromBindings(browser);
28
+ }
29
+ function requireBrowserSource(source, operation) {
30
+ if (!source?.createContext || !source.createPage) {
31
+ throw new Error(`${operation} requires a browser binding with createContext() and createPage().`);
32
+ }
33
+ return source;
34
+ }
35
+ function cloneBrowserDescriptor() {
36
+ return {
37
+ [ISOLATE_BROWSER_DESCRIPTOR_PROPERTY]: ISOLATE_BROWSER_DESCRIPTOR_VALUE
38
+ };
39
+ }
40
+ export {
41
+ requireBrowserSource,
42
+ isDefaultBrowserDescriptor,
43
+ isBrowserBindingLike,
44
+ createBrowserSourceFromUnknown,
45
+ createBrowserSourceFromBindings,
46
+ cloneBrowserDescriptor,
47
+ ISOLATE_BROWSER_DESCRIPTOR_VALUE,
48
+ ISOLATE_BROWSER_DESCRIPTOR_PROPERTY
49
+ };
50
+
51
+ //# debugId=66402618D5F351F264756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/browser-source.ts"],
4
+ "sourcesContent": [
5
+ "import type {\n HostBrowserBindings,\n} from \"../types.mjs\";\n\nexport const ISOLATE_BROWSER_DESCRIPTOR_PROPERTY = \"__isolateBrowserBinding\";\nexport const ISOLATE_BROWSER_DESCRIPTOR_VALUE = \"default\";\n\nexport interface BrowserSource extends HostBrowserBindings {}\n\nexport function isBrowserBindingLike(value: unknown): value is HostBrowserBindings {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.createContext === \"function\" ||\n typeof candidate.createPage === \"function\"\n );\n}\n\nexport function isDefaultBrowserDescriptor(value: unknown): boolean {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>)[ISOLATE_BROWSER_DESCRIPTOR_PROPERTY] ===\n ISOLATE_BROWSER_DESCRIPTOR_VALUE,\n );\n}\n\nexport function createBrowserSourceFromBindings(\n browser: HostBrowserBindings | undefined,\n): BrowserSource | undefined {\n if (!browser) {\n return undefined;\n }\n\n return {\n createContext: browser.createContext,\n createPage: browser.createPage,\n };\n}\n\nexport function createBrowserSourceFromUnknown(\n browser: unknown,\n): BrowserSource | undefined {\n if (!isBrowserBindingLike(browser)) {\n return undefined;\n }\n\n return createBrowserSourceFromBindings(browser);\n}\n\nexport function requireBrowserSource(\n source: BrowserSource | undefined,\n operation: string,\n): BrowserSource {\n if (!source?.createContext || !source.createPage) {\n throw new Error(\n `${operation} requires a browser binding with createContext() and createPage().`,\n );\n }\n return source;\n}\n\nexport function cloneBrowserDescriptor(): Record<string, string> {\n return {\n [ISOLATE_BROWSER_DESCRIPTOR_PROPERTY]: ISOLATE_BROWSER_DESCRIPTOR_VALUE,\n };\n}\n"
6
+ ],
7
+ "mappings": ";AAIO,IAAM,sCAAsC;AAC5C,IAAM,mCAAmC;AAIzC,SAAS,oBAAoB,CAAC,OAA8C;AAAA,EACjF,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAAA,EAClB,OACE,OAAO,UAAU,kBAAkB,cACnC,OAAO,UAAU,eAAe;AAAA;AAI7B,SAAS,0BAA0B,CAAC,OAAyB;AAAA,EAClE,OAAO,QACL,SACE,OAAO,UAAU,YAChB,MAAkC,yCACjC,gCACN;AAAA;AAGK,SAAS,+BAA+B,CAC7C,SAC2B;AAAA,EAC3B,IAAI,CAAC,SAAS;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,EACtB;AAAA;AAGK,SAAS,8BAA8B,CAC5C,SAC2B;AAAA,EAC3B,IAAI,CAAC,qBAAqB,OAAO,GAAG;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,OAAO,gCAAgC,OAAO;AAAA;AAGzC,SAAS,oBAAoB,CAClC,QACA,WACe;AAAA,EACf,IAAI,CAAC,QAAQ,iBAAiB,CAAC,OAAO,YAAY;AAAA,IAChD,MAAM,IAAI,MACR,GAAG,6EACL;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,sBAAsB,GAA2B;AAAA,EAC/D,OAAO;AAAA,KACJ,sCAAsC;AAAA,EACzC;AAAA;",
8
+ "debugId": "66402618D5F351F264756E2164756E21",
9
+ "names": []
10
+ }