@ricsam/isolate 0.1.8 → 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 (144) 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/encoding/index.cjs +27 -4
  22. package/dist/cjs/internal/encoding/index.cjs.map +3 -3
  23. package/dist/cjs/internal/fetch/index.cjs +2 -7
  24. package/dist/cjs/internal/fetch/index.cjs.map +3 -3
  25. package/dist/cjs/internal/module-loader/bundle.cjs +128 -1
  26. package/dist/cjs/internal/module-loader/bundle.cjs.map +3 -3
  27. package/dist/cjs/internal/playwright/client.cjs +4 -2
  28. package/dist/cjs/internal/playwright/client.cjs.map +3 -3
  29. package/dist/cjs/internal/playwright/handler.cjs +298 -25
  30. package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
  31. package/dist/cjs/internal/playwright/index.cjs +54 -8
  32. package/dist/cjs/internal/playwright/index.cjs.map +3 -3
  33. package/dist/cjs/internal/playwright/types.cjs +3 -1
  34. package/dist/cjs/internal/playwright/types.cjs.map +3 -3
  35. package/dist/cjs/internal/protocol/codec.cjs +16 -5
  36. package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
  37. package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
  38. package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
  39. package/dist/cjs/internal/protocol/types.cjs.map +2 -2
  40. package/dist/cjs/internal/runtime/index.cjs +377 -22
  41. package/dist/cjs/internal/runtime/index.cjs.map +3 -3
  42. package/dist/cjs/internal/typecheck/index.cjs +2 -1
  43. package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
  44. package/dist/cjs/internal/typecheck/isolate-types.cjs +186 -13
  45. package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
  46. package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
  47. package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
  48. package/dist/cjs/modules/index.cjs +6 -1
  49. package/dist/cjs/modules/index.cjs.map +3 -3
  50. package/dist/cjs/package.json +1 -1
  51. package/dist/cjs/runtime/script-runtime.cjs +14 -12
  52. package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
  53. package/dist/cjs/runtime/test-runtime.cjs +113 -0
  54. package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
  55. package/dist/cjs/server/app-server.cjs +16 -9
  56. package/dist/cjs/server/app-server.cjs.map +3 -3
  57. package/dist/cjs/typecheck/index.cjs +2 -1
  58. package/dist/cjs/typecheck/index.cjs.map +3 -3
  59. package/dist/mjs/bridge/diagnostics.mjs +37 -2
  60. package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
  61. package/dist/mjs/bridge/runtime-bindings.mjs +206 -51
  62. package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
  63. package/dist/mjs/bridge/sandbox-isolate.mjs +325 -0
  64. package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
  65. package/dist/mjs/host/create-isolate-host.mjs +53 -25
  66. package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
  67. package/dist/mjs/host/nested-host-controller.mjs +275 -0
  68. package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
  69. package/dist/mjs/index.mjs.map +1 -1
  70. package/dist/mjs/internal/browser-source.mjs +51 -0
  71. package/dist/mjs/internal/browser-source.mjs.map +10 -0
  72. package/dist/mjs/internal/client/connection.mjs +154 -173
  73. package/dist/mjs/internal/client/connection.mjs.map +3 -3
  74. package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
  75. package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
  76. package/dist/mjs/internal/daemon/connection.mjs +129 -4
  77. package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
  78. package/dist/mjs/internal/encoding/index.mjs +27 -4
  79. package/dist/mjs/internal/encoding/index.mjs.map +3 -3
  80. package/dist/mjs/internal/fetch/index.mjs +2 -7
  81. package/dist/mjs/internal/fetch/index.mjs.map +3 -3
  82. package/dist/mjs/internal/module-loader/bundle.mjs +129 -2
  83. package/dist/mjs/internal/module-loader/bundle.mjs.map +3 -3
  84. package/dist/mjs/internal/playwright/client.mjs +7 -3
  85. package/dist/mjs/internal/playwright/client.mjs.map +3 -3
  86. package/dist/mjs/internal/playwright/handler.mjs +300 -26
  87. package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
  88. package/dist/mjs/internal/playwright/index.mjs +59 -9
  89. package/dist/mjs/internal/playwright/index.mjs.map +3 -3
  90. package/dist/mjs/internal/playwright/types.mjs +3 -1
  91. package/dist/mjs/internal/playwright/types.mjs.map +3 -3
  92. package/dist/mjs/internal/protocol/codec.mjs +16 -5
  93. package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
  94. package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
  95. package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
  96. package/dist/mjs/internal/protocol/types.mjs.map +2 -2
  97. package/dist/mjs/internal/runtime/index.mjs +377 -22
  98. package/dist/mjs/internal/runtime/index.mjs.map +3 -3
  99. package/dist/mjs/internal/typecheck/index.mjs +3 -1
  100. package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
  101. package/dist/mjs/internal/typecheck/isolate-types.mjs +186 -13
  102. package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
  103. package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
  104. package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
  105. package/dist/mjs/modules/index.mjs +6 -1
  106. package/dist/mjs/modules/index.mjs.map +3 -3
  107. package/dist/mjs/package.json +1 -1
  108. package/dist/mjs/runtime/script-runtime.mjs +16 -12
  109. package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
  110. package/dist/mjs/runtime/test-runtime.mjs +78 -0
  111. package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
  112. package/dist/mjs/server/app-server.mjs +23 -11
  113. package/dist/mjs/server/app-server.mjs.map +3 -3
  114. package/dist/mjs/typecheck/index.mjs +2 -1
  115. package/dist/mjs/typecheck/index.mjs.map +3 -3
  116. package/dist/types/bridge/diagnostics.d.ts +6 -1
  117. package/dist/types/bridge/runtime-bindings.d.ts +5 -1
  118. package/dist/types/bridge/sandbox-isolate.d.ts +15 -0
  119. package/dist/types/host/nested-host-controller.d.ts +11 -0
  120. package/dist/types/index.d.ts +1 -1
  121. package/dist/types/internal/browser-source.d.ts +11 -0
  122. package/dist/types/internal/client/types.d.ts +5 -0
  123. package/dist/types/internal/daemon/types.d.ts +0 -2
  124. package/dist/types/internal/playwright/client.d.ts +2 -2
  125. package/dist/types/internal/playwright/handler.d.ts +27 -4
  126. package/dist/types/internal/playwright/index.d.ts +2 -2
  127. package/dist/types/internal/playwright/types.d.ts +33 -1
  128. package/dist/types/internal/protocol/codec.d.ts +12 -2
  129. package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
  130. package/dist/types/internal/protocol/types.d.ts +25 -1
  131. package/dist/types/internal/runtime/index.d.ts +5 -0
  132. package/dist/types/internal/typecheck/index.d.ts +1 -1
  133. package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
  134. package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
  135. package/dist/types/runtime/script-runtime.d.ts +2 -1
  136. package/dist/types/runtime/test-runtime.d.ts +4 -0
  137. package/dist/types/server/app-server.d.ts +2 -1
  138. package/dist/types/types.d.ts +33 -33
  139. package/package.json +3 -3
  140. package/dist/cjs/browser/browser-runtime.cjs +0 -157
  141. package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
  142. package/dist/mjs/browser/browser-runtime.mjs +0 -93
  143. package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
  144. package/dist/types/browser/browser-runtime.d.ts +0 -3
