@ricsam/isolate 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +257 -18
- package/dist/cjs/bridge/diagnostics.cjs +37 -2
- package/dist/cjs/bridge/diagnostics.cjs.map +3 -3
- package/dist/cjs/bridge/runtime-bindings.cjs +230 -51
- package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
- package/dist/cjs/bridge/sandbox-isolate.cjs +464 -0
- package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
- package/dist/cjs/host/create-isolate-host.cjs +130 -25
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/nested-host-controller.cjs +369 -0
- package/dist/cjs/host/nested-host-controller.cjs.map +10 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/internal/browser-source.cjs +102 -0
- package/dist/cjs/internal/browser-source.cjs.map +10 -0
- package/dist/cjs/internal/client/connection.cjs +163 -172
- package/dist/cjs/internal/client/connection.cjs.map +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +3 -3
- package/dist/cjs/internal/daemon/connection.cjs +156 -13
- package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
- package/dist/cjs/internal/playwright/client.cjs +4 -2
- package/dist/cjs/internal/playwright/client.cjs.map +3 -3
- package/dist/cjs/internal/playwright/handler.cjs +298 -25
- package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
- package/dist/cjs/internal/playwright/index.cjs +54 -8
- package/dist/cjs/internal/playwright/index.cjs.map +3 -3
- package/dist/cjs/internal/playwright/types.cjs +3 -1
- package/dist/cjs/internal/playwright/types.cjs.map +3 -3
- package/dist/cjs/internal/protocol/codec.cjs +16 -5
- package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
- package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
- package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
- package/dist/cjs/internal/protocol/types.cjs +2 -1
- package/dist/cjs/internal/protocol/types.cjs.map +3 -3
- package/dist/cjs/internal/runtime/index.cjs +377 -22
- package/dist/cjs/internal/runtime/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/index.cjs +2 -1
- package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/isolate-types.cjs +218 -13
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/playwright.cjs +76 -0
- package/dist/cjs/playwright.cjs.map +10 -0
- package/dist/cjs/runtime/namespaced-runtime.cjs +181 -0
- package/dist/cjs/runtime/namespaced-runtime.cjs.map +10 -0
- package/dist/cjs/runtime/script-runtime.cjs +14 -12
- package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
- package/dist/cjs/runtime/test-runtime.cjs +113 -0
- package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
- package/dist/cjs/server/app-server.cjs +16 -9
- package/dist/cjs/server/app-server.cjs.map +3 -3
- package/dist/cjs/typecheck/index.cjs +2 -1
- package/dist/cjs/typecheck/index.cjs.map +3 -3
- package/dist/mjs/bridge/diagnostics.mjs +37 -2
- package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
- package/dist/mjs/bridge/runtime-bindings.mjs +233 -51
- package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
- package/dist/mjs/bridge/sandbox-isolate.mjs +424 -0
- package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
- package/dist/mjs/host/create-isolate-host.mjs +132 -25
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/nested-host-controller.mjs +333 -0
- package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
- package/dist/mjs/index.mjs.map +1 -1
- package/dist/mjs/internal/browser-source.mjs +62 -0
- package/dist/mjs/internal/browser-source.mjs.map +10 -0
- package/dist/mjs/internal/client/connection.mjs +165 -173
- package/dist/mjs/internal/client/connection.mjs.map +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
- package/dist/mjs/internal/daemon/connection.mjs +156 -13
- package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
- package/dist/mjs/internal/playwright/client.mjs +7 -3
- package/dist/mjs/internal/playwright/client.mjs.map +3 -3
- package/dist/mjs/internal/playwright/handler.mjs +300 -26
- package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
- package/dist/mjs/internal/playwright/index.mjs +59 -9
- package/dist/mjs/internal/playwright/index.mjs.map +3 -3
- package/dist/mjs/internal/playwright/types.mjs +3 -1
- package/dist/mjs/internal/playwright/types.mjs.map +3 -3
- package/dist/mjs/internal/protocol/codec.mjs +16 -5
- package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
- package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
- package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
- package/dist/mjs/internal/protocol/types.mjs +2 -1
- package/dist/mjs/internal/protocol/types.mjs.map +3 -3
- package/dist/mjs/internal/runtime/index.mjs +377 -22
- package/dist/mjs/internal/runtime/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/index.mjs +3 -1
- package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/isolate-types.mjs +218 -13
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/playwright.mjs +47 -0
- package/dist/mjs/playwright.mjs.map +10 -0
- package/dist/mjs/runtime/namespaced-runtime.mjs +143 -0
- package/dist/mjs/runtime/namespaced-runtime.mjs.map +10 -0
- package/dist/mjs/runtime/script-runtime.mjs +16 -12
- package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
- package/dist/mjs/runtime/test-runtime.mjs +78 -0
- package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
- package/dist/mjs/server/app-server.mjs +23 -11
- package/dist/mjs/server/app-server.mjs.map +3 -3
- package/dist/mjs/typecheck/index.mjs +2 -1
- package/dist/mjs/typecheck/index.mjs.map +3 -3
- package/dist/types/bridge/diagnostics.d.ts +6 -1
- package/dist/types/bridge/runtime-bindings.d.ts +5 -1
- package/dist/types/bridge/sandbox-isolate.d.ts +21 -0
- package/dist/types/host/nested-host-controller.d.ts +15 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal/browser-source.d.ts +10 -0
- package/dist/types/internal/client/types.d.ts +9 -0
- package/dist/types/internal/daemon/types.d.ts +0 -2
- package/dist/types/internal/playwright/client.d.ts +2 -2
- package/dist/types/internal/playwright/handler.d.ts +27 -4
- package/dist/types/internal/playwright/index.d.ts +2 -2
- package/dist/types/internal/playwright/types.d.ts +33 -1
- package/dist/types/internal/protocol/codec.d.ts +12 -2
- package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
- package/dist/types/internal/protocol/types.d.ts +33 -2
- package/dist/types/internal/runtime/index.d.ts +5 -0
- package/dist/types/internal/typecheck/index.d.ts +1 -1
- package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
- package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
- package/dist/types/playwright.d.ts +26 -0
- package/dist/types/runtime/namespaced-runtime.d.ts +11 -0
- package/dist/types/runtime/script-runtime.d.ts +2 -1
- package/dist/types/runtime/test-runtime.d.ts +4 -0
- package/dist/types/server/app-server.d.ts +2 -1
- package/dist/types/types.d.ts +75 -33
- package/package.json +8 -3
- package/dist/cjs/browser/browser-runtime.cjs +0 -157
- package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
- package/dist/mjs/browser/browser-runtime.mjs +0 -93
- package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
- package/dist/types/browser/browser-runtime.d.ts +0 -3
package/dist/mjs/package.json
CHANGED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/playwright.ts
|
|
2
|
+
import {
|
|
3
|
+
createPlaywrightFactoryHandler,
|
|
4
|
+
getPlaywrightHandlerMetadata
|
|
5
|
+
} from "./internal/playwright/client.mjs";
|
|
6
|
+
import {
|
|
7
|
+
DEFAULT_PLAYWRIGHT_HANDLER_META,
|
|
8
|
+
PLAYWRIGHT_HANDLER_META
|
|
9
|
+
} from "./internal/playwright/types.mjs";
|
|
10
|
+
import {
|
|
11
|
+
createPlaywrightHandler,
|
|
12
|
+
defaultPlaywrightHandler,
|
|
13
|
+
getDefaultPlaywrightHandlerMetadata,
|
|
14
|
+
getPlaywrightHandlerMetadata as getPlaywrightHandlerMetadata2
|
|
15
|
+
} from "./internal/playwright/client.mjs";
|
|
16
|
+
function createPlaywrightSessionHandler(options = {}) {
|
|
17
|
+
const handler = createPlaywrightFactoryHandler({
|
|
18
|
+
timeout: options.timeout,
|
|
19
|
+
createContext: options.createContext,
|
|
20
|
+
createPage: options.createPage,
|
|
21
|
+
readFile: options.readFile,
|
|
22
|
+
writeFile: options.writeFile,
|
|
23
|
+
evaluatePredicate: options.evaluatePredicate
|
|
24
|
+
});
|
|
25
|
+
const metadata = getPlaywrightHandlerMetadata(handler);
|
|
26
|
+
if (!metadata?.collector) {
|
|
27
|
+
throw new Error("Playwright session handler metadata is unavailable for the generated handler.");
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
handler,
|
|
31
|
+
getCollectedData: () => metadata.collector.getCollectedData(),
|
|
32
|
+
getTrackedResources: () => metadata.collector.getTrackedResources(),
|
|
33
|
+
clearCollectedData: () => metadata.collector.clearCollectedData(),
|
|
34
|
+
onEvent: (callback) => metadata.collector.onEvent(callback)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
getPlaywrightHandlerMetadata2 as getPlaywrightHandlerMetadata,
|
|
39
|
+
getDefaultPlaywrightHandlerMetadata,
|
|
40
|
+
defaultPlaywrightHandler,
|
|
41
|
+
createPlaywrightSessionHandler,
|
|
42
|
+
createPlaywrightHandler,
|
|
43
|
+
PLAYWRIGHT_HANDLER_META,
|
|
44
|
+
DEFAULT_PLAYWRIGHT_HANDLER_META
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
//# debugId=33EE7EC7A3131B1264756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/playwright.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n createPlaywrightFactoryHandler,\n getPlaywrightHandlerMetadata,\n type PlaywrightCallback,\n} from \"./internal/playwright/client.mjs\";\nimport type {\n CollectedData,\n PlaywrightEvent,\n PlaywrightFileData,\n PlaywrightOperation,\n PlaywrightResult,\n} from \"./internal/protocol/index.mjs\";\n\nexport type PlaywrightSessionHandlerCallback = PlaywrightCallback;\n\nexport interface CreatePlaywrightSessionHandlerOptions<\n TContext = unknown,\n TPage = unknown,\n TContextOptions = unknown,\n> {\n timeout?: number;\n createContext?: (\n options?: TContextOptions,\n ) => Promise<TContext> | TContext;\n createPage?: (context: TContext) => Promise<TPage> | TPage;\n readFile?: (\n filePath: string,\n ) => Promise<PlaywrightFileData> | PlaywrightFileData;\n writeFile?: (\n filePath: string,\n data: Buffer,\n ) => Promise<void> | void;\n evaluatePredicate?: (predicateId: number, data: unknown) => boolean;\n}\n\nexport interface PlaywrightSessionHandler {\n handler: PlaywrightSessionHandlerCallback;\n getCollectedData(): CollectedData;\n getTrackedResources(): { contexts: string[]; pages: string[] };\n clearCollectedData(): void;\n onEvent(callback: (event: PlaywrightEvent) => void): () => void;\n}\n\nexport {\n DEFAULT_PLAYWRIGHT_HANDLER_META,\n PLAYWRIGHT_HANDLER_META,\n} from \"./internal/playwright/types.mjs\";\n\nexport type {\n BrowserConsoleLogEntry,\n DefaultPlaywrightHandler,\n DefaultPlaywrightHandlerMetadata,\n DefaultPlaywrightHandlerOptions,\n NetworkRequestInfo,\n NetworkResponseInfo,\n PageErrorInfo,\n PlaywrightCollector,\n PlaywrightHandlerMetadata,\n PlaywrightHandle,\n RequestFailureInfo,\n} from \"./internal/playwright/client.mjs\";\n\nexport type {\n CollectedData,\n PlaywrightEvent,\n PlaywrightFileData,\n PlaywrightOperation,\n PlaywrightResult,\n};\n\nexport {\n createPlaywrightHandler,\n defaultPlaywrightHandler,\n getDefaultPlaywrightHandlerMetadata,\n getPlaywrightHandlerMetadata,\n} from \"./internal/playwright/client.mjs\";\n\nexport function createPlaywrightSessionHandler<\n TContext = unknown,\n TPage = unknown,\n TContextOptions = unknown,\n>(\n options: CreatePlaywrightSessionHandlerOptions<\n TContext,\n TPage,\n TContextOptions\n > = {},\n): PlaywrightSessionHandler {\n const handler = createPlaywrightFactoryHandler({\n timeout: options.timeout,\n createContext: options.createContext,\n createPage: options.createPage,\n readFile: options.readFile,\n writeFile: options.writeFile,\n evaluatePredicate: options.evaluatePredicate,\n } as Parameters<typeof createPlaywrightFactoryHandler>[0]);\n const metadata = getPlaywrightHandlerMetadata(handler);\n\n if (!metadata?.collector) {\n throw new Error(\n \"Playwright session handler metadata is unavailable for the generated handler.\",\n );\n }\n\n return {\n handler: handler as (\n op: PlaywrightOperation,\n ) => Promise<PlaywrightResult>,\n getCollectedData: () => metadata.collector.getCollectedData(),\n getTrackedResources: () => metadata.collector.getTrackedResources(),\n clearCollectedData: () => metadata.collector.clearCollectedData(),\n onEvent: (callback) => metadata.collector.onEvent(callback),\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAAA;AAAA;AAAA;AAAA;AA2CA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA,kCAIE;AAAA;AAGK,SAAS,8BAIf,CACC,UAII,CAAC,GACqB;AAAA,EAC1B,MAAM,UAAU,+BAA+B;AAAA,IAC7C,SAAS,QAAQ;AAAA,IACjB,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,IACpB,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,mBAAmB,QAAQ;AAAA,EAC7B,CAAyD;AAAA,EACzD,MAAM,WAAW,6BAA6B,OAAO;AAAA,EAErD,IAAI,CAAC,UAAU,WAAW;AAAA,IACxB,MAAM,IAAI,MACR,+EACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IAGA,kBAAkB,MAAM,SAAS,UAAU,iBAAiB;AAAA,IAC5D,qBAAqB,MAAM,SAAS,UAAU,oBAAoB;AAAA,IAClE,oBAAoB,MAAM,SAAS,UAAU,mBAAmB;AAAA,IAChE,SAAS,CAAC,aAAa,SAAS,UAAU,QAAQ,QAAQ;AAAA,EAC5D;AAAA;",
|
|
8
|
+
"debugId": "33EE7EC7A3131B1264756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// src/runtime/namespaced-runtime.ts
|
|
2
|
+
import {
|
|
3
|
+
createBrowserDiagnostics
|
|
4
|
+
} from "../bridge/diagnostics.mjs";
|
|
5
|
+
import { isBenignDisposeError } from "../internal/client/index.mjs";
|
|
6
|
+
function createStateError(state, reason) {
|
|
7
|
+
if (state === "invalidated") {
|
|
8
|
+
const error2 = new Error(reason && reason.length > 0 ? `Namespaced runtime is no longer available: ${reason}` : "Namespaced runtime is no longer available.");
|
|
9
|
+
error2.name = "NamespacedRuntimeInvalidatedError";
|
|
10
|
+
return error2;
|
|
11
|
+
}
|
|
12
|
+
const error = new Error("Namespaced runtime has already been disposed.");
|
|
13
|
+
error.name = "NamespacedRuntimeDisposedError";
|
|
14
|
+
return error;
|
|
15
|
+
}
|
|
16
|
+
function createNamespacedRuntimeAdapter(runtime, diagnostics, options) {
|
|
17
|
+
let state = "active";
|
|
18
|
+
let lastRun;
|
|
19
|
+
let invalidationReason;
|
|
20
|
+
let released = false;
|
|
21
|
+
const subscriptions = new Set;
|
|
22
|
+
const release = () => {
|
|
23
|
+
if (released) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
released = true;
|
|
27
|
+
for (const unsubscribe of subscriptions) {
|
|
28
|
+
unsubscribe();
|
|
29
|
+
}
|
|
30
|
+
subscriptions.clear();
|
|
31
|
+
options?.onRelease?.();
|
|
32
|
+
};
|
|
33
|
+
const ensureActive = () => {
|
|
34
|
+
if (state !== "active") {
|
|
35
|
+
throw createStateError(state, invalidationReason);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
async eval(code, evalOptions) {
|
|
40
|
+
ensureActive();
|
|
41
|
+
diagnostics.lifecycleState = "active";
|
|
42
|
+
try {
|
|
43
|
+
await runtime.eval(code, {
|
|
44
|
+
filename: evalOptions?.filename,
|
|
45
|
+
executionTimeout: evalOptions?.executionTimeout
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
49
|
+
throw error;
|
|
50
|
+
} finally {
|
|
51
|
+
diagnostics.lifecycleState = "idle";
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
async runTests(code, runOptions) {
|
|
55
|
+
ensureActive();
|
|
56
|
+
diagnostics.lifecycleState = "active";
|
|
57
|
+
try {
|
|
58
|
+
await runtime.testEnvironment.reset();
|
|
59
|
+
await runtime.eval(code, {
|
|
60
|
+
filename: runOptions?.filename,
|
|
61
|
+
executionTimeout: runOptions?.timeoutMs
|
|
62
|
+
});
|
|
63
|
+
lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);
|
|
64
|
+
return lastRun;
|
|
65
|
+
} catch (error) {
|
|
66
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
67
|
+
throw error;
|
|
68
|
+
} finally {
|
|
69
|
+
diagnostics.lifecycleState = "idle";
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
async diagnostics() {
|
|
73
|
+
ensureActive();
|
|
74
|
+
const runtimeDiagnostics = {
|
|
75
|
+
...diagnostics,
|
|
76
|
+
reused: runtime.reused
|
|
77
|
+
};
|
|
78
|
+
const collectedData = options?.hasBrowser ? runtime.playwright.getCollectedData() : undefined;
|
|
79
|
+
const trackedResources = options?.hasBrowser ? runtime.playwright.getTrackedResources() : undefined;
|
|
80
|
+
return {
|
|
81
|
+
runtime: runtimeDiagnostics,
|
|
82
|
+
browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined,
|
|
83
|
+
test: {
|
|
84
|
+
enabled: true,
|
|
85
|
+
registeredTests: await runtime.testEnvironment.getTestCount(),
|
|
86
|
+
lastRun
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
async dispose(disposeOptions) {
|
|
91
|
+
if (state === "invalidated" || state === "disposed") {
|
|
92
|
+
release();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
state = "disposed";
|
|
96
|
+
diagnostics.lifecycleState = "disposing";
|
|
97
|
+
try {
|
|
98
|
+
options?.abortBindings?.(disposeOptions?.reason);
|
|
99
|
+
await runtime.dispose(disposeOptions);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
if (!isBenignDisposeError(error)) {
|
|
102
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
} finally {
|
|
106
|
+
diagnostics.lifecycleState = "idle";
|
|
107
|
+
release();
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
invalidate(reason) {
|
|
111
|
+
if (state === "disposed" || state === "invalidated") {
|
|
112
|
+
release();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
state = "invalidated";
|
|
116
|
+
invalidationReason = reason;
|
|
117
|
+
diagnostics.lifecycleState = "idle";
|
|
118
|
+
options?.abortBindings?.(reason);
|
|
119
|
+
release();
|
|
120
|
+
},
|
|
121
|
+
events: {
|
|
122
|
+
on: (event, handler) => {
|
|
123
|
+
ensureActive();
|
|
124
|
+
const unsubscribe = runtime.on(event, handler);
|
|
125
|
+
subscriptions.add(unsubscribe);
|
|
126
|
+
return () => {
|
|
127
|
+
if (subscriptions.delete(unsubscribe)) {
|
|
128
|
+
unsubscribe();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
},
|
|
132
|
+
emit: async (event, payload) => {
|
|
133
|
+
ensureActive();
|
|
134
|
+
runtime.emit(event, payload);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
createNamespacedRuntimeAdapter
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
//# debugId=92EF09126B0797AF64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/runtime/namespaced-runtime.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n createBrowserDiagnostics,\n type MutableRuntimeDiagnostics,\n} from \"../bridge/diagnostics.mjs\";\nimport { isBenignDisposeError, type RemoteRuntime } from \"../internal/client/index.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 },\n): NamespacedRuntimeAdapter {\n let state: RuntimeState = \"active\";\n let lastRun: RunResults | undefined;\n let invalidationReason: string | undefined;\n let released = false;\n const subscriptions = new Set<() => void>();\n\n const release = () => {\n if (released) {\n return;\n }\n released = true;\n for (const unsubscribe of subscriptions) {\n unsubscribe();\n }\n subscriptions.clear();\n options?.onRelease?.();\n };\n\n const ensureActive = (): void => {\n if (state !== \"active\") {\n throw createStateError(state, invalidationReason);\n }\n };\n\n return {\n async eval(code, evalOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.eval(code, {\n filename: evalOptions?.filename,\n executionTimeout: evalOptions?.executionTimeout,\n });\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async runTests(code, runOptions) {\n ensureActive();\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics(): Promise<TestRuntimeDiagnostics> {\n ensureActive();\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options?.hasBrowser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options?.hasBrowser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n if (state === \"invalidated\" || state === \"disposed\") {\n release();\n return;\n }\n\n state = \"disposed\";\n diagnostics.lifecycleState = \"disposing\";\n try {\n options?.abortBindings?.(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n release();\n }\n },\n invalidate(reason) {\n if (state === \"disposed\" || state === \"invalidated\") {\n release();\n return;\n }\n state = \"invalidated\";\n invalidationReason = reason;\n diagnostics.lifecycleState = \"idle\";\n options?.abortBindings?.(reason);\n release();\n },\n events: {\n on: (event, handler) => {\n ensureActive();\n const unsubscribe = runtime.on(event, handler);\n subscriptions.add(unsubscribe);\n return () => {\n if (subscriptions.delete(unsubscribe)) {\n unsubscribe();\n }\n };\n },\n emit: async (event, payload) => {\n ensureActive();\n runtime.emit(event, payload);\n },\n },\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "92EF09126B0797AF64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// src/runtime/script-runtime.ts
|
|
2
|
+
import {
|
|
3
|
+
createBrowserDiagnostics
|
|
4
|
+
} from "../bridge/diagnostics.mjs";
|
|
2
5
|
import { isBenignDisposeError } from "../internal/client/index.mjs";
|
|
3
6
|
function createScriptRuntimeAdapter(runtime, diagnostics, options) {
|
|
4
7
|
return {
|
|
@@ -31,22 +34,23 @@ function createScriptRuntimeAdapter(runtime, diagnostics, options) {
|
|
|
31
34
|
diagnostics.lifecycleState = "idle";
|
|
32
35
|
}
|
|
33
36
|
},
|
|
34
|
-
diagnostics: async () =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
diagnostics: async () => {
|
|
38
|
+
const runtimeDiagnostics = {
|
|
39
|
+
...diagnostics,
|
|
40
|
+
reused: runtime.reused
|
|
41
|
+
};
|
|
42
|
+
const collectedData = options?.hasBrowser ? runtime.playwright.getCollectedData() : undefined;
|
|
43
|
+
const trackedResources = options?.hasBrowser ? runtime.playwright.getTrackedResources() : undefined;
|
|
44
|
+
return {
|
|
45
|
+
runtime: runtimeDiagnostics,
|
|
46
|
+
browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined
|
|
47
|
+
};
|
|
48
|
+
},
|
|
38
49
|
events: {
|
|
39
50
|
on: (event, handler) => runtime.on(event, handler),
|
|
40
51
|
emit: async (event, payload) => {
|
|
41
52
|
runtime.emit(event, payload);
|
|
42
53
|
}
|
|
43
|
-
},
|
|
44
|
-
tests: {
|
|
45
|
-
run: async (testOptions) => await runtime.testEnvironment.runTests(testOptions?.timeoutMs),
|
|
46
|
-
hasTests: async () => await runtime.testEnvironment.hasTests(),
|
|
47
|
-
reset: async () => {
|
|
48
|
-
await runtime.testEnvironment.reset();
|
|
49
|
-
}
|
|
50
54
|
}
|
|
51
55
|
};
|
|
52
56
|
}
|
|
@@ -54,4 +58,4 @@ export {
|
|
|
54
58
|
createScriptRuntimeAdapter
|
|
55
59
|
};
|
|
56
60
|
|
|
57
|
-
//# debugId=
|
|
61
|
+
//# debugId=0BFA104EB05B457464756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/runtime/script-runtime.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type
|
|
5
|
+
"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"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";
|
|
8
|
-
"debugId": "
|
|
7
|
+
"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;",
|
|
8
|
+
"debugId": "0BFA104EB05B457464756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/runtime/test-runtime.ts
|
|
2
|
+
import {
|
|
3
|
+
createBrowserDiagnostics,
|
|
4
|
+
createRuntimeDiagnostics
|
|
5
|
+
} from "../bridge/diagnostics.mjs";
|
|
6
|
+
import {
|
|
7
|
+
createRuntimeBindingsAdapter
|
|
8
|
+
} from "../bridge/runtime-bindings.mjs";
|
|
9
|
+
import { isBenignDisposeError } from "../internal/client/index.mjs";
|
|
10
|
+
async function createTestRuntimeAdapter(createRuntime, options, adapterOptions) {
|
|
11
|
+
const diagnostics = createRuntimeDiagnostics();
|
|
12
|
+
let runtimeId = options.key ?? "test-runtime";
|
|
13
|
+
const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, adapterOptions);
|
|
14
|
+
const runtime = await createRuntime({
|
|
15
|
+
...bindingsAdapter.runtimeOptions,
|
|
16
|
+
cwd: options.cwd,
|
|
17
|
+
memoryLimitMB: options.memoryLimitMB,
|
|
18
|
+
executionTimeout: options.executionTimeout,
|
|
19
|
+
testEnvironment: true
|
|
20
|
+
});
|
|
21
|
+
runtimeId = runtime.id;
|
|
22
|
+
let lastRun;
|
|
23
|
+
return {
|
|
24
|
+
async run(code, runOptions) {
|
|
25
|
+
diagnostics.lifecycleState = "active";
|
|
26
|
+
try {
|
|
27
|
+
await runtime.testEnvironment.reset();
|
|
28
|
+
await runtime.eval(code, {
|
|
29
|
+
filename: runOptions?.filename,
|
|
30
|
+
executionTimeout: runOptions?.timeoutMs
|
|
31
|
+
});
|
|
32
|
+
lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);
|
|
33
|
+
return lastRun;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
36
|
+
throw error;
|
|
37
|
+
} finally {
|
|
38
|
+
diagnostics.lifecycleState = "idle";
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
async diagnostics() {
|
|
42
|
+
const runtimeDiagnostics = {
|
|
43
|
+
...diagnostics,
|
|
44
|
+
reused: runtime.reused
|
|
45
|
+
};
|
|
46
|
+
const collectedData = options.bindings.browser ? runtime.playwright.getCollectedData() : undefined;
|
|
47
|
+
const trackedResources = options.bindings.browser ? runtime.playwright.getTrackedResources() : undefined;
|
|
48
|
+
return {
|
|
49
|
+
runtime: runtimeDiagnostics,
|
|
50
|
+
browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined,
|
|
51
|
+
test: {
|
|
52
|
+
enabled: true,
|
|
53
|
+
registeredTests: await runtime.testEnvironment.getTestCount(),
|
|
54
|
+
lastRun
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
async dispose(disposeOptions) {
|
|
59
|
+
diagnostics.lifecycleState = "disposing";
|
|
60
|
+
try {
|
|
61
|
+
bindingsAdapter.abort(disposeOptions?.reason);
|
|
62
|
+
await runtime.dispose(disposeOptions);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (!isBenignDisposeError(error)) {
|
|
65
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
} finally {
|
|
69
|
+
diagnostics.lifecycleState = "idle";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
createTestRuntimeAdapter
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
//# debugId=5E07E630DF3B621F64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/runtime/test-runtime.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"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 type {\n CreateTestRuntimeOptions,\n RunResults,\n TestRuntime,\n} from \"../types.mjs\";\n\nexport async function createTestRuntimeAdapter(\n createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>,\n options: CreateTestRuntimeOptions,\n adapterOptions?: RuntimeBindingsAdapterOptions,\n): Promise<TestRuntime> {\n const diagnostics = createRuntimeDiagnostics();\n let runtimeId = options.key ?? \"test-runtime\";\n const bindingsAdapter = createRuntimeBindingsAdapter(\n options.bindings,\n () => runtimeId,\n diagnostics,\n adapterOptions,\n );\n const runtime = await createRuntime({\n ...bindingsAdapter.runtimeOptions,\n cwd: options.cwd,\n memoryLimitMB: options.memoryLimitMB,\n executionTimeout: options.executionTimeout,\n testEnvironment: true,\n });\n runtimeId = runtime.id;\n\n let lastRun: RunResults | undefined;\n\n return {\n async run(code, runOptions) {\n diagnostics.lifecycleState = \"active\";\n try {\n await runtime.testEnvironment.reset();\n await runtime.eval(code, {\n filename: runOptions?.filename,\n executionTimeout: runOptions?.timeoutMs,\n });\n lastRun = await runtime.testEnvironment.runTests(runOptions?.timeoutMs);\n return lastRun;\n } catch (error) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n async diagnostics() {\n const runtimeDiagnostics = {\n ...diagnostics,\n reused: runtime.reused,\n };\n const collectedData = options.bindings.browser\n ? runtime.playwright.getCollectedData()\n : undefined;\n const trackedResources = options.bindings.browser\n ? runtime.playwright.getTrackedResources()\n : undefined;\n return {\n runtime: runtimeDiagnostics,\n browser: collectedData\n ? createBrowserDiagnostics(collectedData, trackedResources)\n : undefined,\n test: {\n enabled: true as const,\n registeredTests: await runtime.testEnvironment.getTestCount(),\n lastRun,\n },\n };\n },\n async dispose(disposeOptions) {\n diagnostics.lifecycleState = \"disposing\";\n try {\n bindingsAdapter.abort(disposeOptions?.reason);\n await runtime.dispose(disposeOptions);\n } catch (error) {\n if (!isBenignDisposeError(error)) {\n diagnostics.lastError = error instanceof Error ? error.message : String(error);\n throw error;\n }\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAKA;AAOA,eAAsB,wBAAwB,CAC5C,eACA,SACA,gBACsB;AAAA,EACtB,MAAM,cAAc,yBAAyB;AAAA,EAC7C,IAAI,YAAY,QAAQ,OAAO;AAAA,EAC/B,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,EACnB,CAAC;AAAA,EACD,YAAY,QAAQ;AAAA,EAEpB,IAAI;AAAA,EAEJ,OAAO;AAAA,SACC,IAAG,CAAC,MAAM,YAAY;AAAA,MAC1B,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,QAAQ,gBAAgB,MAAM;AAAA,QACpC,MAAM,QAAQ,KAAK,MAAM;AAAA,UACvB,UAAU,YAAY;AAAA,UACtB,kBAAkB,YAAY;AAAA,QAChC,CAAC;AAAA,QACD,UAAU,MAAM,QAAQ,gBAAgB,SAAS,YAAY,SAAS;AAAA,QACtE,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC7E,MAAM;AAAA,gBACN;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,SAG3B,YAAW,GAAG;AAAA,MAClB,MAAM,qBAAqB;AAAA,WACtB;AAAA,QACH,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,gBAAgB,QAAQ,SAAS,UACnC,QAAQ,WAAW,iBAAiB,IACpC;AAAA,MACJ,MAAM,mBAAmB,QAAQ,SAAS,UACtC,QAAQ,WAAW,oBAAoB,IACvC;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS,gBACL,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,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;AAAA;AAAA,EAGnC;AAAA;",
|
|
8
|
+
"debugId": "5E07E630DF3B621F64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
// src/server/app-server.ts
|
|
2
2
|
import { IsolateServer } from "../internal/server/index.mjs";
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
createBrowserDiagnostics,
|
|
5
|
+
createRuntimeDiagnostics
|
|
6
|
+
} from "../bridge/diagnostics.mjs";
|
|
7
|
+
import {
|
|
8
|
+
createRuntimeBindingsAdapter
|
|
9
|
+
} from "../bridge/runtime-bindings.mjs";
|
|
5
10
|
import { withRequestContext } from "../bridge/request-context.mjs";
|
|
6
|
-
async function createAppServerAdapter(getConnection, options) {
|
|
11
|
+
async function createAppServerAdapter(getConnection, options, adapterOptions) {
|
|
7
12
|
const diagnostics = createRuntimeDiagnostics();
|
|
8
13
|
const server = new IsolateServer({
|
|
9
14
|
namespaceId: options.key,
|
|
10
15
|
getConnection
|
|
11
16
|
});
|
|
12
17
|
let runtimeId = options.key;
|
|
13
|
-
const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics);
|
|
18
|
+
const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics, adapterOptions);
|
|
14
19
|
await server.start({
|
|
15
20
|
entry: options.entry,
|
|
16
21
|
entryFilename: options.entryFilename,
|
|
@@ -18,8 +23,7 @@ async function createAppServerAdapter(getConnection, options) {
|
|
|
18
23
|
...bindingsAdapter.runtimeOptions,
|
|
19
24
|
cwd: options.cwd,
|
|
20
25
|
memoryLimitMB: options.memoryLimitMB,
|
|
21
|
-
executionTimeout: options.executionTimeout
|
|
22
|
-
testEnvironment: options.features?.tests ?? false
|
|
26
|
+
executionTimeout: options.executionTimeout
|
|
23
27
|
},
|
|
24
28
|
onWebSocketCommand: (command) => {
|
|
25
29
|
options.webSockets?.onCommand?.(command);
|
|
@@ -107,14 +111,22 @@ async function createAppServerAdapter(getConnection, options) {
|
|
|
107
111
|
diagnostics.lifecycleState = "idle";
|
|
108
112
|
}
|
|
109
113
|
},
|
|
110
|
-
diagnostics: async () =>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
diagnostics: async () => {
|
|
115
|
+
const runtimeDiagnostics = {
|
|
116
|
+
...diagnostics,
|
|
117
|
+
reused: server.getRuntime()?.reused
|
|
118
|
+
};
|
|
119
|
+
const collectedData = options.bindings.browser && server.getRuntime() ? server.getRuntime().playwright.getCollectedData() : undefined;
|
|
120
|
+
const trackedResources = options.bindings.browser && server.getRuntime() ? server.getRuntime().playwright.getTrackedResources() : undefined;
|
|
121
|
+
return {
|
|
122
|
+
runtime: runtimeDiagnostics,
|
|
123
|
+
browser: collectedData ? createBrowserDiagnostics(collectedData, trackedResources) : undefined
|
|
124
|
+
};
|
|
125
|
+
}
|
|
114
126
|
};
|
|
115
127
|
}
|
|
116
128
|
export {
|
|
117
129
|
createAppServerAdapter
|
|
118
130
|
};
|
|
119
131
|
|
|
120
|
-
//# debugId=
|
|
132
|
+
//# debugId=29818A94986CF11064756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/server/app-server.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport {
|
|
5
|
+
"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"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";AAAA;AAEA;
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "29818A94986CF11064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -23,6 +23,7 @@ function getTypeProfile(input) {
|
|
|
23
23
|
const capabilities = unique([...PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend, ...input?.capabilities ?? []]);
|
|
24
24
|
const include = unique([
|
|
25
25
|
"core",
|
|
26
|
+
"sandboxIsolate",
|
|
26
27
|
...capabilities.flatMap((capability) => CAPABILITY_MAP[capability])
|
|
27
28
|
]);
|
|
28
29
|
return {
|
|
@@ -53,4 +54,4 @@ export {
|
|
|
53
54
|
formatTypecheckErrors
|
|
54
55
|
};
|
|
55
56
|
|
|
56
|
-
//# debugId=
|
|
57
|
+
//# debugId=C5B5810EA74F39CD64756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/typecheck/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { TYPE_DEFINITIONS, formatTypecheckErrors as formatLegacyTypecheckErrors, typecheckIsolateCode } from \"../internal/typecheck/index.mjs\";\nimport type { TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest } from \"../types.mjs\";\n\ntype IncludedType
|
|
5
|
+
"import { TYPE_DEFINITIONS, formatTypecheckErrors as formatLegacyTypecheckErrors, typecheckIsolateCode } from \"../internal/typecheck/index.mjs\";\nimport type { TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest } from \"../types.mjs\";\n\ntype IncludedType =\n | \"core\"\n | \"sandboxIsolate\"\n | \"fetch\"\n | \"fs\"\n | \"console\"\n | \"encoding\"\n | \"timers\"\n | \"testEnvironment\"\n | \"playwright\";\n\nconst CAPABILITY_MAP: Record<TypeCapability, IncludedType[]> = {\n fetch: [\"fetch\"],\n files: [\"fs\"],\n tests: [\"testEnvironment\"],\n browser: [\"playwright\"],\n tools: [],\n console: [\"console\"],\n encoding: [\"encoding\"],\n timers: [\"timers\"],\n};\n\nconst PROFILE_DEFAULTS: Record<TypeProfileName, TypeCapability[]> = {\n backend: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n agent: [\"console\", \"encoding\", \"fetch\", \"files\", \"timers\"],\n \"browser-test\": [\"console\", \"encoding\", \"fetch\", \"tests\", \"browser\", \"timers\"],\n};\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nexport function getTypeProfile(input?: {\n profile?: TypeProfileName;\n capabilities?: TypeCapability[];\n}): TypeProfile {\n const profile = input?.profile ?? \"backend\";\n const capabilities = unique([...(PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend), ...(input?.capabilities ?? [])]);\n const include: IncludedType[] = unique([\n \"core\",\n \"sandboxIsolate\",\n ...capabilities.flatMap((capability) => CAPABILITY_MAP[capability]),\n ]) as IncludedType[];\n\n return {\n profile,\n capabilities,\n include,\n files: include\n .map((key) => ({\n name: `isolate-${key}.d.ts`,\n content: TYPE_DEFINITIONS[key as keyof typeof TYPE_DEFINITIONS],\n }))\n .filter((entry) => Boolean(entry.content)) as Array<{ name: string; content: string }>,\n };\n}\n\nexport function typecheck(request: TypecheckRequest) {\n const profile = getTypeProfile({\n profile: request.profile,\n capabilities: request.capabilities,\n });\n\n return typecheckIsolateCode(request.code, {\n include: profile.include,\n libraryTypes: request.libraryTypes,\n compilerOptions: request.compilerOptions as never,\n });\n}\n\nexport const formatTypecheckErrors = formatLegacyTypecheckErrors;\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";AAAA,oDAA2B;
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";AAAA,oDAA2B;AAc3B,IAAM,iBAAyD;AAAA,EAC7D,OAAO,CAAC,OAAO;AAAA,EACf,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,iBAAiB;AAAA,EACzB,SAAS,CAAC,YAAY;AAAA,EACtB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC,SAAS;AAAA,EACnB,UAAU,CAAC,UAAU;AAAA,EACrB,QAAQ,CAAC,QAAQ;AACnB;AAEA,IAAM,mBAA8D;AAAA,EAClE,SAAS,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EAC3D,OAAO,CAAC,WAAW,YAAY,SAAS,SAAS,QAAQ;AAAA,EACzD,gBAAgB,CAAC,WAAW,YAAY,SAAS,SAAS,WAAW,QAAQ;AAC/E;AAEA,SAAS,MAAS,CAAC,QAAkB;AAAA,EACnC,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAAA;AAGrB,SAAS,cAAc,CAAC,OAGf;AAAA,EACd,MAAM,UAAU,OAAO,WAAW;AAAA,EAClC,MAAM,eAAe,OAAO,CAAC,GAAI,iBAAiB,YAAY,iBAAiB,SAAU,GAAI,OAAO,gBAAgB,CAAC,CAAE,CAAC;AAAA,EACxH,MAAM,UAA0B,OAAO;AAAA,IACrC;AAAA,IACA;AAAA,IACA,GAAG,aAAa,QAAQ,CAAC,eAAe,eAAe,WAAW;AAAA,EACpE,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,QACJ,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,WAAW;AAAA,MACjB,SAAS,iBAAiB;AAAA,IAC5B,EAAE,EACD,OAAO,CAAC,UAAU,QAAQ,MAAM,OAAO,CAAC;AAAA,EAC7C;AAAA;AAGK,SAAS,SAAS,CAAC,SAA2B;AAAA,EACnD,MAAM,UAAU,eAAe;AAAA,IAC7B,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,EACxB,CAAC;AAAA,EAED,OAAO,qBAAqB,QAAQ,MAAM;AAAA,IACxC,SAAS,QAAQ;AAAA,IACjB,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGI,IAAM,wBAAwB;",
|
|
8
|
+
"debugId": "C5B5810EA74F39CD64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CollectedData } from "../internal/client/index.ts";
|
|
2
|
+
import type { BrowserDiagnostics, RuntimeDiagnostics } from "../types.ts";
|
|
2
3
|
export interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {
|
|
3
4
|
activeRequests: number;
|
|
4
5
|
activeResources: number;
|
|
@@ -10,3 +11,7 @@ export interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {
|
|
|
10
11
|
lifecycleState: "idle" | "active" | "reloading" | "disposing";
|
|
11
12
|
}
|
|
12
13
|
export declare function createRuntimeDiagnostics(): MutableRuntimeDiagnostics;
|
|
14
|
+
export declare function createBrowserDiagnostics(collectedData: CollectedData, trackedResources?: {
|
|
15
|
+
contexts: string[];
|
|
16
|
+
pages: string[];
|
|
17
|
+
}): BrowserDiagnostics;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RuntimeOptions } from "../internal/client/index.ts";
|
|
2
|
+
import { type NestedHostBindings } from "./sandbox-isolate.ts";
|
|
2
3
|
import type { HostBindings, HostCallContext, ModuleResolveResult, ModuleResolver, ModuleSource } from "../types.ts";
|
|
3
4
|
import type { MutableRuntimeDiagnostics } from "./diagnostics.ts";
|
|
4
5
|
export interface RuntimeBindingsAdapter {
|
|
@@ -6,7 +7,10 @@ export interface RuntimeBindingsAdapter {
|
|
|
6
7
|
abort(reason?: unknown): void;
|
|
7
8
|
reset(reason?: unknown): void;
|
|
8
9
|
}
|
|
9
|
-
export
|
|
10
|
+
export interface RuntimeBindingsAdapterOptions {
|
|
11
|
+
nestedHost?: NestedHostBindings;
|
|
12
|
+
}
|
|
13
|
+
export declare function createRuntimeBindingsAdapter(bindings: HostBindings, getRuntimeId: () => string, diagnostics: MutableRuntimeDiagnostics, options?: RuntimeBindingsAdapterOptions): RuntimeBindingsAdapter;
|
|
10
14
|
export declare function tryResolveModule(resolver: ModuleResolver | undefined, specifier: string, importer: {
|
|
11
15
|
path: string;
|
|
12
16
|
resolveDir: string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CreateAppServerOptions, CreateNamespacedRuntimeOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, HostCallContext } from "../types.ts";
|
|
2
|
+
export declare const SANDBOX_ISOLATE_MODULE_SPECIFIER = "@ricsam/isolate";
|
|
3
|
+
export type NestedResourceKind = "runtime" | "appServer" | "testRuntime" | "namespacedRuntime";
|
|
4
|
+
export interface NestedHostBindings {
|
|
5
|
+
createHost(context: HostCallContext): Promise<string>;
|
|
6
|
+
closeHost(hostId: string, context: HostCallContext): Promise<void>;
|
|
7
|
+
diagnostics(hostId: string, context: HostCallContext): Promise<{
|
|
8
|
+
runtimes: number;
|
|
9
|
+
servers: number;
|
|
10
|
+
connected: boolean;
|
|
11
|
+
}>;
|
|
12
|
+
createResource(hostId: string, kind: NestedResourceKind, options: CreateRuntimeOptions | CreateAppServerOptions | CreateTestRuntimeOptions | {
|
|
13
|
+
key: string;
|
|
14
|
+
options: CreateNamespacedRuntimeOptions;
|
|
15
|
+
}, context: HostCallContext): Promise<string>;
|
|
16
|
+
disposeNamespace(hostId: string, key: string, options: {
|
|
17
|
+
reason?: string;
|
|
18
|
+
} | undefined, context: HostCallContext): Promise<void>;
|
|
19
|
+
callResource(kind: NestedResourceKind, resourceId: string, method: string, args: unknown[], context: HostCallContext): Promise<unknown>;
|
|
20
|
+
}
|
|
21
|
+
export declare const SANDBOX_ISOLATE_MODULE_SOURCE: string;
|