@ricsam/isolate
Advanced tools
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| function __accessProp(key) { | ||
| return this[key]; | ||
| } | ||
| var __toCommonJS = (from) => { | ||
| var entry = (__moduleCache ??= new WeakMap).get(from), desc; | ||
| if (entry) | ||
| return entry; | ||
| entry = __defProp({}, "__esModule", { value: true }); | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (var key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(entry, key)) | ||
| __defProp(entry, key, { | ||
| get: __accessProp.bind(from, key), | ||
| enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | ||
| }); | ||
| } | ||
| __moduleCache.set(from, entry); | ||
| return entry; | ||
| }; | ||
| var __moduleCache; | ||
| var __returnValue = (v) => v; | ||
| function __exportSetter(name, newValue) { | ||
| this[name] = __returnValue.bind(null, newValue); | ||
| } | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { | ||
| get: all[name], | ||
| enumerable: true, | ||
| configurable: true, | ||
| set: __exportSetter.bind(all, name) | ||
| }); | ||
| }; | ||
| // src/runtime/abort.ts | ||
| var exports_abort = {}; | ||
| __export(exports_abort, { | ||
| runAbortableOperation: () => runAbortableOperation, | ||
| isTerminalExecutionError: () => isTerminalExecutionError, | ||
| isAbortError: () => isAbortError, | ||
| getErrorMessage: () => getErrorMessage, | ||
| disposeWithUnresponsiveFallback: () => disposeWithUnresponsiveFallback, | ||
| createAbortError: () => createAbortError | ||
| }); | ||
| module.exports = __toCommonJS(exports_abort); | ||
| function createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error2 = new Error(reason.message); | ||
| error2.name = "AbortError"; | ||
| error2.cause = reason; | ||
| return error2; | ||
| } | ||
| const error = new Error(typeof reason === "string" && reason.length > 0 ? reason : "The operation was aborted."); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function getErrorMessage(error) { | ||
| return error instanceof Error ? error.message : String(error); | ||
| } | ||
| function isAbortError(error) { | ||
| return error instanceof Error && error.name === "AbortError"; | ||
| } | ||
| function isTerminalExecutionError(error) { | ||
| if (!(error instanceof Error)) { | ||
| return false; | ||
| } | ||
| return error.name === "TimeoutError" || /^(Execution|Test) timed out after \d+ms$/i.test(error.message) || /Runtime execution timed out after \d+ms/i.test(error.message) || /Isolate was disposed during execution/i.test(error.message); | ||
| } | ||
| async function runAbortableOperation(operation, options) { | ||
| const { signal } = options; | ||
| if (!signal) { | ||
| return await operation(); | ||
| } | ||
| if (signal.aborted) { | ||
| throw createAbortError(signal.reason); | ||
| } | ||
| let abortHandler; | ||
| let abortError; | ||
| const abortPromise = new Promise((_, reject) => { | ||
| abortHandler = () => { | ||
| abortError = createAbortError(signal.reason); | ||
| options.disposeOnAbort(abortError.message).then(() => reject(abortError), () => reject(abortError)); | ||
| }; | ||
| signal.addEventListener("abort", abortHandler, { once: true }); | ||
| }); | ||
| const operationPromise = operation().catch((error) => { | ||
| if (abortError) { | ||
| throw abortError; | ||
| } | ||
| throw error; | ||
| }); | ||
| try { | ||
| return await Promise.race([operationPromise, abortPromise]); | ||
| } finally { | ||
| if (abortHandler) { | ||
| signal.removeEventListener("abort", abortHandler); | ||
| } | ||
| } | ||
| } | ||
| async function disposeWithUnresponsiveFallback(dispose, reason, onUnresponsiveDispose, timeoutMs = 250) { | ||
| const disposePromise = dispose(); | ||
| disposePromise.catch(() => {}); | ||
| if (!onUnresponsiveDispose) { | ||
| await disposePromise; | ||
| return; | ||
| } | ||
| let timeoutId; | ||
| const fallbackPromise = new Promise((resolve, reject) => { | ||
| timeoutId = setTimeout(() => { | ||
| onUnresponsiveDispose(reason).then(resolve, reject); | ||
| }, timeoutMs); | ||
| }); | ||
| try { | ||
| await Promise.race([disposePromise, fallbackPromise]); | ||
| } finally { | ||
| if (timeoutId) { | ||
| clearTimeout(timeoutId); | ||
| } | ||
| } | ||
| } | ||
| //# debugId=6BB889E2ACD92D2664756E2164756E21 |
| { | ||
| "version": 3, | ||
| "sources": ["../../../src/runtime/abort.ts"], | ||
| "sourcesContent": [ | ||
| "export interface AbortableOperationOptions {\n signal?: AbortSignal;\n disposeOnAbort: (reason: string) => Promise<void>;\n}\n\nexport type UnresponsiveDisposeHandler = (reason: string) => Promise<void>;\n\nexport function createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n (error as Error & { cause?: unknown }).cause = reason;\n return error;\n }\n\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport function isTerminalExecutionError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === \"TimeoutError\" ||\n /^(Execution|Test) timed out after \\d+ms$/i.test(error.message) ||\n /Runtime execution timed out after \\d+ms/i.test(error.message) ||\n /Isolate was disposed during execution/i.test(error.message);\n}\n\nexport async function runAbortableOperation<T>(\n operation: () => Promise<T>,\n options: AbortableOperationOptions,\n): Promise<T> {\n const { signal } = options;\n if (!signal) {\n return await operation();\n }\n\n if (signal.aborted) {\n throw createAbortError(signal.reason);\n }\n\n let abortHandler: (() => void) | undefined;\n let abortError: Error | undefined;\n const abortPromise = new Promise<never>((_, reject) => {\n abortHandler = () => {\n abortError = createAbortError(signal.reason);\n void options.disposeOnAbort(abortError.message).then(\n () => reject(abortError),\n () => reject(abortError),\n );\n };\n signal.addEventListener(\"abort\", abortHandler, { once: true });\n });\n const operationPromise = operation().catch((error) => {\n if (abortError) {\n throw abortError;\n }\n throw error;\n });\n\n try {\n return await Promise.race([operationPromise, abortPromise]);\n } finally {\n if (abortHandler) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n}\n\nexport async function disposeWithUnresponsiveFallback(\n dispose: () => Promise<void>,\n reason: string,\n onUnresponsiveDispose?: UnresponsiveDisposeHandler,\n timeoutMs = 250,\n): Promise<void> {\n const disposePromise = dispose();\n disposePromise.catch(() => {});\n\n if (!onUnresponsiveDispose) {\n await disposePromise;\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const fallbackPromise = new Promise<void>((resolve, reject) => {\n timeoutId = setTimeout(() => {\n void onUnresponsiveDispose(reason).then(resolve, reject);\n }, timeoutMs);\n });\n\n try {\n await Promise.race([disposePromise, fallbackPromise]);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n}\n" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,SAAS,gBAAgB,CAAC,QAAyB;AAAA,EACxD,IAAI,kBAAkB,OAAO;AAAA,IAC3B,MAAM,SAAQ,IAAI,MAAM,OAAO,OAAO;AAAA,IACtC,OAAM,OAAO;AAAA,IACZ,OAAsC,QAAQ;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,IAAI,MAChB,OAAO,WAAW,YAAY,OAAO,SAAS,IAC1C,SACA,4BACN;AAAA,EACA,MAAM,OAAO;AAAA,EACb,OAAO;AAAA;AAGF,SAAS,eAAe,CAAC,OAAwB;AAAA,EACtD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA;AAGvD,SAAS,YAAY,CAAC,OAAyB;AAAA,EACpD,OAAO,iBAAiB,SAAS,MAAM,SAAS;AAAA;AAG3C,SAAS,wBAAwB,CAAC,OAAyB;AAAA,EAChE,IAAI,EAAE,iBAAiB,QAAQ;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS,kBACpB,4CAA4C,KAAK,MAAM,OAAO,KAC9D,2CAA2C,KAAK,MAAM,OAAO,KAC7D,yCAAyC,KAAK,MAAM,OAAO;AAAA;AAG/D,eAAsB,qBAAwB,CAC5C,WACA,SACY;AAAA,EACZ,QAAQ,WAAW;AAAA,EACnB,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO,MAAM,UAAU;AAAA,EACzB;AAAA,EAEA,IAAI,OAAO,SAAS;AAAA,IAClB,MAAM,iBAAiB,OAAO,MAAM;AAAA,EACtC;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM,eAAe,IAAI,QAAe,CAAC,GAAG,WAAW;AAAA,IACrD,eAAe,MAAM;AAAA,MACnB,aAAa,iBAAiB,OAAO,MAAM;AAAA,MACtC,QAAQ,eAAe,WAAW,OAAO,EAAE,KAC9C,MAAM,OAAO,UAAU,GACvB,MAAM,OAAO,UAAU,CACzB;AAAA;AAAA,IAEF,OAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,GAC9D;AAAA,EACD,MAAM,mBAAmB,UAAU,EAAE,MAAM,CAAC,UAAU;AAAA,IACpD,IAAI,YAAY;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,MAAM;AAAA,GACP;AAAA,EAED,IAAI;AAAA,IACF,OAAO,MAAM,QAAQ,KAAK,CAAC,kBAAkB,YAAY,CAAC;AAAA,YAC1D;AAAA,IACA,IAAI,cAAc;AAAA,MAChB,OAAO,oBAAoB,SAAS,YAAY;AAAA,IAClD;AAAA;AAAA;AAIJ,eAAsB,+BAA+B,CACnD,SACA,QACA,uBACA,YAAY,KACG;AAAA,EACf,MAAM,iBAAiB,QAAQ;AAAA,EAC/B,eAAe,MAAM,MAAM,EAAE;AAAA,EAE7B,IAAI,CAAC,uBAAuB;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,MAAM,kBAAkB,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,IAC7D,YAAY,WAAW,MAAM;AAAA,MACtB,sBAAsB,MAAM,EAAE,KAAK,SAAS,MAAM;AAAA,OACtD,SAAS;AAAA,GACb;AAAA,EAED,IAAI;AAAA,IACF,MAAM,QAAQ,KAAK,CAAC,gBAAgB,eAAe,CAAC;AAAA,YACpD;AAAA,IACA,IAAI,WAAW;AAAA,MACb,aAAa,SAAS;AAAA,IACxB;AAAA;AAAA;", | ||
| "debugId": "6BB889E2ACD92D2664756E2164756E21", | ||
| "names": [] | ||
| } |
| // src/runtime/abort.ts | ||
| function createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error2 = new Error(reason.message); | ||
| error2.name = "AbortError"; | ||
| error2.cause = reason; | ||
| return error2; | ||
| } | ||
| const error = new Error(typeof reason === "string" && reason.length > 0 ? reason : "The operation was aborted."); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function getErrorMessage(error) { | ||
| return error instanceof Error ? error.message : String(error); | ||
| } | ||
| function isAbortError(error) { | ||
| return error instanceof Error && error.name === "AbortError"; | ||
| } | ||
| function isTerminalExecutionError(error) { | ||
| if (!(error instanceof Error)) { | ||
| return false; | ||
| } | ||
| return error.name === "TimeoutError" || /^(Execution|Test) timed out after \d+ms$/i.test(error.message) || /Runtime execution timed out after \d+ms/i.test(error.message) || /Isolate was disposed during execution/i.test(error.message); | ||
| } | ||
| async function runAbortableOperation(operation, options) { | ||
| const { signal } = options; | ||
| if (!signal) { | ||
| return await operation(); | ||
| } | ||
| if (signal.aborted) { | ||
| throw createAbortError(signal.reason); | ||
| } | ||
| let abortHandler; | ||
| let abortError; | ||
| const abortPromise = new Promise((_, reject) => { | ||
| abortHandler = () => { | ||
| abortError = createAbortError(signal.reason); | ||
| options.disposeOnAbort(abortError.message).then(() => reject(abortError), () => reject(abortError)); | ||
| }; | ||
| signal.addEventListener("abort", abortHandler, { once: true }); | ||
| }); | ||
| const operationPromise = operation().catch((error) => { | ||
| if (abortError) { | ||
| throw abortError; | ||
| } | ||
| throw error; | ||
| }); | ||
| try { | ||
| return await Promise.race([operationPromise, abortPromise]); | ||
| } finally { | ||
| if (abortHandler) { | ||
| signal.removeEventListener("abort", abortHandler); | ||
| } | ||
| } | ||
| } | ||
| async function disposeWithUnresponsiveFallback(dispose, reason, onUnresponsiveDispose, timeoutMs = 250) { | ||
| const disposePromise = dispose(); | ||
| disposePromise.catch(() => {}); | ||
| if (!onUnresponsiveDispose) { | ||
| await disposePromise; | ||
| return; | ||
| } | ||
| let timeoutId; | ||
| const fallbackPromise = new Promise((resolve, reject) => { | ||
| timeoutId = setTimeout(() => { | ||
| onUnresponsiveDispose(reason).then(resolve, reject); | ||
| }, timeoutMs); | ||
| }); | ||
| try { | ||
| await Promise.race([disposePromise, fallbackPromise]); | ||
| } finally { | ||
| if (timeoutId) { | ||
| clearTimeout(timeoutId); | ||
| } | ||
| } | ||
| } | ||
| export { | ||
| runAbortableOperation, | ||
| isTerminalExecutionError, | ||
| isAbortError, | ||
| getErrorMessage, | ||
| disposeWithUnresponsiveFallback, | ||
| createAbortError | ||
| }; | ||
| //# debugId=97F7580BC25D4B7664756E2164756E21 |
| { | ||
| "version": 3, | ||
| "sources": ["../../../src/runtime/abort.ts"], | ||
| "sourcesContent": [ | ||
| "export interface AbortableOperationOptions {\n signal?: AbortSignal;\n disposeOnAbort: (reason: string) => Promise<void>;\n}\n\nexport type UnresponsiveDisposeHandler = (reason: string) => Promise<void>;\n\nexport function createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n (error as Error & { cause?: unknown }).cause = reason;\n return error;\n }\n\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport function isTerminalExecutionError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === \"TimeoutError\" ||\n /^(Execution|Test) timed out after \\d+ms$/i.test(error.message) ||\n /Runtime execution timed out after \\d+ms/i.test(error.message) ||\n /Isolate was disposed during execution/i.test(error.message);\n}\n\nexport async function runAbortableOperation<T>(\n operation: () => Promise<T>,\n options: AbortableOperationOptions,\n): Promise<T> {\n const { signal } = options;\n if (!signal) {\n return await operation();\n }\n\n if (signal.aborted) {\n throw createAbortError(signal.reason);\n }\n\n let abortHandler: (() => void) | undefined;\n let abortError: Error | undefined;\n const abortPromise = new Promise<never>((_, reject) => {\n abortHandler = () => {\n abortError = createAbortError(signal.reason);\n void options.disposeOnAbort(abortError.message).then(\n () => reject(abortError),\n () => reject(abortError),\n );\n };\n signal.addEventListener(\"abort\", abortHandler, { once: true });\n });\n const operationPromise = operation().catch((error) => {\n if (abortError) {\n throw abortError;\n }\n throw error;\n });\n\n try {\n return await Promise.race([operationPromise, abortPromise]);\n } finally {\n if (abortHandler) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n }\n}\n\nexport async function disposeWithUnresponsiveFallback(\n dispose: () => Promise<void>,\n reason: string,\n onUnresponsiveDispose?: UnresponsiveDisposeHandler,\n timeoutMs = 250,\n): Promise<void> {\n const disposePromise = dispose();\n disposePromise.catch(() => {});\n\n if (!onUnresponsiveDispose) {\n await disposePromise;\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const fallbackPromise = new Promise<void>((resolve, reject) => {\n timeoutId = setTimeout(() => {\n void onUnresponsiveDispose(reason).then(resolve, reject);\n }, timeoutMs);\n });\n\n try {\n await Promise.race([disposePromise, fallbackPromise]);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n}\n" | ||
| ], | ||
| "mappings": ";AAOO,SAAS,gBAAgB,CAAC,QAAyB;AAAA,EACxD,IAAI,kBAAkB,OAAO;AAAA,IAC3B,MAAM,SAAQ,IAAI,MAAM,OAAO,OAAO;AAAA,IACtC,OAAM,OAAO;AAAA,IACZ,OAAsC,QAAQ;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,IAAI,MAChB,OAAO,WAAW,YAAY,OAAO,SAAS,IAC1C,SACA,4BACN;AAAA,EACA,MAAM,OAAO;AAAA,EACb,OAAO;AAAA;AAGF,SAAS,eAAe,CAAC,OAAwB;AAAA,EACtD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA;AAGvD,SAAS,YAAY,CAAC,OAAyB;AAAA,EACpD,OAAO,iBAAiB,SAAS,MAAM,SAAS;AAAA;AAG3C,SAAS,wBAAwB,CAAC,OAAyB;AAAA,EAChE,IAAI,EAAE,iBAAiB,QAAQ;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS,kBACpB,4CAA4C,KAAK,MAAM,OAAO,KAC9D,2CAA2C,KAAK,MAAM,OAAO,KAC7D,yCAAyC,KAAK,MAAM,OAAO;AAAA;AAG/D,eAAsB,qBAAwB,CAC5C,WACA,SACY;AAAA,EACZ,QAAQ,WAAW;AAAA,EACnB,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO,MAAM,UAAU;AAAA,EACzB;AAAA,EAEA,IAAI,OAAO,SAAS;AAAA,IAClB,MAAM,iBAAiB,OAAO,MAAM;AAAA,EACtC;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM,eAAe,IAAI,QAAe,CAAC,GAAG,WAAW;AAAA,IACrD,eAAe,MAAM;AAAA,MACnB,aAAa,iBAAiB,OAAO,MAAM;AAAA,MACtC,QAAQ,eAAe,WAAW,OAAO,EAAE,KAC9C,MAAM,OAAO,UAAU,GACvB,MAAM,OAAO,UAAU,CACzB;AAAA;AAAA,IAEF,OAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,GAC9D;AAAA,EACD,MAAM,mBAAmB,UAAU,EAAE,MAAM,CAAC,UAAU;AAAA,IACpD,IAAI,YAAY;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,MAAM;AAAA,GACP;AAAA,EAED,IAAI;AAAA,IACF,OAAO,MAAM,QAAQ,KAAK,CAAC,kBAAkB,YAAY,CAAC;AAAA,YAC1D;AAAA,IACA,IAAI,cAAc;AAAA,MAChB,OAAO,oBAAoB,SAAS,YAAY;AAAA,IAClD;AAAA;AAAA;AAIJ,eAAsB,+BAA+B,CACnD,SACA,QACA,uBACA,YAAY,KACG;AAAA,EACf,MAAM,iBAAiB,QAAQ;AAAA,EAC/B,eAAe,MAAM,MAAM,EAAE;AAAA,EAE7B,IAAI,CAAC,uBAAuB;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,MAAM,kBAAkB,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,IAC7D,YAAY,WAAW,MAAM;AAAA,MACtB,sBAAsB,MAAM,EAAE,KAAK,SAAS,MAAM;AAAA,OACtD,SAAS;AAAA,GACb;AAAA,EAED,IAAI;AAAA,IACF,MAAM,QAAQ,KAAK,CAAC,gBAAgB,eAAe,CAAC;AAAA,YACpD;AAAA,IACA,IAAI,WAAW;AAAA,MACb,aAAa,SAAS;AAAA,IACxB;AAAA;AAAA;", | ||
| "debugId": "97F7580BC25D4B7664756E2164756E21", | ||
| "names": [] | ||
| } |
| export interface AbortableOperationOptions { | ||
| signal?: AbortSignal; | ||
| disposeOnAbort: (reason: string) => Promise<void>; | ||
| } | ||
| export type UnresponsiveDisposeHandler = (reason: string) => Promise<void>; | ||
| export declare function createAbortError(reason?: unknown): Error; | ||
| export declare function getErrorMessage(error: unknown): string; | ||
| export declare function isAbortError(error: unknown): boolean; | ||
| export declare function isTerminalExecutionError(error: unknown): boolean; | ||
| export declare function runAbortableOperation<T>(operation: () => Promise<T>, options: AbortableOperationOptions): Promise<T>; | ||
| export declare function disposeWithUnresponsiveFallback(dispose: () => Promise<void>, reason: string, onUnresponsiveDispose?: UnresponsiveDisposeHandler, timeoutMs?: number): Promise<void>; |
@@ -339,9 +339,14 @@ var __create = Object.create; | ||
| }, | ||
| abort: (reason) => { | ||
| abort: async (reason) => { | ||
| contextFactory.abort(reason); | ||
| if (options?.nestedHost?.disposeAll) { | ||
| options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime disposed")); | ||
| await options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime disposed")); | ||
| } | ||
| }, | ||
| reset: contextFactory.reset | ||
| reset: async (reason) => { | ||
| contextFactory.reset(reason); | ||
| if (options?.nestedHost?.disposeAll) { | ||
| await options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime reset")); | ||
| } | ||
| } | ||
| }; | ||
@@ -500,2 +505,3 @@ } | ||
| "__isolateHost_callResource", | ||
| "__isolateHost_abortResourceCall", | ||
| "__isolateHost_drainCallbacks" | ||
@@ -562,2 +568,11 @@ ]; | ||
| }; | ||
| definitions.__isolateHost_abortResourceCall = { | ||
| type: "async", | ||
| fn: async (...args) => { | ||
| const operationId = args[0]; | ||
| const reason = typeof args[1] === "string" && args[1].length > 0 ? args[1] : undefined; | ||
| const context = createHostCallContext(`nestedHost:abortResourceCall:${crypto.randomUUID()}`); | ||
| await nestedHost.abortResourceCall(operationId, reason, context); | ||
| } | ||
| }; | ||
| definitions.__isolateHost_drainCallbacks = { | ||
@@ -577,2 +592,2 @@ type: "async", | ||
| //# debugId=B0322A9A32D7013964756E2164756E21 | ||
| //# debugId=516BFB70842D72EC64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.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\ninterface ProxyBackedHandler {\n __isolateCallbackProxy?: unknown;\n}\n\nfunction copyIsolateCallbackMetadata<T extends (...args: unknown[]) => unknown>(\n source: ToolHandler,\n target: T,\n): T {\n if ((source as ProxyBackedHandler).__isolateCallbackProxy === true) {\n Object.defineProperty(target, \"__isolateCallbackProxy\", {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n });\n }\n\n if (\n (source as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n ) {\n Object.defineProperty(target, \"__isolateCallbackKind\", {\n configurable: true,\n enumerable: false,\n value: \"asyncGenerator\",\n writable: false,\n });\n }\n\n return target;\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.console.onEntry\",\n bindings.console?.onEntry,\n entry,\n context,\n );\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: (reason?: unknown) => {\n contextFactory.abort(reason);\n if (options?.nestedHost?.disposeAll) {\n void options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime disposed\"),\n );\n }\n },\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 const fn = copyIsolateCallbackMetadata(\n handler,\n (...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 definitions[name] = {\n type: \"asyncIterator\",\n fn,\n };\n continue;\n }\n\n const fn = copyIsolateCallbackMetadata(\n handler,\n 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 definitions[name] = {\n type: \"async\",\n fn,\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" | ||
| "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.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): Promise<void>;\n reset(reason?: unknown): Promise<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\ninterface ProxyBackedHandler {\n __isolateCallbackProxy?: unknown;\n}\n\nfunction copyIsolateCallbackMetadata<T extends (...args: unknown[]) => unknown>(\n source: ToolHandler,\n target: T,\n): T {\n if ((source as ProxyBackedHandler).__isolateCallbackProxy === true) {\n Object.defineProperty(target, \"__isolateCallbackProxy\", {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n });\n }\n\n if (\n (source as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n ) {\n Object.defineProperty(target, \"__isolateCallbackKind\", {\n configurable: true,\n enumerable: false,\n value: \"asyncGenerator\",\n writable: false,\n });\n }\n\n return target;\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.console.onEntry\",\n bindings.console?.onEntry,\n entry,\n context,\n );\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: async (reason?: unknown) => {\n contextFactory.abort(reason);\n if (options?.nestedHost?.disposeAll) {\n await options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime disposed\"),\n );\n }\n },\n reset: async (reason?: unknown) => {\n contextFactory.reset(reason);\n if (options?.nestedHost?.disposeAll) {\n await options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime reset\"),\n );\n }\n },\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 const fn = copyIsolateCallbackMetadata(\n handler,\n (...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 definitions[name] = {\n type: \"asyncIterator\",\n fn,\n };\n continue;\n }\n\n const fn = copyIsolateCallbackMetadata(\n handler,\n 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 definitions[name] = {\n type: \"async\",\n fn,\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_abortResourceCall\",\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_abortResourceCall = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const operationId = args[0] as string;\n const reason =\n typeof args[1] === \"string\" && args[1].length > 0\n ? args[1]\n : undefined;\n const context = createHostCallContext(\n `nestedHost:abortResourceCall:${crypto.randomUUID()}`,\n );\n await nestedHost.abortResourceCall(operationId, reason, context);\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" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "B0322A9A32D7013964756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "516BFB70842D72EC64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -117,2 +117,66 @@ var __defProp = Object.defineProperty; | ||
| let __abortOperationIndex = 0; | ||
| function __createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error = new Error(reason.message); | ||
| error.name = "AbortError"; | ||
| error.cause = reason; | ||
| return error; | ||
| } | ||
| const error = new Error( | ||
| typeof reason === "string" && reason.length > 0 | ||
| ? reason | ||
| : "The operation was aborted.", | ||
| ); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function __abortReasonMessage(reason) { | ||
| if (reason instanceof Error) { | ||
| return reason.message; | ||
| } | ||
| return typeof reason === "string" ? reason : undefined; | ||
| } | ||
| function __prepareAbortableOptions(options, fallbackSignal) { | ||
| const normalized = options ? { ...options } : {}; | ||
| const signal = normalized.signal ?? fallbackSignal; | ||
| delete normalized.signal; | ||
| if (!signal) { | ||
| return { | ||
| options: Object.keys(normalized).length > 0 ? normalized : null, | ||
| cleanup() {}, | ||
| }; | ||
| } | ||
| if (signal.aborted) { | ||
| throw __createAbortError(signal.reason); | ||
| } | ||
| const operationId = "nested-abort:" + (++__abortOperationIndex) + ":" + Math.random().toString(36).slice(2); | ||
| normalized.__isolateAbortOperationId = operationId; | ||
| const onAbort = () => { | ||
| void __isolateHost_abortResourceCall( | ||
| operationId, | ||
| __abortReasonMessage(signal.reason), | ||
| ).catch(() => {}); | ||
| }; | ||
| signal.addEventListener("abort", onAbort, { once: true }); | ||
| return { | ||
| options: normalized, | ||
| cleanup() { | ||
| signal.removeEventListener("abort", onAbort); | ||
| }, | ||
| }; | ||
| } | ||
| function __requestSignal(requestLike) { | ||
| return requestLike instanceof Request ? requestLike.signal : undefined; | ||
| } | ||
| async function __waitForCallbackTurn() { | ||
@@ -144,8 +208,13 @@ await Promise.resolve(); | ||
| async eval(code, options) { | ||
| await __isolateHost_callResource( | ||
| "runtime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, __normalizeEvalOptions(options)], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options)); | ||
| try { | ||
| await __isolateHost_callResource( | ||
| "runtime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -213,16 +282,26 @@ } | ||
| const serializedRequest = await __serializeRequest(request); | ||
| const result = await __isolateHost_callResource( | ||
| "appServer", | ||
| this.#resourceId, | ||
| "handle", | ||
| [ | ||
| serializedRequest, | ||
| options | ||
| ? { | ||
| requestId: options.requestId, | ||
| metadata: options.metadata, | ||
| } | ||
| : null, | ||
| const abortable = __prepareAbortableOptions( | ||
| options | ||
| ? { | ||
| requestId: options.requestId, | ||
| metadata: options.metadata, | ||
| signal: options.signal, | ||
| } | ||
| : null, | ||
| __requestSignal(request), | ||
| ); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "appServer", | ||
| this.#resourceId, | ||
| "handle", | ||
| [ | ||
| serializedRequest, | ||
| abortable.options, | ||
| ], | ||
| ); | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -309,8 +388,14 @@ return result; | ||
| async run(code, options) { | ||
| const result = await __isolateHost_callResource( | ||
| "testRuntime", | ||
| this.#resourceId, | ||
| "run", | ||
| [code, options ?? null], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(options ?? null); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "testRuntime", | ||
| this.#resourceId, | ||
| "run", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -369,8 +454,13 @@ return result; | ||
| async eval(code, options) { | ||
| await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, __normalizeEvalOptions(options)], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options)); | ||
| try { | ||
| await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -380,8 +470,14 @@ } | ||
| async runTests(code, options) { | ||
| const result = await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "runTests", | ||
| [code, options ?? null], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(options ?? null); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "runTests", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -526,2 +622,2 @@ return result; | ||
| //# debugId=9CC38FF33427223764756E2164756E21 | ||
| //# debugId=2B30D200A2EE810664756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "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 disposeAll?(reason?: string): Promise<void>;\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" | ||
| "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 abortResourceCall(\n operationId: string,\n reason: string | undefined,\n context: HostCallContext,\n ): Promise<void>;\n disposeAll?(reason?: string): Promise<void>;\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\nlet __abortOperationIndex = 0;\n\nfunction __createAbortError(reason) {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n error.cause = reason;\n return error;\n }\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction __abortReasonMessage(reason) {\n if (reason instanceof Error) {\n return reason.message;\n }\n return typeof reason === \"string\" ? reason : undefined;\n}\n\nfunction __prepareAbortableOptions(options, fallbackSignal) {\n const normalized = options ? { ...options } : {};\n const signal = normalized.signal ?? fallbackSignal;\n delete normalized.signal;\n\n if (!signal) {\n return {\n options: Object.keys(normalized).length > 0 ? normalized : null,\n cleanup() {},\n };\n }\n\n if (signal.aborted) {\n throw __createAbortError(signal.reason);\n }\n\n const operationId = \"nested-abort:\" + (++__abortOperationIndex) + \":\" + Math.random().toString(36).slice(2);\n normalized.__isolateAbortOperationId = operationId;\n\n const onAbort = () => {\n void __isolateHost_abortResourceCall(\n operationId,\n __abortReasonMessage(signal.reason),\n ).catch(() => {});\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n return {\n options: normalized,\n cleanup() {\n signal.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n\nfunction __requestSignal(requestLike) {\n return requestLike instanceof Request ? requestLike.signal : undefined;\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 const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options));\n try {\n await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"eval\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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 abortable = __prepareAbortableOptions(\n options\n ? {\n requestId: options.requestId,\n metadata: options.metadata,\n signal: options.signal,\n }\n : null,\n __requestSignal(request),\n );\n let result;\n try {\n result = await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"handle\",\n [\n serializedRequest,\n abortable.options,\n ],\n );\n } finally {\n abortable.cleanup();\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 abortable = __prepareAbortableOptions(options ?? null);\n let result;\n try {\n result = await __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"run\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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 const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options));\n try {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"eval\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\n }\n await __waitForNestedCallbacks();\n }\n\n async runTests(code, options) {\n const abortable = __prepareAbortableOptions(options ?? null);\n let result;\n try {\n result = await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"runTests\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoD,IAApD;AASO,IAAM,mCAAmC;AA4CzC,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;", | ||
| "debugId": "9CC38FF33427223764756E2164756E21", | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoD,IAApD;AASO,IAAM,mCAAmC;AAiDzC,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;", | ||
| "debugId": "2B30D200A2EE810664756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -144,3 +144,3 @@ var __create = Object.create; | ||
| if (runtime) { | ||
| runtime.invalidate(options?.reason ? `Namespace "${key}" was disposed: ${options.reason}` : `Namespace "${key}" was disposed.`); | ||
| await runtime.invalidate(options?.reason ? `Namespace "${key}" was disposed: ${options.reason}` : `Namespace "${key}" was disposed.`); | ||
| this.namespacedRuntimes.delete(key); | ||
@@ -162,3 +162,3 @@ } | ||
| for (const [key, runtime] of this.namespacedRuntimes) { | ||
| runtime.invalidate(`Host closed while namespace "${key}" was active.`); | ||
| await runtime.invalidate(`Host closed while namespace "${key}" was active.`); | ||
| } | ||
@@ -188,2 +188,28 @@ this.namespacedRuntimes.clear(); | ||
| } | ||
| async forceCloseDaemon() { | ||
| this.namespacedRuntimes.clear(); | ||
| this.pendingNamespacedKeys.clear(); | ||
| if (this.connection) { | ||
| await this.connection.close().catch(() => {}); | ||
| } | ||
| this.connection = null; | ||
| this.connectionPromise = null; | ||
| if (!this.daemonProcess) { | ||
| return; | ||
| } | ||
| const process2 = this.daemonProcess; | ||
| this.daemonProcess = null; | ||
| process2.stdout?.removeAllListeners("data"); | ||
| process2.stderr?.removeAllListeners("data"); | ||
| process2.stdout?.destroy(); | ||
| process2.stderr?.destroy(); | ||
| await new Promise((resolve) => { | ||
| const timeout = setTimeout(resolve, 1000); | ||
| process2.once("exit", () => { | ||
| clearTimeout(timeout); | ||
| resolve(); | ||
| }); | ||
| process2.kill("SIGKILL"); | ||
| }); | ||
| } | ||
| async createRuntimeInternal(options, nestedContext) { | ||
@@ -208,3 +234,6 @@ const diagnostics = import_diagnostics.createRuntimeDiagnostics(); | ||
| hasBrowser: Boolean(options.bindings.browser), | ||
| onBeforeDispose: (reason) => bindingsAdapter.abort(reason) | ||
| onBeforeDispose: (reason) => bindingsAdapter.abort(reason), | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| } | ||
| }); | ||
@@ -220,2 +249,6 @@ this.runtimes.add(adapter); | ||
| }, nestedContext) | ||
| }, { | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| } | ||
| }); | ||
@@ -255,2 +288,5 @@ this.runtimes.add(testRuntime); | ||
| abortBindings: (reason) => bindingsAdapter.abort(reason), | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| }, | ||
| testEvents, | ||
@@ -367,2 +403,2 @@ onRelease: () => { | ||
| //# debugId=919B6366FEC9BFE964756E2164756E21 | ||
| //# debugId=A9D15B8C0A56E17F64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "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 {\n createNestedHostBindings,\n createNestedHostResourceGroup,\n type NestedHostControllerContext,\n} from \"./nested-host-controller.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n IsolateHost,\n NamespacedRuntime,\n NestedHostPolicy,\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 nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 nestedContext?: NestedHostControllerContext,\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 options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.runtimes.add(testRuntime);\n return testRuntime;\n }\n\n private async createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 nestedContext?: NestedHostControllerContext,\n ): Promise<AppServer> {\n const server = await createAppServerAdapter(\n () => this.getConnection(),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.servers.add(server);\n return server;\n }\n\n private createNestedBindings(\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: false | NestedHostPolicy | undefined,\n parentLimits: { memoryLimitMB?: number; executionTimeout?: number },\n nestedContext?: NestedHostControllerContext,\n ) {\n if (policy === false) {\n return undefined;\n }\n const group = nestedContext?.group ??\n createNestedHostResourceGroup(policy, parentLimits);\n return createNestedHostBindings(\n {\n createRuntime: async (options, context) =>\n await this.createRuntimeInternal(options, context),\n createAppServer: async (options, context) =>\n await this.createAppServerInternal(options, context),\n createTestRuntime: async (options, context) =>\n await this.createTestRuntimeInternal(options, context),\n getNamespacedRuntime: async (key, options, context) =>\n await this.createNamespacedRuntimeInternal(key, options, context),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, options),\n isConnected: () => this.connection?.isConnected() ?? false,\n },\n defaultBrowserSource,\n inheritedBindings,\n group,\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() || this.connection?.isRecovering()) {\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" | ||
| "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 {\n createNestedHostBindings,\n createNestedHostResourceGroup,\n type NestedHostControllerContext,\n} from \"./nested-host-controller.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n IsolateHost,\n NamespacedRuntime,\n NestedHostPolicy,\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 await 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 await 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 forceCloseDaemon(): Promise<void> {\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 return;\n }\n\n const process = this.daemonProcess;\n this.daemonProcess = null;\n process.stdout?.removeAllListeners(\"data\");\n process.stderr?.removeAllListeners(\"data\");\n process.stdout?.destroy();\n process.stderr?.destroy();\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 1000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGKILL\");\n });\n }\n\n private async createRuntimeInternal(\n options: CreateRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n private async createTestRuntimeInternal(\n options: CreateTestRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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 options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n {\n onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\n },\n );\n this.runtimes.add(testRuntime);\n return testRuntime;\n }\n\n private async createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\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 nestedContext?: NestedHostControllerContext,\n ): Promise<AppServer> {\n const server = await createAppServerAdapter(\n () => this.getConnection(),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.servers.add(server);\n return server;\n }\n\n private createNestedBindings(\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: false | NestedHostPolicy | undefined,\n parentLimits: { memoryLimitMB?: number; executionTimeout?: number },\n nestedContext?: NestedHostControllerContext,\n ) {\n if (policy === false) {\n return undefined;\n }\n const group = nestedContext?.group ??\n createNestedHostResourceGroup(policy, parentLimits);\n return createNestedHostBindings(\n {\n createRuntime: async (options, context) =>\n await this.createRuntimeInternal(options, context),\n createAppServer: async (options, context) =>\n await this.createAppServerInternal(options, context),\n createTestRuntime: async (options, context) =>\n await this.createTestRuntimeInternal(options, context),\n getNamespacedRuntime: async (key, options, context) =>\n await this.createNamespacedRuntimeInternal(key, options, context),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, options),\n isConnected: () => this.connection?.isConnected() ?? false,\n },\n defaultBrowserSource,\n inheritedBindings,\n group,\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() || this.connection?.isRecovering()) {\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" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAe,IAAf;AACiB,IAAjB;AACyC,IAAzC;AACwF,IAAxF;AAIO,IAHP;AAIyC,IAAzC;AAC6C,IAA7C;AAC+C,IAA/C;AAC2C,IAA3C;AACyC,IAAzC;AAC6C,IAA7C;AACuC,IAAvC;AAKO,IAJP;AAoBA,SAAS,8BAA8B,GAAkB;AAAA,EACvD,MAAM,YAAY,yBAAK,QAAoB,8CAAS,cAAc;AAAA,EAClE,IAAI,uBAAG,WAAW,SAAS,GAAG;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,aAAa,CAAC,YAAoB,WAAkC;AAAA,EACjF,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,OAAO,KAAK,IAAI,IAAI,YAAY,WAAW;AAAA,IACzC,IAAI,uBAAG,WAAW,UAAU,GAAG;AAAA,MAC7B,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,MACvD;AAAA,IACF;AAAA,IACA,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACxD;AAAA,EAEA,MAAM,IAAI,MAAM,qCAAqC,aAAa;AAAA;AAGpE,SAAS,gBAAgB,CAAC,MAAc,SAAwB;AAAA,EAC9D,MAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,EAC/B,MAAM,OAAO;AAAA,EACb,OAAO;AAAA;AAGT,SAAS,4BAA4B,CAAC,OAAgB,KAAoB;AAAA,EACxE,IAAI,iBAAiB,SAAS,MAAM,SAAS,uBAAuB;AAAA,IAClE,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,SAAS,EAAE;AAAA,EAC7D,IAAI,8DAA8D,KAAK,OAAO,GAAG;AAAA,IAC/E,OAAO,iBACL,uBACA,cAAc,kCAChB;AAAA,EACF;AAAA,EAEA,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO;AAAA;AAAA;AAG3D,MAAM,SAAgC;AAAA,EACnB;AAAA,EACT,gBAAqC;AAAA,EACrC,aAAsC;AAAA,EACtC,oBAAsD;AAAA,EAC7C,UAAU,IAAI;AAAA,EACd,WAAW,IAAI;AAAA,EACf,qBAAqB,IAAI;AAAA,EACzB,wBAAwB,IAAI;AAAA,EAE7C,WAAW,CAAC,SAAoC;AAAA,IAC9C,KAAK,UAAU,WAAW,CAAC;AAAA;AAAA,OAGvB,gBAAe,CAAC,SAAiC;AAAA,IACrD,OAAO,MAAM,KAAK,wBAAwB,OAAO;AAAA;AAAA,OAG7C,cAAa,CAAC,SAA+B;AAAA,IACjD,OAAO,MAAM,KAAK,sBAAsB,OAAO;AAAA;AAAA,OAG3C,kBAAiB,CAAC,SAAmC;AAAA,IACzD,OAAO,MAAM,KAAK,0BAA0B,OAAO;AAAA;AAAA,OAG/C,qBAAoB,CACxB,KACA,SACA;AAAA,IACA,OAAO,MAAM,KAAK,gCAAgC,KAAK,OAAO;AAAA;AAAA,OAG1D,iBAAgB,CAAC,KAAa,SAA+B;AAAA,IACjE,KAAK,sBAAsB,OAAO,GAAG;AAAA,IACrC,MAAM,UAAU,KAAK,mBAAmB,IAAI,GAAG;AAAA,IAC/C,IAAI,SAAS;AAAA,MACX,QAAQ,WACN,SAAS,SACL,cAAc,sBAAsB,QAAQ,WAC5C,cAAc,oBACpB;AAAA,MACA,KAAK,mBAAmB,OAAO,GAAG;AAAA,IACpC;AAAA,IAEA,MAAM,aAAa,MAAM,KAAK,cAAc;AAAA,IAC5C,MAAM,WAAW,iBAAiB,KAAK;AAAA,MACrC,QAAQ,SAAS;AAAA,IACnB,CAAC;AAAA;AAAA,OAGG,YAAW,GAAG;AAAA,IAClB,OAAO;AAAA,MACL,UAAU,KAAK,SAAS;AAAA,MACxB,SAAS,KAAK,QAAQ;AAAA,MACtB,WAAW,KAAK,YAAY,YAAY,KAAK;AAAA,IAC/C;AAAA;AAAA,OAGI,MAAK,GAAkB;AAAA,IAC3B,YAAY,KAAK,YAAY,KAAK,oBAAoB;AAAA,MACpD,QAAQ,WAAW,gCAAgC,kBAAkB;AAAA,IACvE;AAAA,IACA,KAAK,mBAAmB,MAAM;AAAA,IAC9B,KAAK,sBAAsB,MAAM;AAAA,IAEjC,IAAI,KAAK,YAAY;AAAA,MACnB,MAAM,KAAK,WAAW,MAAM,EAAE,MAAM,MAAM,EAAE;AAAA,IAC9C;AAAA,IACA,KAAK,aAAa;AAAA,IAClB,KAAK,oBAAoB;AAAA,IAEzB,IAAI,KAAK,eAAe;AAAA,MACtB,MAAM,WAAU,KAAK;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,MAAM,IAAI,QAAc,CAAC,YAAY;AAAA,QACnC,MAAM,UAAU,WAAW,MAAM;AAAA,UAC/B,SAAQ,KAAK,SAAS;AAAA,UACtB,QAAQ;AAAA,WACP,IAAI;AAAA,QACP,SAAQ,KAAK,QAAQ,MAAM;AAAA,UACzB,aAAa,OAAO;AAAA,UACpB,QAAQ;AAAA,SACT;AAAA,QACD,SAAQ,KAAK,SAAS;AAAA,OACvB;AAAA,IACH;AAAA;AAAA,OAGY,sBAAqB,CACjC,SACA,eACwB;AAAA,IACxB,MAAM,cAAc,4CAAyB;AAAA,IAC7C,IAAI,YAAY,QAAQ,OAAO;AAAA,IAC/B,MAAM,gBAAgB,sDAAgC,QAAQ,SAAS,OAAO;AAAA,IAC9E,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,aACA;AAAA,MACE,YAAY,KAAK,qBACf,eACA,QAAQ,UACR,QAAQ,YACR;AAAA,QACE,eAAe,QAAQ;AAAA,QACvB,kBAAkB,QAAQ;AAAA,MAC5B,GACA,aACF;AAAA,IACF,CACF;AAAA,IACA,MAAM,UAAU,MAAM,KAAK,oBACzB;AAAA,SACK,gBAAgB;AAAA,MACnB,KAAK,QAAQ;AAAA,MACb,eAAe,QAAQ;AAAA,MACvB,kBAAkB,QAAQ;AAAA,IAC5B,GACA,QAAQ,GACV;AAAA,IACA,YAAY,QAAQ;AAAA,IACpB,MAAM,UAAU,iDAA2B,SAAS,aAAa;AAAA,MAC/D,YAAY,QAAQ,QAAQ,SAAS,OAAO;AAAA,MAC5C,iBAAiB,CAAC,WAAW,gBAAgB,MAAM,MAAM;AAAA,IAC3D,CAAC;AAAA,IACD,KAAK,SAAS,IAAI,OAAO;AAAA,IACzB,OAAO;AAAA;AAAA,OAGK,0BAAyB,CACrC,SACA,eACsB;AAAA,IACtB,MAAM,cAAc,MAAM,6CACxB,OAAO,mBAAmB,MAAM,KAAK,oBAAoB,gBAAgB,QAAQ,GAAG,GACpF,SACA;AAAA,MACE,YAAY,KAAK,qBACf,sDAAgC,QAAQ,SAAS,OAAO,GACxD,QAAQ,UACR,QAAQ,YACR;AAAA,QACE,eAAe,QAAQ;AAAA,QACvB,kBAAkB,QAAQ;AAAA,MAC5B,GACA,aACF;AAAA,IACF,CACF;AAAA,IACA,KAAK,SAAS,IAAI,WAAW;AAAA,IAC7B,OAAO;AAAA;AAAA,OAGK,gCAA+B,CAC3C,KACA,SACA,eAC4B;AAAA,IAC5B,IAAI,KAAK,sBAAsB,IAAI,GAAG,KAAK,KAAK,mBAAmB,IAAI,GAAG,GAAG;AAAA,MAC3E,MAAM,iBACJ,uBACA,cAAc,kCAChB;AAAA,IACF;AAAA,IAEA,KAAK,sBAAsB,IAAI,GAAG;AAAA,IAClC,MAAM,cAAc,4CAAyB;AAAA,IAC7C,MAAM,aAAa,6DAA6B;AAAA,IAChD,IAAI,YAAY;AAAA,IAChB,MAAM,gBAAgB,sDAAgC,QAAQ,SAAS,OAAO;AAAA,IAC9E,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,aACA;AAAA,MACE,YAAY,KAAK,qBACf,eACA,QAAQ,UACR,QAAQ,YACR;AAAA,QACE,eAAe,QAAQ;AAAA,QACvB,kBAAkB,QAAQ;AAAA,MAC5B,GACA,aACF;AAAA,IACF,CACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,KAAK,oBACzB;AAAA,WACK,gBAAgB;AAAA,QACnB,KAAK,QAAQ;AAAA,QACb,eAAe,QAAQ;AAAA,QACvB,kBAAkB,QAAQ;AAAA,QAC1B,iBAAiB;AAAA,UACf,SAAS,CAAC,UAAU,WAAW,KAAK,KAAK;AAAA,QAC3C;AAAA,MACF,GACA,GACF;AAAA,MACA,YAAY,QAAQ;AAAA,MAEpB,IAAI;AAAA,MACJ,UAAU,yDAA+B,SAAS,aAAa;AAAA,QAC7D,YAAY,QAAQ,QAAQ,SAAS,OAAO;AAAA,QAC5C,eAAe,CAAC,WAAW,gBAAgB,MAAM,MAAM;AAAA,QACvD;AAAA,QACA,WAAW,MAAM;AAAA,UACf,IAAI,KAAK,mBAAmB,IAAI,GAAG,MAAM,SAAS;AAAA,YAChD,KAAK,mBAAmB,OAAO,GAAG;AAAA,UACpC;AAAA;AAAA,MAEJ,CAAC;AAAA,MAED,KAAK,mBAAmB,IAAI,KAAK,OAAO;AAAA,MACxC,KAAK,SAAS,IAAI,OAAO;AAAA,MACzB,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,MAAM,6BAA6B,OAAO,GAAG;AAAA,cAC7C;AAAA,MACA,KAAK,sBAAsB,OAAO,GAAG;AAAA;AAAA;AAAA,OAI3B,wBAAuB,CACnC,SACA,eACoB;AAAA,IACpB,MAAM,SAAS,MAAM,yCACnB,MAAM,KAAK,cAAc,GACzB,SACA;AAAA,MACE,YAAY,KAAK,qBACf,sDAAgC,QAAQ,SAAS,OAAO,GACxD,QAAQ,UACR,QAAQ,YACR;AAAA,QACE,eAAe,QAAQ;AAAA,QACvB,kBAAkB,QAAQ;AAAA,MAC5B,GACA,aACF;AAAA,IACF,CACF;AAAA,IACA,KAAK,QAAQ,IAAI,MAAM;AAAA,IACvB,OAAO;AAAA;AAAA,EAGD,oBAAoB,CAC1B,sBACA,mBACA,QACA,cACA,eACA;AAAA,IACA,IAAI,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,eAAe,SAC3B,4DAA8B,QAAQ,YAAY;AAAA,IACpD,OAAO,uDACL;AAAA,MACE,eAAe,OAAO,SAAS,YAC7B,MAAM,KAAK,sBAAsB,SAAS,OAAO;AAAA,MACnD,iBAAiB,OAAO,SAAS,YAC/B,MAAM,KAAK,wBAAwB,SAAS,OAAO;AAAA,MACrD,mBAAmB,OAAO,SAAS,YACjC,MAAM,KAAK,0BAA0B,SAAS,OAAO;AAAA,MACvD,sBAAsB,OAAO,KAAK,SAAS,YACzC,MAAM,KAAK,gCAAgC,KAAK,SAAS,OAAO;AAAA,MAClE,kBAAkB,OAAO,KAAK,YAC5B,MAAM,KAAK,iBAAiB,KAAK,OAAO;AAAA,MAC1C,aAAa,MAAM,KAAK,YAAY,YAAY,KAAK;AAAA,IACvD,GACA,sBACA,mBACA,KACF;AAAA;AAAA,OAGY,oBAAmB,CAAC,SAAyB,KAAsC;AAAA,IAC/F,MAAM,aAAa,MAAM,KAAK,cAAc;AAAA,IAC5C,IAAI,KAAK;AAAA,MACP,OAAO,MAAM,WAAW,gBAAgB,GAAG,EAAE,cAAc,OAAO;AAAA,IACpE;AAAA,IACA,OAAO,MAAM,WAAW,cAAc,OAAO;AAAA;AAAA,OAGjC,cAAa,GAA8B;AAAA,IACvD,IAAI,KAAK,YAAY,YAAY,KAAK,KAAK,YAAY,aAAa,GAAG;AAAA,MACrE,OAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,KAAK,mBAAmB;AAAA,MAC1B,OAAO,KAAK;AAAA,IACd;AAAA,IAEA,KAAK,qBAAqB,YAAY;AAAA,MACpC,MAAM,KAAK,aAAa;AAAA,MACxB,KAAK,aAAa,MAAM,sBAAQ;AAAA,QAC9B,QAAQ,KAAK,QAAQ,QAAQ,cAAc;AAAA,QAC3C,SAAS,KAAK,QAAQ,QAAQ,aAAa;AAAA,MAC7C,CAAC;AAAA,MACD,OAAO,KAAK;AAAA,OACX;AAAA,IAEH,OAAO,MAAM,KAAK,kBAAkB,QAAQ,MAAM;AAAA,MAChD,KAAK,oBAAoB;AAAA,KAC1B;AAAA;AAAA,OAGW,aAAY,GAAkB;AAAA,IAC1C,IAAI,KAAK,YAAY,YAAY,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,QAAQ,QAAQ,cAAc,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,KAAK,QAAQ,QAAQ,cAAc;AAAA,IACtD,MAAM,aAAa,KAAK,QAAQ,QAAQ,cAAc,+BAA+B;AAAA,IAErF,IAAI;AAAA,MACF,IAAI,uBAAG,WAAW,UAAU,GAAG;AAAA,QAC7B,uBAAG,WAAW,UAAU;AAAA,MAC1B;AAAA,MACA,MAAM;AAAA,IAIR,MAAM,MAAM,aACR,CAAC,QAAQ,8BAA8B,YAAY,YAAY,UAAU,IACzE,CAAC,kBAAkB,YAAY,UAAU;AAAA,IAC7C,MAAM,MAAM,KAAK,QAAQ,QAAQ,QAAQ,aAAa,yBAAK,QAAoB,8CAAS,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC/G,KAAK,gBAAgB,gCAAM,IAAI,IAAK,IAAI,MAAM,CAAC,GAAG;AAAA,MAChD;AAAA,MACA,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,MAChC,KAAK;AAAA,WACA,QAAQ;AAAA,QACX,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,IAED,KAAK,cAAc,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,MACtD,QAAQ,IAAI,kBAAkB,KAAK,SAAS,EAAE,KAAK,CAAC;AAAA,KACrD;AAAA,IACD,KAAK,cAAc,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAAA,MACtD,QAAQ,MAAM,kBAAkB,KAAK,SAAS,EAAE,KAAK,CAAC;AAAA,KACvD;AAAA,IACD,KAAK,cAAc,GAAG,QAAQ,MAAM;AAAA,MAClC,KAAK,gBAAgB;AAAA,MACrB,KAAK,aAAa;AAAA,MAClB,KAAK,oBAAoB;AAAA,KAC1B;AAAA,IAED,MAAM,cAAc,YAAY,KAAK,QAAQ,QAAQ,aAAa,GAAM;AAAA;AAE5E;AAEA,eAAsB,iBAAiB,CAAC,SAA0D;AAAA,EAChG,OAAO,IAAI,SAAS,OAAO;AAAA;", | ||
| "debugId": "919B6366FEC9BFE964756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "A9D15B8C0A56E17F64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -178,2 +178,51 @@ var __defProp = Object.defineProperty; | ||
| } | ||
| function createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error2 = new Error(reason.message); | ||
| error2.name = "AbortError"; | ||
| error2.cause = reason; | ||
| return error2; | ||
| } | ||
| const error = new Error(typeof reason === "string" && reason.length > 0 ? reason : "The operation was aborted."); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function composeAbortSignals(signals) { | ||
| const activeSignals = signals.filter((signal) => signal !== undefined); | ||
| if (activeSignals.length === 0) { | ||
| return { cleanup() {} }; | ||
| } | ||
| const aborted = activeSignals.find((signal) => signal.aborted); | ||
| if (aborted) { | ||
| return { | ||
| signal: AbortSignal.abort(aborted.reason ?? createAbortError()), | ||
| cleanup() {} | ||
| }; | ||
| } | ||
| if (activeSignals.length === 1) { | ||
| return { | ||
| signal: activeSignals[0], | ||
| cleanup() {} | ||
| }; | ||
| } | ||
| const controller = new AbortController; | ||
| const cleanup = () => { | ||
| for (const signal of activeSignals) { | ||
| signal.removeEventListener("abort", onAbort); | ||
| } | ||
| }; | ||
| const onAbort = (event) => { | ||
| cleanup(); | ||
| const signal = event.target; | ||
| controller.abort(signal?.reason ?? createAbortError()); | ||
| }; | ||
| for (const signal of activeSignals) { | ||
| signal.addEventListener("abort", onAbort, { once: true }); | ||
| } | ||
| controller.signal.addEventListener("abort", cleanup, { once: true }); | ||
| return { | ||
| signal: controller.signal, | ||
| cleanup | ||
| }; | ||
| } | ||
| var NESTED_RUNTIME_FLUSH_CODE = ` | ||
@@ -248,2 +297,4 @@ for (let index = 0; index < 3; index += 1) { | ||
| const resources = new Map; | ||
| const operationAbortControllers = new Map; | ||
| const earlyAbortedOperations = new Map; | ||
| const requireHost = (hostId) => { | ||
@@ -299,2 +350,37 @@ const host = hosts.get(hostId); | ||
| }; | ||
| const createOperationSignal = (options, context) => { | ||
| const operationId = options?.__isolateAbortOperationId; | ||
| let operationController; | ||
| if (operationId) { | ||
| operationController = new AbortController; | ||
| operationAbortControllers.set(operationId, operationController); | ||
| if (earlyAbortedOperations.has(operationId)) { | ||
| operationController.abort(createAbortError(earlyAbortedOperations.get(operationId))); | ||
| earlyAbortedOperations.delete(operationId); | ||
| } | ||
| } | ||
| const composed = composeAbortSignals([ | ||
| context.signal, | ||
| operationController?.signal | ||
| ]); | ||
| return { | ||
| signal: composed.signal, | ||
| cleanup() { | ||
| composed.cleanup(); | ||
| if (operationId) { | ||
| operationAbortControllers.delete(operationId); | ||
| earlyAbortedOperations.delete(operationId); | ||
| } | ||
| } | ||
| }; | ||
| }; | ||
| const stripAbortOperation = (options) => { | ||
| if (!options) { | ||
| return; | ||
| } | ||
| const normalized = { ...options }; | ||
| delete normalized.__isolateAbortOperationId; | ||
| delete normalized.signal; | ||
| return Object.keys(normalized).length > 0 ? normalized : undefined; | ||
| }; | ||
| return { | ||
@@ -424,3 +510,3 @@ async createHost() { | ||
| }, | ||
| async callResource(kind, resourceId, method, args) { | ||
| async callResource(kind, resourceId, method, args, context) { | ||
| const record = requireResource(resourceId, kind); | ||
@@ -431,6 +517,17 @@ switch (kind) { | ||
| switch (method) { | ||
| case "eval": | ||
| await runtimeRecord.resource.eval(args[0], args[1] ?? undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| case "eval": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const evalOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| await runtimeRecord.resource.eval(args[0], Object.keys(evalOptions).length > 0 ? evalOptions : undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| return; | ||
| } | ||
| case "dispose": | ||
@@ -467,4 +564,13 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| case "handle": { | ||
| const result = await server.handle(toRequest(args[0]), args[1] ?? undefined); | ||
| return result; | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const handleOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await server.handle(toRequest(args[0]), Object.keys(handleOptions).length > 0 ? handleOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
@@ -499,4 +605,15 @@ case "ws.open": | ||
| switch (method) { | ||
| case "run": | ||
| return await runtime.run(args[0], args[1] ?? undefined); | ||
| case "run": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const runOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await runtime.run(args[0], Object.keys(runOptions).length > 0 ? runOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
| case "dispose": | ||
@@ -529,8 +646,30 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| switch (method) { | ||
| case "eval": | ||
| await runtimeRecord.resource.eval(args[0], args[1] ?? undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| case "eval": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const evalOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| await runtimeRecord.resource.eval(args[0], Object.keys(evalOptions).length > 0 ? evalOptions : undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| return; | ||
| case "runTests": | ||
| return await runtimeRecord.resource.runTests(args[0], args[1] ?? undefined); | ||
| } | ||
| case "runTests": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const runOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await runtimeRecord.resource.runTests(args[0], Object.keys(runOptions).length > 0 ? runOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
| case "dispose": | ||
@@ -588,2 +727,12 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| }, | ||
| async abortResourceCall(operationId, reason) { | ||
| const controller = operationAbortControllers.get(operationId); | ||
| if (controller) { | ||
| if (!controller.signal.aborted) { | ||
| controller.abort(createAbortError(reason)); | ||
| } | ||
| return; | ||
| } | ||
| earlyAbortedOperations.set(operationId, reason); | ||
| }, | ||
| async disposeAll(reason) { | ||
@@ -598,2 +747,4 @@ const resourceIds = [...resources.keys()]; | ||
| hosts.clear(); | ||
| operationAbortControllers.clear(); | ||
| earlyAbortedOperations.clear(); | ||
| } | ||
@@ -603,2 +754,2 @@ }; | ||
| //# debugId=DE97CDB7C39B4BC664756E2164756E21 | ||
| //# debugId=5D380FC9E9D9ED4364756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.cjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.cjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n NamespacedRuntime,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.cjs\";\n\ninterface NestedHostFactory {\n createRuntime(\n options: CreateRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<ScriptRuntime>;\n createAppServer(\n options: CreateAppServerOptions,\n context: NestedHostControllerContext,\n ): Promise<AppServer>;\n createTestRuntime(\n options: CreateTestRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<TestRuntime>;\n getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<NamespacedRuntime>;\n disposeNamespace(key: string, options?: { reason?: string }): Promise<void>;\n isConnected(): boolean;\n}\n\ninterface ResolvedNestedHostPolicy {\n fetch: \"inherit\" | \"disabled\";\n maxTotalResources: number;\n maxRuntimes: number;\n maxAppServers: number;\n maxMemoryLimitMB: number;\n maxExecutionTimeoutMs: number;\n maxAppServerLifetimeMs?: number;\n}\n\nexport interface NestedHostResourceGroup {\n id: string;\n namespacePrefix: string;\n policy: ResolvedNestedHostPolicy;\n totalResources: number;\n runtimeResources: number;\n appServerResources: number;\n namespaceKeys: Map<string, string>;\n}\n\nexport interface NestedHostControllerContext {\n group: NestedHostResourceGroup;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n lifetimeTimer?: ReturnType<typeof setTimeout>;\n releaseQuota: () => void;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface NamespacedRuntimeResourceRecord {\n kind: \"namespacedRuntime\";\n hostId: string;\n resource: NamespacedRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord\n | NamespacedRuntimeResourceRecord;\n\nconst DEFAULT_NESTED_TOTAL_RESOURCES = 8;\nconst DEFAULT_NESTED_RUNTIMES = 6;\nconst DEFAULT_NESTED_APP_SERVERS = 2;\nconst DEFAULT_NESTED_MEMORY_LIMIT_MB = 128;\nconst DEFAULT_NESTED_EXECUTION_TIMEOUT_MS = 30_000;\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined) {\n return fallback;\n }\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\"Nested host quota values must be positive numbers.\");\n }\n return Math.floor(value);\n}\n\nfunction clampToParentLimit(\n value: number | undefined,\n parentLimit: number | undefined,\n fallback: number,\n): number {\n const normalized = normalizePositiveInteger(value, parentLimit ?? fallback);\n return parentLimit === undefined ? normalized : Math.min(normalized, parentLimit);\n}\n\nexport function createNestedHostResourceGroup(\n policy: NestedHostPolicy | undefined,\n parentLimits?: { memoryLimitMB?: number; executionTimeout?: number },\n): NestedHostResourceGroup {\n const maxMemoryLimitMB = clampToParentLimit(\n policy?.maxMemoryLimitMB,\n parentLimits?.memoryLimitMB,\n DEFAULT_NESTED_MEMORY_LIMIT_MB,\n );\n const maxExecutionTimeoutMs = clampToParentLimit(\n policy?.maxExecutionTimeoutMs,\n parentLimits?.executionTimeout,\n DEFAULT_NESTED_EXECUTION_TIMEOUT_MS,\n );\n\n return {\n id: randomUUID(),\n namespacePrefix: `nested:${randomUUID()}`,\n policy: {\n fetch: policy?.fetch ?? \"disabled\",\n maxTotalResources: normalizePositiveInteger(\n policy?.maxTotalResources,\n DEFAULT_NESTED_TOTAL_RESOURCES,\n ),\n maxRuntimes: normalizePositiveInteger(\n policy?.maxRuntimes,\n DEFAULT_NESTED_RUNTIMES,\n ),\n maxAppServers: normalizePositiveInteger(\n policy?.maxAppServers,\n DEFAULT_NESTED_APP_SERVERS,\n ),\n maxMemoryLimitMB,\n maxExecutionTimeoutMs,\n maxAppServerLifetimeMs: policy?.maxAppServerLifetimeMs === undefined\n ? undefined\n : normalizePositiveInteger(policy.maxAppServerLifetimeMs, DEFAULT_NESTED_EXECUTION_TIMEOUT_MS),\n },\n totalResources: 0,\n runtimeResources: 0,\n appServerResources: 0,\n namespaceKeys: new Map(),\n };\n}\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\nfunction createNonReentrantEventHandler<TArgs extends unknown[]>(\n label: string,\n handler: ((...args: TArgs) => unknown) | undefined,\n): (...args: TArgs) => void {\n return (...args: TArgs) => {\n invokeBestEffortEventHandlerNonReentrant(label, handler, ...args);\n };\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: ResolvedNestedHostPolicy,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch ?? (\n policy.fetch === \"inherit\" ? inheritedBindings.fetch : undefined\n ),\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle, a Playwright handler, or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateAppServerOptions {\n return {\n ...normalizeRuntimeOptions(\n options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n key: options.key,\n entry: options.entry,\n entryFilename: options.entryFilename,\n webSockets: options.webSockets,\n };\n}\n\nfunction normalizeNamespacedRuntimeOptions(\n options: CreateNamespacedRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateNamespacedRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nconst NESTED_RUNTIME_FLUSH_CODE = `\n for (let index = 0; index < 3; index += 1) {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n`;\n\nfunction hasPendingNestedRuntimeWork(\n diagnostics: RuntimeResourceDiagnostics,\n): boolean {\n return diagnostics.runtime.activeResources > 0 ||\n diagnostics.runtime.pendingFiles > 0 ||\n diagnostics.runtime.pendingFetches > 0 ||\n diagnostics.runtime.pendingModules > 0 ||\n diagnostics.runtime.pendingTools > 0;\n}\n\nasync function flushNestedRuntime(\n runtime: ScriptRuntime | NamespacedRuntime,\n): Promise<void> {\n let diagnostics = await runtime.diagnostics();\n\n for (let index = 0; index < 3; index += 1) {\n if (!hasPendingNestedRuntimeWork(diagnostics)) {\n return;\n }\n\n await runtime.eval(\n NESTED_RUNTIME_FLUSH_CODE,\n { filename: \"/__isolate_internal_nested_flush__.mjs\" },\n );\n diagnostics = await runtime.diagnostics();\n }\n}\n\nfunction countsAsRuntime(kind: NestedResourceKind): boolean {\n return kind !== \"appServer\";\n}\n\nfunction reserveNestedResource(\n group: NestedHostResourceGroup,\n kind: NestedResourceKind,\n): () => void {\n const nextTotal = group.totalResources + 1;\n if (nextTotal > group.policy.maxTotalResources) {\n throw new Error(\n `Nested host resource quota exceeded: ${nextTotal}/${group.policy.maxTotalResources}.`,\n );\n }\n\n if (countsAsRuntime(kind)) {\n const nextRuntimes = group.runtimeResources + 1;\n if (nextRuntimes > group.policy.maxRuntimes) {\n throw new Error(\n `Nested runtime quota exceeded: ${nextRuntimes}/${group.policy.maxRuntimes}.`,\n );\n }\n group.runtimeResources = nextRuntimes;\n } else {\n const nextServers = group.appServerResources + 1;\n if (nextServers > group.policy.maxAppServers) {\n throw new Error(\n `Nested app server quota exceeded: ${nextServers}/${group.policy.maxAppServers}.`,\n );\n }\n group.appServerResources = nextServers;\n }\n\n group.totalResources = nextTotal;\n\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n group.totalResources = Math.max(0, group.totalResources - 1);\n if (countsAsRuntime(kind)) {\n group.runtimeResources = Math.max(0, group.runtimeResources - 1);\n } else {\n group.appServerResources = Math.max(0, group.appServerResources - 1);\n }\n };\n}\n\nfunction getScopedNamespaceKey(\n group: NestedHostResourceGroup,\n hostId: string,\n key: string,\n): string {\n const mapKey = `${hostId}\\0${key}`;\n const existing = group.namespaceKeys.get(mapKey);\n if (existing) {\n return existing;\n }\n\n const encodedKey = Buffer.from(key, \"utf8\").toString(\"base64url\");\n const scopedKey = `${group.namespacePrefix}:${randomUUID()}:${encodedKey}`;\n group.namespaceKeys.set(mapKey, scopedKey);\n return scopedKey;\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (\n record.kind === \"runtime\" ||\n record.kind === \"testRuntime\" ||\n record.kind === \"namespacedRuntime\"\n ) {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n if (record.kind === \"appServer\" && record.lifetimeTimer) {\n clearTimeout(record.lifetimeTimer);\n }\n record.releaseQuota();\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n const controllerContext: NestedHostControllerContext = { group };\n const releaseQuota = reserveNestedResource(group, kind);\n switch (kind) {\n case \"runtime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"appServer\": {\n try {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createAppServer(options, controllerContext);\n const resourceId = randomUUID();\n const record: AppServerResourceRecord = {\n kind,\n hostId,\n resource,\n releaseQuota,\n };\n if (group.policy.maxAppServerLifetimeMs !== undefined) {\n record.lifetimeTimer = setTimeout(() => {\n void disposeResource(resourceId, {\n hard: true,\n reason: \"Nested app server lifetime exceeded\",\n });\n }, group.policy.maxAppServerLifetimeMs);\n }\n resources.set(resourceId, record);\n host.serverIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"testRuntime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createTestRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"namespacedRuntime\": {\n try {\n const namespacedOptions = rawOptions as {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const resource = await factory.getNamespacedRuntime(\n getScopedNamespaceKey(group, hostId, namespacedOptions.key),\n normalizeNamespacedRuntimeOptions(\n namespacedOptions.options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n controllerContext,\n );\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n }\n },\n async callResource(kind, resourceId, method, args) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n (args[1] as string | { filename?: string; executionTimeout?: number } | null) ??\n undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n return undefined;\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.runtime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const result = await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n ((args[1] as {\n requestId?: string;\n metadata?: Record<string, string>;\n } | null) ?? undefined),\n );\n return result;\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtimeRecord = record as TestRuntimeResourceRecord;\n const runtime = runtimeRecord.resource;\n switch (method) {\n case \"run\":\n return await runtime.run(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtime.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.testRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n\n case \"namespacedRuntime\": {\n const runtimeRecord = record as NamespacedRuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n executionTimeout?: number;\n } | null) ?? undefined),\n );\n await flushNestedRuntime(runtimeRecord.resource);\n return undefined;\n case \"runTests\":\n return await runtimeRecord.resource.runTests(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(\n `Unsupported nested namespaced runtime method: ${method}`,\n );\n }\n }\n }\n },\n async disposeNamespace(hostId, key, options) {\n requireHost(hostId);\n const scopedKey = group.namespaceKeys.get(`${hostId}\\0${key}`);\n if (!scopedKey) {\n return;\n }\n await factory.disposeNamespace(scopedKey, options);\n },\n async disposeAll(reason) {\n const resourceIds = [...resources.keys()];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: reason ?? \"Nested isolate parent disposed\",\n });\n }),\n );\n hosts.clear();\n },\n };\n}\n" | ||
| "import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.cjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.cjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.cjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n NamespacedRuntime,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.cjs\";\n\ninterface NestedHostFactory {\n createRuntime(\n options: CreateRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<ScriptRuntime>;\n createAppServer(\n options: CreateAppServerOptions,\n context: NestedHostControllerContext,\n ): Promise<AppServer>;\n createTestRuntime(\n options: CreateTestRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<TestRuntime>;\n getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<NamespacedRuntime>;\n disposeNamespace(key: string, options?: { reason?: string }): Promise<void>;\n isConnected(): boolean;\n}\n\ninterface ResolvedNestedHostPolicy {\n fetch: \"inherit\" | \"disabled\";\n maxTotalResources: number;\n maxRuntimes: number;\n maxAppServers: number;\n maxMemoryLimitMB: number;\n maxExecutionTimeoutMs: number;\n maxAppServerLifetimeMs?: number;\n}\n\nexport interface NestedHostResourceGroup {\n id: string;\n namespacePrefix: string;\n policy: ResolvedNestedHostPolicy;\n totalResources: number;\n runtimeResources: number;\n appServerResources: number;\n namespaceKeys: Map<string, string>;\n}\n\nexport interface NestedHostControllerContext {\n group: NestedHostResourceGroup;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n lifetimeTimer?: ReturnType<typeof setTimeout>;\n releaseQuota: () => void;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface NamespacedRuntimeResourceRecord {\n kind: \"namespacedRuntime\";\n hostId: string;\n resource: NamespacedRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord\n | NamespacedRuntimeResourceRecord;\n\nconst DEFAULT_NESTED_TOTAL_RESOURCES = 8;\nconst DEFAULT_NESTED_RUNTIMES = 6;\nconst DEFAULT_NESTED_APP_SERVERS = 2;\nconst DEFAULT_NESTED_MEMORY_LIMIT_MB = 128;\nconst DEFAULT_NESTED_EXECUTION_TIMEOUT_MS = 30_000;\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined) {\n return fallback;\n }\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\"Nested host quota values must be positive numbers.\");\n }\n return Math.floor(value);\n}\n\nfunction clampToParentLimit(\n value: number | undefined,\n parentLimit: number | undefined,\n fallback: number,\n): number {\n const normalized = normalizePositiveInteger(value, parentLimit ?? fallback);\n return parentLimit === undefined ? normalized : Math.min(normalized, parentLimit);\n}\n\nexport function createNestedHostResourceGroup(\n policy: NestedHostPolicy | undefined,\n parentLimits?: { memoryLimitMB?: number; executionTimeout?: number },\n): NestedHostResourceGroup {\n const maxMemoryLimitMB = clampToParentLimit(\n policy?.maxMemoryLimitMB,\n parentLimits?.memoryLimitMB,\n DEFAULT_NESTED_MEMORY_LIMIT_MB,\n );\n const maxExecutionTimeoutMs = clampToParentLimit(\n policy?.maxExecutionTimeoutMs,\n parentLimits?.executionTimeout,\n DEFAULT_NESTED_EXECUTION_TIMEOUT_MS,\n );\n\n return {\n id: randomUUID(),\n namespacePrefix: `nested:${randomUUID()}`,\n policy: {\n fetch: policy?.fetch ?? \"disabled\",\n maxTotalResources: normalizePositiveInteger(\n policy?.maxTotalResources,\n DEFAULT_NESTED_TOTAL_RESOURCES,\n ),\n maxRuntimes: normalizePositiveInteger(\n policy?.maxRuntimes,\n DEFAULT_NESTED_RUNTIMES,\n ),\n maxAppServers: normalizePositiveInteger(\n policy?.maxAppServers,\n DEFAULT_NESTED_APP_SERVERS,\n ),\n maxMemoryLimitMB,\n maxExecutionTimeoutMs,\n maxAppServerLifetimeMs: policy?.maxAppServerLifetimeMs === undefined\n ? undefined\n : normalizePositiveInteger(policy.maxAppServerLifetimeMs, DEFAULT_NESTED_EXECUTION_TIMEOUT_MS),\n },\n totalResources: 0,\n runtimeResources: 0,\n appServerResources: 0,\n namespaceKeys: new Map(),\n };\n}\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\ntype AbortableNestedOptions = {\n __isolateAbortOperationId?: string;\n signal?: AbortSignal;\n};\n\nfunction createNonReentrantEventHandler<TArgs extends unknown[]>(\n label: string,\n handler: ((...args: TArgs) => unknown) | undefined,\n): (...args: TArgs) => void {\n return (...args: TArgs) => {\n invokeBestEffortEventHandlerNonReentrant(label, handler, ...args);\n };\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: ResolvedNestedHostPolicy,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch ?? (\n policy.fetch === \"inherit\" ? inheritedBindings.fetch : undefined\n ),\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle, a Playwright handler, or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateAppServerOptions {\n return {\n ...normalizeRuntimeOptions(\n options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n key: options.key,\n entry: options.entry,\n entryFilename: options.entryFilename,\n webSockets: options.webSockets,\n };\n}\n\nfunction normalizeNamespacedRuntimeOptions(\n options: CreateNamespacedRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateNamespacedRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nfunction createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n (error as Error & { cause?: unknown }).cause = reason;\n return error;\n }\n\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction composeAbortSignals(\n signals: Array<AbortSignal | undefined>,\n): { signal?: AbortSignal; cleanup: () => void } {\n const activeSignals = signals.filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n\n if (activeSignals.length === 0) {\n return { cleanup() {} };\n }\n\n const aborted = activeSignals.find((signal) => signal.aborted);\n if (aborted) {\n return {\n signal: AbortSignal.abort(aborted.reason ?? createAbortError()),\n cleanup() {},\n };\n }\n\n if (activeSignals.length === 1) {\n return {\n signal: activeSignals[0],\n cleanup() {},\n };\n }\n\n const controller = new AbortController();\n const cleanup = () => {\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", onAbort);\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 {\n signal: controller.signal,\n cleanup,\n };\n}\n\nconst NESTED_RUNTIME_FLUSH_CODE = `\n for (let index = 0; index < 3; index += 1) {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n`;\n\nfunction hasPendingNestedRuntimeWork(\n diagnostics: RuntimeResourceDiagnostics,\n): boolean {\n return diagnostics.runtime.activeResources > 0 ||\n diagnostics.runtime.pendingFiles > 0 ||\n diagnostics.runtime.pendingFetches > 0 ||\n diagnostics.runtime.pendingModules > 0 ||\n diagnostics.runtime.pendingTools > 0;\n}\n\nasync function flushNestedRuntime(\n runtime: ScriptRuntime | NamespacedRuntime,\n): Promise<void> {\n let diagnostics = await runtime.diagnostics();\n\n for (let index = 0; index < 3; index += 1) {\n if (!hasPendingNestedRuntimeWork(diagnostics)) {\n return;\n }\n\n await runtime.eval(\n NESTED_RUNTIME_FLUSH_CODE,\n { filename: \"/__isolate_internal_nested_flush__.mjs\" },\n );\n diagnostics = await runtime.diagnostics();\n }\n}\n\nfunction countsAsRuntime(kind: NestedResourceKind): boolean {\n return kind !== \"appServer\";\n}\n\nfunction reserveNestedResource(\n group: NestedHostResourceGroup,\n kind: NestedResourceKind,\n): () => void {\n const nextTotal = group.totalResources + 1;\n if (nextTotal > group.policy.maxTotalResources) {\n throw new Error(\n `Nested host resource quota exceeded: ${nextTotal}/${group.policy.maxTotalResources}.`,\n );\n }\n\n if (countsAsRuntime(kind)) {\n const nextRuntimes = group.runtimeResources + 1;\n if (nextRuntimes > group.policy.maxRuntimes) {\n throw new Error(\n `Nested runtime quota exceeded: ${nextRuntimes}/${group.policy.maxRuntimes}.`,\n );\n }\n group.runtimeResources = nextRuntimes;\n } else {\n const nextServers = group.appServerResources + 1;\n if (nextServers > group.policy.maxAppServers) {\n throw new Error(\n `Nested app server quota exceeded: ${nextServers}/${group.policy.maxAppServers}.`,\n );\n }\n group.appServerResources = nextServers;\n }\n\n group.totalResources = nextTotal;\n\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n group.totalResources = Math.max(0, group.totalResources - 1);\n if (countsAsRuntime(kind)) {\n group.runtimeResources = Math.max(0, group.runtimeResources - 1);\n } else {\n group.appServerResources = Math.max(0, group.appServerResources - 1);\n }\n };\n}\n\nfunction getScopedNamespaceKey(\n group: NestedHostResourceGroup,\n hostId: string,\n key: string,\n): string {\n const mapKey = `${hostId}\\0${key}`;\n const existing = group.namespaceKeys.get(mapKey);\n if (existing) {\n return existing;\n }\n\n const encodedKey = Buffer.from(key, \"utf8\").toString(\"base64url\");\n const scopedKey = `${group.namespacePrefix}:${randomUUID()}:${encodedKey}`;\n group.namespaceKeys.set(mapKey, scopedKey);\n return scopedKey;\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n const operationAbortControllers = new Map<string, AbortController>();\n const earlyAbortedOperations = new Map<string, string | undefined>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (\n record.kind === \"runtime\" ||\n record.kind === \"testRuntime\" ||\n record.kind === \"namespacedRuntime\"\n ) {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n if (record.kind === \"appServer\" && record.lifetimeTimer) {\n clearTimeout(record.lifetimeTimer);\n }\n record.releaseQuota();\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n const createOperationSignal = (\n options: AbortableNestedOptions | null | undefined,\n context: HostCallContext,\n ): { signal?: AbortSignal; cleanup: () => void } => {\n const operationId = options?.__isolateAbortOperationId;\n let operationController: AbortController | undefined;\n\n if (operationId) {\n operationController = new AbortController();\n operationAbortControllers.set(operationId, operationController);\n if (earlyAbortedOperations.has(operationId)) {\n operationController.abort(\n createAbortError(earlyAbortedOperations.get(operationId)),\n );\n earlyAbortedOperations.delete(operationId);\n }\n }\n\n const composed = composeAbortSignals([\n context.signal,\n operationController?.signal,\n ]);\n\n return {\n signal: composed.signal,\n cleanup() {\n composed.cleanup();\n if (operationId) {\n operationAbortControllers.delete(operationId);\n earlyAbortedOperations.delete(operationId);\n }\n },\n };\n };\n\n const stripAbortOperation = <T extends object>(\n options: (T & AbortableNestedOptions) | null | undefined,\n ): T | undefined => {\n if (!options) {\n return undefined;\n }\n const normalized = { ...options };\n delete (normalized as AbortableNestedOptions).__isolateAbortOperationId;\n delete (normalized as AbortableNestedOptions).signal;\n return Object.keys(normalized).length > 0 ? normalized as T : undefined;\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n const controllerContext: NestedHostControllerContext = { group };\n const releaseQuota = reserveNestedResource(group, kind);\n switch (kind) {\n case \"runtime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"appServer\": {\n try {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createAppServer(options, controllerContext);\n const resourceId = randomUUID();\n const record: AppServerResourceRecord = {\n kind,\n hostId,\n resource,\n releaseQuota,\n };\n if (group.policy.maxAppServerLifetimeMs !== undefined) {\n record.lifetimeTimer = setTimeout(() => {\n void disposeResource(resourceId, {\n hard: true,\n reason: \"Nested app server lifetime exceeded\",\n });\n }, group.policy.maxAppServerLifetimeMs);\n }\n resources.set(resourceId, record);\n host.serverIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"testRuntime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createTestRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"namespacedRuntime\": {\n try {\n const namespacedOptions = rawOptions as {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const resource = await factory.getNamespacedRuntime(\n getScopedNamespaceKey(group, hostId, namespacedOptions.key),\n normalizeNamespacedRuntimeOptions(\n namespacedOptions.options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n controllerContext,\n );\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n }\n },\n async callResource(kind, resourceId, method, args, context) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n executionTimeout?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const evalOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n executionTimeout?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n await runtimeRecord.resource.eval(\n args[0] as string,\n Object.keys(evalOptions).length > 0 ? evalOptions : undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n } finally {\n operation.cleanup();\n }\n return undefined;\n }\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.runtime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const rawOptions =\n (args[1] as ({\n requestId?: string;\n metadata?: Record<string, string>;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const handleOptions = {\n ...(stripAbortOperation<{\n requestId?: string;\n metadata?: Record<string, string>;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n Object.keys(handleOptions).length > 0 ? handleOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtimeRecord = record as TestRuntimeResourceRecord;\n const runtime = runtimeRecord.resource;\n switch (method) {\n case \"run\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n timeoutMs?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const runOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n timeoutMs?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await runtime.run(\n args[0] as string,\n Object.keys(runOptions).length > 0 ? runOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtime.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.testRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n\n case \"namespacedRuntime\": {\n const runtimeRecord = record as NamespacedRuntimeResourceRecord;\n switch (method) {\n case \"eval\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n executionTimeout?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const evalOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n executionTimeout?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n await runtimeRecord.resource.eval(\n args[0] as string,\n Object.keys(evalOptions).length > 0 ? evalOptions : undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n } finally {\n operation.cleanup();\n }\n return undefined;\n }\n case \"runTests\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n timeoutMs?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const runOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n timeoutMs?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await runtimeRecord.resource.runTests(\n args[0] as string,\n Object.keys(runOptions).length > 0 ? runOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(\n `Unsupported nested namespaced runtime method: ${method}`,\n );\n }\n }\n }\n },\n async disposeNamespace(hostId, key, options) {\n requireHost(hostId);\n const scopedKey = group.namespaceKeys.get(`${hostId}\\0${key}`);\n if (!scopedKey) {\n return;\n }\n await factory.disposeNamespace(scopedKey, options);\n },\n async abortResourceCall(operationId, reason) {\n const controller = operationAbortControllers.get(operationId);\n if (controller) {\n if (!controller.signal.aborted) {\n controller.abort(createAbortError(reason));\n }\n return;\n }\n\n earlyAbortedOperations.set(operationId, reason);\n },\n async disposeAll(reason) {\n const resourceIds = [...resources.keys()];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: reason ?? \"Nested isolate parent disposed\",\n });\n }),\n );\n hosts.clear();\n operationAbortControllers.clear();\n earlyAbortedOperations.clear();\n },\n };\n}\n" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA2B,IAA3B;AAOO,IALP;AAMyD,IAAzD;AA2GA,IAAM,iCAAiC;AACvC,IAAM,0BAA0B;AAChC,IAAM,6BAA6B;AACnC,IAAM,iCAAiC;AACvC,IAAM,sCAAsC;AAE5C,SAAS,wBAAwB,CAAC,OAA2B,UAA0B;AAAA,EACrF,IAAI,UAAU,WAAW;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,IACzC,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EACA,OAAO,KAAK,MAAM,KAAK;AAAA;AAGzB,SAAS,kBAAkB,CACzB,OACA,aACA,UACQ;AAAA,EACR,MAAM,aAAa,yBAAyB,OAAO,eAAe,QAAQ;AAAA,EAC1E,OAAO,gBAAgB,YAAY,aAAa,KAAK,IAAI,YAAY,WAAW;AAAA;AAG3E,SAAS,6BAA6B,CAC3C,QACA,cACyB;AAAA,EACzB,MAAM,mBAAmB,mBACvB,QAAQ,kBACR,cAAc,eACd,8BACF;AAAA,EACA,MAAM,wBAAwB,mBAC5B,QAAQ,uBACR,cAAc,kBACd,mCACF;AAAA,EAEA,OAAO;AAAA,IACL,IAAI,8BAAW;AAAA,IACf,iBAAiB,UAAU,8BAAW;AAAA,IACtC,QAAQ;AAAA,MACN,OAAO,QAAQ,SAAS;AAAA,MACxB,mBAAmB,yBACjB,QAAQ,mBACR,8BACF;AAAA,MACA,aAAa,yBACX,QAAQ,aACR,uBACF;AAAA,MACA,eAAe,yBACb,QAAQ,eACR,0BACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBAAwB,QAAQ,2BAA2B,YACvD,YACA,yBAAyB,OAAO,wBAAwB,mCAAmC;AAAA,IACjG;AAAA,IACA,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,eAAe,IAAI;AAAA,EACrB;AAAA;AAUF,SAAS,8BAAuD,CAC9D,OACA,SAC0B;AAAA,EAC1B,OAAO,IAAI,SAAgB;AAAA,IACzB,+DAAyC,OAAO,SAAS,GAAG,IAAI;AAAA;AAAA;AAIpE,SAAS,SAAS,CAAC,YAA4C;AAAA,EAC7D,OAAO,IAAI,QAAQ,WAAW,KAAK;AAAA,IACjC,QAAQ,WAAW,UAAU;AAAA,IAC7B,SAAS,WAAW;AAAA,IACpB,MAAM,WAAW,OAAO,IAAI,WAAW,WAAW,IAAI,IAAI;AAAA,EAC5D,CAAC;AAAA;AAGH,SAAS,iBAAiB,CACxB,UACA,sBACA,mBACA,QACc;AAAA,EACd,MAAM,aAA2B;AAAA,IAC/B,SAAS,UAAU;AAAA,IACnB,OAAO,UAAU,UACf,OAAO,UAAU,YAAY,kBAAkB,QAAQ;AAAA,IAEzD,OAAO,UAAU;AAAA,IACjB,SAAS,UAAU;AAAA,IACnB,OAAO,UAAU;AAAA,EACnB;AAAA,EAEA,IAAI,CAAC,YAAY,EAAE,aAAa,aAAa,SAAS,YAAY,WAAW;AAAA,IAC3E,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,iDAA2B,SAAS,OAAO,GAAG;AAAA,IAChD,WAAW,UAAU,2CACnB,sBACA,yBACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,qDAA+B,SAAS,OAAO;AAAA,EACrE,IAAI,CAAC,eAAe;AAAA,IAClB,MAAM,IAAI,MACR,4HACF;AAAA,EACF;AAAA,EAEA,WAAW,UAAU;AAAA,EACrB,OAAO;AAAA;AAGT,SAAS,uBAAuB,CAC9B,SACA,sBACA,mBACA,OACsB;AAAA,EACtB,MAAM,gBAAgB,QAAQ,iBAAiB,MAAM,OAAO;AAAA,EAC5D,MAAM,mBAAmB,QAAQ,oBAAoB,MAAM,OAAO;AAAA,EAClE,IAAI,gBAAgB,MAAM,OAAO,kBAAkB;AAAA,IACjD,MAAM,IAAI,MACR,gCAAgC,+BAA+B,MAAM,OAAO,mBAC9E;AAAA,EACF;AAAA,EACA,IAAI,mBAAmB,MAAM,OAAO,uBAAuB;AAAA,IACzD,MAAM,IAAI,MACR,mCAAmC,kCAAkC,MAAM,OAAO,wBACpF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,OACF;AAAA,IACH;AAAA,IACA;AAAA,IACA,YAAY,QAAQ,eAAe,QAAQ,QAAQ,MAAM;AAAA,IACzD,UAAU,kBACR,QAAQ,UACR,sBACA,mBACA,MAAM,MACR;AAAA,EACF;AAAA;AAGF,SAAS,yBAAyB,CAChC,SACA,sBACA,mBACA,OACwB;AAAA,EACxB,OAAO;AAAA,OACF,wBACD,SACA,sBACA,mBACA,KACF;AAAA,IACA,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,EACtB;AAAA;AAGF,SAAS,iCAAiC,CACxC,SACA,sBACA,mBACA,OACgC;AAAA,EAChC,MAAM,gBAAgB,QAAQ,iBAAiB,MAAM,OAAO;AAAA,EAC5D,MAAM,mBAAmB,QAAQ,oBAAoB,MAAM,OAAO;AAAA,EAClE,IAAI,gBAAgB,MAAM,OAAO,kBAAkB;AAAA,IACjD,MAAM,IAAI,MACR,gCAAgC,+BAA+B,MAAM,OAAO,mBAC9E;AAAA,EACF;AAAA,EACA,IAAI,mBAAmB,MAAM,OAAO,uBAAuB;AAAA,IACzD,MAAM,IAAI,MACR,mCAAmC,kCAAkC,MAAM,OAAO,wBACpF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,OACF;AAAA,IACH;AAAA,IACA;AAAA,IACA,YAAY,QAAQ,eAAe,QAAQ,QAAQ,MAAM;AAAA,IACzD,UAAU,kBACR,QAAQ,UACR,sBACA,mBACA,MAAM,MACR;AAAA,EACF;AAAA;AAGF,SAAS,OAAO,CAAC,OAAuB;AAAA,EACtC,IAAI,iBAAiB,OAAO;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EAEA,IACE,SACA,OAAO,UAAU,YACjB,aAAa,SACb,OAAQ,MAAgC,YAAY,UACpD;AAAA,IACA,MAAM,QAAQ,IAAI,MAAO,MAA8B,OAAO;AAAA,IAC9D,IACE,UAAU,SACV,OAAQ,MAA6B,SAAS,UAC9C;AAAA,MACA,MAAM,OAAQ,MAA2B;AAAA,IAC3C;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA;AAGhC,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlC,SAAS,2BAA2B,CAClC,aACS;AAAA,EACT,OAAO,YAAY,QAAQ,kBAAkB,KAC3C,YAAY,QAAQ,eAAe,KACnC,YAAY,QAAQ,iBAAiB,KACrC,YAAY,QAAQ,iBAAiB,KACrC,YAAY,QAAQ,eAAe;AAAA;AAGvC,eAAe,kBAAkB,CAC/B,SACe;AAAA,EACf,IAAI,cAAc,MAAM,QAAQ,YAAY;AAAA,EAE5C,SAAS,QAAQ,EAAG,QAAQ,GAAG,SAAS,GAAG;AAAA,IACzC,IAAI,CAAC,4BAA4B,WAAW,GAAG;AAAA,MAC7C;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,KACZ,2BACA,EAAE,UAAU,yCAAyC,CACvD;AAAA,IACA,cAAc,MAAM,QAAQ,YAAY;AAAA,EAC1C;AAAA;AAGF,SAAS,eAAe,CAAC,MAAmC;AAAA,EAC1D,OAAO,SAAS;AAAA;AAGlB,SAAS,qBAAqB,CAC5B,OACA,MACY;AAAA,EACZ,MAAM,YAAY,MAAM,iBAAiB;AAAA,EACzC,IAAI,YAAY,MAAM,OAAO,mBAAmB;AAAA,IAC9C,MAAM,IAAI,MACR,wCAAwC,aAAa,MAAM,OAAO,oBACpE;AAAA,EACF;AAAA,EAEA,IAAI,gBAAgB,IAAI,GAAG;AAAA,IACzB,MAAM,eAAe,MAAM,mBAAmB;AAAA,IAC9C,IAAI,eAAe,MAAM,OAAO,aAAa;AAAA,MAC3C,MAAM,IAAI,MACR,kCAAkC,gBAAgB,MAAM,OAAO,cACjE;AAAA,IACF;AAAA,IACA,MAAM,mBAAmB;AAAA,EAC3B,EAAO;AAAA,IACL,MAAM,cAAc,MAAM,qBAAqB;AAAA,IAC/C,IAAI,cAAc,MAAM,OAAO,eAAe;AAAA,MAC5C,MAAM,IAAI,MACR,qCAAqC,eAAe,MAAM,OAAO,gBACnE;AAAA,IACF;AAAA,IACA,MAAM,qBAAqB;AAAA;AAAA,EAG7B,MAAM,iBAAiB;AAAA,EAEvB,IAAI,WAAW;AAAA,EACf,OAAO,MAAM;AAAA,IACX,IAAI,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,WAAW;AAAA,IACX,MAAM,iBAAiB,KAAK,IAAI,GAAG,MAAM,iBAAiB,CAAC;AAAA,IAC3D,IAAI,gBAAgB,IAAI,GAAG;AAAA,MACzB,MAAM,mBAAmB,KAAK,IAAI,GAAG,MAAM,mBAAmB,CAAC;AAAA,IACjE,EAAO;AAAA,MACL,MAAM,qBAAqB,KAAK,IAAI,GAAG,MAAM,qBAAqB,CAAC;AAAA;AAAA;AAAA;AAKzE,SAAS,qBAAqB,CAC5B,OACA,QACA,KACQ;AAAA,EACR,MAAM,SAAS,GAAG,aAAW;AAAA,EAC7B,MAAM,WAAW,MAAM,cAAc,IAAI,MAAM;AAAA,EAC/C,IAAI,UAAU;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,OAAO,KAAK,KAAK,MAAM,EAAE,SAAS,WAAW;AAAA,EAChE,MAAM,YAAY,GAAG,MAAM,mBAAmB,8BAAW,KAAK;AAAA,EAC9D,MAAM,cAAc,IAAI,QAAQ,SAAS;AAAA,EACzC,OAAO;AAAA;AAGF,SAAS,wBAAwB,CACtC,SACA,sBACA,mBACA,OACoB;AAAA,EACpB,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,YAAY,IAAI;AAAA,EAEtB,MAAM,cAAc,CAAC,WAAqC;AAAA,IACxD,MAAM,OAAO,MAAM,IAAI,MAAM;AAAA,IAC7B,IAAI,CAAC,QAAQ,KAAK,QAAQ;AAAA,MACxB,MAAM,IAAI,MAAM,eAAe,0BAA0B;AAAA,IAC3D;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,MAAM,kBAAkB,CACtB,YACA,iBACyB;AAAA,IACzB,MAAM,WAAW,UAAU,IAAI,UAAU;AAAA,IACzC,IAAI,CAAC,YAAY,SAAS,SAAS,cAAc;AAAA,MAC/C,MAAM,IAAI,MACR,mBAAmB,mCAAmC,eACxD;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,MAAM,qBAAqB,CAAC,eAA6B;AAAA,IACvD,MAAM,SAAS,UAAU,IAAI,UAAU;AAAA,IACvC,IAAI,CAAC,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,MAAM,IAAI,OAAO,MAAM;AAAA,IACpC,IAAI,MAAM;AAAA,MACR,IAAI,OAAO,SAAS,aAAa;AAAA,QAC/B,KAAK,UAAU,OAAO,UAAU;AAAA,MAClC,EAAO;AAAA,QACL,KAAK,WAAW,OAAO,UAAU;AAAA;AAAA,IAErC;AAAA,IAEA,IACE,OAAO,SAAS,aAChB,OAAO,SAAS,iBAChB,OAAO,SAAS,qBAChB;AAAA,MACA,WAAW,eAAe,OAAO,cAAc,OAAO,GAAG;AAAA,QACvD,YAAY;AAAA,MACd;AAAA,MACA,OAAO,cAAc,MAAM;AAAA,IAC7B;AAAA,IAEA,IAAI,OAAO,SAAS,eAAe,OAAO,eAAe;AAAA,MACvD,aAAa,OAAO,aAAa;AAAA,IACnC;AAAA,IACA,OAAO,aAAa;AAAA,IACpB,UAAU,OAAO,UAAU;AAAA;AAAA,EAG7B,MAAM,kBAAkB,OACtB,YACA,YACkB;AAAA,IAClB,MAAM,SAAS,UAAU,IAAI,UAAU;AAAA,IACvC,IAAI,CAAC,QAAQ;AAAA,MACX;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,OAAO,SAAS,QAAQ,OAAO;AAAA,cACrC;AAAA,MACA,mBAAmB,UAAU;AAAA;AAAA;AAAA,EAIjC,OAAO;AAAA,SACC,WAAU,GAAG;AAAA,MACjB,MAAM,SAAS,8BAAW;AAAA,MAC1B,MAAM,IAAI,QAAQ;AAAA,QAChB,YAAY,IAAI;AAAA,QAChB,WAAW,IAAI;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,SAEH,UAAS,CAAC,QAAQ;AAAA,MACtB,MAAM,OAAO,YAAY,MAAM;AAAA,MAC/B,KAAK,SAAS;AAAA,MACd,MAAM,cAAc;AAAA,QAClB,GAAG,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,MACV;AAAA,MACA,MAAM,QAAQ,WACZ,YAAY,IAAI,OAAO,eAAe;AAAA,QACpC,MAAM,gBAAgB,YAAY;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,OACF,CACH;AAAA,MACA,MAAM,OAAO,MAAM;AAAA;AAAA,SAEf,YAAW,CAAC,QAAQ;AAAA,MACxB,MAAM,OAAO,YAAY,MAAM;AAAA,MAC/B,OAAO;AAAA,QACL,UAAU,KAAK,WAAW;AAAA,QAC1B,SAAS,KAAK,UAAU;AAAA,QACxB,WAAW,QAAQ,YAAY;AAAA,MACjC;AAAA;AAAA,SAEI,eAAc,CAAC,QAAQ,MAAM,YAAY;AAAA,MAC7C,MAAM,OAAO,YAAY,MAAM;AAAA,MAC/B,MAAM,oBAAiD,EAAE,MAAM;AAAA,MAC/D,MAAM,eAAe,sBAAsB,OAAO,IAAI;AAAA,MACtD,QAAQ;AAAA,aACD,WAAW;AAAA,UACd,IAAI;AAAA,YACF,MAAM,UAAU,wBACd,YACA,sBACA,mBACA,KACF;AAAA,YACA,MAAM,WAAW,MAAM,QAAQ,cAAc,SAAS,iBAAiB;AAAA,YACvE,MAAM,aAAa,8BAAW;AAAA,YAC9B,UAAU,IAAI,YAAY;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,IAAI;AAAA,cACnB;AAAA,YACF,CAAC;AAAA,YACD,KAAK,WAAW,IAAI,UAAU;AAAA,YAC9B,OAAO;AAAA,YACP,OAAO,OAAO;AAAA,YACd,aAAa;AAAA,YACb,MAAM;AAAA;AAAA,QAEV;AAAA,aAEK,aAAa;AAAA,UAChB,IAAI;AAAA,YACF,MAAM,UAAU,0BACd,YACA,sBACA,mBACA,KACF;AAAA,YACA,MAAM,WAAW,MAAM,QAAQ,gBAAgB,SAAS,iBAAiB;AAAA,YACzE,MAAM,aAAa,8BAAW;AAAA,YAC9B,MAAM,SAAkC;AAAA,cACtC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,IAAI,MAAM,OAAO,2BAA2B,WAAW;AAAA,cACrD,OAAO,gBAAgB,WAAW,MAAM;AAAA,gBACjC,gBAAgB,YAAY;AAAA,kBAC/B,MAAM;AAAA,kBACN,QAAQ;AAAA,gBACV,CAAC;AAAA,iBACA,MAAM,OAAO,sBAAsB;AAAA,YACxC;AAAA,YACA,UAAU,IAAI,YAAY,MAAM;AAAA,YAChC,KAAK,UAAU,IAAI,UAAU;AAAA,YAC7B,OAAO;AAAA,YACP,OAAO,OAAO;AAAA,YACd,aAAa;AAAA,YACb,MAAM;AAAA;AAAA,QAEV;AAAA,aAEK,eAAe;AAAA,UAClB,IAAI;AAAA,YACF,MAAM,UAAU,wBACd,YACA,sBACA,mBACA,KACF;AAAA,YACA,MAAM,WAAW,MAAM,QAAQ,kBAAkB,SAAS,iBAAiB;AAAA,YAC3E,MAAM,aAAa,8BAAW;AAAA,YAC9B,UAAU,IAAI,YAAY;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,IAAI;AAAA,cACnB;AAAA,YACF,CAAC;AAAA,YACD,KAAK,WAAW,IAAI,UAAU;AAAA,YAC9B,OAAO;AAAA,YACP,OAAO,OAAO;AAAA,YACd,aAAa;AAAA,YACb,MAAM;AAAA;AAAA,QAEV;AAAA,aAEK,qBAAqB;AAAA,UACxB,IAAI;AAAA,YACF,MAAM,oBAAoB;AAAA,YAI1B,MAAM,WAAW,MAAM,QAAQ,qBAC7B,sBAAsB,OAAO,QAAQ,kBAAkB,GAAG,GAC1D,kCACE,kBAAkB,SAClB,sBACA,mBACA,KACF,GACA,iBACF;AAAA,YACA,MAAM,aAAa,8BAAW;AAAA,YAC9B,UAAU,IAAI,YAAY;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAe,IAAI;AAAA,cACnB;AAAA,YACF,CAAC;AAAA,YACD,KAAK,WAAW,IAAI,UAAU;AAAA,YAC9B,OAAO;AAAA,YACP,OAAO,OAAO;AAAA,YACd,aAAa;AAAA,YACb,MAAM;AAAA;AAAA,QAEV;AAAA;AAAA;AAAA,SAGE,aAAY,CAAC,MAAM,YAAY,QAAQ,MAAM;AAAA,MACjD,MAAM,SAAS,gBAAgB,YAAY,IAAI;AAAA,MAE/C,QAAQ;AAAA,aACD,WAAW;AAAA,UACd,MAAM,gBAAgB;AAAA,UACtB,QAAQ;AAAA,iBACD;AAAA,cACH,MAAM,cAAc,SAAS,KAC3B,KAAK,IACJ,KAAK,MACJ,SACJ;AAAA,cACA,MAAM,mBAAmB,cAAc,QAAQ;AAAA,cAC/C;AAAA,iBACG;AAAA,cACH,MAAM,gBAAgB,YAAa,KAAK,MAAqD,CAAC,CAAC;AAAA,cAC/F;AAAA,iBACG;AAAA,cACH,OAAO,MAAM,cAAc,SAAS,YAAY;AAAA,iBAC7C,aAAa;AAAA,cAChB,MAAM,iBAAiB,8BAAW;AAAA,cAClC,MAAM,cAAc,cAAc,SAAS,OAAO,GAChD,KAAK,IACL,+BACE,gCACA,KAAK,EACP,CACF;AAAA,cACA,cAAc,cAAc,IAAI,gBAAgB,WAAW;AAAA,cAC3D,OAAO;AAAA,YACT;AAAA,iBACK,cAAc;AAAA,cACjB,MAAM,iBAAiB,KAAK;AAAA,cAC5B,MAAM,cAAc,cAAc,cAAc,IAAI,cAAc;AAAA,cAClE,IAAI,aAAa;AAAA,gBACf,YAAY;AAAA,gBACZ,cAAc,cAAc,OAAO,cAAc;AAAA,cACnD;AAAA,cACA;AAAA,YACF;AAAA,iBACK;AAAA,cACH,MAAM,cAAc,SAAS,OAAO,KAClC,KAAK,IACL,KAAK,EACP;AAAA,cACA;AAAA;AAAA,cAEA,MAAM,IAAI,MAAM,sCAAsC,QAAQ;AAAA;AAAA,QAEpE;AAAA,aAEK,aAAa;AAAA,UAChB,MAAM,SAAU,OAAmC;AAAA,UACnD,QAAQ;AAAA,iBACD,UAAU;AAAA,cACb,MAAM,SAAS,MAAM,OAAO,OAC1B,UAAU,KAAK,EAA2B,GACxC,KAAK,MAGM,SACf;AAAA,cACA,OAAO;AAAA,YACT;AAAA,iBACK;AAAA,cACH,MAAM,OAAO,GAAG,KAAK,KAAK,EAAY;AAAA,cACtC;AAAA,iBACG;AAAA,cACH,MAAM,OAAO,GAAG,QACd,KAAK,IACL,KAAK,EACP;AAAA,cACA;AAAA,iBACG;AAAA,cACH,MAAM,OAAO,GAAG,MACd,KAAK,IACL,KAAK,IACL,KAAK,EACP;AAAA,cACA;AAAA,iBACG;AAAA,cACH,MAAM,OAAO,GAAG,MACd,KAAK,IACL,QAAQ,KAAK,EAAE,CACjB;AAAA,cACA;AAAA,iBACG;AAAA,cACH,MAAM,OAAO,OAAQ,KAAK,MAAwB,SAAS;AAAA,cAC3D;AAAA,iBACG;AAAA,cACH,MAAM,gBACJ,YACE,KAAK,MAAqD,CAAC,CAC/D;AAAA,cACA;AAAA,iBACG;AAAA,cACH,OAAO,MAAM,OAAO,YAAY;AAAA;AAAA,cAEhC,MAAM,IAAI,MAAM,yCAAyC,QAAQ;AAAA;AAAA,QAEvE;AAAA,aAEK,eAAe;AAAA,UAClB,MAAM,gBAAgB;AAAA,UACtB,MAAM,UAAU,cAAc;AAAA,UAC9B,QAAQ;AAAA,iBACD;AAAA,cACH,OAAO,MAAM,QAAQ,IACnB,KAAK,IACH,KAAK,MAGM,SACf;AAAA,iBACG;AAAA,cACH,MAAM,gBACJ,YACE,KAAK,MAAqD,CAAC,CAC/D;AAAA,cACA;AAAA,iBACG;AAAA,cACH,OAAO,MAAM,QAAQ,YAAY;AAAA,iBAC9B,WAAW;AAAA,cACd,MAAM,iBAAiB,8BAAW;AAAA,cAClC,MAAM,cAAc,QAAQ,KAAK,QAC/B,+BACE,kCACA,KAAK,EACP,CACF;AAAA,cACA,cAAc,cAAc,IAAI,gBAAgB,WAAW;AAAA,cAC3D,OAAO;AAAA,YACT;AAAA,iBACK,YAAY;AAAA,cACf,MAAM,iBAAiB,KAAK;AAAA,cAC5B,MAAM,cAAc,cAAc,cAAc,IAAI,cAAc;AAAA,cAClE,IAAI,aAAa;AAAA,gBACf,YAAY;AAAA,gBACZ,cAAc,cAAc,OAAO,cAAc;AAAA,cACnD;AAAA,cACA;AAAA,YACF;AAAA;AAAA,cAEE,MAAM,IAAI,MACR,2CAA2C,QAC7C;AAAA;AAAA,QAEN;AAAA,aAEK,qBAAqB;AAAA,UACxB,MAAM,gBAAgB;AAAA,UACtB,QAAQ;AAAA,iBACD;AAAA,cACH,MAAM,cAAc,SAAS,KAC3B,KAAK,IACH,KAAK,MAGM,SACf;AAAA,cACA,MAAM,mBAAmB,cAAc,QAAQ;AAAA,cAC/C;AAAA,iBACG;AAAA,cACH,OAAO,MAAM,cAAc,SAAS,SAClC,KAAK,IACH,KAAK,MAGM,SACf;AAAA,iBACG;AAAA,cACH,MAAM,gBACJ,YACE,KAAK,MAAqD,CAAC,CAC/D;AAAA,cACA;AAAA,iBACG;AAAA,cACH,OAAO,MAAM,cAAc,SAAS,YAAY;AAAA,iBAC7C,WAAW;AAAA,cACd,MAAM,iBAAiB,8BAAW;AAAA,cAClC,MAAM,cAAc,cAAc,SAAS,KAAK,QAC9C,+BACE,wCACA,KAAK,EACP,CACF;AAAA,cACA,cAAc,cAAc,IAAI,gBAAgB,WAAW;AAAA,cAC3D,OAAO;AAAA,YACT;AAAA,iBACK,YAAY;AAAA,cACf,MAAM,iBAAiB,KAAK;AAAA,cAC5B,MAAM,cACJ,cAAc,cAAc,IAAI,cAAc;AAAA,cAChD,IAAI,aAAa;AAAA,gBACf,YAAY;AAAA,gBACZ,cAAc,cAAc,OAAO,cAAc;AAAA,cACnD;AAAA,cACA;AAAA,YACF;AAAA,iBACK,aAAa;AAAA,cAChB,MAAM,iBAAiB,8BAAW;AAAA,cAClC,MAAM,cAAc,cAAc,SAAS,OAAO,GAChD,KAAK,IACL,+BACE,0CACA,KAAK,EACP,CACF;AAAA,cACA,cAAc,cAAc,IAAI,gBAAgB,WAAW;AAAA,cAC3D,OAAO;AAAA,YACT;AAAA,iBACK,cAAc;AAAA,cACjB,MAAM,iBAAiB,KAAK;AAAA,cAC5B,MAAM,cACJ,cAAc,cAAc,IAAI,cAAc;AAAA,cAChD,IAAI,aAAa;AAAA,gBACf,YAAY;AAAA,gBACZ,cAAc,cAAc,OAAO,cAAc;AAAA,cACnD;AAAA,cACA;AAAA,YACF;AAAA,iBACK;AAAA,cACH,MAAM,cAAc,SAAS,OAAO,KAClC,KAAK,IACL,KAAK,EACP;AAAA,cACA;AAAA;AAAA,cAEA,MAAM,IAAI,MACR,iDAAiD,QACnD;AAAA;AAAA,QAEN;AAAA;AAAA;AAAA,SAGE,iBAAgB,CAAC,QAAQ,KAAK,SAAS;AAAA,MAC3C,YAAY,MAAM;AAAA,MAClB,MAAM,YAAY,MAAM,cAAc,IAAI,GAAG,aAAW,KAAK;AAAA,MAC7D,IAAI,CAAC,WAAW;AAAA,QACd;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,iBAAiB,WAAW,OAAO;AAAA;AAAA,SAE7C,WAAU,CAAC,QAAQ;AAAA,MACvB,MAAM,cAAc,CAAC,GAAG,UAAU,KAAK,CAAC;AAAA,MACxC,MAAM,QAAQ,WACZ,YAAY,IAAI,OAAO,eAAe;AAAA,QACpC,MAAM,gBAAgB,YAAY;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ,UAAU;AAAA,QACpB,CAAC;AAAA,OACF,CACH;AAAA,MACA,MAAM,MAAM;AAAA;AAAA,EAEhB;AAAA;", | ||
| "debugId": "DE97CDB7C39B4BC664756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "5D380FC9E9D9ED4364756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -5,3 +5,3 @@ { | ||
| "sourcesContent": [ | ||
| "export { createIsolateHost } from \"./host/index.cjs\";\nexport { createModuleResolver } from \"./modules/index.cjs\";\nexport { createFileBindings } from \"./files/index.cjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.cjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostBrowserFactoryBindings,\n HostBrowserHandlerBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n NamespacedRuntime,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n NestedHostFetchPolicy,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n RunResults,\n ScriptRuntime,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.cjs\";\n" | ||
| "export { createIsolateHost } from \"./host/index.cjs\";\nexport { createModuleResolver } from \"./modules/index.cjs\";\nexport { createFileBindings } from \"./files/index.cjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.cjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostBrowserFactoryBindings,\n HostBrowserHandlerBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n NamespacedRuntime,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n NestedHostFetchPolicy,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntimeEvalOptions,\n RunResults,\n ScriptRuntime,\n TestRuntimeRunOptions,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.cjs\";\n" | ||
| ], | ||
@@ -8,0 +8,0 @@ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAkC,IAAlC;AACqC,IAArC;AACmC,IAAnC;AACiE,IAAjE;", |
| { | ||
| "name": "@ricsam/isolate", | ||
| "version": "0.1.22", | ||
| "version": "0.1.23", | ||
| "type": "commonjs" | ||
| } |
@@ -47,2 +47,3 @@ var __defProp = Object.defineProperty; | ||
| var import_client = require("../internal/client/index.cjs"); | ||
| var import_abort = require("./abort.cjs"); | ||
| function createStateError(state, reason) { | ||
@@ -82,2 +83,19 @@ if (state === "invalidated") { | ||
| options.testEvents.setEnsureUsable(ensureActive); | ||
| const hardDispose = async (reason) => { | ||
| if (state === "disposed" || state === "invalidated") { | ||
| release(); | ||
| return; | ||
| } | ||
| state = "disposed"; | ||
| await options?.abortBindings?.(reason); | ||
| try { | ||
| await import_abort.disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, options.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } finally { | ||
| release(); | ||
| } | ||
| }; | ||
| return { | ||
@@ -88,8 +106,16 @@ async eval(code, evalOptions) { | ||
| try { | ||
| await runtime.eval(code, { | ||
| filename: evalOptions?.filename, | ||
| executionTimeout: evalOptions?.executionTimeout | ||
| await import_abort.runAbortableOperation(async () => { | ||
| await runtime.eval(code, { | ||
| filename: evalOptions?.filename, | ||
| executionTimeout: evalOptions?.executionTimeout | ||
| }); | ||
| }, { | ||
| signal: evalOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| if (!import_abort.isAbortError(error) && import_abort.isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -104,11 +130,19 @@ } finally { | ||
| try { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| return await import_abort.runAbortableOperation(async () => { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| }, { | ||
| signal: runOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| if (!import_abort.isAbortError(error) && import_abort.isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -145,7 +179,7 @@ } finally { | ||
| try { | ||
| options?.abortBindings?.(disposeOptions?.reason); | ||
| await options?.abortBindings?.(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| throw error; | ||
@@ -158,3 +192,3 @@ } | ||
| }, | ||
| invalidate(reason) { | ||
| async invalidate(reason) { | ||
| if (state === "disposed" || state === "invalidated") { | ||
@@ -167,3 +201,3 @@ release(); | ||
| diagnostics.lifecycleState = "idle"; | ||
| options?.abortBindings?.(reason); | ||
| await options?.abortBindings?.(reason); | ||
| release(); | ||
@@ -191,2 +225,2 @@ }, | ||
| //# debugId=B2B656F046B5119964756E2164756E21 | ||
| //# debugId=094030D30CA1003264756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type { TestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.cjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): void;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void;\n onRelease?: () => void;\n testEvents: TestEventSubscriptions;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.testEvents.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n options.testEvents.setEnsureUsable(ensureActive);\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n test: options.testEvents.api,\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type { TestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.cjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.cjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): Promise<void>;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void | Promise<void>;\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n onRelease?: () => void;\n testEvents: TestEventSubscriptions;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.testEvents.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n options.testEvents.setEnsureUsable(ensureActive);\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"disposed\";\n await options?.abortBindings?.(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n options.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n } finally {\n release();\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runAbortableOperation(async () => {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n }, {\n signal: evalOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n return await runAbortableOperation(async () => {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n }, {\n signal: runOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n await options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n async invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n await options?.abortBindings?.(reason);\n release();\n },\n test: options.testEvents.api,\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "B2B656F046B5119964756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "094030D30CA1003264756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -47,14 +47,47 @@ var __defProp = Object.defineProperty; | ||
| var import_client = require("../internal/client/index.cjs"); | ||
| var import_abort = require("./abort.cjs"); | ||
| function createDisposedScriptRuntimeError() { | ||
| return new Error("Script runtime has already been disposed."); | ||
| } | ||
| function createScriptRuntimeAdapter(runtime, diagnostics, options) { | ||
| let isDisposed = false; | ||
| const ensureActive = () => { | ||
| if (isDisposed) { | ||
| throw createDisposedScriptRuntimeError(); | ||
| } | ||
| }; | ||
| const hardDispose = async (reason) => { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| await options?.onBeforeDispose?.(reason); | ||
| try { | ||
| await import_abort.disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, options?.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } | ||
| }; | ||
| return { | ||
| async eval(code, evalOptions) { | ||
| ensureActive(); | ||
| const normalizedOptions = typeof evalOptions === "string" ? { filename: evalOptions } : evalOptions; | ||
| diagnostics.lifecycleState = "active"; | ||
| try { | ||
| await runtime.eval(code, { | ||
| filename: normalizedOptions?.filename, | ||
| executionTimeout: normalizedOptions?.executionTimeout | ||
| await import_abort.runAbortableOperation(async () => { | ||
| await runtime.eval(code, { | ||
| filename: normalizedOptions?.filename, | ||
| executionTimeout: normalizedOptions?.executionTimeout | ||
| }); | ||
| }, { | ||
| signal: normalizedOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| if (!import_abort.isAbortError(error) && import_abort.isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -66,9 +99,13 @@ } finally { | ||
| async dispose(disposeOptions) { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| diagnostics.lifecycleState = "disposing"; | ||
| try { | ||
| options?.onBeforeDispose?.(disposeOptions?.reason); | ||
| await options?.onBeforeDispose?.(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| throw error; | ||
@@ -81,2 +118,3 @@ } | ||
| diagnostics: async () => { | ||
| ensureActive(); | ||
| const runtimeDiagnostics = { | ||
@@ -94,4 +132,8 @@ ...diagnostics, | ||
| events: { | ||
| on: (event, handler) => runtime.on(event, handler), | ||
| on: (event, handler) => { | ||
| ensureActive(); | ||
| return runtime.on(event, handler); | ||
| }, | ||
| emit: async (event, payload) => { | ||
| ensureActive(); | ||
| runtime.emit(event, payload); | ||
@@ -103,2 +145,2 @@ } | ||
| //# debugId=2443EB52C7D4BB8864756E2164756E21 | ||
| //# debugId=772E07C2F6A868CB64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type { ScriptRuntime } from \"../types.cjs\";\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n onBeforeDispose?: (reason?: string) => void;\n },\n): ScriptRuntime {\n return {\n async eval(code, evalOptions) {\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n events: {\n on: (event, handler) => runtime.on(event, handler),\n emit: async (event, payload) => {\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.cjs\";\nimport type { ScriptRuntime } from \"../types.cjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.cjs\";\n\nfunction createDisposedScriptRuntimeError(): Error {\n return new Error(\"Script runtime has already been disposed.\");\n}\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n onBeforeDispose?: (reason?: string) => void | Promise<void>;\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n },\n): ScriptRuntime {\n let isDisposed = false;\n\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedScriptRuntimeError();\n }\n };\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n await options?.onBeforeDispose?.(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n options?.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runAbortableOperation(async () => {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n }, {\n signal: normalizedOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n await options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n events: {\n on: (event, handler) => {\n ensureActive();\n return runtime.on(event, handler);\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAHP;AAIyD,IAAzD;AAGO,SAAS,0BAA0B,CACxC,SACA,aACA,SAIe;AAAA,EACf,OAAO;AAAA,SACC,KAAI,CAAC,MAAM,aAAa;AAAA,MAC5B,MAAM,oBAAoB,OAAO,gBAAgB,WAC7C,EAAE,UAAU,YAAY,IACxB;AAAA,MACJ,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,mBAAmB;AAAA,UAC7B,kBAAkB,mBAAmB;AAAA,QACvC,CAAC;AAAA,QACD,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,SAAS,kBAAkB,gBAAgB,MAAM;AAAA,QACjD,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,mCAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,aAAa,YAAY;AAAA,MACvB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,SAAS,aAC3B,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,SAAS,aAC9B,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,4CAAyB,eAAe,gBAAgB,IACxD;AAAA,MACN;AAAA;AAAA,IAEF,QAAQ;AAAA,MACN,IAAI,CAAC,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;AAAA,MACjD,MAAM,OAAO,OAAO,YAAY;AAAA,QAC9B,QAAQ,KAAK,OAAO,OAAO;AAAA;AAAA,IAE/B;AAAA,EACF;AAAA;", | ||
| "debugId": "2443EB52C7D4BB8864756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "772E07C2F6A868CB64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -49,6 +49,7 @@ var __defProp = Object.defineProperty; | ||
| var import_test_event_subscriptions = require("./test-event-subscriptions.cjs"); | ||
| var import_abort = require("./abort.cjs"); | ||
| function createDisposedTestRuntimeError() { | ||
| return new Error("Test runtime has already been disposed."); | ||
| } | ||
| async function createTestRuntimeAdapter(createRuntime, options, adapterOptions) { | ||
| async function createTestRuntimeAdapter(createRuntime, options, adapterOptions, lifecycleOptions) { | ||
| const diagnostics = import_diagnostics.createRuntimeDiagnostics(); | ||
@@ -76,2 +77,18 @@ const testEvents = import_test_event_subscriptions.createTestEventSubscriptions(); | ||
| testEvents.setEnsureUsable(ensureActive); | ||
| const hardDispose = async (reason) => { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| await bindingsAdapter.abort(reason); | ||
| try { | ||
| await import_abort.disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, lifecycleOptions?.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } finally { | ||
| testEvents.clear(); | ||
| } | ||
| }; | ||
| return { | ||
@@ -82,11 +99,19 @@ async run(code, runOptions) { | ||
| try { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| return await import_abort.runAbortableOperation(async () => { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| }, { | ||
| signal: runOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| if (!import_abort.isAbortError(error) && import_abort.isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -123,7 +148,7 @@ } finally { | ||
| try { | ||
| bindingsAdapter.abort(disposeOptions?.reason); | ||
| await bindingsAdapter.abort(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!import_client.isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = import_abort.getErrorMessage(error); | ||
| throw error; | ||
@@ -140,2 +165,2 @@ } | ||
| //# debugId=3C3652D67988D41064756E2164756E21 | ||
| //# debugId=E30EBFEDD258BEB964756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.cjs\";\nimport { createTestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.cjs\";\n\nfunction createDisposedTestRuntimeError(): Error {\n return new Error(\"Test runtime has already been disposed.\");\n}\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = options.key ?? \"test-runtime\";\n let isDisposed = false;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: {\n onEvent: (event) => testEvents.emit(event),\n },\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedTestRuntimeError();\n }\n };\n testEvents.setEnsureUsable(ensureActive);\n\n return {\n async run(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n testEvents.clear();\n return;\n }\n\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n testEvents.clear();\n }\n },\n test: testEvents.api,\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.cjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.cjs\";\nimport { createTestEventSubscriptions } from \"./test-event-subscriptions.cjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.cjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.cjs\";\n\nfunction createDisposedTestRuntimeError(): Error {\n return new Error(\"Test runtime has already been disposed.\");\n}\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n lifecycleOptions?: {\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n },\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = options.key ?? \"test-runtime\";\n let isDisposed = false;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: {\n onEvent: (event) => testEvents.emit(event),\n },\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedTestRuntimeError();\n }\n };\n testEvents.setEnsureUsable(ensureActive);\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n await bindingsAdapter.abort(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n lifecycleOptions?.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n } finally {\n testEvents.clear();\n }\n };\n\n return {\n async run(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n return await runAbortableOperation(async () => {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n }, {\n signal: runOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n testEvents.clear();\n return;\n }\n\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n await bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n testEvents.clear();\n }\n },\n test: testEvents.api,\n };\n}\n" | ||
| ], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAHP;AAOO,IAHP;AAKqC,IAArC;AAC6C,IAA7C;AAOA,SAAS,8BAA8B,GAAU;AAAA,EAC/C,OAAO,IAAI,MAAM,yCAAyC;AAAA;AAG5D,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,4CAAyB;AAAA,EAC7C,MAAM,aAAa,6DAA6B;AAAA,EAChD,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,IAAI,aAAa;AAAA,EACjB,MAAM,kBAAkB,qDACtB,QAAQ,UACR,MAAM,WACN,aACA,cACF;AAAA,EACA,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB;AAAA,MACf,SAAS,CAAC,UAAU,WAAW,KAAK,KAAK;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EACJ,MAAM,eAAe,MAAY;AAAA,IAC/B,IAAI,YAAY;AAAA,MACd,MAAM,+BAA+B;AAAA,IACvC;AAAA;AAAA,EAEF,WAAW,gBAAgB,YAAY;AAAA,EAEvC,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,aAAa;AAAA,MACb,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,4CAAyB,eAAe,gBAAgB,IACxD;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA;AAAA,SAEI,QAAO,CAAC,gBAAgB;AAAA,MAC5B,IAAI,YAAY;AAAA,QACd,WAAW,MAAM;AAAA,QACjB;AAAA,MACF;AAAA,MAEA,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,QAC5C,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,mCAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA,QAC7B,WAAW,MAAM;AAAA;AAAA;AAAA,IAGrB,MAAM,WAAW;AAAA,EACnB;AAAA;", | ||
| "debugId": "3C3652D67988D41064756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "E30EBFEDD258BEB964756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -127,3 +127,3 @@ var __defProp = Object.defineProperty; | ||
| try { | ||
| bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : "AppServer.reload()"); | ||
| await bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : "AppServer.reload()"); | ||
| await server.reload(reason); | ||
@@ -140,5 +140,5 @@ runtimeId = server.getRuntime()?.id ?? options.key; | ||
| const hardDisposeReason = disposeOptions?.reason ? `AppServer.dispose(hard): ${disposeOptions.reason}` : "AppServer.dispose(hard)"; | ||
| bindingsAdapter.reset(hardDisposeReason); | ||
| await bindingsAdapter.reset(hardDisposeReason); | ||
| await server.reload(hardDisposeReason); | ||
| bindingsAdapter.abort(hardDisposeReason); | ||
| await bindingsAdapter.abort(hardDisposeReason); | ||
| await server.close(hardDisposeReason); | ||
@@ -148,3 +148,3 @@ return; | ||
| const disposeReason = disposeOptions?.reason ? `AppServer.dispose(): ${disposeOptions.reason}` : "AppServer.dispose()"; | ||
| bindingsAdapter.abort(disposeReason); | ||
| await bindingsAdapter.abort(disposeReason); | ||
| await server.close(disposeReason); | ||
@@ -170,2 +170,2 @@ } finally { | ||
| //# debugId=0D5491EB1041EFC364756E2164756E21 | ||
| //# debugId=1EC5D6313DB7896464756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import { IsolateServer } from \"../internal/server/index.cjs\";\nimport type { DaemonConnection } from \"../internal/client/index.cjs\";\nimport {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport { withRequestContext } from \"../bridge/request-context.cjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.cjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n };\n const collectedData = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n };\n}\n" | ||
| "import { IsolateServer } from \"../internal/server/index.cjs\";\nimport type { DaemonConnection } from \"../internal/client/index.cjs\";\nimport {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.cjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.cjs\";\nimport { withRequestContext } from \"../bridge/request-context.cjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.cjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n await bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n await bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n await bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n await bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n };\n const collectedData = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n };\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "0D5491EB1041EFC364756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "1EC5D6313DB7896464756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -273,9 +273,14 @@ // src/bridge/runtime-bindings.ts | ||
| }, | ||
| abort: (reason) => { | ||
| abort: async (reason) => { | ||
| contextFactory.abort(reason); | ||
| if (options?.nestedHost?.disposeAll) { | ||
| options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime disposed")); | ||
| await options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime disposed")); | ||
| } | ||
| }, | ||
| reset: contextFactory.reset | ||
| reset: async (reason) => { | ||
| contextFactory.reset(reason); | ||
| if (options?.nestedHost?.disposeAll) { | ||
| await options.nestedHost.disposeAll(reason instanceof Error ? reason.message : String(reason ?? "Runtime reset")); | ||
| } | ||
| } | ||
| }; | ||
@@ -434,2 +439,3 @@ } | ||
| "__isolateHost_callResource", | ||
| "__isolateHost_abortResourceCall", | ||
| "__isolateHost_drainCallbacks" | ||
@@ -496,2 +502,11 @@ ]; | ||
| }; | ||
| definitions.__isolateHost_abortResourceCall = { | ||
| type: "async", | ||
| fn: async (...args) => { | ||
| const operationId = args[0]; | ||
| const reason = typeof args[1] === "string" && args[1].length > 0 ? args[1] : undefined; | ||
| const context = createHostCallContext(`nestedHost:abortResourceCall:${crypto.randomUUID()}`); | ||
| await nestedHost.abortResourceCall(operationId, reason, context); | ||
| } | ||
| }; | ||
| definitions.__isolateHost_drainCallbacks = { | ||
@@ -516,2 +531,2 @@ type: "async", | ||
| //# debugId=9D37D6FB5BF109CE64756E2164756E21 | ||
| //# debugId=BF9DFBBA69C3DB4364756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.mjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.mjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.mjs\";\nimport { getRequestContext } from \"./request-context.mjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n ModuleResolveResult,\n ModuleResolver,\n ModuleSource,\n ToolHandler,\n} from \"../types.mjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.mjs\";\n\nexport interface RuntimeBindingsAdapter {\n runtimeOptions: RuntimeOptions;\n abort(reason?: unknown): void;\n reset(reason?: unknown): void;\n}\n\nexport interface RuntimeBindingsAdapterOptions {\n nestedHost?: NestedHostBindings;\n}\n\ninterface ResponseDescriptor {\n __type: \"ResponseRef\";\n status: number;\n statusText: string;\n headers: Array<[string, string]>;\n body?: number[] | null;\n}\n\ninterface AsyncIteratorMarkedHandler {\n __isolateCallbackKind?: \"asyncGenerator\";\n}\n\ninterface ProxyBackedHandler {\n __isolateCallbackProxy?: unknown;\n}\n\nfunction copyIsolateCallbackMetadata<T extends (...args: unknown[]) => unknown>(\n source: ToolHandler,\n target: T,\n): T {\n if ((source as ProxyBackedHandler).__isolateCallbackProxy === true) {\n Object.defineProperty(target, \"__isolateCallbackProxy\", {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n });\n }\n\n if (\n (source as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n ) {\n Object.defineProperty(target, \"__isolateCallbackKind\", {\n configurable: true,\n enumerable: false,\n value: \"asyncGenerator\",\n writable: false,\n });\n }\n\n return target;\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.console.onEntry\",\n bindings.console?.onEntry,\n entry,\n context,\n );\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: (reason?: unknown) => {\n contextFactory.abort(reason);\n if (options?.nestedHost?.disposeAll) {\n void options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime disposed\"),\n );\n }\n },\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 const fn = copyIsolateCallbackMetadata(\n handler,\n (...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 definitions[name] = {\n type: \"asyncIterator\",\n fn,\n };\n continue;\n }\n\n const fn = copyIsolateCallbackMetadata(\n handler,\n 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 definitions[name] = {\n type: \"async\",\n fn,\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" | ||
| "import path from \"node:path\";\nimport type { RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.mjs\";\nimport type { ModuleLoaderCallback } from \"../internal/protocol/index.mjs\";\nimport { createPlaywrightFactoryHandler } from \"../internal/playwright/client.mjs\";\nimport { getRequestContext } from \"./request-context.mjs\";\nimport {\n SANDBOX_ISOLATE_MODULE_SOURCE,\n SANDBOX_ISOLATE_MODULE_SPECIFIER,\n type NestedHostBindings,\n type NestedResourceKind,\n} from \"./sandbox-isolate.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n ModuleResolveResult,\n ModuleResolver,\n ModuleSource,\n ToolHandler,\n} from \"../types.mjs\";\nimport type { MutableRuntimeDiagnostics } from \"./diagnostics.mjs\";\n\nexport interface RuntimeBindingsAdapter {\n runtimeOptions: RuntimeOptions;\n abort(reason?: unknown): Promise<void>;\n reset(reason?: unknown): Promise<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\ninterface ProxyBackedHandler {\n __isolateCallbackProxy?: unknown;\n}\n\nfunction copyIsolateCallbackMetadata<T extends (...args: unknown[]) => unknown>(\n source: ToolHandler,\n target: T,\n): T {\n if ((source as ProxyBackedHandler).__isolateCallbackProxy === true) {\n Object.defineProperty(target, \"__isolateCallbackProxy\", {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n });\n }\n\n if (\n (source as AsyncIteratorMarkedHandler).__isolateCallbackKind ===\n \"asyncGenerator\"\n ) {\n Object.defineProperty(target, \"__isolateCallbackKind\", {\n configurable: true,\n enumerable: false,\n value: \"asyncGenerator\",\n writable: false,\n });\n }\n\n return target;\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.console.onEntry\",\n bindings.console?.onEntry,\n entry,\n context,\n );\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: async (reason?: unknown) => {\n contextFactory.abort(reason);\n if (options?.nestedHost?.disposeAll) {\n await options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime disposed\"),\n );\n }\n },\n reset: async (reason?: unknown) => {\n contextFactory.reset(reason);\n if (options?.nestedHost?.disposeAll) {\n await options.nestedHost.disposeAll(\n reason instanceof Error ? reason.message : String(reason ?? \"Runtime reset\"),\n );\n }\n },\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 invokeBestEffortEventHandlerNonReentrant(\n \"bindings.browser.onEvent\",\n browser.onEvent,\n event,\n context,\n );\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 const fn = copyIsolateCallbackMetadata(\n handler,\n (...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 definitions[name] = {\n type: \"asyncIterator\",\n fn,\n };\n continue;\n }\n\n const fn = copyIsolateCallbackMetadata(\n handler,\n 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 definitions[name] = {\n type: \"async\",\n fn,\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_abortResourceCall\",\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_abortResourceCall = {\n type: \"async\",\n fn: async (...args: unknown[]) => {\n const operationId = args[0] as string;\n const reason =\n typeof args[1] === \"string\" && args[1].length > 0\n ? args[1]\n : undefined;\n const context = createHostCallContext(\n `nestedHost:abortResourceCall:${crypto.randomUUID()}`,\n );\n await nestedHost.abortResourceCall(operationId, reason, context);\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" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9D37D6FB5BF109CE64756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "BF9DFBBA69C3DB4364756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -73,2 +73,66 @@ // src/bridge/sandbox-isolate.ts | ||
| let __abortOperationIndex = 0; | ||
| function __createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error = new Error(reason.message); | ||
| error.name = "AbortError"; | ||
| error.cause = reason; | ||
| return error; | ||
| } | ||
| const error = new Error( | ||
| typeof reason === "string" && reason.length > 0 | ||
| ? reason | ||
| : "The operation was aborted.", | ||
| ); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function __abortReasonMessage(reason) { | ||
| if (reason instanceof Error) { | ||
| return reason.message; | ||
| } | ||
| return typeof reason === "string" ? reason : undefined; | ||
| } | ||
| function __prepareAbortableOptions(options, fallbackSignal) { | ||
| const normalized = options ? { ...options } : {}; | ||
| const signal = normalized.signal ?? fallbackSignal; | ||
| delete normalized.signal; | ||
| if (!signal) { | ||
| return { | ||
| options: Object.keys(normalized).length > 0 ? normalized : null, | ||
| cleanup() {}, | ||
| }; | ||
| } | ||
| if (signal.aborted) { | ||
| throw __createAbortError(signal.reason); | ||
| } | ||
| const operationId = "nested-abort:" + (++__abortOperationIndex) + ":" + Math.random().toString(36).slice(2); | ||
| normalized.__isolateAbortOperationId = operationId; | ||
| const onAbort = () => { | ||
| void __isolateHost_abortResourceCall( | ||
| operationId, | ||
| __abortReasonMessage(signal.reason), | ||
| ).catch(() => {}); | ||
| }; | ||
| signal.addEventListener("abort", onAbort, { once: true }); | ||
| return { | ||
| options: normalized, | ||
| cleanup() { | ||
| signal.removeEventListener("abort", onAbort); | ||
| }, | ||
| }; | ||
| } | ||
| function __requestSignal(requestLike) { | ||
| return requestLike instanceof Request ? requestLike.signal : undefined; | ||
| } | ||
| async function __waitForCallbackTurn() { | ||
@@ -100,8 +164,13 @@ await Promise.resolve(); | ||
| async eval(code, options) { | ||
| await __isolateHost_callResource( | ||
| "runtime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, __normalizeEvalOptions(options)], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options)); | ||
| try { | ||
| await __isolateHost_callResource( | ||
| "runtime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -169,16 +238,26 @@ } | ||
| const serializedRequest = await __serializeRequest(request); | ||
| const result = await __isolateHost_callResource( | ||
| "appServer", | ||
| this.#resourceId, | ||
| "handle", | ||
| [ | ||
| serializedRequest, | ||
| options | ||
| ? { | ||
| requestId: options.requestId, | ||
| metadata: options.metadata, | ||
| } | ||
| : null, | ||
| const abortable = __prepareAbortableOptions( | ||
| options | ||
| ? { | ||
| requestId: options.requestId, | ||
| metadata: options.metadata, | ||
| signal: options.signal, | ||
| } | ||
| : null, | ||
| __requestSignal(request), | ||
| ); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "appServer", | ||
| this.#resourceId, | ||
| "handle", | ||
| [ | ||
| serializedRequest, | ||
| abortable.options, | ||
| ], | ||
| ); | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -265,8 +344,14 @@ return result; | ||
| async run(code, options) { | ||
| const result = await __isolateHost_callResource( | ||
| "testRuntime", | ||
| this.#resourceId, | ||
| "run", | ||
| [code, options ?? null], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(options ?? null); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "testRuntime", | ||
| this.#resourceId, | ||
| "run", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -325,8 +410,13 @@ return result; | ||
| async eval(code, options) { | ||
| await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, __normalizeEvalOptions(options)], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options)); | ||
| try { | ||
| await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "eval", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -336,8 +426,14 @@ } | ||
| async runTests(code, options) { | ||
| const result = await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "runTests", | ||
| [code, options ?? null], | ||
| ); | ||
| const abortable = __prepareAbortableOptions(options ?? null); | ||
| let result; | ||
| try { | ||
| result = await __isolateHost_callResource( | ||
| "namespacedRuntime", | ||
| this.#resourceId, | ||
| "runTests", | ||
| [code, abortable.options], | ||
| ); | ||
| } finally { | ||
| abortable.cleanup(); | ||
| } | ||
| await __waitForNestedCallbacks(); | ||
@@ -486,2 +582,2 @@ return result; | ||
| //# debugId=9CE3670C55EE670464756E2164756E21 | ||
| //# debugId=CD91AA35C55C0BD464756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from \"../internal/browser-source.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostCallContext,\n} from \"../types.mjs\";\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 disposeAll?(reason?: string): Promise<void>;\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" | ||
| "import { ISOLATE_BROWSER_DESCRIPTOR_PROPERTY } from \"../internal/browser-source.mjs\";\nimport type {\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostCallContext,\n} from \"../types.mjs\";\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 abortResourceCall(\n operationId: string,\n reason: string | undefined,\n context: HostCallContext,\n ): Promise<void>;\n disposeAll?(reason?: string): Promise<void>;\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\nlet __abortOperationIndex = 0;\n\nfunction __createAbortError(reason) {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n error.cause = reason;\n return error;\n }\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction __abortReasonMessage(reason) {\n if (reason instanceof Error) {\n return reason.message;\n }\n return typeof reason === \"string\" ? reason : undefined;\n}\n\nfunction __prepareAbortableOptions(options, fallbackSignal) {\n const normalized = options ? { ...options } : {};\n const signal = normalized.signal ?? fallbackSignal;\n delete normalized.signal;\n\n if (!signal) {\n return {\n options: Object.keys(normalized).length > 0 ? normalized : null,\n cleanup() {},\n };\n }\n\n if (signal.aborted) {\n throw __createAbortError(signal.reason);\n }\n\n const operationId = \"nested-abort:\" + (++__abortOperationIndex) + \":\" + Math.random().toString(36).slice(2);\n normalized.__isolateAbortOperationId = operationId;\n\n const onAbort = () => {\n void __isolateHost_abortResourceCall(\n operationId,\n __abortReasonMessage(signal.reason),\n ).catch(() => {});\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n return {\n options: normalized,\n cleanup() {\n signal.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n\nfunction __requestSignal(requestLike) {\n return requestLike instanceof Request ? requestLike.signal : undefined;\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 const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options));\n try {\n await __isolateHost_callResource(\n \"runtime\",\n this.#resourceId,\n \"eval\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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 abortable = __prepareAbortableOptions(\n options\n ? {\n requestId: options.requestId,\n metadata: options.metadata,\n signal: options.signal,\n }\n : null,\n __requestSignal(request),\n );\n let result;\n try {\n result = await __isolateHost_callResource(\n \"appServer\",\n this.#resourceId,\n \"handle\",\n [\n serializedRequest,\n abortable.options,\n ],\n );\n } finally {\n abortable.cleanup();\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 abortable = __prepareAbortableOptions(options ?? null);\n let result;\n try {\n result = await __isolateHost_callResource(\n \"testRuntime\",\n this.#resourceId,\n \"run\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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 const abortable = __prepareAbortableOptions(__normalizeEvalOptions(options));\n try {\n await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"eval\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\n }\n await __waitForNestedCallbacks();\n }\n\n async runTests(code, options) {\n const abortable = __prepareAbortableOptions(options ?? null);\n let result;\n try {\n result = await __isolateHost_callResource(\n \"namespacedRuntime\",\n this.#resourceId,\n \"runTests\",\n [code, abortable.options],\n );\n } finally {\n abortable.cleanup();\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" | ||
| ], | ||
| "mappings": ";AAAA;AASO,IAAM,mCAAmC;AA4CzC,IAAM,gCAAgC;AAAA,6CACA,KAAK,UAAU,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;", | ||
| "debugId": "9CE3670C55EE670464756E2164756E21", | ||
| "mappings": ";AAAA;AASO,IAAM,mCAAmC;AAiDzC,IAAM,gCAAgC;AAAA,6CACA,KAAK,UAAU,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;", | ||
| "debugId": "CD91AA35C55C0BD464756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -82,3 +82,3 @@ // src/host/create-isolate-host.ts | ||
| if (runtime) { | ||
| runtime.invalidate(options?.reason ? `Namespace "${key}" was disposed: ${options.reason}` : `Namespace "${key}" was disposed.`); | ||
| await runtime.invalidate(options?.reason ? `Namespace "${key}" was disposed: ${options.reason}` : `Namespace "${key}" was disposed.`); | ||
| this.namespacedRuntimes.delete(key); | ||
@@ -100,3 +100,3 @@ } | ||
| for (const [key, runtime] of this.namespacedRuntimes) { | ||
| runtime.invalidate(`Host closed while namespace "${key}" was active.`); | ||
| await runtime.invalidate(`Host closed while namespace "${key}" was active.`); | ||
| } | ||
@@ -126,2 +126,28 @@ this.namespacedRuntimes.clear(); | ||
| } | ||
| async forceCloseDaemon() { | ||
| this.namespacedRuntimes.clear(); | ||
| this.pendingNamespacedKeys.clear(); | ||
| if (this.connection) { | ||
| await this.connection.close().catch(() => {}); | ||
| } | ||
| this.connection = null; | ||
| this.connectionPromise = null; | ||
| if (!this.daemonProcess) { | ||
| return; | ||
| } | ||
| const process2 = this.daemonProcess; | ||
| this.daemonProcess = null; | ||
| process2.stdout?.removeAllListeners("data"); | ||
| process2.stderr?.removeAllListeners("data"); | ||
| process2.stdout?.destroy(); | ||
| process2.stderr?.destroy(); | ||
| await new Promise((resolve) => { | ||
| const timeout = setTimeout(resolve, 1000); | ||
| process2.once("exit", () => { | ||
| clearTimeout(timeout); | ||
| resolve(); | ||
| }); | ||
| process2.kill("SIGKILL"); | ||
| }); | ||
| } | ||
| async createRuntimeInternal(options, nestedContext) { | ||
@@ -146,3 +172,6 @@ const diagnostics = createRuntimeDiagnostics(); | ||
| hasBrowser: Boolean(options.bindings.browser), | ||
| onBeforeDispose: (reason) => bindingsAdapter.abort(reason) | ||
| onBeforeDispose: (reason) => bindingsAdapter.abort(reason), | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| } | ||
| }); | ||
@@ -158,2 +187,6 @@ this.runtimes.add(adapter); | ||
| }, nestedContext) | ||
| }, { | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| } | ||
| }); | ||
@@ -193,2 +226,5 @@ this.runtimes.add(testRuntime); | ||
| abortBindings: (reason) => bindingsAdapter.abort(reason), | ||
| onUnresponsiveDispose: async () => { | ||
| await this.forceCloseDaemon(); | ||
| }, | ||
| testEvents, | ||
@@ -308,2 +344,2 @@ onRelease: () => { | ||
| //# debugId=C7BD145D3595005E64756E2164756E21 | ||
| //# debugId=A6EAD1F95824828B64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.mjs\";\nimport {\n createBrowserSourceFromBindings,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.mjs\";\nimport { createNamespacedRuntimeAdapter } from \"../runtime/namespaced-runtime.mjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.mjs\";\nimport { createTestRuntimeAdapter } from \"../runtime/test-runtime.mjs\";\nimport { createTestEventSubscriptions } from \"../runtime/test-event-subscriptions.mjs\";\nimport { createAppServerAdapter } from \"../server/app-server.mjs\";\nimport {\n createNestedHostBindings,\n createNestedHostResourceGroup,\n type NestedHostControllerContext,\n} from \"./nested-host-controller.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n IsolateHost,\n NamespacedRuntime,\n NestedHostPolicy,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\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 nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 nestedContext?: NestedHostControllerContext,\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 options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.runtimes.add(testRuntime);\n return testRuntime;\n }\n\n private async createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 nestedContext?: NestedHostControllerContext,\n ): Promise<AppServer> {\n const server = await createAppServerAdapter(\n () => this.getConnection(),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.servers.add(server);\n return server;\n }\n\n private createNestedBindings(\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: false | NestedHostPolicy | undefined,\n parentLimits: { memoryLimitMB?: number; executionTimeout?: number },\n nestedContext?: NestedHostControllerContext,\n ) {\n if (policy === false) {\n return undefined;\n }\n const group = nestedContext?.group ??\n createNestedHostResourceGroup(policy, parentLimits);\n return createNestedHostBindings(\n {\n createRuntime: async (options, context) =>\n await this.createRuntimeInternal(options, context),\n createAppServer: async (options, context) =>\n await this.createAppServerInternal(options, context),\n createTestRuntime: async (options, context) =>\n await this.createTestRuntimeInternal(options, context),\n getNamespacedRuntime: async (key, options, context) =>\n await this.createNamespacedRuntimeInternal(key, options, context),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, options),\n isConnected: () => this.connection?.isConnected() ?? false,\n },\n defaultBrowserSource,\n inheritedBindings,\n group,\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() || this.connection?.isRecovering()) {\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" | ||
| "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { connect, type DaemonConnection, type RemoteRuntime, type RuntimeOptions } from \"../internal/client/index.mjs\";\nimport {\n createBrowserSourceFromBindings,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } from \"../bridge/runtime-bindings.mjs\";\nimport { createNamespacedRuntimeAdapter } from \"../runtime/namespaced-runtime.mjs\";\nimport { createScriptRuntimeAdapter } from \"../runtime/script-runtime.mjs\";\nimport { createTestRuntimeAdapter } from \"../runtime/test-runtime.mjs\";\nimport { createTestEventSubscriptions } from \"../runtime/test-event-subscriptions.mjs\";\nimport { createAppServerAdapter } from \"../server/app-server.mjs\";\nimport {\n createNestedHostBindings,\n createNestedHostResourceGroup,\n type NestedHostControllerContext,\n} from \"./nested-host-controller.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n IsolateHost,\n NamespacedRuntime,\n NestedHostPolicy,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\nfunction resolveDefaultDaemonEntrypoint(): string | null {\n const localPath = path.resolve(import.meta.dirname, \"../daemon.ts\");\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return null;\n}\n\nasync function waitForSocket(socketPath: string, timeoutMs: number): Promise<void> {\n const startTime = Date.now();\n while (Date.now() - startTime < timeoutMs) {\n if (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(`Daemon socket not available after ${timeoutMs}ms`);\n}\n\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 await 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 await 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 forceCloseDaemon(): Promise<void> {\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 return;\n }\n\n const process = this.daemonProcess;\n this.daemonProcess = null;\n process.stdout?.removeAllListeners(\"data\");\n process.stderr?.removeAllListeners(\"data\");\n process.stdout?.destroy();\n process.stderr?.destroy();\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 1000);\n process.once(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n process.kill(\"SIGKILL\");\n });\n }\n\n private async createRuntimeInternal(\n options: CreateRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\n });\n this.runtimes.add(adapter);\n return adapter;\n }\n\n private async createTestRuntimeInternal(\n options: CreateTestRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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 options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n {\n onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\n },\n );\n this.runtimes.add(testRuntime);\n return testRuntime;\n }\n\n private async createNamespacedRuntimeInternal(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n nestedContext?: NestedHostControllerContext,\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(\n browserSource,\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\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 onUnresponsiveDispose: async () => {\n await this.forceCloseDaemon();\n },\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 nestedContext?: NestedHostControllerContext,\n ): Promise<AppServer> {\n const server = await createAppServerAdapter(\n () => this.getConnection(),\n options,\n {\n nestedHost: this.createNestedBindings(\n createBrowserSourceFromBindings(options.bindings.browser),\n options.bindings,\n options.nestedHost,\n {\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n nestedContext,\n ),\n },\n );\n this.servers.add(server);\n return server;\n }\n\n private createNestedBindings(\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: false | NestedHostPolicy | undefined,\n parentLimits: { memoryLimitMB?: number; executionTimeout?: number },\n nestedContext?: NestedHostControllerContext,\n ) {\n if (policy === false) {\n return undefined;\n }\n const group = nestedContext?.group ??\n createNestedHostResourceGroup(policy, parentLimits);\n return createNestedHostBindings(\n {\n createRuntime: async (options, context) =>\n await this.createRuntimeInternal(options, context),\n createAppServer: async (options, context) =>\n await this.createAppServerInternal(options, context),\n createTestRuntime: async (options, context) =>\n await this.createTestRuntimeInternal(options, context),\n getNamespacedRuntime: async (key, options, context) =>\n await this.createNamespacedRuntimeInternal(key, options, context),\n disposeNamespace: async (key, options) =>\n await this.disposeNamespace(key, options),\n isConnected: () => this.connection?.isConnected() ?? false,\n },\n defaultBrowserSource,\n inheritedBindings,\n group,\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() || this.connection?.isRecovering()) {\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" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "C7BD145D3595005E64756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "A6EAD1F95824828B64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -138,2 +138,51 @@ // src/host/nested-host-controller.ts | ||
| } | ||
| function createAbortError(reason) { | ||
| if (reason instanceof Error) { | ||
| const error2 = new Error(reason.message); | ||
| error2.name = "AbortError"; | ||
| error2.cause = reason; | ||
| return error2; | ||
| } | ||
| const error = new Error(typeof reason === "string" && reason.length > 0 ? reason : "The operation was aborted."); | ||
| error.name = "AbortError"; | ||
| return error; | ||
| } | ||
| function composeAbortSignals(signals) { | ||
| const activeSignals = signals.filter((signal) => signal !== undefined); | ||
| if (activeSignals.length === 0) { | ||
| return { cleanup() {} }; | ||
| } | ||
| const aborted = activeSignals.find((signal) => signal.aborted); | ||
| if (aborted) { | ||
| return { | ||
| signal: AbortSignal.abort(aborted.reason ?? createAbortError()), | ||
| cleanup() {} | ||
| }; | ||
| } | ||
| if (activeSignals.length === 1) { | ||
| return { | ||
| signal: activeSignals[0], | ||
| cleanup() {} | ||
| }; | ||
| } | ||
| const controller = new AbortController; | ||
| const cleanup = () => { | ||
| for (const signal of activeSignals) { | ||
| signal.removeEventListener("abort", onAbort); | ||
| } | ||
| }; | ||
| const onAbort = (event) => { | ||
| cleanup(); | ||
| const signal = event.target; | ||
| controller.abort(signal?.reason ?? createAbortError()); | ||
| }; | ||
| for (const signal of activeSignals) { | ||
| signal.addEventListener("abort", onAbort, { once: true }); | ||
| } | ||
| controller.signal.addEventListener("abort", cleanup, { once: true }); | ||
| return { | ||
| signal: controller.signal, | ||
| cleanup | ||
| }; | ||
| } | ||
| var NESTED_RUNTIME_FLUSH_CODE = ` | ||
@@ -208,2 +257,4 @@ for (let index = 0; index < 3; index += 1) { | ||
| const resources = new Map; | ||
| const operationAbortControllers = new Map; | ||
| const earlyAbortedOperations = new Map; | ||
| const requireHost = (hostId) => { | ||
@@ -259,2 +310,37 @@ const host = hosts.get(hostId); | ||
| }; | ||
| const createOperationSignal = (options, context) => { | ||
| const operationId = options?.__isolateAbortOperationId; | ||
| let operationController; | ||
| if (operationId) { | ||
| operationController = new AbortController; | ||
| operationAbortControllers.set(operationId, operationController); | ||
| if (earlyAbortedOperations.has(operationId)) { | ||
| operationController.abort(createAbortError(earlyAbortedOperations.get(operationId))); | ||
| earlyAbortedOperations.delete(operationId); | ||
| } | ||
| } | ||
| const composed = composeAbortSignals([ | ||
| context.signal, | ||
| operationController?.signal | ||
| ]); | ||
| return { | ||
| signal: composed.signal, | ||
| cleanup() { | ||
| composed.cleanup(); | ||
| if (operationId) { | ||
| operationAbortControllers.delete(operationId); | ||
| earlyAbortedOperations.delete(operationId); | ||
| } | ||
| } | ||
| }; | ||
| }; | ||
| const stripAbortOperation = (options) => { | ||
| if (!options) { | ||
| return; | ||
| } | ||
| const normalized = { ...options }; | ||
| delete normalized.__isolateAbortOperationId; | ||
| delete normalized.signal; | ||
| return Object.keys(normalized).length > 0 ? normalized : undefined; | ||
| }; | ||
| return { | ||
@@ -384,3 +470,3 @@ async createHost() { | ||
| }, | ||
| async callResource(kind, resourceId, method, args) { | ||
| async callResource(kind, resourceId, method, args, context) { | ||
| const record = requireResource(resourceId, kind); | ||
@@ -391,6 +477,17 @@ switch (kind) { | ||
| switch (method) { | ||
| case "eval": | ||
| await runtimeRecord.resource.eval(args[0], args[1] ?? undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| case "eval": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const evalOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| await runtimeRecord.resource.eval(args[0], Object.keys(evalOptions).length > 0 ? evalOptions : undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| return; | ||
| } | ||
| case "dispose": | ||
@@ -427,4 +524,13 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| case "handle": { | ||
| const result = await server.handle(toRequest(args[0]), args[1] ?? undefined); | ||
| return result; | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const handleOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await server.handle(toRequest(args[0]), Object.keys(handleOptions).length > 0 ? handleOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
@@ -459,4 +565,15 @@ case "ws.open": | ||
| switch (method) { | ||
| case "run": | ||
| return await runtime.run(args[0], args[1] ?? undefined); | ||
| case "run": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const runOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await runtime.run(args[0], Object.keys(runOptions).length > 0 ? runOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
| case "dispose": | ||
@@ -489,8 +606,30 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| switch (method) { | ||
| case "eval": | ||
| await runtimeRecord.resource.eval(args[0], args[1] ?? undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| case "eval": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const evalOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| await runtimeRecord.resource.eval(args[0], Object.keys(evalOptions).length > 0 ? evalOptions : undefined); | ||
| await flushNestedRuntime(runtimeRecord.resource); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| return; | ||
| case "runTests": | ||
| return await runtimeRecord.resource.runTests(args[0], args[1] ?? undefined); | ||
| } | ||
| case "runTests": { | ||
| const rawOptions = args[1] ?? undefined; | ||
| const operation = createOperationSignal(rawOptions, context); | ||
| const runOptions = { | ||
| ...stripAbortOperation(rawOptions) ?? {}, | ||
| signal: operation.signal | ||
| }; | ||
| try { | ||
| return await runtimeRecord.resource.runTests(args[0], Object.keys(runOptions).length > 0 ? runOptions : undefined); | ||
| } finally { | ||
| operation.cleanup(); | ||
| } | ||
| } | ||
| case "dispose": | ||
@@ -548,2 +687,12 @@ await disposeResource(resourceId, args[0] ?? {}); | ||
| }, | ||
| async abortResourceCall(operationId, reason) { | ||
| const controller = operationAbortControllers.get(operationId); | ||
| if (controller) { | ||
| if (!controller.signal.aborted) { | ||
| controller.abort(createAbortError(reason)); | ||
| } | ||
| return; | ||
| } | ||
| earlyAbortedOperations.set(operationId, reason); | ||
| }, | ||
| async disposeAll(reason) { | ||
@@ -558,2 +707,4 @@ const resourceIds = [...resources.keys()]; | ||
| hosts.clear(); | ||
| operationAbortControllers.clear(); | ||
| earlyAbortedOperations.clear(); | ||
| } | ||
@@ -567,2 +718,2 @@ }; | ||
| //# debugId=A2DEDC0CC09C0AAD64756E2164756E21 | ||
| //# debugId=C0D7DC717F51117364756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.mjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n NamespacedRuntime,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\ninterface NestedHostFactory {\n createRuntime(\n options: CreateRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<ScriptRuntime>;\n createAppServer(\n options: CreateAppServerOptions,\n context: NestedHostControllerContext,\n ): Promise<AppServer>;\n createTestRuntime(\n options: CreateTestRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<TestRuntime>;\n getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<NamespacedRuntime>;\n disposeNamespace(key: string, options?: { reason?: string }): Promise<void>;\n isConnected(): boolean;\n}\n\ninterface ResolvedNestedHostPolicy {\n fetch: \"inherit\" | \"disabled\";\n maxTotalResources: number;\n maxRuntimes: number;\n maxAppServers: number;\n maxMemoryLimitMB: number;\n maxExecutionTimeoutMs: number;\n maxAppServerLifetimeMs?: number;\n}\n\nexport interface NestedHostResourceGroup {\n id: string;\n namespacePrefix: string;\n policy: ResolvedNestedHostPolicy;\n totalResources: number;\n runtimeResources: number;\n appServerResources: number;\n namespaceKeys: Map<string, string>;\n}\n\nexport interface NestedHostControllerContext {\n group: NestedHostResourceGroup;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n lifetimeTimer?: ReturnType<typeof setTimeout>;\n releaseQuota: () => void;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface NamespacedRuntimeResourceRecord {\n kind: \"namespacedRuntime\";\n hostId: string;\n resource: NamespacedRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord\n | NamespacedRuntimeResourceRecord;\n\nconst DEFAULT_NESTED_TOTAL_RESOURCES = 8;\nconst DEFAULT_NESTED_RUNTIMES = 6;\nconst DEFAULT_NESTED_APP_SERVERS = 2;\nconst DEFAULT_NESTED_MEMORY_LIMIT_MB = 128;\nconst DEFAULT_NESTED_EXECUTION_TIMEOUT_MS = 30_000;\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined) {\n return fallback;\n }\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\"Nested host quota values must be positive numbers.\");\n }\n return Math.floor(value);\n}\n\nfunction clampToParentLimit(\n value: number | undefined,\n parentLimit: number | undefined,\n fallback: number,\n): number {\n const normalized = normalizePositiveInteger(value, parentLimit ?? fallback);\n return parentLimit === undefined ? normalized : Math.min(normalized, parentLimit);\n}\n\nexport function createNestedHostResourceGroup(\n policy: NestedHostPolicy | undefined,\n parentLimits?: { memoryLimitMB?: number; executionTimeout?: number },\n): NestedHostResourceGroup {\n const maxMemoryLimitMB = clampToParentLimit(\n policy?.maxMemoryLimitMB,\n parentLimits?.memoryLimitMB,\n DEFAULT_NESTED_MEMORY_LIMIT_MB,\n );\n const maxExecutionTimeoutMs = clampToParentLimit(\n policy?.maxExecutionTimeoutMs,\n parentLimits?.executionTimeout,\n DEFAULT_NESTED_EXECUTION_TIMEOUT_MS,\n );\n\n return {\n id: randomUUID(),\n namespacePrefix: `nested:${randomUUID()}`,\n policy: {\n fetch: policy?.fetch ?? \"disabled\",\n maxTotalResources: normalizePositiveInteger(\n policy?.maxTotalResources,\n DEFAULT_NESTED_TOTAL_RESOURCES,\n ),\n maxRuntimes: normalizePositiveInteger(\n policy?.maxRuntimes,\n DEFAULT_NESTED_RUNTIMES,\n ),\n maxAppServers: normalizePositiveInteger(\n policy?.maxAppServers,\n DEFAULT_NESTED_APP_SERVERS,\n ),\n maxMemoryLimitMB,\n maxExecutionTimeoutMs,\n maxAppServerLifetimeMs: policy?.maxAppServerLifetimeMs === undefined\n ? undefined\n : normalizePositiveInteger(policy.maxAppServerLifetimeMs, DEFAULT_NESTED_EXECUTION_TIMEOUT_MS),\n },\n totalResources: 0,\n runtimeResources: 0,\n appServerResources: 0,\n namespaceKeys: new Map(),\n };\n}\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\nfunction createNonReentrantEventHandler<TArgs extends unknown[]>(\n label: string,\n handler: ((...args: TArgs) => unknown) | undefined,\n): (...args: TArgs) => void {\n return (...args: TArgs) => {\n invokeBestEffortEventHandlerNonReentrant(label, handler, ...args);\n };\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: ResolvedNestedHostPolicy,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch ?? (\n policy.fetch === \"inherit\" ? inheritedBindings.fetch : undefined\n ),\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle, a Playwright handler, or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateAppServerOptions {\n return {\n ...normalizeRuntimeOptions(\n options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n key: options.key,\n entry: options.entry,\n entryFilename: options.entryFilename,\n webSockets: options.webSockets,\n };\n}\n\nfunction normalizeNamespacedRuntimeOptions(\n options: CreateNamespacedRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateNamespacedRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nconst NESTED_RUNTIME_FLUSH_CODE = `\n for (let index = 0; index < 3; index += 1) {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n`;\n\nfunction hasPendingNestedRuntimeWork(\n diagnostics: RuntimeResourceDiagnostics,\n): boolean {\n return diagnostics.runtime.activeResources > 0 ||\n diagnostics.runtime.pendingFiles > 0 ||\n diagnostics.runtime.pendingFetches > 0 ||\n diagnostics.runtime.pendingModules > 0 ||\n diagnostics.runtime.pendingTools > 0;\n}\n\nasync function flushNestedRuntime(\n runtime: ScriptRuntime | NamespacedRuntime,\n): Promise<void> {\n let diagnostics = await runtime.diagnostics();\n\n for (let index = 0; index < 3; index += 1) {\n if (!hasPendingNestedRuntimeWork(diagnostics)) {\n return;\n }\n\n await runtime.eval(\n NESTED_RUNTIME_FLUSH_CODE,\n { filename: \"/__isolate_internal_nested_flush__.mjs\" },\n );\n diagnostics = await runtime.diagnostics();\n }\n}\n\nfunction countsAsRuntime(kind: NestedResourceKind): boolean {\n return kind !== \"appServer\";\n}\n\nfunction reserveNestedResource(\n group: NestedHostResourceGroup,\n kind: NestedResourceKind,\n): () => void {\n const nextTotal = group.totalResources + 1;\n if (nextTotal > group.policy.maxTotalResources) {\n throw new Error(\n `Nested host resource quota exceeded: ${nextTotal}/${group.policy.maxTotalResources}.`,\n );\n }\n\n if (countsAsRuntime(kind)) {\n const nextRuntimes = group.runtimeResources + 1;\n if (nextRuntimes > group.policy.maxRuntimes) {\n throw new Error(\n `Nested runtime quota exceeded: ${nextRuntimes}/${group.policy.maxRuntimes}.`,\n );\n }\n group.runtimeResources = nextRuntimes;\n } else {\n const nextServers = group.appServerResources + 1;\n if (nextServers > group.policy.maxAppServers) {\n throw new Error(\n `Nested app server quota exceeded: ${nextServers}/${group.policy.maxAppServers}.`,\n );\n }\n group.appServerResources = nextServers;\n }\n\n group.totalResources = nextTotal;\n\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n group.totalResources = Math.max(0, group.totalResources - 1);\n if (countsAsRuntime(kind)) {\n group.runtimeResources = Math.max(0, group.runtimeResources - 1);\n } else {\n group.appServerResources = Math.max(0, group.appServerResources - 1);\n }\n };\n}\n\nfunction getScopedNamespaceKey(\n group: NestedHostResourceGroup,\n hostId: string,\n key: string,\n): string {\n const mapKey = `${hostId}\\0${key}`;\n const existing = group.namespaceKeys.get(mapKey);\n if (existing) {\n return existing;\n }\n\n const encodedKey = Buffer.from(key, \"utf8\").toString(\"base64url\");\n const scopedKey = `${group.namespacePrefix}:${randomUUID()}:${encodedKey}`;\n group.namespaceKeys.set(mapKey, scopedKey);\n return scopedKey;\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (\n record.kind === \"runtime\" ||\n record.kind === \"testRuntime\" ||\n record.kind === \"namespacedRuntime\"\n ) {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n if (record.kind === \"appServer\" && record.lifetimeTimer) {\n clearTimeout(record.lifetimeTimer);\n }\n record.releaseQuota();\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n const controllerContext: NestedHostControllerContext = { group };\n const releaseQuota = reserveNestedResource(group, kind);\n switch (kind) {\n case \"runtime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"appServer\": {\n try {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createAppServer(options, controllerContext);\n const resourceId = randomUUID();\n const record: AppServerResourceRecord = {\n kind,\n hostId,\n resource,\n releaseQuota,\n };\n if (group.policy.maxAppServerLifetimeMs !== undefined) {\n record.lifetimeTimer = setTimeout(() => {\n void disposeResource(resourceId, {\n hard: true,\n reason: \"Nested app server lifetime exceeded\",\n });\n }, group.policy.maxAppServerLifetimeMs);\n }\n resources.set(resourceId, record);\n host.serverIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"testRuntime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createTestRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"namespacedRuntime\": {\n try {\n const namespacedOptions = rawOptions as {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const resource = await factory.getNamespacedRuntime(\n getScopedNamespaceKey(group, hostId, namespacedOptions.key),\n normalizeNamespacedRuntimeOptions(\n namespacedOptions.options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n controllerContext,\n );\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n }\n },\n async callResource(kind, resourceId, method, args) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n (args[1] as string | { filename?: string; executionTimeout?: number } | null) ??\n undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n return undefined;\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.runtime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const result = await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n ((args[1] as {\n requestId?: string;\n metadata?: Record<string, string>;\n } | null) ?? undefined),\n );\n return result;\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtimeRecord = record as TestRuntimeResourceRecord;\n const runtime = runtimeRecord.resource;\n switch (method) {\n case \"run\":\n return await runtime.run(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtime.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.testRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n\n case \"namespacedRuntime\": {\n const runtimeRecord = record as NamespacedRuntimeResourceRecord;\n switch (method) {\n case \"eval\":\n await runtimeRecord.resource.eval(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n executionTimeout?: number;\n } | null) ?? undefined),\n );\n await flushNestedRuntime(runtimeRecord.resource);\n return undefined;\n case \"runTests\":\n return await runtimeRecord.resource.runTests(\n args[0] as string,\n ((args[1] as {\n filename?: string;\n timeoutMs?: number;\n } | null) ?? undefined),\n );\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(\n `Unsupported nested namespaced runtime method: ${method}`,\n );\n }\n }\n }\n },\n async disposeNamespace(hostId, key, options) {\n requireHost(hostId);\n const scopedKey = group.namespaceKeys.get(`${hostId}\\0${key}`);\n if (!scopedKey) {\n return;\n }\n await factory.disposeNamespace(scopedKey, options);\n },\n async disposeAll(reason) {\n const resourceIds = [...resources.keys()];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: reason ?? \"Nested isolate parent disposed\",\n });\n }),\n );\n hosts.clear();\n },\n };\n}\n" | ||
| "import { randomUUID } from \"node:crypto\";\nimport type { NestedHostBindings, NestedResourceKind } from \"../bridge/sandbox-isolate.mjs\";\nimport {\n createBrowserSourceFromUnknown,\n isDefaultBrowserDescriptor,\n requireBrowserSource,\n type BrowserSource,\n} from \"../internal/browser-source.mjs\";\nimport { invokeBestEffortEventHandlerNonReentrant } from \"../internal/event-callback.mjs\";\nimport type {\n AppServer,\n CreateAppServerOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n HostBindings,\n HostCallContext,\n NamespacedRuntime,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntime,\n TestRuntime,\n} from \"../types.mjs\";\n\ninterface NestedHostFactory {\n createRuntime(\n options: CreateRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<ScriptRuntime>;\n createAppServer(\n options: CreateAppServerOptions,\n context: NestedHostControllerContext,\n ): Promise<AppServer>;\n createTestRuntime(\n options: CreateTestRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<TestRuntime>;\n getNamespacedRuntime(\n key: string,\n options: CreateNamespacedRuntimeOptions,\n context: NestedHostControllerContext,\n ): Promise<NamespacedRuntime>;\n disposeNamespace(key: string, options?: { reason?: string }): Promise<void>;\n isConnected(): boolean;\n}\n\ninterface ResolvedNestedHostPolicy {\n fetch: \"inherit\" | \"disabled\";\n maxTotalResources: number;\n maxRuntimes: number;\n maxAppServers: number;\n maxMemoryLimitMB: number;\n maxExecutionTimeoutMs: number;\n maxAppServerLifetimeMs?: number;\n}\n\nexport interface NestedHostResourceGroup {\n id: string;\n namespacePrefix: string;\n policy: ResolvedNestedHostPolicy;\n totalResources: number;\n runtimeResources: number;\n appServerResources: number;\n namespaceKeys: Map<string, string>;\n}\n\nexport interface NestedHostControllerContext {\n group: NestedHostResourceGroup;\n}\n\ninterface NestedHostRecord {\n runtimeIds: Set<string>;\n serverIds: Set<string>;\n closed: boolean;\n}\n\ninterface RuntimeResourceRecord {\n kind: \"runtime\";\n hostId: string;\n resource: ScriptRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface AppServerResourceRecord {\n kind: \"appServer\";\n hostId: string;\n resource: AppServer;\n lifetimeTimer?: ReturnType<typeof setTimeout>;\n releaseQuota: () => void;\n}\n\ninterface TestRuntimeResourceRecord {\n kind: \"testRuntime\";\n hostId: string;\n resource: TestRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ninterface NamespacedRuntimeResourceRecord {\n kind: \"namespacedRuntime\";\n hostId: string;\n resource: NamespacedRuntime;\n subscriptions: Map<string, () => void>;\n releaseQuota: () => void;\n}\n\ntype NestedResourceRecord =\n | RuntimeResourceRecord\n | AppServerResourceRecord\n | TestRuntimeResourceRecord\n | NamespacedRuntimeResourceRecord;\n\nconst DEFAULT_NESTED_TOTAL_RESOURCES = 8;\nconst DEFAULT_NESTED_RUNTIMES = 6;\nconst DEFAULT_NESTED_APP_SERVERS = 2;\nconst DEFAULT_NESTED_MEMORY_LIMIT_MB = 128;\nconst DEFAULT_NESTED_EXECUTION_TIMEOUT_MS = 30_000;\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (value === undefined) {\n return fallback;\n }\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\"Nested host quota values must be positive numbers.\");\n }\n return Math.floor(value);\n}\n\nfunction clampToParentLimit(\n value: number | undefined,\n parentLimit: number | undefined,\n fallback: number,\n): number {\n const normalized = normalizePositiveInteger(value, parentLimit ?? fallback);\n return parentLimit === undefined ? normalized : Math.min(normalized, parentLimit);\n}\n\nexport function createNestedHostResourceGroup(\n policy: NestedHostPolicy | undefined,\n parentLimits?: { memoryLimitMB?: number; executionTimeout?: number },\n): NestedHostResourceGroup {\n const maxMemoryLimitMB = clampToParentLimit(\n policy?.maxMemoryLimitMB,\n parentLimits?.memoryLimitMB,\n DEFAULT_NESTED_MEMORY_LIMIT_MB,\n );\n const maxExecutionTimeoutMs = clampToParentLimit(\n policy?.maxExecutionTimeoutMs,\n parentLimits?.executionTimeout,\n DEFAULT_NESTED_EXECUTION_TIMEOUT_MS,\n );\n\n return {\n id: randomUUID(),\n namespacePrefix: `nested:${randomUUID()}`,\n policy: {\n fetch: policy?.fetch ?? \"disabled\",\n maxTotalResources: normalizePositiveInteger(\n policy?.maxTotalResources,\n DEFAULT_NESTED_TOTAL_RESOURCES,\n ),\n maxRuntimes: normalizePositiveInteger(\n policy?.maxRuntimes,\n DEFAULT_NESTED_RUNTIMES,\n ),\n maxAppServers: normalizePositiveInteger(\n policy?.maxAppServers,\n DEFAULT_NESTED_APP_SERVERS,\n ),\n maxMemoryLimitMB,\n maxExecutionTimeoutMs,\n maxAppServerLifetimeMs: policy?.maxAppServerLifetimeMs === undefined\n ? undefined\n : normalizePositiveInteger(policy.maxAppServerLifetimeMs, DEFAULT_NESTED_EXECUTION_TIMEOUT_MS),\n },\n totalResources: 0,\n runtimeResources: 0,\n appServerResources: 0,\n namespaceKeys: new Map(),\n };\n}\n\ninterface SerializedRequestLike {\n url: string;\n method?: string;\n headers?: Array<[string, string]>;\n body?: number[] | null;\n}\n\ntype AbortableNestedOptions = {\n __isolateAbortOperationId?: string;\n signal?: AbortSignal;\n};\n\nfunction createNonReentrantEventHandler<TArgs extends unknown[]>(\n label: string,\n handler: ((...args: TArgs) => unknown) | undefined,\n): (...args: TArgs) => void {\n return (...args: TArgs) => {\n invokeBestEffortEventHandlerNonReentrant(label, handler, ...args);\n };\n}\n\nfunction toRequest(serialized: SerializedRequestLike): Request {\n return new Request(serialized.url, {\n method: serialized.method ?? \"GET\",\n headers: serialized.headers,\n body: serialized.body ? new Uint8Array(serialized.body) : null,\n });\n}\n\nfunction normalizeBindings(\n bindings: HostBindings | undefined,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n policy: ResolvedNestedHostPolicy,\n): HostBindings {\n const normalized: HostBindings = {\n console: bindings?.console,\n fetch: bindings?.fetch ?? (\n policy.fetch === \"inherit\" ? inheritedBindings.fetch : undefined\n ),\n files: bindings?.files,\n modules: bindings?.modules,\n tools: bindings?.tools,\n };\n\n if (!bindings || !(\"browser\" in bindings) || bindings.browser === undefined) {\n return normalized;\n }\n\n if (isDefaultBrowserDescriptor(bindings.browser)) {\n normalized.browser = requireBrowserSource(\n defaultBrowserSource,\n \"Nested browser bindings\",\n );\n return normalized;\n }\n\n const browserSource = createBrowserSourceFromUnknown(bindings.browser);\n if (!browserSource) {\n throw new Error(\n \"Nested browser bindings must use the sandbox browser handle, a Playwright handler, or expose createContext()/createPage().\",\n );\n }\n\n normalized.browser = browserSource;\n return normalized;\n}\n\nfunction normalizeRuntimeOptions(\n options: CreateRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction normalizeAppServerOptions(\n options: CreateAppServerOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateAppServerOptions {\n return {\n ...normalizeRuntimeOptions(\n options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n key: options.key,\n entry: options.entry,\n entryFilename: options.entryFilename,\n webSockets: options.webSockets,\n };\n}\n\nfunction normalizeNamespacedRuntimeOptions(\n options: CreateNamespacedRuntimeOptions,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): CreateNamespacedRuntimeOptions {\n const memoryLimitMB = options.memoryLimitMB ?? group.policy.maxMemoryLimitMB;\n const executionTimeout = options.executionTimeout ?? group.policy.maxExecutionTimeoutMs;\n if (memoryLimitMB > group.policy.maxMemoryLimitMB) {\n throw new Error(\n `Nested runtime memoryLimitMB ${memoryLimitMB} exceeds quota ${group.policy.maxMemoryLimitMB}.`,\n );\n }\n if (executionTimeout > group.policy.maxExecutionTimeoutMs) {\n throw new Error(\n `Nested runtime executionTimeout ${executionTimeout} exceeds quota ${group.policy.maxExecutionTimeoutMs}.`,\n );\n }\n\n return {\n ...options,\n memoryLimitMB,\n executionTimeout,\n nestedHost: options.nestedHost === false ? false : group.policy,\n bindings: normalizeBindings(\n options.bindings,\n defaultBrowserSource,\n inheritedBindings,\n group.policy,\n ),\n };\n}\n\nfunction toError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n \"message\" in value &&\n typeof (value as { message?: unknown }).message === \"string\"\n ) {\n const error = new Error((value as { message: string }).message);\n if (\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n ) {\n error.name = (value as { name: string }).name;\n }\n return error;\n }\n\n return new Error(String(value));\n}\n\nfunction createAbortError(reason?: unknown): Error {\n if (reason instanceof Error) {\n const error = new Error(reason.message);\n error.name = \"AbortError\";\n (error as Error & { cause?: unknown }).cause = reason;\n return error;\n }\n\n const error = new Error(\n typeof reason === \"string\" && reason.length > 0\n ? reason\n : \"The operation was aborted.\",\n );\n error.name = \"AbortError\";\n return error;\n}\n\nfunction composeAbortSignals(\n signals: Array<AbortSignal | undefined>,\n): { signal?: AbortSignal; cleanup: () => void } {\n const activeSignals = signals.filter(\n (signal): signal is AbortSignal => signal !== undefined,\n );\n\n if (activeSignals.length === 0) {\n return { cleanup() {} };\n }\n\n const aborted = activeSignals.find((signal) => signal.aborted);\n if (aborted) {\n return {\n signal: AbortSignal.abort(aborted.reason ?? createAbortError()),\n cleanup() {},\n };\n }\n\n if (activeSignals.length === 1) {\n return {\n signal: activeSignals[0],\n cleanup() {},\n };\n }\n\n const controller = new AbortController();\n const cleanup = () => {\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", onAbort);\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 {\n signal: controller.signal,\n cleanup,\n };\n}\n\nconst NESTED_RUNTIME_FLUSH_CODE = `\n for (let index = 0; index < 3; index += 1) {\n await Promise.resolve();\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n`;\n\nfunction hasPendingNestedRuntimeWork(\n diagnostics: RuntimeResourceDiagnostics,\n): boolean {\n return diagnostics.runtime.activeResources > 0 ||\n diagnostics.runtime.pendingFiles > 0 ||\n diagnostics.runtime.pendingFetches > 0 ||\n diagnostics.runtime.pendingModules > 0 ||\n diagnostics.runtime.pendingTools > 0;\n}\n\nasync function flushNestedRuntime(\n runtime: ScriptRuntime | NamespacedRuntime,\n): Promise<void> {\n let diagnostics = await runtime.diagnostics();\n\n for (let index = 0; index < 3; index += 1) {\n if (!hasPendingNestedRuntimeWork(diagnostics)) {\n return;\n }\n\n await runtime.eval(\n NESTED_RUNTIME_FLUSH_CODE,\n { filename: \"/__isolate_internal_nested_flush__.mjs\" },\n );\n diagnostics = await runtime.diagnostics();\n }\n}\n\nfunction countsAsRuntime(kind: NestedResourceKind): boolean {\n return kind !== \"appServer\";\n}\n\nfunction reserveNestedResource(\n group: NestedHostResourceGroup,\n kind: NestedResourceKind,\n): () => void {\n const nextTotal = group.totalResources + 1;\n if (nextTotal > group.policy.maxTotalResources) {\n throw new Error(\n `Nested host resource quota exceeded: ${nextTotal}/${group.policy.maxTotalResources}.`,\n );\n }\n\n if (countsAsRuntime(kind)) {\n const nextRuntimes = group.runtimeResources + 1;\n if (nextRuntimes > group.policy.maxRuntimes) {\n throw new Error(\n `Nested runtime quota exceeded: ${nextRuntimes}/${group.policy.maxRuntimes}.`,\n );\n }\n group.runtimeResources = nextRuntimes;\n } else {\n const nextServers = group.appServerResources + 1;\n if (nextServers > group.policy.maxAppServers) {\n throw new Error(\n `Nested app server quota exceeded: ${nextServers}/${group.policy.maxAppServers}.`,\n );\n }\n group.appServerResources = nextServers;\n }\n\n group.totalResources = nextTotal;\n\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n group.totalResources = Math.max(0, group.totalResources - 1);\n if (countsAsRuntime(kind)) {\n group.runtimeResources = Math.max(0, group.runtimeResources - 1);\n } else {\n group.appServerResources = Math.max(0, group.appServerResources - 1);\n }\n };\n}\n\nfunction getScopedNamespaceKey(\n group: NestedHostResourceGroup,\n hostId: string,\n key: string,\n): string {\n const mapKey = `${hostId}\\0${key}`;\n const existing = group.namespaceKeys.get(mapKey);\n if (existing) {\n return existing;\n }\n\n const encodedKey = Buffer.from(key, \"utf8\").toString(\"base64url\");\n const scopedKey = `${group.namespacePrefix}:${randomUUID()}:${encodedKey}`;\n group.namespaceKeys.set(mapKey, scopedKey);\n return scopedKey;\n}\n\nexport function createNestedHostBindings(\n factory: NestedHostFactory,\n defaultBrowserSource: BrowserSource | undefined,\n inheritedBindings: HostBindings,\n group: NestedHostResourceGroup,\n): NestedHostBindings {\n const hosts = new Map<string, NestedHostRecord>();\n const resources = new Map<string, NestedResourceRecord>();\n const operationAbortControllers = new Map<string, AbortController>();\n const earlyAbortedOperations = new Map<string, string | undefined>();\n\n const requireHost = (hostId: string): NestedHostRecord => {\n const host = hosts.get(hostId);\n if (!host || host.closed) {\n throw new Error(`Nested host ${hostId} is not available.`);\n }\n return host;\n };\n\n const requireResource = (\n resourceId: string,\n expectedKind: NestedResourceKind,\n ): NestedResourceRecord => {\n const resource = resources.get(resourceId);\n if (!resource || resource.kind !== expectedKind) {\n throw new Error(\n `Nested resource ${resourceId} is not available for ${expectedKind}.`,\n );\n }\n return resource;\n };\n\n const unregisterResource = (resourceId: string): void => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n const host = hosts.get(record.hostId);\n if (host) {\n if (record.kind === \"appServer\") {\n host.serverIds.delete(resourceId);\n } else {\n host.runtimeIds.delete(resourceId);\n }\n }\n\n if (\n record.kind === \"runtime\" ||\n record.kind === \"testRuntime\" ||\n record.kind === \"namespacedRuntime\"\n ) {\n for (const unsubscribe of record.subscriptions.values()) {\n unsubscribe();\n }\n record.subscriptions.clear();\n }\n\n if (record.kind === \"appServer\" && record.lifetimeTimer) {\n clearTimeout(record.lifetimeTimer);\n }\n record.releaseQuota();\n resources.delete(resourceId);\n };\n\n const disposeResource = async (\n resourceId: string,\n options: { hard?: boolean; reason?: string },\n ): Promise<void> => {\n const record = resources.get(resourceId);\n if (!record) {\n return;\n }\n\n try {\n await record.resource.dispose(options);\n } finally {\n unregisterResource(resourceId);\n }\n };\n\n const createOperationSignal = (\n options: AbortableNestedOptions | null | undefined,\n context: HostCallContext,\n ): { signal?: AbortSignal; cleanup: () => void } => {\n const operationId = options?.__isolateAbortOperationId;\n let operationController: AbortController | undefined;\n\n if (operationId) {\n operationController = new AbortController();\n operationAbortControllers.set(operationId, operationController);\n if (earlyAbortedOperations.has(operationId)) {\n operationController.abort(\n createAbortError(earlyAbortedOperations.get(operationId)),\n );\n earlyAbortedOperations.delete(operationId);\n }\n }\n\n const composed = composeAbortSignals([\n context.signal,\n operationController?.signal,\n ]);\n\n return {\n signal: composed.signal,\n cleanup() {\n composed.cleanup();\n if (operationId) {\n operationAbortControllers.delete(operationId);\n earlyAbortedOperations.delete(operationId);\n }\n },\n };\n };\n\n const stripAbortOperation = <T extends object>(\n options: (T & AbortableNestedOptions) | null | undefined,\n ): T | undefined => {\n if (!options) {\n return undefined;\n }\n const normalized = { ...options };\n delete (normalized as AbortableNestedOptions).__isolateAbortOperationId;\n delete (normalized as AbortableNestedOptions).signal;\n return Object.keys(normalized).length > 0 ? normalized as T : undefined;\n };\n\n return {\n async createHost() {\n const hostId = randomUUID();\n hosts.set(hostId, {\n runtimeIds: new Set(),\n serverIds: new Set(),\n closed: false,\n });\n return hostId;\n },\n async closeHost(hostId) {\n const host = requireHost(hostId);\n host.closed = true;\n const resourceIds = [\n ...host.serverIds,\n ...host.runtimeIds,\n ];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: \"Nested isolate host closed\",\n });\n }),\n );\n hosts.delete(hostId);\n },\n async diagnostics(hostId) {\n const host = requireHost(hostId);\n return {\n runtimes: host.runtimeIds.size,\n servers: host.serverIds.size,\n connected: factory.isConnected(),\n };\n },\n async createResource(hostId, kind, rawOptions) {\n const host = requireHost(hostId);\n const controllerContext: NestedHostControllerContext = { group };\n const releaseQuota = reserveNestedResource(group, kind);\n switch (kind) {\n case \"runtime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"appServer\": {\n try {\n const options = normalizeAppServerOptions(\n rawOptions as CreateAppServerOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createAppServer(options, controllerContext);\n const resourceId = randomUUID();\n const record: AppServerResourceRecord = {\n kind,\n hostId,\n resource,\n releaseQuota,\n };\n if (group.policy.maxAppServerLifetimeMs !== undefined) {\n record.lifetimeTimer = setTimeout(() => {\n void disposeResource(resourceId, {\n hard: true,\n reason: \"Nested app server lifetime exceeded\",\n });\n }, group.policy.maxAppServerLifetimeMs);\n }\n resources.set(resourceId, record);\n host.serverIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"testRuntime\": {\n try {\n const options = normalizeRuntimeOptions(\n rawOptions as CreateTestRuntimeOptions,\n defaultBrowserSource,\n inheritedBindings,\n group,\n );\n const resource = await factory.createTestRuntime(options, controllerContext);\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n\n case \"namespacedRuntime\": {\n try {\n const namespacedOptions = rawOptions as {\n key: string;\n options: CreateNamespacedRuntimeOptions;\n };\n const resource = await factory.getNamespacedRuntime(\n getScopedNamespaceKey(group, hostId, namespacedOptions.key),\n normalizeNamespacedRuntimeOptions(\n namespacedOptions.options,\n defaultBrowserSource,\n inheritedBindings,\n group,\n ),\n controllerContext,\n );\n const resourceId = randomUUID();\n resources.set(resourceId, {\n kind,\n hostId,\n resource,\n subscriptions: new Map(),\n releaseQuota,\n });\n host.runtimeIds.add(resourceId);\n return resourceId;\n } catch (error) {\n releaseQuota();\n throw error;\n }\n }\n }\n },\n async callResource(kind, resourceId, method, args, context) {\n const record = requireResource(resourceId, kind);\n\n switch (kind) {\n case \"runtime\": {\n const runtimeRecord = record as RuntimeResourceRecord;\n switch (method) {\n case \"eval\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n executionTimeout?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const evalOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n executionTimeout?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n await runtimeRecord.resource.eval(\n args[0] as string,\n Object.keys(evalOptions).length > 0 ? evalOptions : undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n } finally {\n operation.cleanup();\n }\n return undefined;\n }\n case \"dispose\":\n await disposeResource(resourceId, (args[0] as { hard?: boolean; reason?: string } | null) ?? {});\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.runtime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(`Unsupported nested runtime method: ${method}`);\n }\n }\n\n case \"appServer\": {\n const server = (record as AppServerResourceRecord).resource;\n switch (method) {\n case \"handle\": {\n const rawOptions =\n (args[1] as ({\n requestId?: string;\n metadata?: Record<string, string>;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const handleOptions = {\n ...(stripAbortOperation<{\n requestId?: string;\n metadata?: Record<string, string>;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await server.handle(\n toRequest(args[0] as SerializedRequestLike),\n Object.keys(handleOptions).length > 0 ? handleOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"ws.open\":\n await server.ws.open(args[0] as string);\n return undefined;\n case \"ws.message\":\n await server.ws.message(\n args[0] as string,\n args[1] as string | ArrayBuffer,\n );\n return undefined;\n case \"ws.close\":\n await server.ws.close(\n args[0] as string,\n args[1] as number,\n args[2] as string,\n );\n return undefined;\n case \"ws.error\":\n await server.ws.error(\n args[0] as string,\n toError(args[1]),\n );\n return undefined;\n case \"reload\":\n await server.reload((args[0] as string | null) ?? undefined);\n return undefined;\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await server.diagnostics();\n default:\n throw new Error(`Unsupported nested app server method: ${method}`);\n }\n }\n\n case \"testRuntime\": {\n const runtimeRecord = record as TestRuntimeResourceRecord;\n const runtime = runtimeRecord.resource;\n switch (method) {\n case \"run\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n timeoutMs?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const runOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n timeoutMs?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await runtime.run(\n args[0] as string,\n Object.keys(runOptions).length > 0 ? runOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtime.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtime.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.testRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe = runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n default:\n throw new Error(\n `Unsupported nested test runtime method: ${method}`,\n );\n }\n }\n\n case \"namespacedRuntime\": {\n const runtimeRecord = record as NamespacedRuntimeResourceRecord;\n switch (method) {\n case \"eval\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n executionTimeout?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const evalOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n executionTimeout?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n await runtimeRecord.resource.eval(\n args[0] as string,\n Object.keys(evalOptions).length > 0 ? evalOptions : undefined,\n );\n await flushNestedRuntime(runtimeRecord.resource);\n } finally {\n operation.cleanup();\n }\n return undefined;\n }\n case \"runTests\": {\n const rawOptions =\n (args[1] as ({\n filename?: string;\n timeoutMs?: number;\n } & AbortableNestedOptions) | null) ?? undefined;\n const operation = createOperationSignal(rawOptions, context);\n const runOptions = {\n ...(stripAbortOperation<{\n filename?: string;\n timeoutMs?: number;\n }>(rawOptions) ?? {}),\n signal: operation.signal,\n };\n try {\n return await runtimeRecord.resource.runTests(\n args[0] as string,\n Object.keys(runOptions).length > 0 ? runOptions : undefined,\n );\n } finally {\n operation.cleanup();\n }\n }\n case \"dispose\":\n await disposeResource(\n resourceId,\n ((args[0] as { hard?: boolean; reason?: string } | null) ?? {}),\n );\n return undefined;\n case \"diagnostics\":\n return await runtimeRecord.resource.diagnostics();\n case \"test.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.test.onEvent(\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.test.on\",\n args[0] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"test.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.on\": {\n const subscriptionId = randomUUID();\n const unsubscribe = runtimeRecord.resource.events.on(\n args[0] as string,\n createNonReentrantEventHandler(\n \"nestedHost.namespacedRuntime.events.on\",\n args[1] as (payload: unknown) => void,\n ),\n );\n runtimeRecord.subscriptions.set(subscriptionId, unsubscribe);\n return subscriptionId;\n }\n case \"events.off\": {\n const subscriptionId = args[0] as string;\n const unsubscribe =\n runtimeRecord.subscriptions.get(subscriptionId);\n if (unsubscribe) {\n unsubscribe();\n runtimeRecord.subscriptions.delete(subscriptionId);\n }\n return undefined;\n }\n case \"events.emit\":\n await runtimeRecord.resource.events.emit(\n args[0] as string,\n args[1],\n );\n return undefined;\n default:\n throw new Error(\n `Unsupported nested namespaced runtime method: ${method}`,\n );\n }\n }\n }\n },\n async disposeNamespace(hostId, key, options) {\n requireHost(hostId);\n const scopedKey = group.namespaceKeys.get(`${hostId}\\0${key}`);\n if (!scopedKey) {\n return;\n }\n await factory.disposeNamespace(scopedKey, options);\n },\n async abortResourceCall(operationId, reason) {\n const controller = operationAbortControllers.get(operationId);\n if (controller) {\n if (!controller.signal.aborted) {\n controller.abort(createAbortError(reason));\n }\n return;\n }\n\n earlyAbortedOperations.set(operationId, reason);\n },\n async disposeAll(reason) {\n const resourceIds = [...resources.keys()];\n await Promise.allSettled(\n resourceIds.map(async (resourceId) => {\n await disposeResource(resourceId, {\n hard: true,\n reason: reason ?? \"Nested isolate parent disposed\",\n });\n }),\n );\n hosts.clear();\n operationAbortControllers.clear();\n earlyAbortedOperations.clear();\n },\n };\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "A2DEDC0CC09C0AAD64756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "C0D7DC717F51117364756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -5,3 +5,3 @@ { | ||
| "sourcesContent": [ | ||
| "export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostBrowserFactoryBindings,\n HostBrowserHandlerBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n NamespacedRuntime,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n NestedHostFetchPolicy,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n RunResults,\n ScriptRuntime,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.mjs\";\n" | ||
| "export { createIsolateHost } from \"./host/index.mjs\";\nexport { createModuleResolver } from \"./modules/index.mjs\";\nexport { createFileBindings } from \"./files/index.mjs\";\nexport { getTypeProfile, typecheck, formatTypecheckErrors } from \"./typecheck/index.mjs\";\n\nexport type {\n AppServer,\n BrowserDiagnostics,\n ConsoleEntry,\n CreateAppServerOptions,\n CreateIsolateHostOptions,\n CreateNamespacedRuntimeOptions,\n CreateRuntimeOptions,\n CreateTestRuntimeOptions,\n FileBindings,\n HostBindings,\n HostBrowserBindings,\n HostBrowserFactoryBindings,\n HostBrowserHandlerBindings,\n HostCallContext,\n IsolateHost,\n ModuleImporter,\n ModuleResolveResult,\n ModuleResolver,\n NamespacedRuntime,\n ModuleResolverFallback,\n ModuleResolverSourceLoader,\n ModuleSource,\n PlaywrightEvent,\n NestedHostFetchPolicy,\n NestedHostPolicy,\n RequestResult,\n RuntimeResourceDiagnostics,\n ScriptRuntimeEvalOptions,\n RunResults,\n ScriptRuntime,\n TestRuntimeRunOptions,\n TestDiagnostics,\n TestEvent,\n TestRuntime,\n TestRuntimeDiagnostics,\n ToolBindings,\n ToolHandler,\n RuntimeDiagnostics,\n TypeCapability,\n TypeProfile,\n TypeProfileName,\n TypecheckRequest,\n WebSocketUpgradeData,\n} from \"./types.mjs\";\n" | ||
| ], | ||
@@ -8,0 +8,0 @@ "mappings": ";AAAA;AACA;AACA;AACA;", |
| { | ||
| "name": "@ricsam/isolate", | ||
| "version": "0.1.22", | ||
| "version": "0.1.23", | ||
| "type": "module" | ||
| } |
@@ -6,2 +6,9 @@ // src/runtime/namespaced-runtime.ts | ||
| import { isBenignDisposeError } from "../internal/client/index.mjs"; | ||
| import { | ||
| disposeWithUnresponsiveFallback, | ||
| getErrorMessage, | ||
| isAbortError, | ||
| isTerminalExecutionError, | ||
| runAbortableOperation | ||
| } from "./abort.mjs"; | ||
| function createStateError(state, reason) { | ||
@@ -41,2 +48,19 @@ if (state === "invalidated") { | ||
| options.testEvents.setEnsureUsable(ensureActive); | ||
| const hardDispose = async (reason) => { | ||
| if (state === "disposed" || state === "invalidated") { | ||
| release(); | ||
| return; | ||
| } | ||
| state = "disposed"; | ||
| await options?.abortBindings?.(reason); | ||
| try { | ||
| await disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, options.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } finally { | ||
| release(); | ||
| } | ||
| }; | ||
| return { | ||
@@ -47,8 +71,16 @@ async eval(code, evalOptions) { | ||
| try { | ||
| await runtime.eval(code, { | ||
| filename: evalOptions?.filename, | ||
| executionTimeout: evalOptions?.executionTimeout | ||
| await runAbortableOperation(async () => { | ||
| await runtime.eval(code, { | ||
| filename: evalOptions?.filename, | ||
| executionTimeout: evalOptions?.executionTimeout | ||
| }); | ||
| }, { | ||
| signal: evalOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| if (!isAbortError(error) && isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -63,11 +95,19 @@ } finally { | ||
| try { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| return await runAbortableOperation(async () => { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| }, { | ||
| signal: runOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| if (!isAbortError(error) && isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -104,7 +144,7 @@ } finally { | ||
| try { | ||
| options?.abortBindings?.(disposeOptions?.reason); | ||
| await options?.abortBindings?.(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| throw error; | ||
@@ -117,3 +157,3 @@ } | ||
| }, | ||
| invalidate(reason) { | ||
| async invalidate(reason) { | ||
| if (state === "disposed" || state === "invalidated") { | ||
@@ -126,3 +166,3 @@ release(); | ||
| diagnostics.lifecycleState = "idle"; | ||
| options?.abortBindings?.(reason); | ||
| await options?.abortBindings?.(reason); | ||
| release(); | ||
@@ -153,2 +193,2 @@ }, | ||
| //# debugId=C0372FF17D33A9F464756E2164756E21 | ||
| //# debugId=4E731FBA9E96509C64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { TestEventSubscriptions } from \"./test-event-subscriptions.mjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.mjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): void;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void;\n onRelease?: () => void;\n testEvents: TestEventSubscriptions;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.testEvents.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n options.testEvents.setEnsureUsable(ensureActive);\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n test: options.testEvents.api,\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { TestEventSubscriptions } from \"./test-event-subscriptions.mjs\";\nimport type {\n NamespacedRuntime,\n RunResults,\n TestRuntimeDiagnostics,\n} from \"../types.mjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.mjs\";\n\ntype RuntimeState = \"active\" | \"disposed\" | \"invalidated\";\n\nexport interface NamespacedRuntimeAdapter extends NamespacedRuntime {\n invalidate(reason?: string): Promise<void>;\n}\n\nfunction createStateError(state: RuntimeState, reason?: string): Error {\n if (state === \"invalidated\") {\n const error = new Error(\n reason && reason.length > 0\n ? `Namespaced runtime is no longer available: ${reason}`\n : \"Namespaced runtime is no longer available.\",\n );\n error.name = \"NamespacedRuntimeInvalidatedError\";\n return error;\n }\n\n const error = new Error(\"Namespaced runtime has already been disposed.\");\n error.name = \"NamespacedRuntimeDisposedError\";\n return error;\n}\n\nexport function createNamespacedRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options: {\n hasBrowser?: boolean;\n abortBindings?: (reason?: string) => void | Promise<void>;\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n onRelease?: () => void;\n testEvents: TestEventSubscriptions;\n },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.testEvents.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n options.testEvents.setEnsureUsable(ensureActive);\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"disposed\";\n await options?.abortBindings?.(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n options.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n } finally {\n release();\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runAbortableOperation(async () => {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n }, {\n signal: evalOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n return await runAbortableOperation(async () => {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n }, {\n signal: runOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n await options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n async invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n await options?.abortBindings?.(reason);\n release();\n },\n test: options.testEvents.api,\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "C0372FF17D33A9F464756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "4E731FBA9E96509C64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -6,14 +6,53 @@ // src/runtime/script-runtime.ts | ||
| import { isBenignDisposeError } from "../internal/client/index.mjs"; | ||
| import { | ||
| disposeWithUnresponsiveFallback, | ||
| getErrorMessage, | ||
| isAbortError, | ||
| isTerminalExecutionError, | ||
| runAbortableOperation | ||
| } from "./abort.mjs"; | ||
| function createDisposedScriptRuntimeError() { | ||
| return new Error("Script runtime has already been disposed."); | ||
| } | ||
| function createScriptRuntimeAdapter(runtime, diagnostics, options) { | ||
| let isDisposed = false; | ||
| const ensureActive = () => { | ||
| if (isDisposed) { | ||
| throw createDisposedScriptRuntimeError(); | ||
| } | ||
| }; | ||
| const hardDispose = async (reason) => { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| await options?.onBeforeDispose?.(reason); | ||
| try { | ||
| await disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, options?.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } | ||
| }; | ||
| return { | ||
| async eval(code, evalOptions) { | ||
| ensureActive(); | ||
| const normalizedOptions = typeof evalOptions === "string" ? { filename: evalOptions } : evalOptions; | ||
| diagnostics.lifecycleState = "active"; | ||
| try { | ||
| await runtime.eval(code, { | ||
| filename: normalizedOptions?.filename, | ||
| executionTimeout: normalizedOptions?.executionTimeout | ||
| await runAbortableOperation(async () => { | ||
| await runtime.eval(code, { | ||
| filename: normalizedOptions?.filename, | ||
| executionTimeout: normalizedOptions?.executionTimeout | ||
| }); | ||
| }, { | ||
| signal: normalizedOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| if (!isAbortError(error) && isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -25,9 +64,13 @@ } finally { | ||
| async dispose(disposeOptions) { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| diagnostics.lifecycleState = "disposing"; | ||
| try { | ||
| options?.onBeforeDispose?.(disposeOptions?.reason); | ||
| await options?.onBeforeDispose?.(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| throw error; | ||
@@ -40,2 +83,3 @@ } | ||
| diagnostics: async () => { | ||
| ensureActive(); | ||
| const runtimeDiagnostics = { | ||
@@ -53,4 +97,8 @@ ...diagnostics, | ||
| events: { | ||
| on: (event, handler) => runtime.on(event, handler), | ||
| on: (event, handler) => { | ||
| ensureActive(); | ||
| return runtime.on(event, handler); | ||
| }, | ||
| emit: async (event, payload) => { | ||
| ensureActive(); | ||
| runtime.emit(event, payload); | ||
@@ -65,2 +113,2 @@ } | ||
| //# debugId=0BFA104EB05B457464756E2164756E21 | ||
| //# debugId=04C903505842B1A364756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { ScriptRuntime } from \"../types.mjs\";\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n onBeforeDispose?: (reason?: string) => void;\n },\n): ScriptRuntime {\n return {\n async eval(code, evalOptions) {\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n events: {\n on: (event, handler) => runtime.on(event, handler),\n emit: async (event, payload) => {\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.mjs\";\nimport type { ScriptRuntime } from \"../types.mjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.mjs\";\n\nfunction createDisposedScriptRuntimeError(): Error {\n return new Error(\"Script runtime has already been disposed.\");\n}\n\nexport function createScriptRuntimeAdapter(\n runtime: RemoteRuntime,\n diagnostics: MutableRuntimeDiagnostics,\n options?: {\n hasBrowser?: boolean;\n onBeforeDispose?: (reason?: string) => void | Promise<void>;\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n },\n): ScriptRuntime {\n let isDisposed = false;\n\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedScriptRuntimeError();\n }\n };\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n await options?.onBeforeDispose?.(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n options?.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n const normalizedOptions = typeof evalOptions === \"string\"\n ? { filename: evalOptions }\n : evalOptions;\n diagnostics.lifecycleState = \"active\";\n try {\n await runAbortableOperation(async () => {\n await runtime.eval(code, {\n filename: normalizedOptions?.filename,\n executionTimeout: normalizedOptions?.executionTimeout,\n });\n }, {\n signal: normalizedOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n await options?.onBeforeDispose?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n events: {\n on: (event, handler) => {\n ensureActive();\n return runtime.on(event, handler);\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n" | ||
| ], | ||
| "mappings": ";AAAA;AAAA;AAAA;AAIA;AAGO,SAAS,0BAA0B,CACxC,SACA,aACA,SAIe;AAAA,EACf,OAAO;AAAA,SACC,KAAI,CAAC,MAAM,aAAa;AAAA,MAC5B,MAAM,oBAAoB,OAAO,gBAAgB,WAC7C,EAAE,UAAU,YAAY,IACxB;AAAA,MACJ,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,mBAAmB;AAAA,UAC7B,kBAAkB,mBAAmB;AAAA,QACvC,CAAC;AAAA,QACD,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,QAAO,CAAC,gBAAgB;AAAA,MAC5B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,SAAS,kBAAkB,gBAAgB,MAAM;AAAA,QACjD,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,qBAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,aAAa,YAAY;AAAA,MACvB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,SAAS,aAC3B,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,SAAS,aAC9B,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,yBAAyB,eAAe,gBAAgB,IACxD;AAAA,MACN;AAAA;AAAA,IAEF,QAAQ;AAAA,MACN,IAAI,CAAC,OAAO,YAAY,QAAQ,GAAG,OAAO,OAAO;AAAA,MACjD,MAAM,OAAO,OAAO,YAAY;AAAA,QAC9B,QAAQ,KAAK,OAAO,OAAO;AAAA;AAAA,IAE/B;AAAA,EACF;AAAA;", | ||
| "debugId": "0BFA104EB05B457464756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "04C903505842B1A364756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -11,6 +11,13 @@ // src/runtime/test-runtime.ts | ||
| import { createTestEventSubscriptions } from "./test-event-subscriptions.mjs"; | ||
| import { | ||
| disposeWithUnresponsiveFallback, | ||
| getErrorMessage, | ||
| isAbortError, | ||
| isTerminalExecutionError, | ||
| runAbortableOperation | ||
| } from "./abort.mjs"; | ||
| function createDisposedTestRuntimeError() { | ||
| return new Error("Test runtime has already been disposed."); | ||
| } | ||
| async function createTestRuntimeAdapter(createRuntime, options, adapterOptions) { | ||
| async function createTestRuntimeAdapter(createRuntime, options, adapterOptions, lifecycleOptions) { | ||
| const diagnostics = createRuntimeDiagnostics(); | ||
@@ -38,2 +45,18 @@ const testEvents = createTestEventSubscriptions(); | ||
| testEvents.setEnsureUsable(ensureActive); | ||
| const hardDispose = async (reason) => { | ||
| if (isDisposed) { | ||
| return; | ||
| } | ||
| isDisposed = true; | ||
| await bindingsAdapter.abort(reason); | ||
| try { | ||
| await disposeWithUnresponsiveFallback(() => runtime.dispose({ hard: true, reason }), reason, lifecycleOptions?.onUnresponsiveDispose); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| throw error; | ||
| } | ||
| } finally { | ||
| testEvents.clear(); | ||
| } | ||
| }; | ||
| return { | ||
@@ -44,11 +67,19 @@ async run(code, runOptions) { | ||
| try { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| return await runAbortableOperation(async () => { | ||
| await runtime.testEnvironment.reset(); | ||
| await runtime.eval(code, { | ||
| filename: runOptions?.filename, | ||
| executionTimeout: runOptions?.timeoutMs | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| }, { | ||
| signal: runOptions?.signal, | ||
| disposeOnAbort: hardDispose | ||
| }); | ||
| lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs); | ||
| return lastRun; | ||
| } catch (error) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| if (!isAbortError(error) && isTerminalExecutionError(error)) { | ||
| await hardDispose(diagnostics.lastError).catch(() => {}); | ||
| } | ||
| throw error; | ||
@@ -85,7 +116,7 @@ } finally { | ||
| try { | ||
| bindingsAdapter.abort(disposeOptions?.reason); | ||
| await bindingsAdapter.abort(disposeOptions?.reason); | ||
| await runtime.dispose(disposeOptions); | ||
| } catch (error) { | ||
| if (!isBenignDisposeError(error)) { | ||
| diagnostics.lastError = error instanceof Error ? error.message : String(error); | ||
| diagnostics.lastError = getErrorMessage(error); | ||
| throw error; | ||
@@ -105,2 +136,2 @@ } | ||
| //# debugId=8447E64FE68142EE64756E2164756E21 | ||
| //# debugId=63FEAD0DCCB2181A64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.mjs\";\nimport { createTestEventSubscriptions } from \"./test-event-subscriptions.mjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.mjs\";\n\nfunction createDisposedTestRuntimeError(): Error {\n return new Error(\"Test runtime has already been disposed.\");\n}\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = options.key ?? \"test-runtime\";\n let isDisposed = false;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: {\n onEvent: (event) => testEvents.emit(event),\n },\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedTestRuntimeError();\n }\n };\n testEvents.setEnsureUsable(ensureActive);\n\n return {\n async run(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n testEvents.clear();\n return;\n }\n\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n testEvents.clear();\n }\n },\n test: testEvents.api,\n };\n}\n" | ||
| "import {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport type { RemoteRuntime, RuntimeOptions } from \"../internal/client/index.mjs\";\nimport { isBenignDisposeError } from \"../internal/client/index.mjs\";\nimport { createTestEventSubscriptions } from \"./test-event-subscriptions.mjs\";\nimport type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.mjs\";\nimport {\n disposeWithUnresponsiveFallback,\n getErrorMessage,\n isAbortError,\n isTerminalExecutionError,\n runAbortableOperation,\n type UnresponsiveDisposeHandler,\n} from \"./abort.mjs\";\n\nfunction createDisposedTestRuntimeError(): Error {\n return new Error(\"Test runtime has already been disposed.\");\n}\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n lifecycleOptions?: {\n onUnresponsiveDispose?: UnresponsiveDisposeHandler;\n },\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n const testEvents = createTestEventSubscriptions();\n let runtimeId = options.key ?? \"test-runtime\";\n let isDisposed = false;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: {\n onEvent: (event) => testEvents.emit(event),\n },\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n const ensureActive = (): void => {\n if (isDisposed) {\n throw createDisposedTestRuntimeError();\n }\n };\n testEvents.setEnsureUsable(ensureActive);\n\n const hardDispose = async (reason: string): Promise<void> => {\n if (isDisposed) {\n return;\n }\n isDisposed = true;\n await bindingsAdapter.abort(reason);\n try {\n await disposeWithUnresponsiveFallback(\n () => runtime.dispose({ hard: true, reason }),\n reason,\n lifecycleOptions?.onUnresponsiveDispose,\n );\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n throw error;\n }\n } finally {\n testEvents.clear();\n }\n };\n\n return {\n async run(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n return await runAbortableOperation(async () => {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n }, {\n signal: runOptions?.signal,\n disposeOnAbort: hardDispose,\n });\n } catch (error) {\n diagnostics.lastError = getErrorMessage(error);\n if (!isAbortError(error) && isTerminalExecutionError(error)) {\n await hardDispose(diagnostics.lastError).catch(() => {});\n }\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (isDisposed) {\n testEvents.clear();\n return;\n }\n\n isDisposed = true;\n diagnostics.lifecycleState = \"disposing\";\n try {\n await bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = getErrorMessage(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n testEvents.clear();\n }\n },\n test: testEvents.api,\n };\n}\n" | ||
| ], | ||
| "mappings": ";AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AACA;AAOA,SAAS,8BAA8B,GAAU;AAAA,EAC/C,OAAO,IAAI,MAAM,yCAAyC;AAAA;AAG5D,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,yBAAyB;AAAA,EAC7C,MAAM,aAAa,6BAA6B;AAAA,EAChD,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,IAAI,aAAa;AAAA,EACjB,MAAM,kBAAkB,6BACtB,QAAQ,UACR,MAAM,WACN,aACA,cACF;AAAA,EACA,MAAM,UAAU,MAAM,cAAc;AAAA,OAC/B,gBAAgB;AAAA,IACnB,KAAK,QAAQ;AAAA,IACb,eAAe,QAAQ;AAAA,IACvB,kBAAkB,QAAQ;AAAA,IAC1B,iBAAiB;AAAA,MACf,SAAS,CAAC,UAAU,WAAW,KAAK,KAAK;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EACJ,MAAM,eAAe,MAAY;AAAA,IAC/B,IAAI,YAAY;AAAA,MACd,MAAM,+BAA+B;AAAA,IACvC;AAAA;AAAA,EAEF,WAAW,gBAAgB,YAAY;AAAA,EAEvC,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,aAAa;AAAA,MACb,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,yBAAyB,eAAe,gBAAgB,IACxD;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,iBAAiB,MAAM,QAAQ,gBAAgB,aAAa;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA;AAAA,SAEI,QAAO,CAAC,gBAAgB;AAAA,MAC5B,IAAI,YAAY;AAAA,QACd,WAAW,MAAM;AAAA,QACjB;AAAA,MACF;AAAA,MAEA,aAAa;AAAA,MACb,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,gBAAgB,MAAM;AAAA,QAC5C,MAAM,QAAQ,QAAQ,cAAc;AAAA,QACpC,OAAO,OAAO;AAAA,QACd,IAAI,CAAC,qBAAqB,KAAK,GAAG;AAAA,UAChC,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC7E,MAAM;AAAA,QACR;AAAA,gBACA;AAAA,QACA,YAAY,iBAAiB;AAAA,QAC7B,WAAW,MAAM;AAAA;AAAA;AAAA,IAGrB,MAAM,WAAW;AAAA,EACnB;AAAA;", | ||
| "debugId": "8447E64FE68142EE64756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "63FEAD0DCCB2181A64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -89,3 +89,3 @@ // src/server/app-server.ts | ||
| try { | ||
| bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : "AppServer.reload()"); | ||
| await bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : "AppServer.reload()"); | ||
| await server.reload(reason); | ||
@@ -102,5 +102,5 @@ runtimeId = server.getRuntime()?.id ?? options.key; | ||
| const hardDisposeReason = disposeOptions?.reason ? `AppServer.dispose(hard): ${disposeOptions.reason}` : "AppServer.dispose(hard)"; | ||
| bindingsAdapter.reset(hardDisposeReason); | ||
| await bindingsAdapter.reset(hardDisposeReason); | ||
| await server.reload(hardDisposeReason); | ||
| bindingsAdapter.abort(hardDisposeReason); | ||
| await bindingsAdapter.abort(hardDisposeReason); | ||
| await server.close(hardDisposeReason); | ||
@@ -110,3 +110,3 @@ return; | ||
| const disposeReason = disposeOptions?.reason ? `AppServer.dispose(): ${disposeOptions.reason}` : "AppServer.dispose()"; | ||
| bindingsAdapter.abort(disposeReason); | ||
| await bindingsAdapter.abort(disposeReason); | ||
| await server.close(disposeReason); | ||
@@ -135,2 +135,2 @@ } finally { | ||
| //# debugId=29818A94986CF11064756E2164756E21 | ||
| //# debugId=59BE477B278CCE2B64756E2164756E21 |
@@ -5,7 +5,7 @@ { | ||
| "sourcesContent": [ | ||
| "import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport { withRequestContext } from \"../bridge/request-context.mjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.mjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n };\n const collectedData = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n };\n}\n" | ||
| "import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport {\n createBrowserDiagnostics,\n createRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport {\n createRuntimeBindingsAdapter,\n type RuntimeBindingsAdapterOptions,\n} from \"../bridge/runtime-bindings.mjs\";\nimport { withRequestContext } from \"../bridge/request-context.mjs\";\nimport type { AppServer, CreateAppServerOptions, RequestResult } from \"../types.mjs\";\n\nexport async function createAppServerAdapter(\n getConnection: () => Promise<DaemonConnection>,\n options: CreateAppServerOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<AppServer> {\n const diagnostics = createRuntimeDiagnostics();\n const server = new IsolateServer({\n namespaceId: options.key,\n getConnection,\n });\n\n let runtimeId = options.key;\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n await server.start({\n entry: options.entry,\n entryFilename: options.entryFilename,\n runtimeOptions: {\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n },\n onWebSocketCommand: (command) => {\n options.webSockets?.onCommand?.(command);\n },\n });\n runtimeId = server.getRuntime()?.id ?? options.key;\n\n async function handleRequest(request: Request, handleOptions?: { requestId?: string; signal?: AbortSignal; metadata?: Record<string, string> }): Promise<RequestResult> {\n diagnostics.activeRequests += 1;\n diagnostics.lifecycleState = \"active\";\n try {\n return await withRequestContext(\n {\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n signal: handleOptions?.signal ?? request.signal,\n },\n async () => {\n const response = await server.fetch.dispatchRequest(request, {\n signal: handleOptions?.signal,\n requestId: handleOptions?.requestId,\n metadata: handleOptions?.metadata,\n });\n const upgradeRequest = await server.fetch.getUpgradeRequest();\n if (upgradeRequest?.requested) {\n return {\n type: \"websocket\",\n upgradeData: {\n requested: upgradeRequest.requested,\n connectionId: upgradeRequest.connectionId,\n },\n };\n }\n\n return {\n type: \"response\",\n response,\n };\n },\n );\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.activeRequests -= 1;\n diagnostics.lifecycleState = \"idle\";\n }\n }\n\n return {\n handle: handleRequest,\n ws: {\n open: async (connectionId) => {\n await server.fetch.dispatchWebSocketOpen(connectionId);\n },\n message: async (connectionId, data) => {\n await server.fetch.dispatchWebSocketMessage(connectionId, data);\n },\n close: async (connectionId, code, reason) => {\n await server.fetch.dispatchWebSocketClose(connectionId, code, reason);\n },\n error: async (connectionId, error) => {\n await server.fetch.dispatchWebSocketError(connectionId, error);\n },\n },\n reload: async (reason) => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n await bindingsAdapter.reset(reason ? `AppServer.reload(${reason})` : \"AppServer.reload()\");\n await server.reload(reason);\n runtimeId = server.getRuntime()?.id ?? options.key;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n dispose: async (disposeOptions) => {\n diagnostics.lifecycleState = \"disposing\";\n try {\n if (disposeOptions?.hard) {\n const hardDisposeReason = disposeOptions?.reason\n ? `AppServer.dispose(hard): ${disposeOptions.reason}`\n : \"AppServer.dispose(hard)\";\n await bindingsAdapter.reset(hardDisposeReason);\n await server.reload(hardDisposeReason);\n await bindingsAdapter.abort(hardDisposeReason);\n await server.close(hardDisposeReason);\n return;\n }\n const disposeReason = disposeOptions?.reason\n ? `AppServer.dispose(): ${disposeOptions.reason}`\n : \"AppServer.dispose()\";\n await bindingsAdapter.abort(disposeReason);\n await server.close(disposeReason);\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n };\n const collectedData = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser && server.getRuntime()\n ? server.getRuntime()!.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n };\n },\n };\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "29818A94986CF11064756E2164756E21", | ||
| "mappings": "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", | ||
| "debugId": "59BE477B278CCE2B64756E2164756E21", | ||
| "names": [] | ||
| } |
@@ -7,4 +7,4 @@ import type { RuntimeOptions } from "../internal/client/index.ts"; | ||
| runtimeOptions: RuntimeOptions; | ||
| abort(reason?: unknown): void; | ||
| reset(reason?: unknown): void; | ||
| abort(reason?: unknown): Promise<void>; | ||
| reset(reason?: unknown): Promise<void>; | ||
| } | ||
@@ -11,0 +11,0 @@ export interface RuntimeBindingsAdapterOptions { |
@@ -20,4 +20,5 @@ import type { CreateAppServerOptions, CreateNamespacedRuntimeOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, HostCallContext } from "../types.ts"; | ||
| callResource(kind: NestedResourceKind, resourceId: string, method: string, args: unknown[], context: HostCallContext): Promise<unknown>; | ||
| abortResourceCall(operationId: string, reason: string | undefined, context: HostCallContext): Promise<void>; | ||
| disposeAll?(reason?: string): Promise<void>; | ||
| } | ||
| export declare const SANDBOX_ISOLATE_MODULE_SOURCE: string; |
@@ -5,2 +5,2 @@ export { createIsolateHost } from "./host/index.ts"; | ||
| export { getTypeProfile, typecheck, formatTypecheckErrors } from "./typecheck/index.ts"; | ||
| export type { AppServer, BrowserDiagnostics, ConsoleEntry, CreateAppServerOptions, CreateIsolateHostOptions, CreateNamespacedRuntimeOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, FileBindings, HostBindings, HostBrowserBindings, HostBrowserFactoryBindings, HostBrowserHandlerBindings, HostCallContext, IsolateHost, ModuleImporter, ModuleResolveResult, ModuleResolver, NamespacedRuntime, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource, PlaywrightEvent, NestedHostFetchPolicy, NestedHostPolicy, RequestResult, RuntimeResourceDiagnostics, RunResults, ScriptRuntime, TestDiagnostics, TestEvent, TestRuntime, TestRuntimeDiagnostics, ToolBindings, ToolHandler, RuntimeDiagnostics, TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest, WebSocketUpgradeData, } from "./types.ts"; | ||
| export type { AppServer, BrowserDiagnostics, ConsoleEntry, CreateAppServerOptions, CreateIsolateHostOptions, CreateNamespacedRuntimeOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, FileBindings, HostBindings, HostBrowserBindings, HostBrowserFactoryBindings, HostBrowserHandlerBindings, HostCallContext, IsolateHost, ModuleImporter, ModuleResolveResult, ModuleResolver, NamespacedRuntime, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource, PlaywrightEvent, NestedHostFetchPolicy, NestedHostPolicy, RequestResult, RuntimeResourceDiagnostics, ScriptRuntimeEvalOptions, RunResults, ScriptRuntime, TestRuntimeRunOptions, TestDiagnostics, TestEvent, TestRuntime, TestRuntimeDiagnostics, ToolBindings, ToolHandler, RuntimeDiagnostics, TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest, WebSocketUpgradeData, } from "./types.ts"; |
@@ -5,10 +5,12 @@ import { type MutableRuntimeDiagnostics } from "../bridge/diagnostics.ts"; | ||
| import type { NamespacedRuntime } from "../types.ts"; | ||
| import { type UnresponsiveDisposeHandler } from "./abort.ts"; | ||
| export interface NamespacedRuntimeAdapter extends NamespacedRuntime { | ||
| invalidate(reason?: string): void; | ||
| invalidate(reason?: string): Promise<void>; | ||
| } | ||
| export declare function createNamespacedRuntimeAdapter(runtime: RemoteRuntime, diagnostics: MutableRuntimeDiagnostics, options: { | ||
| hasBrowser?: boolean; | ||
| abortBindings?: (reason?: string) => void; | ||
| abortBindings?: (reason?: string) => void | Promise<void>; | ||
| onUnresponsiveDispose?: UnresponsiveDisposeHandler; | ||
| onRelease?: () => void; | ||
| testEvents: TestEventSubscriptions; | ||
| }): NamespacedRuntimeAdapter; |
| import { type MutableRuntimeDiagnostics } from "../bridge/diagnostics.ts"; | ||
| import { type RemoteRuntime } from "../internal/client/index.ts"; | ||
| import type { ScriptRuntime } from "../types.ts"; | ||
| import { type UnresponsiveDisposeHandler } from "./abort.ts"; | ||
| export declare function createScriptRuntimeAdapter(runtime: RemoteRuntime, diagnostics: MutableRuntimeDiagnostics, options?: { | ||
| hasBrowser?: boolean; | ||
| onBeforeDispose?: (reason?: string) => void; | ||
| onBeforeDispose?: (reason?: string) => void | Promise<void>; | ||
| onUnresponsiveDispose?: UnresponsiveDisposeHandler; | ||
| }): ScriptRuntime; |
| import { type RuntimeBindingsAdapterOptions } from "../bridge/runtime-bindings.ts"; | ||
| import type { RemoteRuntime, RuntimeOptions } from "../internal/client/index.ts"; | ||
| import type { CreateTestRuntimeOptions, TestRuntime } from "../types.ts"; | ||
| export declare function createTestRuntimeAdapter(createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>, options: CreateTestRuntimeOptions, adapterOptions?: RuntimeBindingsAdapterOptions): Promise<TestRuntime>; | ||
| import { type UnresponsiveDisposeHandler } from "./abort.ts"; | ||
| export declare function createTestRuntimeAdapter(createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>, options: CreateTestRuntimeOptions, adapterOptions?: RuntimeBindingsAdapterOptions, lifecycleOptions?: { | ||
| onUnresponsiveDispose?: UnresponsiveDisposeHandler; | ||
| }): Promise<TestRuntime>; |
+14
-16
@@ -224,7 +224,14 @@ import type { ConsoleEntry as LegacyConsoleEntry, PlaywrightEvent as LegacyPlaywrightEvent, RunResults as LegacyRunResults, TestEvent as LegacyTestEvent } from "./internal/client/index.ts"; | ||
| } | ||
| export type ScriptRuntimeEvalOptions = { | ||
| filename?: string; | ||
| executionTimeout?: number; | ||
| signal?: AbortSignal; | ||
| }; | ||
| export type TestRuntimeRunOptions = { | ||
| filename?: string; | ||
| timeoutMs?: number; | ||
| signal?: AbortSignal; | ||
| }; | ||
| export interface ScriptRuntime { | ||
| eval(code: string, options?: string | { | ||
| filename?: string; | ||
| executionTimeout?: number; | ||
| }): Promise<void>; | ||
| eval(code: string, options?: string | ScriptRuntimeEvalOptions): Promise<void>; | ||
| dispose(options?: { | ||
@@ -242,6 +249,3 @@ hard?: boolean; | ||
| export interface TestRuntime { | ||
| run(code: string, options?: { | ||
| filename?: string; | ||
| timeoutMs?: number; | ||
| }): Promise<RunResults>; | ||
| run(code: string, options?: TestRuntimeRunOptions): Promise<RunResults>; | ||
| diagnostics(): Promise<TestRuntimeDiagnostics>; | ||
@@ -258,10 +262,4 @@ dispose(options?: { | ||
| export interface NamespacedRuntime { | ||
| eval(code: string, options?: { | ||
| filename?: string; | ||
| executionTimeout?: number; | ||
| }): Promise<void>; | ||
| runTests(code: string, options?: { | ||
| filename?: string; | ||
| timeoutMs?: number; | ||
| }): Promise<RunResults>; | ||
| eval(code: string, options?: ScriptRuntimeEvalOptions): Promise<void>; | ||
| runTests(code: string, options?: TestRuntimeRunOptions): Promise<RunResults>; | ||
| diagnostics(): Promise<TestRuntimeDiagnostics>; | ||
@@ -268,0 +266,0 @@ dispose(options?: { |
+1
-1
| { | ||
| "name": "@ricsam/isolate", | ||
| "version": "0.1.22", | ||
| "version": "0.1.23", | ||
| "type": "module", | ||
@@ -5,0 +5,0 @@ "description": "Unified runtime host for app servers, script runtimes, browser runtimes, module resolution, file bindings, and typechecking", |
+68
-1
@@ -107,2 +107,59 @@ # @ricsam/isolate | ||
| ### Cancel Running Work | ||
| `eval()`, `run()`, `runTests()`, and app-server `handle()` accept web-style `AbortSignal` options. | ||
| If the signal is already aborted before the call starts, the call rejects with `AbortError` and does not start or dispose the runtime. If a signal aborts while `eval()`, `run()`, or `runTests()` is in flight, the runtime is hard-disposed and the handle becomes unusable. This is intentionally a hard cancellation path so CPU-bound code such as `while (true) {}` cannot keep running. | ||
| ```ts | ||
| const runtime = await host.createRuntime({}); | ||
| const controller = new AbortController(); | ||
| const running = runtime.eval( | ||
| `while (true) {}`, | ||
| { signal: controller.signal }, | ||
| ); | ||
| controller.abort(); | ||
| await running.catch((error) => { | ||
| if (error.name !== "AbortError") { | ||
| throw error; | ||
| } | ||
| }); | ||
| // The runtime was terminated by the abort. | ||
| await runtime.eval(`1 + 1`).catch((error) => { | ||
| console.log(error.message); | ||
| }); | ||
| ``` | ||
| Hard runtime termination cascades through nested hosts. If a parent runtime is aborted, times out, is hard-disposed, or is disposed during execution, child runtimes, nested app servers, test runtimes, and namespaced runtimes created through the sandbox `@ricsam/isolate` module are also disposed. | ||
| Signals created inside sandbox code can cancel nested work live: | ||
| ```ts | ||
| await runtime.eval(` | ||
| import { createIsolateHost } from "@ricsam/isolate"; | ||
| const nestedHost = createIsolateHost(); | ||
| const child = await nestedHost.createRuntime(); | ||
| const controller = new AbortController(); | ||
| const running = child.eval("await new Promise(() => {})", { | ||
| signal: controller.signal, | ||
| }); | ||
| controller.abort(); | ||
| try { | ||
| await running; | ||
| } catch (error) { | ||
| console.log(error.name); // AbortError | ||
| } | ||
| `); | ||
| ``` | ||
| For app servers, `handle(request, { signal })` is request-scoped. Aborting the request signal cancels that one request and is visible as `request.signal.aborted` inside the sandbox; it does not dispose the server runtime unless the owning runtime is otherwise terminated. Inside a sandbox app server, pass `request.signal` to a nested app server `handle()` call to forward the same request cancellation. | ||
| ### Configure Bindings | ||
@@ -250,3 +307,3 @@ | ||
| `server.handle()` returns either an HTTP response or WebSocket upgrade metadata. For upgraded connections, `server.ws` lets the host send open, message, close, and error events back into the runtime. | ||
| `server.handle()` returns either an HTTP response or WebSocket upgrade metadata. Pass `handle(request, { signal })` to forward request cancellation into the sandbox as `request.signal`. For upgraded connections, `server.ws` lets the host send open, message, close, and error events back into the runtime. | ||
@@ -547,2 +604,12 @@ ### Add Browser Support To Script And Server Runtimes | ||
| Execution methods support: | ||
| - `runtime.eval(code, { filename?, executionTimeout?, signal? })` | ||
| - `testRuntime.run(code, { filename?, timeoutMs?, signal? })` | ||
| - `namespacedRuntime.eval(code, { filename?, executionTimeout?, signal? })` | ||
| - `namespacedRuntime.runTests(code, { filename?, timeoutMs?, signal? })` | ||
| - `appServer.handle(request, { requestId?, metadata?, signal? })` | ||
| When `signal` aborts an in-flight script or test execution, the runtime is hard-disposed and nested resources are terminated recursively. Pre-aborted signals reject with `AbortError` before starting execution. | ||
| ### `createModuleResolver()` | ||
@@ -549,0 +616,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
6208873
1.53%344
1.47%66359
1.57%691
10.74%