@@ -0,0 +1,325 @@
1
+ // src/bridge/sandbox-isolate.ts
2
+ import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from "../internal/browser-source.mjs";
3
+ var SANDBOX_ISOLATE_MODULE_SPECIFIER = "@ricsam/isolate";
4
+ var SANDBOX_ISOLATE_MODULE_SOURCE = `
5
+ const __isolateBrowserDescriptorProperty = ${JSON.stringify(ISOLATE_BROWSER_DESCRIPTOR_PROPERTY)};
6
+
7
+ function __normalizeBrowserHandle(value) {
8
+ if (
9
+ value &&
10
+ typeof value === "object" &&
11
+ value[__isolateBrowserDescriptorProperty]
12
+ ) {
13
+ return {
14
+ [__isolateBrowserDescriptorProperty]: value[__isolateBrowserDescriptorProperty],
15
+ };
16
+ }
17
+ return value;
18
+ }
19
+
20
+ function __normalizeBindings(bindings) {
21
+ if (!bindings || typeof bindings !== "object") {
22
+ return {};
23
+ }
24
+
25
+ const normalized = { ...bindings };
26
+ if ("browser" in normalized) {
27
+ normalized.browser = __normalizeBrowserHandle(normalized.browser);
28
+ }
29
+ return normalized;
30
+ }
31
+
32
+ function __normalizeRuntimeOptions(options) {
33
+ const normalized = options ? { ...options } : {};
34
+ normalized.bindings = __normalizeBindings(normalized.bindings);
35
+ return normalized;
36
+ }
37
+
38
+ async function __serializeRequest(requestLike) {
39
+ const request = requestLike instanceof Request
40
+ ? requestLike
41
+ : new Request(requestLike);
42
+ const headers = [];
43
+ request.headers.forEach((value, key) => {
44
+ headers.push([key, value]);
45
+ });
46
+ let body = null;
47
+ if (request.body) {
48
+ const cloned = request.clone();
49
+ body = Array.from(new Uint8Array(await cloned.arrayBuffer()));
50
+ }
51
+ return {
52
+ url: request.url,
53
+ method: request.method,
54
+ headers,
55
+ body,
56
+ };
57
+ }
58
+
59
+ function __normalizeEvalOptions(options) {
60
+ if (typeof options === "string") {
61
+ return { filename: options };
62
+ }
63
+ return options ?? null;
64
+ }
65
+
66
+ async function __waitForNestedCallbacks() {
67
+ await new Promise((resolve) => setTimeout(resolve, 0));
68
+ }
69
+
70
+ class NestedScriptRuntime {
71
+ #resourceId;
72
+
73
+ constructor(resourceId) {
74
+ this.#resourceId = resourceId;
75
+ }
76
+
77
+ async eval(code, options) {
78
+ await __isolateHost_callResource(
79
+ "runtime",
80
+ this.#resourceId,
81
+ "eval",
82
+ [code, __normalizeEvalOptions(options)],
83
+ );
84
+ await __waitForNestedCallbacks();
85
+ }
86
+
87
+ async dispose(options) {
88
+ await __isolateHost_callResource(
89
+ "runtime",
90
+ this.#resourceId,
91
+ "dispose",
92
+ [options ?? null],
93
+ );
94
+ await __waitForNestedCallbacks();
95
+ }
96
+
97
+ async diagnostics() {
98
+ return await __isolateHost_callResource(
99
+ "runtime",
100
+ this.#resourceId,
101
+ "diagnostics",
102
+ [],
103
+ );
104
+ }
105
+
106
+ events = {
107
+ on: (event, handler) => {
108
+ const subscriptionPromise = __isolateHost_callResource(
109
+ "runtime",
110
+ this.#resourceId,
111
+ "events.on",
112
+ [event, handler],
113
+ );
114
+ return () => {
115
+ void subscriptionPromise
116
+ .then((subscriptionId) => __isolateHost_callResource(
117
+ "runtime",
118
+ this.#resourceId,
119
+ "events.off",
120
+ [subscriptionId],
121
+ ))
122
+ .catch(() => {});
123
+ };
124
+ },
125
+ emit: async (event, payload) => {
126
+ await __isolateHost_callResource(
127
+ "runtime",
128
+ this.#resourceId,
129
+ "events.emit",
130
+ [event, payload],
131
+ );
132
+ await __waitForNestedCallbacks();
133
+ },
134
+ };
135
+ }
136
+
137
+ class NestedAppServer {
138
+ #resourceId;
139
+
140
+ constructor(resourceId) {
141
+ this.#resourceId = resourceId;
142
+ }
143
+
144
+ async handle(request, options) {
145
+ const serializedRequest = await __serializeRequest(request);
146
+ const result = await __isolateHost_callResource(
147
+ "appServer",
148
+ this.#resourceId,
149
+ "handle",
150
+ [
151
+ serializedRequest,
152
+ options
153
+ ? {
154
+ requestId: options.requestId,
155
+ metadata: options.metadata,
156
+ }
157
+ : null,
158
+ ],
159
+ );
160
+ await __waitForNestedCallbacks();
161
+ return result;
162
+ }
163
+
164
+ ws = {
165
+ open: async (connectionId) => {
166
+ await __isolateHost_callResource(
167
+ "appServer",
168
+ this.#resourceId,
169
+ "ws.open",
170
+ [connectionId],
171
+ );
172
+ await __waitForNestedCallbacks();
173
+ },
174
+ message: async (connectionId, data) => {
175
+ await __isolateHost_callResource(
176
+ "appServer",
177
+ this.#resourceId,
178
+ "ws.message",
179
+ [connectionId, data],
180
+ );
181
+ await __waitForNestedCallbacks();
182
+ },
183
+ close: async (connectionId, code, reason) => {
184
+ await __isolateHost_callResource(
185
+ "appServer",
186
+ this.#resourceId,
187
+ "ws.close",
188
+ [connectionId, code, reason],
189
+ );
190
+ await __waitForNestedCallbacks();
191
+ },
192
+ error: async (connectionId, error) => {
193
+ await __isolateHost_callResource(
194
+ "appServer",
195
+ this.#resourceId,
196
+ "ws.error",
197
+ [connectionId, error],
198
+ );
199
+ await __waitForNestedCallbacks();
200
+ },
201
+ };
202
+
203
+ async reload(reason) {
204
+ await __isolateHost_callResource(
205
+ "appServer",
206
+ this.#resourceId,
207
+ "reload",
208
+ [reason ?? null],
209
+ );
210
+ await __waitForNestedCallbacks();
211
+ }
212
+
213
+ async dispose(options) {
214
+ await __isolateHost_callResource(
215
+ "appServer",
216
+ this.#resourceId,
217
+ "dispose",
218
+ [options ?? null],
219
+ );
220
+ await __waitForNestedCallbacks();
221
+ }
222
+
223
+ async diagnostics() {
224
+ return await __isolateHost_callResource(
225
+ "appServer",
226
+ this.#resourceId,
227
+ "diagnostics",
228
+ [],
229
+ );
230
+ }
231
+ }
232
+
233
+ class NestedTestRuntime {
234
+ #resourceId;
235
+
236
+ constructor(resourceId) {
237
+ this.#resourceId = resourceId;
238
+ }
239
+
240
+ async run(code, options) {
241
+ const result = await __isolateHost_callResource(
242
+ "testRuntime",
243
+ this.#resourceId,
244
+ "run",
245
+ [code, options ?? null],
246
+ );
247
+ await __waitForNestedCallbacks();
248
+ return result;
249
+ }
250
+
251
+ async diagnostics() {
252
+ return await __isolateHost_callResource(
253
+ "testRuntime",
254
+ this.#resourceId,
255
+ "diagnostics",
256
+ [],
257
+ );
258
+ }
259
+
260
+ async dispose(options) {
261
+ await __isolateHost_callResource(
262
+ "testRuntime",
263
+ this.#resourceId,
264
+ "dispose",
265
+ [options ?? null],
266
+ );
267
+ await __waitForNestedCallbacks();
268
+ }
269
+ }
270
+
271
+ export function createIsolateHost() {
272
+ let hostIdPromise;
273
+
274
+ const ensureHostId = async () => {
275
+ if (!hostIdPromise) {
276
+ hostIdPromise = __isolateHost_createHost();
277
+ }
278
+ return await hostIdPromise;
279
+ };
280
+
281
+ return {
282
+ async createRuntime(options) {
283
+ const hostId = await ensureHostId();
284
+ const resourceId = await __isolateHost_createResource(
285
+ hostId,
286
+ "runtime",
287
+ __normalizeRuntimeOptions(options),
288
+ );
289
+ return new NestedScriptRuntime(resourceId);
290
+ },
291
+ async createAppServer(options) {
292
+ const hostId = await ensureHostId();
293
+ const resourceId = await __isolateHost_createResource(
294
+ hostId,
295
+ "appServer",
296
+ __normalizeRuntimeOptions(options),
297
+ );
298
+ return new NestedAppServer(resourceId);
299
+ },
300
+ async createTestRuntime(options) {
301
+ const hostId = await ensureHostId();
302
+ const resourceId = await __isolateHost_createResource(
303
+ hostId,
304
+ "testRuntime",
305
+ __normalizeRuntimeOptions(options),
306
+ );
307
+ return new NestedTestRuntime(resourceId);
308
+ },
309
+ async diagnostics() {
310
+ return await __isolateHost_hostDiagnostics(await ensureHostId());
311
+ },
312
+ async close() {
313
+ const hostId = await ensureHostId();
314
+ await __isolateHost_closeHost(hostId);
315
+ await __waitForNestedCallbacks();
316
+ },
317
+ };
318
+ }
319
+ `;
320
+ export {
321
+ SANDBOX_ISOLATE_MODULE_SPECIFIER,
322
+ SANDBOX_ISOLATE_MODULE_SOURCE
323
+ };
324
+
325
+ //# debugId=8DFE6DC754FD063B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bridge/sandbox-isolate.ts"],
4
+ "sourcesContent": [
5
+ "import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from \"../internal/browser-source.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostCallContext,\n} from \"../types.mjs\";\n\nexport const SANDBOX_ISOLATE_MODULE_SPECIFIER = \"@ricsam/isolate\";\n\nexport type NestedResourceKind = \"runtime\" | \"appServer\" | \"testRuntime\";\n\nexport interface NestedHostBindings {\n createHost(context: HostCallContext): Promise<string>;\n closeHost(hostId: string, context: HostCallContext): Promise<void>;\n diagnostics(\n hostId: string,\n context: HostCallContext,\n ): Promise<{ runtimes: number; servers: number; connected: boolean }>;\n createResource(\n hostId: string,\n kind: NestedResourceKind,\n options:\n | CreateRuntimeOptions\n | CreateAppServerOptions\n | CreateTestRuntimeOptions,\n context: HostCallContext,\n ): Promise<string>;\n callResource(\n kind: NestedResourceKind,\n resourceId: string,\n method: string,\n args: unknown[],\n context: HostCallContext,\n ): Promise<unknown>;\n}\n\nexport const SANDBOX_ISOLATE_MODULE_SOURCE = `\nconst __isolateBrowserDescriptorProperty = ${JSON.stringify(ISOLATE_BROWSER_DESCRIPTOR_PROPERTY)};\n\nfunction __normalizeBrowserHandle(value) {\n if (\n value &&\n typeof value === \"object\" &&\n value[__isolateBrowserDescriptorProperty]\n ) {\n return {\n [__isolateBrowserDescriptorProperty]: value[__isolateBrowserDescriptorProperty],\n };\n }\n return value;\n}\n\nfunction __normalizeBindings(bindings) {\n if (!bindings || typeof bindings !== \"object\") {\n return {};\n }\n\n const normalized = { ...bindings };\n if (\"browser\" in normalized) {\n normalized.browser = __normalizeBrowserHandle(normalized.browser);\n }\n return normalized;\n}\n\nfunction __normalizeRuntimeOptions(options) {\n const normalized = options ? { ...options } : {};\n normalized.bindings = __normalizeBindings(normalized.bindings);\n return normalized;\n}\n\nasync function __serializeRequest(requestLike) {\n const request = requestLike instanceof Request\n ? requestLike\n : new Request(requestLike);\n const headers = [];\n request.headers.forEach((value, key) => {\n headers.push([key, value]);\n });\n let body = null;\n if (request.body) {\n const cloned = request.clone();\n body = Array.from(new Uint8Array(await cloned.arrayBuffer()));\n }\n return {\n url: request.url,\n method: request.method,\n headers,\n body,\n };\n}\n\nfunction __normalizeEvalOptions(options) {\n if (typeof options === \"string\") {\n return { filename: options };\n }\n return options ?? null;\n}\n\nasync function __waitForNestedCallbacks() {\n await new Promise((resolve) => setTimeout(resolve, 0));\n}\n\nclass NestedScriptRuntime {\n #resourceId;\n\n constructor(resourceId) {\n this.#resourceId = resourceId;\n }\n\n async eval(code, options) {\n await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"eval\",\n [code, __normalizeEvalOptions(options)],\n );\n await __waitForNestedCallbacks();\n }\n\n async dispose(options) {\n await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"dispose\",\n [options ?? null],\n );\n await __waitForNestedCallbacks();\n }\n\n async diagnostics() {\n return await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"diagnostics\",\n [],\n );\n }\n\n events = {\n on: (event, handler) => {\n const subscriptionPromise = __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"events.on\",\n [event, handler],\n );\n return () => {\n void subscriptionPromise\n .then((subscriptionId) => __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"events.off\",\n [subscriptionId],\n ))\n .catch(() => {});\n };\n },\n emit: async (event, payload) => {\n await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"events.emit\",\n [event, payload],\n );\n await __waitForNestedCallbacks();\n },\n };\n}\n\nclass NestedAppServer {\n #resourceId;\n\n constructor(resourceId) {\n this.#resourceId = resourceId;\n }\n\n async handle(request, options) {\n const serializedRequest = await __serializeRequest(request);\n const result = await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"handle\",\n [\n serializedRequest,\n options\n ? {\n requestId: options.requestId,\n metadata: options.metadata,\n }\n : null,\n ],\n );\n await __waitForNestedCallbacks();\n return result;\n }\n\n ws = {\n open: async (connectionId) => {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"ws.open\",\n [connectionId],\n );\n await __waitForNestedCallbacks();\n },\n message: async (connectionId, data) => {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"ws.message\",\n [connectionId, data],\n );\n await __waitForNestedCallbacks();\n },\n close: async (connectionId, code, reason) => {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"ws.close\",\n [connectionId, code, reason],\n );\n await __waitForNestedCallbacks();\n },\n error: async (connectionId, error) => {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"ws.error\",\n [connectionId, error],\n );\n await __waitForNestedCallbacks();\n },\n };\n\n async reload(reason) {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"reload\",\n [reason ?? null],\n );\n await __waitForNestedCallbacks();\n }\n\n async dispose(options) {\n await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"dispose\",\n [options ?? null],\n );\n await __waitForNestedCallbacks();\n }\n\n async diagnostics() {\n return await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"diagnostics\",\n [],\n );\n }\n}\n\nclass NestedTestRuntime {\n #resourceId;\n\n constructor(resourceId) {\n this.#resourceId = resourceId;\n }\n\n async run(code, options) {\n const result = await __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"run\",\n [code, options ?? null],\n );\n await __waitForNestedCallbacks();\n return result;\n }\n\n async diagnostics() {\n return await __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"diagnostics\",\n [],\n );\n }\n\n async dispose(options) {\n await __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"dispose\",\n [options ?? null],\n );\n await __waitForNestedCallbacks();\n }\n}\n\nexport function createIsolateHost() {\n let hostIdPromise;\n\n const ensureHostId = async () => {\n if (!hostIdPromise) {\n hostIdPromise = __isolateHost_createHost();\n }\n return await hostIdPromise;\n };\n\n return {\n async createRuntime(options) {\n const hostId = await ensureHostId();\n const resourceId = await __isolateHost_createResource(\n hostId,\n \"runtime\",\n __normalizeRuntimeOptions(options),\n );\n return new NestedScriptRuntime(resourceId);\n },\n async createAppServer(options) {\n const hostId = await ensureHostId();\n const resourceId = await __isolateHost_createResource(\n hostId,\n \"appServer\",\n __normalizeRuntimeOptions(options),\n );\n return new NestedAppServer(resourceId);\n },\n async createTestRuntime(options) {\n const hostId = await ensureHostId();\n const resourceId = await __isolateHost_createResource(\n hostId,\n \"testRuntime\",\n __normalizeRuntimeOptions(options),\n );\n return new NestedTestRuntime(resourceId);\n },\n async diagnostics() {\n return await __isolateHost_hostDiagnostics(await ensureHostId());\n },\n async close() {\n const hostId = await ensureHostId();\n await __isolateHost_closeHost(hostId);\n await __waitForNestedCallbacks();\n },\n };\n}\n`;\n"
6
+ ],
7
+ "mappings": ";AAAA;AAQO,IAAM,mCAAmC;AA6BzC,IAAM,gCAAgC;AAAA,6CACA,KAAK,UAAU,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
8
+ "debugId": "8DFE6DC754FD063B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -3,11 +3,15 @@ import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { spawn } from "node:child_process";
5
5
  import { connect } from "../internal/client/index.mjs";
