@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.
- package/README.md +15 -0
- package/dist/cjs/bridge/runtime-bindings.cjs +11 -10
- package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
- package/dist/cjs/bridge/sandbox-isolate.cjs +58 -2
- package/dist/cjs/bridge/sandbox-isolate.cjs.map +3 -3
- package/dist/cjs/host/create-isolate-host.cjs +7 -2
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/nested-host-controller.cjs +36 -4
- package/dist/cjs/host/nested-host-controller.cjs.map +3 -3
- package/dist/cjs/internal/client/connection.cjs +9 -9
- package/dist/cjs/internal/client/connection.cjs.map +3 -3
- package/dist/cjs/internal/runtime/index.cjs +5 -2
- package/dist/cjs/internal/runtime/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/isolate-types.cjs +50 -1
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/runtime/namespaced-runtime.cjs +4 -1
- package/dist/cjs/runtime/namespaced-runtime.cjs.map +3 -3
- package/dist/cjs/runtime/test-event-subscriptions.cjs +76 -0
- package/dist/cjs/runtime/test-event-subscriptions.cjs.map +10 -0
- package/dist/cjs/runtime/test-runtime.cjs +26 -3
- package/dist/cjs/runtime/test-runtime.cjs.map +3 -3
- package/dist/mjs/bridge/runtime-bindings.mjs +11 -10
- package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
- package/dist/mjs/bridge/sandbox-isolate.mjs +58 -2
- package/dist/mjs/bridge/sandbox-isolate.mjs.map +3 -3
- package/dist/mjs/host/create-isolate-host.mjs +7 -2
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/nested-host-controller.mjs +36 -4
- package/dist/mjs/host/nested-host-controller.mjs.map +3 -3
- package/dist/mjs/internal/client/connection.mjs +9 -9
- package/dist/mjs/internal/client/connection.mjs.map +3 -3
- package/dist/mjs/internal/runtime/index.mjs +5 -2
- package/dist/mjs/internal/runtime/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/isolate-types.mjs +50 -1
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/runtime/namespaced-runtime.mjs +4 -1
- package/dist/mjs/runtime/namespaced-runtime.mjs.map +3 -3
- package/dist/mjs/runtime/test-event-subscriptions.mjs +36 -0
- package/dist/mjs/runtime/test-event-subscriptions.mjs.map +10 -0
- package/dist/mjs/runtime/test-runtime.mjs +26 -3
- package/dist/mjs/runtime/test-runtime.mjs.map +3 -3
- package/dist/types/internal/typecheck/isolate-types.d.ts +2 -2
- package/dist/types/runtime/namespaced-runtime.d.ts +3 -1
- package/dist/types/runtime/test-event-subscriptions.d.ts +12 -0
- package/dist/types/types.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -294,6 +294,12 @@ const reused = await host.getNamespacedRuntime("playwright:preview:session", {
|
|
|
294
294
|
},
|
|
295
295
|
});
|
|
296
296
|
|
|
297
|
+
const unsubscribe = reused.test.onEvent((event) => {
|
|
298
|
+
if (event.type === "testStart") {
|
|
299
|
+
console.log("running", event.test.fullName);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
|
|
297
303
|
const results = await reused.runTests(`
|
|
298
304
|
test("sees the existing browser state", async () => {
|
|
299
305
|
const contexts = await browser.contexts();
|
|
@@ -305,6 +311,7 @@ const results = await reused.runTests(`
|
|
|
305
311
|
|
|
306
312
|
console.log(results.success);
|
|
307
313
|
|
|
314
|
+
unsubscribe();
|
|
308
315
|
await host.disposeNamespace("playwright:preview:session");
|
|
309
316
|
await browser.close();
|
|
310
317
|
await host.close();
|
|
@@ -314,6 +321,7 @@ Lifecycle notes:
|
|
|
314
321
|
|
|
315
322
|
- only one live handle per namespace is allowed at a time
|
|
316
323
|
- `runTests(code)` resets test registration before loading and running the provided suite
|
|
324
|
+
- `session.test.onEvent(...)` exposes suite/test lifecycle events for timeout and progress reporting
|
|
317
325
|
- runtime globals, module state, and Playwright resources are preserved across soft dispose and reacquire
|
|
318
326
|
- browser shutdown stays host-owned; page/context shutdown stays sandbox-owned
|
|
319
327
|
- preview URL rewriting remains host-specific and stays outside isolate
|
|
@@ -392,6 +400,12 @@ const runtime = await host.createTestRuntime({
|
|
|
392
400
|
},
|
|
393
401
|
});
|
|
394
402
|
|
|
403
|
+
const unsubscribe = runtime.test.onEvent((event) => {
|
|
404
|
+
if (event.type === "testStart") {
|
|
405
|
+
console.log("running", event.test.fullName);
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
|
|
395
409
|
const result = await runtime.run(
|
|
396
410
|
`
|
|
397
411
|
let ctx;
|
|
@@ -423,6 +437,7 @@ const result = await runtime.run(
|
|
|
423
437
|
|
|
424
438
|
console.log(result);
|
|
425
439
|
|
|
440
|
+
unsubscribe();
|
|
426
441
|
await runtime.dispose();
|
|
427
442
|
await browser.close();
|
|
428
443
|
await host.close();
|
|
@@ -200,9 +200,9 @@ function createRuntimeBindingsAdapter(bindings, getRuntimeId, diagnostics, optio
|
|
|
200
200
|
return {
|
|
201
201
|
runtimeOptions: {
|
|
202
202
|
console: bindings.console?.onEntry ? {
|
|
203
|
-
onEntry: (entry) => {
|
|
203
|
+
onEntry: async (entry) => {
|
|
204
204
|
const context = contextFactory.createHostCallContext(`console:${crypto.randomUUID()}`);
|
|
205
|
-
bindings.console?.onEntry?.(entry, context);
|
|
205
|
+
await bindings.console?.onEntry?.(entry, context);
|
|
206
206
|
}
|
|
207
207
|
} : undefined,
|
|
208
208
|
fetch: bindings.fetch ? async (url, init) => {
|
|
@@ -374,9 +374,9 @@ function createBrowserPlaywrightOptions(browser, createHostCallContext) {
|
|
|
374
374
|
handler: browser.handler,
|
|
375
375
|
hasDefaultPage: false,
|
|
376
376
|
console: browser.captureConsole ?? false,
|
|
377
|
-
onEvent: browser.onEvent ? (event) => {
|
|
377
|
+
onEvent: browser.onEvent ? async (event) => {
|
|
378
378
|
const context = createHostCallContext(`browser:event:${event.type}:${crypto.randomUUID()}`);
|
|
379
|
-
browser.onEvent?.(event, context);
|
|
379
|
+
await browser.onEvent?.(event, context);
|
|
380
380
|
} : undefined
|
|
381
381
|
};
|
|
382
382
|
}
|
|
@@ -406,9 +406,9 @@ function createBrowserPlaywrightOptions(browser, createHostCallContext) {
|
|
|
406
406
|
}),
|
|
407
407
|
hasDefaultPage: false,
|
|
408
408
|
console: browser.captureConsole ?? false,
|
|
409
|
-
onEvent: browser.onEvent ? (event) => {
|
|
409
|
+
onEvent: browser.onEvent ? async (event) => {
|
|
410
410
|
const context = createHostCallContext(`browser:event:${event.type}:${crypto.randomUUID()}`);
|
|
411
|
-
browser.onEvent?.(event, context);
|
|
411
|
+
await browser.onEvent?.(event, context);
|
|
412
412
|
} : undefined
|
|
413
413
|
};
|
|
414
414
|
}
|
|
@@ -533,9 +533,10 @@ function createCustomFunctions(tools, nestedHost, createHostCallContext, diagnos
|
|
|
533
533
|
definitions.__isolateHost_drainCallbacks = {
|
|
534
534
|
type: "async",
|
|
535
535
|
fn: async (...args) => {
|
|
536
|
-
const
|
|
537
|
-
|
|
538
|
-
await
|
|
536
|
+
const settleTurns = typeof args[0] === "number" && Number.isFinite(args[0]) && args[0] > 0 ? Math.floor(args[0]) : 1;
|
|
537
|
+
for (let index = 0;index < settleTurns; index += 1) {
|
|
538
|
+
await Promise.resolve();
|
|
539
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
539
540
|
}
|
|
540
541
|
}
|
|
541
542
|
};
|
|
@@ -543,4 +544,4 @@ function createCustomFunctions(tools, nestedHost, createHostCallContext, diagnos
|
|
|
543
544
|
return Object.keys(definitions).length > 0 ? definitions : undefined;
|
|
544
545
|
}
|
|
545
546
|
|
|
546
|
-
//# debugId=
|
|
547
|
+
//# debugId=CA5AC999C89A060664756E2164756E21
|
|
@@ -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.cjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.cjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.cjs\";\nimport { getRequestContext } from \"./request-context.cjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.cjs\";\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.cjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.cjs\";\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.cjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.cjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.cjs\";\nimport { getRequestContext } from \"./request-context.cjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.cjs\";\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.cjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.cjs\";\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": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "CA5AC999C89A060664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -114,10 +114,24 @@ function __normalizeEvalOptions(options) {
|
|
|
114
114
|
return options ?? null;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
async function
|
|
117
|
+
async function __waitForCallbackTurn() {
|
|
118
|
+
await Promise.resolve();
|
|
118
119
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
119
120
|
}
|
|
120
121
|
|
|
122
|
+
async function __waitForNestedCallbacks() {
|
|
123
|
+
const settleTurns = 3;
|
|
124
|
+
|
|
125
|
+
if (typeof __isolateHost_drainCallbacks === "function") {
|
|
126
|
+
await __isolateHost_drainCallbacks(settleTurns);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
for (let index = 0; index < settleTurns; index += 1) {
|
|
131
|
+
await __waitForCallbackTurn();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
121
135
|
class NestedScriptRuntime {
|
|
122
136
|
#resourceId;
|
|
123
137
|
|
|
@@ -317,6 +331,27 @@ class NestedTestRuntime {
|
|
|
317
331
|
);
|
|
318
332
|
await __waitForNestedCallbacks();
|
|
319
333
|
}
|
|
334
|
+
|
|
335
|
+
test = {
|
|
336
|
+
onEvent: (handler) => {
|
|
337
|
+
const subscriptionPromise = __isolateHost_callResource(
|
|
338
|
+
"testRuntime",
|
|
339
|
+
this.#resourceId,
|
|
340
|
+
"test.on",
|
|
341
|
+
[handler],
|
|
342
|
+
);
|
|
343
|
+
return () => {
|
|
344
|
+
void subscriptionPromise
|
|
345
|
+
.then((subscriptionId) => __isolateHost_callResource(
|
|
346
|
+
"testRuntime",
|
|
347
|
+
this.#resourceId,
|
|
348
|
+
"test.off",
|
|
349
|
+
[subscriptionId],
|
|
350
|
+
))
|
|
351
|
+
.catch(() => {});
|
|
352
|
+
};
|
|
353
|
+
},
|
|
354
|
+
};
|
|
320
355
|
}
|
|
321
356
|
|
|
322
357
|
class NestedNamespacedRuntime {
|
|
@@ -366,6 +401,27 @@ class NestedNamespacedRuntime {
|
|
|
366
401
|
await __waitForNestedCallbacks();
|
|
367
402
|
}
|
|
368
403
|
|
|
404
|
+
test = {
|
|
405
|
+
onEvent: (handler) => {
|
|
406
|
+
const subscriptionPromise = __isolateHost_callResource(
|
|
407
|
+
"namespacedRuntime",
|
|
408
|
+
this.#resourceId,
|
|
409
|
+
"test.on",
|
|
410
|
+
[handler],
|
|
411
|
+
);
|
|
412
|
+
return () => {
|
|
413
|
+
void subscriptionPromise
|
|
414
|
+
.then((subscriptionId) => __isolateHost_callResource(
|
|
415
|
+
"namespacedRuntime",
|
|
416
|
+
this.#resourceId,
|
|
417
|
+
"test.off",
|
|
418
|
+
[subscriptionId],
|
|
419
|
+
))
|
|
420
|
+
.catch(() => {});
|
|
421
|
+
};
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
|
|
369
425
|
events = {
|
|
370
426
|
on: (event, handler) => {
|
|
371
427
|
const subscriptionPromise = __isolateHost_callResource(
|
|
@@ -461,4 +517,4 @@ export function createIsolateHost() {
|
|
|
461
517
|
}
|
|
462
518
|
`;
|
|
463
519
|
|
|
464
|
-
//# debugId=
|
|
520
|
+
//# debugId=9CC38FF33427223764756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/bridge/sandbox-isolate.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from \"../internal/browser-source.cjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostCallContext,\n} from \"../types.cjs\";\n\nexport const SANDBOX_ISOLATE_MODULE_SPECIFIER = \"@ricsam/isolate\";\n\nexport type NestedResourceKind =\n | \"runtime\"\n | \"appServer\"\n | \"testRuntime\"\n | \"namespacedRuntime\";\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 | {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n },\n context: HostCallContext,\n ): Promise<string>;\n disposeNamespace(\n hostId: string,\n key: string,\n options: { reason?: string } | undefined,\n context: HostCallContext,\n ): Promise<void>;\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\nfunction __normalizeNamespacedRuntimeOptions(key, options) {\n return {\n key,\n options: __normalizeRuntimeOptions(options),\n };\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\nclass NestedNamespacedRuntime {\n #resourceId;\n\n constructor(resourceId) {\n this.#resourceId = resourceId;\n }\n\n async eval(code, options) {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"eval\",\n [code, __normalizeEvalOptions(options)],\n );\n await __waitForNestedCallbacks();\n }\n\n async runTests(code, options) {\n const result = await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"runTests\",\n [code, options ?? null],\n );\n await __waitForNestedCallbacks();\n return result;\n }\n\n async diagnostics() {\n return await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"diagnostics\",\n [],\n );\n }\n\n async dispose(options) {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"dispose\",\n [options ?? null],\n );\n await __waitForNestedCallbacks();\n }\n\n events = {\n on: (event, handler) => {\n const subscriptionPromise = __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.on\",\n [event, handler],\n );\n return () => {\n void subscriptionPromise\n .then((subscriptionId) => __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.off\",\n [subscriptionId],\n ))\n .catch(() => {});\n };\n },\n emit: async (event, payload) => {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.emit\",\n [event, payload],\n );\n await __waitForNestedCallbacks();\n },\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 getNamespacedRuntime(key, options) {\n const hostId = await ensureHostId();\n const resourceId = await __isolateHost_createResource(\n hostId,\n \"namespacedRuntime\",\n __normalizeNamespacedRuntimeOptions(key, options),\n );\n return new NestedNamespacedRuntime(resourceId);\n },\n async disposeNamespace(key, options) {\n const hostId = await ensureHostId();\n await __isolateHost_disposeNamespace(hostId, key, options ?? null);\n await __waitForNestedCallbacks();\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"
|
|
5
|
+
"import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from \"../internal/browser-source.cjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostCallContext,\n} from \"../types.cjs\";\n\nexport const SANDBOX_ISOLATE_MODULE_SPECIFIER = \"@ricsam/isolate\";\n\nexport type NestedResourceKind =\n | \"runtime\"\n | \"appServer\"\n | \"testRuntime\"\n | \"namespacedRuntime\";\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 | {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n },\n context: HostCallContext,\n ): Promise<string>;\n disposeNamespace(\n hostId: string,\n key: string,\n options: { reason?: string } | undefined,\n context: HostCallContext,\n ): Promise<void>;\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\nfunction __normalizeNamespacedRuntimeOptions(key, options) {\n return {\n key,\n options: __normalizeRuntimeOptions(options),\n };\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 __waitForCallbackTurn() {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n}\n\nasync function __waitForNestedCallbacks() {\n const settleTurns = 3;\n\n if (typeof __isolateHost_drainCallbacks === \"function\") {\n await __isolateHost_drainCallbacks(settleTurns);\n return;\n }\n\n for (let index = 0; index < settleTurns; index += 1) {\n await __waitForCallbackTurn();\n }\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 test = {\n onEvent: (handler) => {\n const subscriptionPromise = __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"test.on\",\n [handler],\n );\n return () => {\n void subscriptionPromise\n .then((subscriptionId) => __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"test.off\",\n [subscriptionId],\n ))\n .catch(() => {});\n };\n },\n };\n}\n\nclass NestedNamespacedRuntime {\n #resourceId;\n\n constructor(resourceId) {\n this.#resourceId = resourceId;\n }\n\n async eval(code, options) {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"eval\",\n [code, __normalizeEvalOptions(options)],\n );\n await __waitForNestedCallbacks();\n }\n\n async runTests(code, options) {\n const result = await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"runTests\",\n [code, options ?? null],\n );\n await __waitForNestedCallbacks();\n return result;\n }\n\n async diagnostics() {\n return await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"diagnostics\",\n [],\n );\n }\n\n async dispose(options) {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"dispose\",\n [options ?? null],\n );\n await __waitForNestedCallbacks();\n }\n\n test = {\n onEvent: (handler) => {\n const subscriptionPromise = __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"test.on\",\n [handler],\n );\n return () => {\n void subscriptionPromise\n .then((subscriptionId) => __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"test.off\",\n [subscriptionId],\n ))\n .catch(() => {});\n };\n },\n };\n\n events = {\n on: (event, handler) => {\n const subscriptionPromise = __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.on\",\n [event, handler],\n );\n return () => {\n void subscriptionPromise\n .then((subscriptionId) => __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.off\",\n [subscriptionId],\n ))\n .catch(() => {});\n };\n },\n emit: async (event, payload) => {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"events.emit\",\n [event, payload],\n );\n await __waitForNestedCallbacks();\n },\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 getNamespacedRuntime(key, options) {\n const hostId = await ensureHostId();\n const resourceId = await __isolateHost_createResource(\n hostId,\n \"namespacedRuntime\",\n __normalizeNamespacedRuntimeOptions(key, options),\n );\n return new NestedNamespacedRuntime(resourceId);\n },\n async disposeNamespace(key, options) {\n const hostId = await ensureHostId();\n await __isolateHost_disposeNamespace(hostId, key, options ?? null);\n await __waitForNestedCallbacks();\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
6
|
],
|
|
7
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoD,IAApD;AASO,IAAM,mCAAmC;AA2CzC,IAAM,gCAAgC;AAAA,6CACA,KAAK,UAAU,yDAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoD,IAApD;AASO,IAAM,mCAAmC;AA2CzC,IAAM,gCAAgC;AAAA,6CACA,KAAK,UAAU,yDAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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": "9CC38FF33427223764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -76,6 +76,7 @@ var import_runtime_bindings = require("../bridge/runtime-bindings.cjs");
|
|
|
76
76
|
var import_namespaced_runtime = require("../runtime/namespaced-runtime.cjs");
|
|
77
77
|
var import_script_runtime = require("../runtime/script-runtime.cjs");
|
|
78
78
|
var import_test_runtime = require("../runtime/test-runtime.cjs");
|
|
79
|
+
var import_test_event_subscriptions = require("../runtime/test-event-subscriptions.cjs");
|
|
79
80
|
var import_app_server = require("../server/app-server.cjs");
|
|
80
81
|
var import_nested_host_controller = require("./nested-host-controller.cjs");
|
|
81
82
|
function resolveDefaultDaemonEntrypoint() {
|
|
@@ -216,6 +217,7 @@ class HostImpl {
|
|
|
216
217
|
}
|
|
217
218
|
this.pendingNamespacedKeys.add(key);
|
|
218
219
|
const diagnostics = import_diagnostics.createRuntimeDiagnostics();
|
|
220
|
+
const testEvents = import_test_event_subscriptions.createTestEventSubscriptions();
|
|
219
221
|
let runtimeId = key;
|
|
220
222
|
const browserSource = import_browser_source.createBrowserSourceFromBindings(options.bindings.browser);
|
|
221
223
|
const bindingsAdapter = import_runtime_bindings.createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, {
|
|
@@ -227,13 +229,16 @@ class HostImpl {
|
|
|
227
229
|
cwd: options.cwd,
|
|
228
230
|
memoryLimitMB: options.memoryLimitMB,
|
|
229
231
|
executionTimeout: options.executionTimeout,
|
|
230
|
-
testEnvironment:
|
|
232
|
+
testEnvironment: {
|
|
233
|
+
onEvent: (event) => testEvents.emit(event)
|
|
234
|
+
}
|
|
231
235
|
}, key);
|
|
232
236
|
runtimeId = runtime.id;
|
|
233
237
|
let adapter;
|
|
234
238
|
adapter = import_namespaced_runtime.createNamespacedRuntimeAdapter(runtime, diagnostics, {
|
|
235
239
|
hasBrowser: Boolean(options.bindings.browser),
|
|
236
240
|
abortBindings: (reason) => bindingsAdapter.abort(reason),
|
|
241
|
+
testEvents,
|
|
237
242
|
onRelease: () => {
|
|
238
243
|
if (this.namespacedRuntimes.get(key) === adapter) {
|
|
239
244
|
this.namespacedRuntimes.delete(key);
|
|
@@ -337,4 +342,4 @@ async function createIsolateHost(options) {
|
|
|
337
342
|
return new HostImpl(options);
|
|
338
343
|
}
|
|
339
344
|
|
|
340
|
-
//# debugId=
|
|
345
|
+
//# debugId=9808B79FF11AEC9864756E2164756E21
|
|
@@ -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.cjs\";\nimport {\n createBrowserSourceFromBindings,\n type BrowserSource,\n} from \"../internal/browser-source.cjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.cjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.cjs\";\nimport { createNamespacedRuntimeAdapter } from \"../runtime/namespaced-runtime.cjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.cjs\";\nimport { createTestRuntimeAdapter } from \"../runtime/test-runtime.cjs\";\nimport { createAppServerAdapter } from \"../server/app-server.cjs\";\nimport { createNestedHostBindings } from \"./nested-host-controller.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n IsolateHost,\n NamespacedRuntime,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.cjs\";\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\nfunction createNamedError(name: string, message: string): Error {\n const error = new Error(message);\n error.name = name;\n return error;\n}\n\nfunction normalizeNamespaceInUseError(error: unknown, key: string): Error {\n if (error instanceof Error && error.name === \"NamespaceInUseError\") {\n return error;\n }\n\n const message =\n error instanceof Error ? error.message : String(error ?? \"\");\n if (/already has an active runtime|creation already in progress/i.test(message)) {\n return createNamedError(\n \"NamespaceInUseError\",\n `Namespace \"${key}\" already has a live runtime.`,\n );\n }\n\n return error instanceof Error ? error : new Error(message);\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 private readonly namespacedRuntimes = new Map<string, ReturnType<typeof createNamespacedRuntimeAdapter>>();\n private readonly pendingNamespacedKeys = new Set<string>();\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 getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n ) {\n return await this.createNamespacedRuntimeInternal(key, options);\n }\n\n async disposeNamespace(key: string, options?: { reason?: string }) {\n this.pendingNamespacedKeys.delete(key);\n const runtime = this.namespacedRuntimes.get(key);\n if (runtime) {\n runtime.invalidate(\n options?.reason\n ? `Namespace \"${key}\" was disposed: ${options.reason}`\n : `Namespace \"${key}\" was disposed.`,\n );\n this.namespacedRuntimes.delete(key);\n }\n\n const connection = await this.getConnection();\n await connection.disposeNamespace(key, {\n reason: options?.reason,\n });\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 for (const [key, runtime] of this.namespacedRuntimes) {\n runtime.invalidate(`Host closed while namespace \"${key}\" was active.`);\n }\n this.namespacedRuntimes.clear();\n this.pendingNamespacedKeys.clear();\n\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 createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n ): Promise<NamespacedRuntime> {\n if (this.pendingNamespacedKeys.has(key) || this.namespacedRuntimes.has(key)) {\n throw createNamedError(\n \"NamespaceInUseError\",\n `Namespace \"${key}\" already has a live runtime.`,\n );\n }\n\n this.pendingNamespacedKeys.add(key);\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = key;\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\n try {\n const runtime = await this.createRemoteRuntime(\n {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: true,\n },\n key,\n );\n runtimeId = runtime.id;\n\n let adapter: ReturnType<typeof createNamespacedRuntimeAdapter>;\n adapter = createNamespacedRuntimeAdapter(runtime, diagnostics, {\n hasBrowser: Boolean(options.bindings.browser),\n abortBindings: (reason) => bindingsAdapter.abort(reason),\n onRelease: () => {\n if (this.namespacedRuntimes.get(key) === adapter) {\n this.namespacedRuntimes.delete(key);\n }\n },\n });\n\n this.namespacedRuntimes.set(key, adapter);\n this.runtimes.add(adapter);\n return adapter;\n } catch (error) {\n throw normalizeNamespaceInUseError(error, key);\n } finally {\n this.pendingNamespacedKeys.delete(key);\n }\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 getNamespacedRuntime: async (key, options) =>\n await this.createNamespacedRuntimeInternal(key, options),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, 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"
|
|
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.cjs\";\nimport {\n createBrowserSourceFromBindings,\n type BrowserSource,\n} from \"../internal/browser-source.cjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.cjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.cjs\";\nimport { createNamespacedRuntimeAdapter } from \"../runtime/namespaced-runtime.cjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.cjs\";\nimport { createTestRuntimeAdapter } from \"../runtime/test-runtime.cjs\";\nimport { createTestEventSubscriptions } from \"../runtime/test-event-subscriptions.cjs\";\nimport { createAppServerAdapter } from \"../server/app-server.cjs\";\nimport { createNestedHostBindings } from \"./nested-host-controller.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n IsolateHost,\n NamespacedRuntime,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.cjs\";\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\nfunction createNamedError(name: string, message: string): Error {\n const error = new Error(message);\n error.name = name;\n return error;\n}\n\nfunction normalizeNamespaceInUseError(error: unknown, key: string): Error {\n if (error instanceof Error && error.name === \"NamespaceInUseError\") {\n return error;\n }\n\n const message =\n error instanceof Error ? error.message : String(error ?? \"\");\n if (/already has an active runtime|creation already in progress/i.test(message)) {\n return createNamedError(\n \"NamespaceInUseError\",\n `Namespace \"${key}\" already has a live runtime.`,\n );\n }\n\n return error instanceof Error ? error : new Error(message);\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 private readonly namespacedRuntimes = new Map<string, ReturnType<typeof createNamespacedRuntimeAdapter>>();\n private readonly pendingNamespacedKeys = new Set<string>();\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 getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n ) {\n return await this.createNamespacedRuntimeInternal(key, options);\n }\n\n async disposeNamespace(key: string, options?: { reason?: string }) {\n this.pendingNamespacedKeys.delete(key);\n const runtime = this.namespacedRuntimes.get(key);\n if (runtime) {\n runtime.invalidate(\n options?.reason\n ? `Namespace \"${key}\" was disposed: ${options.reason}`\n : `Namespace \"${key}\" was disposed.`,\n );\n this.namespacedRuntimes.delete(key);\n }\n\n const connection = await this.getConnection();\n await connection.disposeNamespace(key, {\n reason: options?.reason,\n });\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 for (const [key, runtime] of this.namespacedRuntimes) {\n runtime.invalidate(`Host closed while namespace \"${key}\" was active.`);\n }\n this.namespacedRuntimes.clear();\n this.pendingNamespacedKeys.clear();\n\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 createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n ): Promise<NamespacedRuntime> {\n if (this.pendingNamespacedKeys.has(key) || this.namespacedRuntimes.has(key)) {\n throw createNamedError(\n \"NamespaceInUseError\",\n `Namespace \"${key}\" already has a live runtime.`,\n );\n }\n\n this.pendingNamespacedKeys.add(key);\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = key;\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\n try {\n const runtime = await this.createRemoteRuntime(\n {\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 key,\n );\n runtimeId = runtime.id;\n\n let adapter: ReturnType<typeof createNamespacedRuntimeAdapter>;\n adapter = createNamespacedRuntimeAdapter(runtime, diagnostics, {\n hasBrowser: Boolean(options.bindings.browser),\n abortBindings: (reason) => bindingsAdapter.abort(reason),\n testEvents,\n onRelease: () => {\n if (this.namespacedRuntimes.get(key) === adapter) {\n this.namespacedRuntimes.delete(key);\n }\n },\n });\n\n this.namespacedRuntimes.set(key, adapter);\n this.runtimes.add(adapter);\n return adapter;\n } catch (error) {\n throw normalizeNamespaceInUseError(error, key);\n } finally {\n this.pendingNamespacedKeys.delete(key);\n }\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 getNamespacedRuntime: async (key, options) =>\n await this.createNamespacedRuntimeInternal(key, options),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, 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": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "9808B79FF11AEC9864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|