6
+ import {
7
+ createBrowserSourceFromBindings
8
+ } from "../internal/browser-source.mjs";
6
9
  import { createRuntimeDiagnostics } from "../bridge/diagnostics.mjs";
7
10
  import { createRuntimeBindingsAdapter } from "../bridge/runtime-bindings.mjs";
8
- import { createBrowserRuntimeAdapter } from "../browser/browser-runtime.mjs";
9
11
  import { createScriptRuntimeAdapter } from "../runtime/script-runtime.mjs";
12
+ import { createTestRuntimeAdapter } from "../runtime/test-runtime.mjs";
10
13
  import { createAppServerAdapter } from "../server/app-server.mjs";
14
+ import { createNestedHostBindings } from "./nested-host-controller.mjs";
11
15
  function resolveDefaultDaemonEntrypoint() {
12
16
  const localPath = path.resolve(import.meta.dirname, "../daemon.ts");
13
17
  if (fs.existsSync(localPath)) {
@@ -38,32 +42,13 @@ class HostImpl {
38
42
  this.options = options ?? {};
39
43
  }
40
44
  async createAppServer(options) {
41
- const server = await createAppServerAdapter(() => this.getConnection(), options);
42
- this.servers.add(server);
43
- return server;
45
+ return await this.createAppServerInternal(options);
44
46
  }
45
47
  async createRuntime(options) {
46
- const diagnostics = createRuntimeDiagnostics();
47
- let runtimeId = options.key ?? "runtime";
48
- const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics);
49
- const runtime = await this.createRemoteRuntime({
50
- ...bindingsAdapter.runtimeOptions,
51
- cwd: options.cwd,
52
- memoryLimitMB: options.memoryLimitMB,
53
- executionTimeout: options.executionTimeout,
54
- testEnvironment: options.features?.tests ?? false
55
- }, options.key);
56
- runtimeId = runtime.id;
57
- const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {
58
- onBeforeDispose: (reason) => bindingsAdapter.abort(reason)
59
- });
60
- this.runtimes.add(adapter);
61
- return adapter;
48
+ return await this.createRuntimeInternal(options);
62
49
  }
63
- async createBrowserRuntime(options) {
64
- const browserRuntime = await createBrowserRuntimeAdapter(async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key), options);
65
- this.runtimes.add(browserRuntime);
66
- return browserRuntime;
50
+ async createTestRuntime(options) {
51
+ return await this.createTestRuntimeInternal(options);
67
52
  }
68
53
  async diagnostics() {
69
54
  return {
@@ -94,6 +79,49 @@ class HostImpl {
94
79
  });
95
80
  }
96
81
  }
82
+ async createRuntimeInternal(options) {
83
+ const diagnostics = createRuntimeDiagnostics();
84
+ let runtimeId = options.key ?? "runtime";
85
+ const browserSource = createBrowserSourceFromBindings(options.bindings.browser);
86
+ const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, {
87
+ nestedHost: this.createNestedBindings(browserSource)
88
+ });
89
+ const runtime = await this.createRemoteRuntime({
90
+ ...bindingsAdapter.runtimeOptions,
91
+ cwd: options.cwd,
92
+ memoryLimitMB: options.memoryLimitMB,
93
+ executionTimeout: options.executionTimeout
94
+ }, options.key);
95
+ runtimeId = runtime.id;
96
+ const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {
97
+ hasBrowser: Boolean(options.bindings.browser),
98
+ onBeforeDispose: (reason) => bindingsAdapter.abort(reason)
99
+ });
100
+ this.runtimes.add(adapter);
101
+ return adapter;
102
+ }
103
+ async createTestRuntimeInternal(options) {
104
+ const testRuntime = await createTestRuntimeAdapter(async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key), options, {
105
+ nestedHost: this.createNestedBindings(createBrowserSourceFromBindings(options.bindings.browser))
106
+ });
107
+ this.runtimes.add(testRuntime);
108
+ return testRuntime;
109
+ }
110
+ async createAppServerInternal(options) {
111
+ const server = await createAppServerAdapter(() => this.getConnection(), options, {
112
+ nestedHost: this.createNestedBindings(createBrowserSourceFromBindings(options.bindings.browser))
113
+ });
114
+ this.servers.add(server);
115
+ return server;
116
+ }
117
+ createNestedBindings(defaultBrowserSource) {
118
+ return createNestedHostBindings({
119
+ createRuntime: async (options) => await this.createRuntimeInternal(options),
120
+ createAppServer: async (options) => await this.createAppServerInternal(options),
121
+ createTestRuntime: async (options) => await this.createTestRuntimeInternal(options),
122
+ isConnected: () => this.connection?.isConnected() ?? false
123
+ }, defaultBrowserSource);
124
+ }
97
125
  async createRemoteRuntime(options, key) {
98
126
  const connection = await this.getConnection();
99
127
  if (key) {
@@ -168,4 +196,4 @@ export {
168
196
  createIsolateHost
169
197
  };
170
198
 
171
- //# debugId=C74F5A138F5E977364756E2164756E21
199
+ //# debugId=F88690F7644D2DE964756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/host/create-isolate-host.ts"],
4
4
  "sourcesContent": [
5
- "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.mjs\";\nimport { createBrowserRuntimeAdapter } from \"../browser/browser-runtime.mjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.mjs\";\nimport { createAppServerAdapter } from \"../server/app-server.mjs\";\nimport type { CreateBrowserRuntimeOptions, CreateIsolateHostOptions, CreateRuntimeOptions, IsolateHost } from \"../types.mjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\nclass HostImpl implements IsolateHost {\n private readonly options: CreateIsolateHostOptions;\n private daemonProcess: ChildProcess | null = null;\n private connection: DaemonConnection | null = null;\n private connectionPromise: Promise<DaemonConnection> | null = null;\n private readonly servers = new Set<object>();\n private readonly runtimes = new Set<object>();\n\n constructor(options?: CreateIsolateHostOptions) {\n this.options = options ?? {};\n }\n\n async createAppServer(options: CreateRuntimeOptions & { key: string; entry: string; entryFilename?: string; webSockets?: { onCommand?: (command: { type: \"message\" | \"close\"; connectionId: string; data?: string | ArrayBuffer; code?: number; reason?: string }) => void } }) {\n const server = await createAppServerAdapter(() => this.getConnection(), options);\n this.servers.add(server);\n return server;\n }\n\n async createRuntime(options: CreateRuntimeOptions) {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n );\n const runtime = await this.createRemoteRuntime(\n {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: options.features?.tests ?? false,\n },\n options.key,\n );\n runtimeId = runtime.id;\n const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {\n onBeforeDispose: (reason) => bindingsAdapter.abort(reason),\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n async createBrowserRuntime(options: CreateBrowserRuntimeOptions) {\n const browserRuntime = await createBrowserRuntimeAdapter(\n async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key),\n options,\n );\n this.runtimes.add(browserRuntime);\n return browserRuntime;\n }\n\n async diagnostics() {\n return {\n runtimes: this.runtimes.size,\n servers: this.servers.size,\n connected: this.connection?.isConnected() ?? false,\n };\n }\n\n async close(): Promise<void> {\n if (this.connection) {\n await this.connection.close().catch(() => {});\n }\n this.connection = null;\n this.connectionPromise = null;\n\n if (this.daemonProcess) {\n const process = this.daemonProcess;\n this.daemonProcess = null;\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n process.kill(\"SIGKILL\");\n resolve();\n }, 5000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGTERM\");\n });\n }\n }\n\n private async createRemoteRuntime(options: RuntimeOptions, key?: string): Promise<RemoteRuntime> {\n const connection = await this.getConnection();\n if (key) {\n return await connection.createNamespace(key).createRuntime(options);\n }\n return await connection.createRuntime(options);\n }\n\n private async getConnection(): Promise<DaemonConnection> {\n if (this.connection?.isConnected()) {\n return this.connection;\n }\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n await this.ensureDaemon();\n this.connection = await connect({\n socket: this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\",\n timeout: this.options.daemon?.timeoutMs ?? 5000,\n });\n return this.connection;\n })();\n\n return await this.connectionPromise.finally(() => {\n this.connectionPromise = null;\n });\n }\n\n private async ensureDaemon(): Promise<void> {\n if (this.connection?.isConnected()) {\n return;\n }\n\n if (this.options.daemon?.autoStart === false) {\n return;\n }\n\n if (this.daemonProcess) {\n return;\n }\n\n const socketPath = this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\";\n const entrypoint = this.options.daemon?.entrypoint ?? resolveDefaultDaemonEntrypoint();\n\n try {\n if (fs.existsSync(socketPath)) {\n fs.unlinkSync(socketPath);\n }\n } catch {\n // ignore stale socket cleanup failures\n }\n\n const cli = entrypoint\n ? [\"node\", \"--experimental-strip-types\", entrypoint, \"--socket\", socketPath]\n : [\"isolate-daemon\", \"--socket\", socketPath];\n const cwd = this.options.daemon?.cwd ?? (entrypoint ? path.resolve(import.meta.dirname, \"../..\") : process.cwd());\n this.daemonProcess = spawn(cli[0]!, cli.slice(1), {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n NODE_OPTIONS: \"\",\n },\n });\n\n this.daemonProcess.stdout?.on(\"data\", (data: Buffer) => {\n console.log(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.stderr?.on(\"data\", (data: Buffer) => {\n console.error(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.on(\"exit\", () => {\n this.daemonProcess = null;\n this.connection = null;\n this.connectionPromise = null;\n });\n\n await waitForSocket(socketPath, this.options.daemon?.timeoutMs ?? 10_000);\n }\n}\n\nexport async function createIsolateHost(options?: CreateIsolateHostOptions): Promise<IsolateHost> {\n return new HostImpl(options);\n}\n"
5
+ "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.mjs\";\nimport {\n createBrowserSourceFromBindings,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.mjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.mjs\";\nimport { createTestRuntimeAdapter } from \"../runtime/test-runtime.mjs\";\nimport { createAppServerAdapter } from \"../server/app-server.mjs\";\nimport { createNestedHostBindings } from \"./nested-host-controller.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n IsolateHost,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\nclass HostImpl implements IsolateHost {\n private readonly options: CreateIsolateHostOptions;\n private daemonProcess: ChildProcess | null = null;\n private connection: DaemonConnection | null = null;\n private connectionPromise: Promise<DaemonConnection> | null = null;\n private readonly servers = new Set<object>();\n private readonly runtimes = new Set<object>();\n\n constructor(options?: CreateIsolateHostOptions) {\n this.options = options ?? {};\n }\n\n async createAppServer(options: CreateAppServerOptions) {\n return await this.createAppServerInternal(options);\n }\n\n async createRuntime(options: CreateRuntimeOptions) {\n return await this.createRuntimeInternal(options);\n }\n\n async createTestRuntime(options: CreateTestRuntimeOptions) {\n return await this.createTestRuntimeInternal(options);\n }\n\n async diagnostics() {\n return {\n runtimes: this.runtimes.size,\n servers: this.servers.size,\n connected: this.connection?.isConnected() ?? false,\n };\n }\n\n async close(): Promise<void> {\n if (this.connection) {\n await this.connection.close().catch(() => {});\n }\n this.connection = null;\n this.connectionPromise = null;\n\n if (this.daemonProcess) {\n const process = this.daemonProcess;\n this.daemonProcess = null;\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n process.kill(\"SIGKILL\");\n resolve();\n }, 5000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGTERM\");\n });\n }\n }\n\n private async createRuntimeInternal(\n options: CreateRuntimeOptions,\n ): Promise<ScriptRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"runtime\";\n const browserSource = createBrowserSourceFromBindings(options.bindings.browser);\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n {\n nestedHost: this.createNestedBindings(browserSource),\n },\n );\n const runtime = await this.createRemoteRuntime(\n {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n options.key,\n );\n runtimeId = runtime.id;\n const adapter = createScriptRuntimeAdapter(runtime, diagnostics, {\n hasBrowser: Boolean(options.bindings.browser),\n onBeforeDispose: (reason) => bindingsAdapter.abort(reason),\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n private async createTestRuntimeInternal(\n options: CreateTestRuntimeOptions,\n ): Promise<TestRuntime> {\n const testRuntime = await createTestRuntimeAdapter(\n async (runtimeOptions) => await this.createRemoteRuntime(runtimeOptions, options.key),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n ),\n },\n );\n this.runtimes.add(testRuntime);\n return testRuntime;\n }\n\n private async createAppServerInternal(\n options: CreateAppServerOptions,\n ): Promise<AppServer> {\n const server = await createAppServerAdapter(\n () => this.getConnection(),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n ),\n },\n );\n this.servers.add(server);\n return server;\n }\n\n private createNestedBindings(\n defaultBrowserSource: BrowserSource | undefined,\n ) {\n return createNestedHostBindings(\n {\n createRuntime: async (options) => await this.createRuntimeInternal(options),\n createAppServer: async (options) =>\n await this.createAppServerInternal(options),\n createTestRuntime: async (options) =>\n await this.createTestRuntimeInternal(options),\n isConnected: () => this.connection?.isConnected() ?? false,\n },\n defaultBrowserSource,\n );\n }\n\n private async createRemoteRuntime(options: RuntimeOptions, key?: string): Promise<RemoteRuntime> {\n const connection = await this.getConnection();\n if (key) {\n return await connection.createNamespace(key).createRuntime(options);\n }\n return await connection.createRuntime(options);\n }\n\n private async getConnection(): Promise<DaemonConnection> {\n if (this.connection?.isConnected()) {\n return this.connection;\n }\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n await this.ensureDaemon();\n this.connection = await connect({\n socket: this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\",\n timeout: this.options.daemon?.timeoutMs ?? 5000,\n });\n return this.connection;\n })();\n\n return await this.connectionPromise.finally(() => {\n this.connectionPromise = null;\n });\n }\n\n private async ensureDaemon(): Promise<void> {\n if (this.connection?.isConnected()) {\n return;\n }\n\n if (this.options.daemon?.autoStart === false) {\n return;\n }\n\n if (this.daemonProcess) {\n return;\n }\n\n const socketPath = this.options.daemon?.socketPath ?? \"/tmp/isolate.sock\";\n const entrypoint = this.options.daemon?.entrypoint ?? resolveDefaultDaemonEntrypoint();\n\n try {\n if (fs.existsSync(socketPath)) {\n fs.unlinkSync(socketPath);\n }\n } catch {\n // ignore stale socket cleanup failures\n }\n\n const cli = entrypoint\n ? [\"node\", \"--experimental-strip-types\", entrypoint, \"--socket\", socketPath]\n : [\"isolate-daemon\", \"--socket\", socketPath];\n const cwd = this.options.daemon?.cwd ?? (entrypoint ? path.resolve(import.meta.dirname, \"../..\") : process.cwd());\n this.daemonProcess = spawn(cli[0]!, cli.slice(1), {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: {\n ...process.env,\n NODE_OPTIONS: \"\",\n },\n });\n\n this.daemonProcess.stdout?.on(\"data\", (data: Buffer) => {\n console.log(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.stderr?.on(\"data\", (data: Buffer) => {\n console.error(\"[isolate-host]\", data.toString().trim());\n });\n this.daemonProcess.on(\"exit\", () => {\n this.daemonProcess = null;\n this.connection = null;\n this.connectionPromise = null;\n });\n\n await waitForSocket(socketPath, this.options.daemon?.timeoutMs ?? 10_000);\n }\n}\n\nexport async function createIsolateHost(options?: CreateIsolateHostOptions): Promise<IsolateHost> {\n return new HostImpl(options);\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "C74F5A138F5E977364756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "F88690F7644D2DE964756E2164756E21",
9
9
  "names": []
10
10
  }