@ricsam/isolate 0.0.1 → 0.1.0
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/dist/cjs/bridge/diagnostics.cjs +58 -0
- package/dist/cjs/bridge/diagnostics.cjs.map +10 -0
- package/dist/cjs/bridge/legacy-adapters.cjs +242 -0
- package/dist/cjs/bridge/legacy-adapters.cjs.map +10 -0
- package/dist/cjs/bridge/request-context.cjs +59 -0
- package/dist/cjs/bridge/request-context.cjs.map +10 -0
- package/dist/cjs/bridge/runtime-bindings.cjs +367 -0
- package/dist/cjs/bridge/runtime-bindings.cjs.map +10 -0
- package/dist/cjs/browser/browser-runtime.cjs +157 -0
- package/dist/cjs/browser/browser-runtime.cjs.map +10 -0
- package/dist/cjs/daemon.cjs +91 -0
- package/dist/cjs/daemon.cjs.map +10 -0
- package/dist/cjs/files/index.cjs +140 -0
- package/dist/cjs/files/index.cjs.map +10 -0
- package/dist/cjs/host/create-isolate-host.cjs +235 -0
- package/dist/cjs/host/create-isolate-host.cjs.map +10 -0
- package/dist/cjs/host/index.cjs +47 -0
- package/dist/cjs/host/index.cjs.map +10 -0
- package/dist/cjs/index.cjs +55 -0
- package/dist/cjs/index.cjs.map +10 -0
- package/dist/cjs/internal/client/connection.cjs +1919 -0
- package/dist/cjs/internal/client/connection.cjs.map +10 -0
- package/dist/cjs/internal/client/index.cjs +48 -0
- package/dist/cjs/internal/client/index.cjs.map +10 -0
- package/dist/cjs/internal/client/types.cjs +30 -0
- package/dist/cjs/internal/client/types.cjs.map +9 -0
- package/dist/cjs/internal/console/index.cjs +506 -0
- package/dist/cjs/internal/console/index.cjs.map +10 -0
- package/dist/cjs/internal/console/utils.cjs +70 -0
- package/dist/cjs/internal/console/utils.cjs.map +10 -0
- package/dist/cjs/internal/core/index.cjs +2745 -0
- package/dist/cjs/internal/core/index.cjs.map +10 -0
- package/dist/cjs/internal/crypto/index.cjs +470 -0
- package/dist/cjs/internal/crypto/index.cjs.map +10 -0
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs +355 -0
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +10 -0
- package/dist/cjs/internal/daemon/connection.cjs +1952 -0
- package/dist/cjs/internal/daemon/connection.cjs.map +10 -0
- package/dist/cjs/internal/daemon/daemon.cjs +98 -0
- package/dist/cjs/internal/daemon/daemon.cjs.map +10 -0
- package/dist/cjs/internal/daemon/index.cjs +145 -0
- package/dist/cjs/internal/daemon/index.cjs.map +10 -0
- package/dist/cjs/internal/daemon/runtime-pool.cjs +106 -0
- package/dist/cjs/internal/daemon/runtime-pool.cjs.map +10 -0
- package/dist/cjs/internal/daemon/types.cjs +30 -0
- package/dist/cjs/internal/daemon/types.cjs.map +9 -0
- package/dist/cjs/internal/encoding/index.cjs +419 -0
- package/dist/cjs/internal/encoding/index.cjs.map +10 -0
- package/dist/cjs/internal/fetch/consistency/origins.cjs +598 -0
- package/dist/cjs/internal/fetch/consistency/origins.cjs.map +10 -0
- package/dist/cjs/internal/fetch/index.cjs +2640 -0
- package/dist/cjs/internal/fetch/index.cjs.map +10 -0
- package/dist/cjs/internal/fetch/stream-state.cjs +256 -0
- package/dist/cjs/internal/fetch/stream-state.cjs.map +10 -0
- package/dist/cjs/internal/fs/index.cjs +847 -0
- package/dist/cjs/internal/fs/index.cjs.map +10 -0
- package/dist/cjs/internal/fs/node-adapter.cjs +254 -0
- package/dist/cjs/internal/fs/node-adapter.cjs.map +10 -0
- package/dist/cjs/internal/module-loader/bundle.cjs +482 -0
- package/dist/cjs/internal/module-loader/bundle.cjs.map +10 -0
- package/dist/cjs/internal/module-loader/index.cjs +240 -0
- package/dist/cjs/internal/module-loader/index.cjs.map +10 -0
- package/dist/cjs/internal/module-loader/mappings.cjs +120 -0
- package/dist/cjs/internal/module-loader/mappings.cjs.map +10 -0
- package/dist/cjs/internal/module-loader/resolve.cjs +177 -0
- package/dist/cjs/internal/module-loader/resolve.cjs.map +10 -0
- package/dist/cjs/internal/module-loader/strip-types.cjs +236 -0
- package/dist/cjs/internal/module-loader/strip-types.cjs.map +10 -0
- package/dist/cjs/internal/path/index.cjs +503 -0
- package/dist/cjs/internal/path/index.cjs.map +10 -0
- package/dist/cjs/internal/playwright/client.cjs +49 -0
- package/dist/cjs/internal/playwright/client.cjs.map +10 -0
- package/dist/cjs/internal/playwright/handler.cjs +1416 -0
- package/dist/cjs/internal/playwright/handler.cjs.map +10 -0
- package/dist/cjs/internal/playwright/index.cjs +1289 -0
- package/dist/cjs/internal/playwright/index.cjs.map +10 -0
- package/dist/cjs/internal/playwright/types.cjs +47 -0
- package/dist/cjs/internal/playwright/types.cjs.map +10 -0
- package/dist/cjs/internal/protocol/codec.cjs +510 -0
- package/dist/cjs/internal/protocol/codec.cjs.map +10 -0
- package/dist/cjs/internal/protocol/framing.cjs +141 -0
- package/dist/cjs/internal/protocol/framing.cjs.map +10 -0
- package/dist/cjs/internal/protocol/index.cjs +110 -0
- package/dist/cjs/internal/protocol/index.cjs.map +10 -0
- package/dist/cjs/internal/protocol/marshalValue.cjs +518 -0
- package/dist/cjs/internal/protocol/marshalValue.cjs.map +10 -0
- package/dist/cjs/internal/protocol/serialization.cjs +109 -0
- package/dist/cjs/internal/protocol/serialization.cjs.map +10 -0
- package/dist/cjs/internal/protocol/types.cjs +181 -0
- package/dist/cjs/internal/protocol/types.cjs.map +10 -0
- package/dist/cjs/internal/runtime/index.cjs +1235 -0
- package/dist/cjs/internal/runtime/index.cjs.map +10 -0
- package/dist/cjs/internal/server/index.cjs +223 -0
- package/dist/cjs/internal/server/index.cjs.map +10 -0
- package/dist/cjs/internal/test-environment/index.cjs +1415 -0
- package/dist/cjs/internal/test-environment/index.cjs.map +10 -0
- package/dist/cjs/internal/timers/index.cjs +200 -0
- package/dist/cjs/internal/timers/index.cjs.map +10 -0
- package/dist/cjs/internal/transform/index.cjs +361 -0
- package/dist/cjs/internal/transform/index.cjs.map +10 -0
- package/dist/cjs/internal/typecheck/index.cjs +60 -0
- package/dist/cjs/internal/typecheck/index.cjs.map +10 -0
- package/dist/cjs/internal/typecheck/isolate-types.cjs +2614 -0
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +10 -0
- package/dist/cjs/internal/typecheck/typecheck.cjs +131 -0
- package/dist/cjs/internal/typecheck/typecheck.cjs.map +10 -0
- package/dist/cjs/modules/index.cjs +160 -0
- package/dist/cjs/modules/index.cjs.map +10 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/runtime/script-runtime.cjs +97 -0
- package/dist/cjs/runtime/script-runtime.cjs.map +10 -0
- package/dist/cjs/server/app-server.cjs +158 -0
- package/dist/cjs/server/app-server.cjs.map +10 -0
- package/dist/cjs/testing/integration-helpers.cjs +127 -0
- package/dist/cjs/testing/integration-helpers.cjs.map +10 -0
- package/dist/cjs/typecheck/index.cjs +96 -0
- package/dist/cjs/typecheck/index.cjs.map +10 -0
- package/dist/cjs/types.cjs +30 -0
- package/dist/cjs/types.cjs.map +9 -0
- package/dist/mjs/bridge/diagnostics.mjs +18 -0
- package/dist/mjs/bridge/diagnostics.mjs.map +10 -0
- package/dist/mjs/bridge/legacy-adapters.mjs +178 -0
- package/dist/mjs/bridge/legacy-adapters.mjs.map +10 -0
- package/dist/mjs/bridge/request-context.mjs +19 -0
- package/dist/mjs/bridge/request-context.mjs.map +10 -0
- package/dist/mjs/bridge/runtime-bindings.mjs +303 -0
- package/dist/mjs/bridge/runtime-bindings.mjs.map +10 -0
- package/dist/mjs/browser/browser-runtime.mjs +93 -0
- package/dist/mjs/browser/browser-runtime.mjs.map +10 -0
- package/dist/mjs/daemon.mjs +91 -0
- package/dist/mjs/daemon.mjs.map +10 -0
- package/dist/mjs/files/index.mjs +76 -0
- package/dist/mjs/files/index.mjs.map +10 -0
- package/dist/mjs/host/create-isolate-host.mjs +171 -0
- package/dist/mjs/host/create-isolate-host.mjs.map +10 -0
- package/dist/mjs/host/index.mjs +7 -0
- package/dist/mjs/host/index.mjs.map +10 -0
- package/dist/mjs/index.mjs +15 -0
- package/dist/mjs/index.mjs.map +10 -0
- package/dist/mjs/internal/client/connection.mjs +1872 -0
- package/dist/mjs/internal/client/connection.mjs.map +10 -0
- package/dist/mjs/internal/client/index.mjs +8 -0
- package/dist/mjs/internal/client/index.mjs.map +10 -0
- package/dist/mjs/internal/client/types.mjs +2 -0
- package/dist/mjs/internal/client/types.mjs.map +9 -0
- package/dist/mjs/internal/console/index.mjs +442 -0
- package/dist/mjs/internal/console/index.mjs.map +10 -0
- package/dist/mjs/internal/console/utils.mjs +30 -0
- package/dist/mjs/internal/console/utils.mjs.map +10 -0
- package/dist/mjs/internal/core/index.mjs +2681 -0
- package/dist/mjs/internal/core/index.mjs.map +10 -0
- package/dist/mjs/internal/crypto/index.mjs +406 -0
- package/dist/mjs/internal/crypto/index.mjs.map +10 -0
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs +315 -0
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +10 -0
- package/dist/mjs/internal/daemon/connection.mjs +1931 -0
- package/dist/mjs/internal/daemon/connection.mjs.map +10 -0
- package/dist/mjs/internal/daemon/daemon.mjs +98 -0
- package/dist/mjs/internal/daemon/daemon.mjs.map +10 -0
- package/dist/mjs/internal/daemon/index.mjs +105 -0
- package/dist/mjs/internal/daemon/index.mjs.map +10 -0
- package/dist/mjs/internal/daemon/runtime-pool.mjs +66 -0
- package/dist/mjs/internal/daemon/runtime-pool.mjs.map +10 -0
- package/dist/mjs/internal/daemon/types.mjs +2 -0
- package/dist/mjs/internal/daemon/types.mjs.map +9 -0
- package/dist/mjs/internal/encoding/index.mjs +379 -0
- package/dist/mjs/internal/encoding/index.mjs.map +10 -0
- package/dist/mjs/internal/fetch/consistency/origins.mjs +558 -0
- package/dist/mjs/internal/fetch/consistency/origins.mjs.map +10 -0
- package/dist/mjs/internal/fetch/index.mjs +2580 -0
- package/dist/mjs/internal/fetch/index.mjs.map +10 -0
- package/dist/mjs/internal/fetch/stream-state.mjs +216 -0
- package/dist/mjs/internal/fetch/stream-state.mjs.map +10 -0
- package/dist/mjs/internal/fs/index.mjs +783 -0
- package/dist/mjs/internal/fs/index.mjs.map +10 -0
- package/dist/mjs/internal/fs/node-adapter.mjs +190 -0
- package/dist/mjs/internal/fs/node-adapter.mjs.map +10 -0
- package/dist/mjs/internal/module-loader/bundle.mjs +418 -0
- package/dist/mjs/internal/module-loader/bundle.mjs.map +10 -0
- package/dist/mjs/internal/module-loader/index.mjs +185 -0
- package/dist/mjs/internal/module-loader/index.mjs.map +10 -0
- package/dist/mjs/internal/module-loader/mappings.mjs +80 -0
- package/dist/mjs/internal/module-loader/mappings.mjs.map +10 -0
- package/dist/mjs/internal/module-loader/resolve.mjs +113 -0
- package/dist/mjs/internal/module-loader/resolve.mjs.map +10 -0
- package/dist/mjs/internal/module-loader/strip-types.mjs +172 -0
- package/dist/mjs/internal/module-loader/strip-types.mjs.map +10 -0
- package/dist/mjs/internal/path/index.mjs +463 -0
- package/dist/mjs/internal/path/index.mjs.map +10 -0
- package/dist/mjs/internal/playwright/client.mjs +13 -0
- package/dist/mjs/internal/playwright/client.mjs.map +10 -0
- package/dist/mjs/internal/playwright/handler.mjs +1378 -0
- package/dist/mjs/internal/playwright/handler.mjs.map +10 -0
- package/dist/mjs/internal/playwright/index.mjs +1234 -0
- package/dist/mjs/internal/playwright/index.mjs.map +10 -0
- package/dist/mjs/internal/playwright/types.mjs +7 -0
- package/dist/mjs/internal/playwright/types.mjs.map +10 -0
- package/dist/mjs/internal/protocol/codec.mjs +470 -0
- package/dist/mjs/internal/protocol/codec.mjs.map +10 -0
- package/dist/mjs/internal/protocol/framing.mjs +101 -0
- package/dist/mjs/internal/protocol/framing.mjs.map +10 -0
- package/dist/mjs/internal/protocol/index.mjs +98 -0
- package/dist/mjs/internal/protocol/index.mjs.map +10 -0
- package/dist/mjs/internal/protocol/marshalValue.mjs +494 -0
- package/dist/mjs/internal/protocol/marshalValue.mjs.map +10 -0
- package/dist/mjs/internal/protocol/serialization.mjs +69 -0
- package/dist/mjs/internal/protocol/serialization.mjs.map +10 -0
- package/dist/mjs/internal/protocol/types.mjs +141 -0
- package/dist/mjs/internal/protocol/types.mjs.map +10 -0
- package/dist/mjs/internal/runtime/index.mjs +1198 -0
- package/dist/mjs/internal/runtime/index.mjs.map +10 -0
- package/dist/mjs/internal/server/index.mjs +183 -0
- package/dist/mjs/internal/server/index.mjs.map +10 -0
- package/dist/mjs/internal/test-environment/index.mjs +1351 -0
- package/dist/mjs/internal/test-environment/index.mjs.map +10 -0
- package/dist/mjs/internal/timers/index.mjs +136 -0
- package/dist/mjs/internal/timers/index.mjs.map +10 -0
- package/dist/mjs/internal/transform/index.mjs +321 -0
- package/dist/mjs/internal/transform/index.mjs.map +10 -0
- package/dist/mjs/internal/typecheck/index.mjs +35 -0
- package/dist/mjs/internal/typecheck/index.mjs.map +10 -0
- package/dist/mjs/internal/typecheck/isolate-types.mjs +2574 -0
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +10 -0
- package/dist/mjs/internal/typecheck/typecheck.mjs +91 -0
- package/dist/mjs/internal/typecheck/typecheck.mjs.map +10 -0
- package/dist/mjs/modules/index.mjs +96 -0
- package/dist/mjs/modules/index.mjs.map +10 -0
- package/dist/mjs/package.json +5 -0
- package/dist/mjs/runtime/script-runtime.mjs +57 -0
- package/dist/mjs/runtime/script-runtime.mjs.map +10 -0
- package/dist/mjs/server/app-server.mjs +118 -0
- package/dist/mjs/server/app-server.mjs.map +10 -0
- package/dist/mjs/testing/integration-helpers.mjs +63 -0
- package/dist/mjs/testing/integration-helpers.mjs.map +10 -0
- package/dist/mjs/typecheck/index.mjs +56 -0
- package/dist/mjs/typecheck/index.mjs.map +10 -0
- package/dist/mjs/types.mjs +2 -0
- package/dist/mjs/types.mjs.map +9 -0
- package/dist/types/bridge/diagnostics.d.ts +12 -0
- package/dist/types/bridge/legacy-adapters.d.ts +14 -0
- package/dist/types/bridge/request-context.d.ts +10 -0
- package/dist/types/bridge/runtime-bindings.d.ts +14 -0
- package/dist/types/browser/browser-runtime.d.ts +3 -0
- package/dist/types/daemon.d.ts +2 -0
- package/dist/types/files/index.d.ts +5 -0
- package/dist/types/host/create-isolate-host.d.ts +2 -0
- package/dist/types/host/index.d.ts +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal/client/connection.d.ts +9 -0
- package/dist/types/internal/client/index.d.ts +8 -0
- package/dist/types/internal/client/types.d.ts +198 -0
- package/dist/types/internal/console/index.d.ts +108 -0
- package/dist/types/internal/console/utils.d.ts +27 -0
- package/dist/types/internal/core/index.d.ts +119 -0
- package/dist/types/internal/crypto/index.d.ts +18 -0
- package/dist/types/internal/daemon/callback-fs-handler.d.ts +28 -0
- package/dist/types/internal/daemon/connection.d.ts +9 -0
- package/dist/types/internal/daemon/daemon.d.ts +2 -0
- package/dist/types/internal/daemon/index.d.ts +14 -0
- package/dist/types/internal/daemon/runtime-pool.d.ts +16 -0
- package/dist/types/internal/daemon/types.d.ts +211 -0
- package/dist/types/internal/encoding/index.d.ts +21 -0
- package/dist/types/internal/fetch/consistency/origins.d.ts +179 -0
- package/dist/types/internal/fetch/index.d.ts +93 -0
- package/dist/types/internal/fetch/stream-state.d.ts +65 -0
- package/dist/types/internal/fs/index.d.ts +70 -0
- package/dist/types/internal/fs/node-adapter.d.ts +24 -0
- package/dist/types/internal/module-loader/bundle.d.ts +33 -0
- package/dist/types/internal/module-loader/index.d.ts +30 -0
- package/dist/types/internal/module-loader/mappings.d.ts +47 -0
- package/dist/types/internal/module-loader/resolve.d.ts +26 -0
- package/dist/types/internal/module-loader/strip-types.d.ts +19 -0
- package/dist/types/internal/path/index.d.ts +23 -0
- package/dist/types/internal/playwright/client.d.ts +7 -0
- package/dist/types/internal/playwright/handler.d.ts +44 -0
- package/dist/types/internal/playwright/index.d.ts +14 -0
- package/dist/types/internal/playwright/types.d.ts +145 -0
- package/dist/types/internal/protocol/codec.d.ts +242 -0
- package/dist/types/internal/protocol/framing.d.ts +89 -0
- package/dist/types/internal/protocol/index.d.ts +10 -0
- package/dist/types/internal/protocol/marshalValue.d.ts +79 -0
- package/dist/types/internal/protocol/serialization.d.ts +23 -0
- package/dist/types/internal/protocol/types.d.ts +996 -0
- package/dist/types/internal/runtime/index.d.ts +200 -0
- package/dist/types/internal/server/index.d.ts +42 -0
- package/dist/types/internal/test-environment/index.d.ts +112 -0
- package/dist/types/internal/timers/index.d.ts +22 -0
- package/dist/types/internal/transform/index.d.ts +36 -0
- package/dist/types/internal/typecheck/index.d.ts +7 -0
- package/dist/types/internal/typecheck/isolate-types.d.ts +94 -0
- package/dist/types/internal/typecheck/typecheck.d.ts +148 -0
- package/dist/types/modules/index.d.ts +2 -0
- package/dist/types/runtime/script-runtime.d.ts +6 -0
- package/dist/types/server/app-server.d.ts +3 -0
- package/dist/types/testing/integration-helpers.d.ts +9 -0
- package/dist/types/typecheck/index.d.ts +8 -0
- package/dist/types/types.d.ts +233 -0
- package/package.json +74 -6
- package/README.md +0 -45
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// packages/isolate/src/server/app-server.ts
|
|
2
|
+
import { IsolateServer } from "../internal/server/index.mjs";
|
|
3
|
+
import { createRuntimeDiagnostics } from "../bridge/diagnostics.mjs";
|
|
4
|
+
import { createRuntimeBindingsAdapter } from "../bridge/runtime-bindings.mjs";
|
|
5
|
+
import { withRequestContext } from "../bridge/request-context.mjs";
|
|
6
|
+
async function createAppServerAdapter(getConnection, options) {
|
|
7
|
+
const diagnostics = createRuntimeDiagnostics();
|
|
8
|
+
const server = new IsolateServer({
|
|
9
|
+
namespaceId: options.key,
|
|
10
|
+
getConnection
|
|
11
|
+
});
|
|
12
|
+
let runtimeId = options.key;
|
|
13
|
+
const bindingsAdapter = createRuntimeBindingsAdapter(options.bindings, () => runtimeId, diagnostics);
|
|
14
|
+
await server.start({
|
|
15
|
+
entry: options.entry,
|
|
16
|
+
entryFilename: options.entryFilename,
|
|
17
|
+
runtimeOptions: {
|
|
18
|
+
...bindingsAdapter.runtimeOptions,
|
|
19
|
+
cwd: options.cwd,
|
|
20
|
+
memoryLimitMB: options.memoryLimitMB,
|
|
21
|
+
executionTimeout: options.executionTimeout,
|
|
22
|
+
testEnvironment: options.features?.tests ?? false
|
|
23
|
+
},
|
|
24
|
+
onWebSocketCommand: (command) => {
|
|
25
|
+
options.webSockets?.onCommand?.(command);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
runtimeId = server.getRuntime()?.id ?? options.key;
|
|
29
|
+
async function handleRequest(request, handleOptions) {
|
|
30
|
+
diagnostics.activeRequests += 1;
|
|
31
|
+
diagnostics.lifecycleState = "active";
|
|
32
|
+
try {
|
|
33
|
+
return await withRequestContext({
|
|
34
|
+
requestId: handleOptions?.requestId,
|
|
35
|
+
metadata: handleOptions?.metadata,
|
|
36
|
+
signal: handleOptions?.signal ?? request.signal
|
|
37
|
+
}, async () => {
|
|
38
|
+
const response = await server.fetch.dispatchRequest(request, {
|
|
39
|
+
signal: handleOptions?.signal,
|
|
40
|
+
requestId: handleOptions?.requestId,
|
|
41
|
+
metadata: handleOptions?.metadata
|
|
42
|
+
});
|
|
43
|
+
const upgradeRequest = await server.fetch.getUpgradeRequest();
|
|
44
|
+
if (upgradeRequest?.requested) {
|
|
45
|
+
return {
|
|
46
|
+
type: "websocket",
|
|
47
|
+
upgradeData: {
|
|
48
|
+
requested: upgradeRequest.requested,
|
|
49
|
+
connectionId: upgradeRequest.connectionId
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
type: "response",
|
|
55
|
+
response
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
} catch (error) {
|
|
59
|
+
diagnostics.lastError = error instanceof Error ? error.message : String(error);
|
|
60
|
+
throw error;
|
|
61
|
+
} finally {
|
|
62
|
+
diagnostics.activeRequests -= 1;
|
|
63
|
+
diagnostics.lifecycleState = "idle";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
handle: handleRequest,
|
|
68
|
+
ws: {
|
|
69
|
+
open: async (connectionId) => {
|
|
70
|
+
await server.fetch.dispatchWebSocketOpen(connectionId);
|
|
71
|
+
},
|
|
72
|
+
message: async (connectionId, data) => {
|
|
73
|
+
await server.fetch.dispatchWebSocketMessage(connectionId, data);
|
|
74
|
+
},
|
|
75
|
+
close: async (connectionId, code, reason) => {
|
|
76
|
+
await server.fetch.dispatchWebSocketClose(connectionId, code, reason);
|
|
77
|
+
},
|
|
78
|
+
error: async (connectionId, error) => {
|
|
79
|
+
await server.fetch.dispatchWebSocketError(connectionId, error);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
reload: async () => {
|
|
83
|
+
diagnostics.lifecycleState = "reloading";
|
|
84
|
+
try {
|
|
85
|
+
bindingsAdapter.reset("AppServer.reload()");
|
|
86
|
+
await server.reload();
|
|
87
|
+
runtimeId = server.getRuntime()?.id ?? options.key;
|
|
88
|
+
} finally {
|
|
89
|
+
diagnostics.lifecycleState = "idle";
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
dispose: async (disposeOptions) => {
|
|
93
|
+
diagnostics.lifecycleState = "disposing";
|
|
94
|
+
try {
|
|
95
|
+
if (disposeOptions?.hard) {
|
|
96
|
+
bindingsAdapter.reset(disposeOptions?.reason ?? "AppServer.dispose(hard)");
|
|
97
|
+
await server.reload();
|
|
98
|
+
bindingsAdapter.abort(disposeOptions?.reason ?? "AppServer.dispose(hard)");
|
|
99
|
+
await server.close();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
bindingsAdapter.abort(disposeOptions?.reason ?? "AppServer.dispose()");
|
|
103
|
+
await server.close();
|
|
104
|
+
} finally {
|
|
105
|
+
diagnostics.lifecycleState = "idle";
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
diagnostics: async () => ({
|
|
109
|
+
...diagnostics,
|
|
110
|
+
reused: server.getRuntime()?.reused
|
|
111
|
+
})
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
createAppServerAdapter
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
//# debugId=35EE9B7D9A1E94D564756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/server/app-server.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { IsolateServer } from \"../internal/server/index.mjs\";\nimport type { DaemonConnection } from \"../internal/client/index.mjs\";\nimport { createRuntimeDiagnostics } from \"../bridge/diagnostics.mjs\";\nimport { createRuntimeBindingsAdapter } 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): 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 );\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 testEnvironment: options.features?.tests ?? false,\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 () => {\n diagnostics.lifecycleState = \"reloading\";\n try {\n bindingsAdapter.reset(\"AppServer.reload()\");\n await server.reload();\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 bindingsAdapter.reset(disposeOptions?.reason ?? \"AppServer.dispose(hard)\");\n await server.reload();\n bindingsAdapter.abort(disposeOptions?.reason ?? \"AppServer.dispose(hard)\");\n await server.close();\n return;\n }\n bindingsAdapter.abort(disposeOptions?.reason ?? \"AppServer.dispose()\");\n await server.close();\n } finally {\n diagnostics.lifecycleState = \"idle\";\n }\n },\n diagnostics: async () => ({\n ...diagnostics,\n reused: server.getRuntime()?.reused,\n }),\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAAA;AAEA;AACA;AACA;AAGA,eAAsB,sBAAsB,CAC1C,eACA,SACoB;AAAA,EACpB,MAAM,cAAc,yBAAyB;AAAA,EAC7C,MAAM,SAAS,IAAI,cAAc;AAAA,IAC/B,aAAa,QAAQ;AAAA,IACrB;AAAA,EACF,CAAC;AAAA,EAED,IAAI,YAAY,QAAQ;AAAA,EACxB,MAAM,kBAAkB,6BACtB,QAAQ,UACR,MAAM,WACN,WACF;AAAA,EACA,MAAM,OAAO,MAAM;AAAA,IACjB,OAAO,QAAQ;AAAA,IACf,eAAe,QAAQ;AAAA,IACvB,gBAAgB;AAAA,SACX,gBAAgB;AAAA,MACnB,KAAK,QAAQ;AAAA,MACb,eAAe,QAAQ;AAAA,MACvB,kBAAkB,QAAQ;AAAA,MAC1B,iBAAiB,QAAQ,UAAU,SAAS;AAAA,IAC9C;AAAA,IACA,oBAAoB,CAAC,YAAY;AAAA,MAC/B,QAAQ,YAAY,YAAY,OAAO;AAAA;AAAA,EAE3C,CAAC;AAAA,EACD,YAAY,OAAO,WAAW,GAAG,MAAM,QAAQ;AAAA,EAE/C,eAAe,aAAa,CAAC,SAAkB,eAAyH;AAAA,IACtK,YAAY,kBAAkB;AAAA,IAC9B,YAAY,iBAAiB;AAAA,IAC7B,IAAI;AAAA,MACF,OAAO,MAAM,mBACX;AAAA,QACE,WAAW,eAAe;AAAA,QAC1B,UAAU,eAAe;AAAA,QACzB,QAAQ,eAAe,UAAU,QAAQ;AAAA,MAC3C,GACA,YAAY;AAAA,QACV,MAAM,WAAW,MAAM,OAAO,MAAM,gBAAgB,SAAS;AAAA,UAC3D,QAAQ,eAAe;AAAA,UACvB,WAAW,eAAe;AAAA,UAC1B,UAAU,eAAe;AAAA,QAC3B,CAAC;AAAA,QACD,MAAM,iBAAiB,MAAM,OAAO,MAAM,kBAAkB;AAAA,QAC5D,IAAI,gBAAgB,WAAW;AAAA,UAC7B,OAAO;AAAA,YACL,MAAM;AAAA,YACN,aAAa;AAAA,cACX,WAAW,eAAe;AAAA,cAC1B,cAAc,eAAe;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AAAA,QAEA,OAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QACF;AAAA,OAEJ;AAAA,MACA,OAAO,OAAO;AAAA,MACd,YAAY,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC7E,MAAM;AAAA,cACN;AAAA,MACA,YAAY,kBAAkB;AAAA,MAC9B,YAAY,iBAAiB;AAAA;AAAA;AAAA,EAIjC,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI;AAAA,MACF,MAAM,OAAO,iBAAiB;AAAA,QAC5B,MAAM,OAAO,MAAM,sBAAsB,YAAY;AAAA;AAAA,MAEvD,SAAS,OAAO,cAAc,SAAS;AAAA,QACrC,MAAM,OAAO,MAAM,yBAAyB,cAAc,IAAI;AAAA;AAAA,MAEhE,OAAO,OAAO,cAAc,MAAM,WAAW;AAAA,QAC3C,MAAM,OAAO,MAAM,uBAAuB,cAAc,MAAM,MAAM;AAAA;AAAA,MAEtE,OAAO,OAAO,cAAc,UAAU;AAAA,QACpC,MAAM,OAAO,MAAM,uBAAuB,cAAc,KAAK;AAAA;AAAA,IAEjE;AAAA,IACA,QAAQ,YAAY;AAAA,MAClB,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,gBAAgB,MAAM,oBAAoB;AAAA,QAC1C,MAAM,OAAO,OAAO;AAAA,QACpB,YAAY,OAAO,WAAW,GAAG,MAAM,QAAQ;AAAA,gBAC/C;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,SAAS,OAAO,mBAAmB;AAAA,MACjC,YAAY,iBAAiB;AAAA,MAC7B,IAAI;AAAA,QACF,IAAI,gBAAgB,MAAM;AAAA,UACxB,gBAAgB,MAAM,gBAAgB,UAAU,yBAAyB;AAAA,UACzE,MAAM,OAAO,OAAO;AAAA,UACpB,gBAAgB,MAAM,gBAAgB,UAAU,yBAAyB;AAAA,UACzE,MAAM,OAAO,MAAM;AAAA,UACnB;AAAA,QACF;AAAA,QACA,gBAAgB,MAAM,gBAAgB,UAAU,qBAAqB;AAAA,QACrE,MAAM,OAAO,MAAM;AAAA,gBACnB;AAAA,QACA,YAAY,iBAAiB;AAAA;AAAA;AAAA,IAGjC,aAAa,aAAa;AAAA,SACrB;AAAA,MACH,QAAQ,OAAO,WAAW,GAAG;AAAA,IAC/B;AAAA,EACF;AAAA;",
|
|
8
|
+
"debugId": "35EE9B7D9A1E94D564756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// packages/isolate/src/testing/integration-helpers.ts
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { createIsolateHost } from "../index.mjs";
|
|
7
|
+
function sanitizeLabel(label) {
|
|
8
|
+
return label.replace(/[^a-z0-9_-]+/gi, "-").toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
function createTestId(label) {
|
|
11
|
+
return `${sanitizeLabel(label)}-${process.pid}-${randomUUID()}`;
|
|
12
|
+
}
|
|
13
|
+
function createTestSocketPath(label) {
|
|
14
|
+
const suffix = randomUUID().slice(0, 8);
|
|
15
|
+
return path.join("/tmp", `isolate-${sanitizeLabel(label)}-${suffix}.sock`);
|
|
16
|
+
}
|
|
17
|
+
async function createTestHost(label) {
|
|
18
|
+
const socketPath = createTestSocketPath(label);
|
|
19
|
+
await fs.rm(socketPath, { force: true });
|
|
20
|
+
const host = await createIsolateHost({
|
|
21
|
+
daemon: {
|
|
22
|
+
socketPath,
|
|
23
|
+
timeoutMs: 15000
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
host,
|
|
28
|
+
socketPath,
|
|
29
|
+
cleanup: async () => {
|
|
30
|
+
await host.close().catch(() => {});
|
|
31
|
+
await fs.rm(socketPath, { force: true }).catch(() => {});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function expectResponse(result) {
|
|
36
|
+
if (result.type !== "response") {
|
|
37
|
+
assert.fail(`Expected a response result, received ${result.type}`);
|
|
38
|
+
}
|
|
39
|
+
return result.response;
|
|
40
|
+
}
|
|
41
|
+
async function withTimeout(promise, timeoutMs, label) {
|
|
42
|
+
let timeoutId;
|
|
43
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
44
|
+
timeoutId = setTimeout(() => {
|
|
45
|
+
reject(new Error(`Timed out after ${timeoutMs}ms: ${label}`));
|
|
46
|
+
}, timeoutMs);
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
50
|
+
} finally {
|
|
51
|
+
if (timeoutId !== undefined) {
|
|
52
|
+
clearTimeout(timeoutId);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
withTimeout,
|
|
58
|
+
expectResponse,
|
|
59
|
+
createTestId,
|
|
60
|
+
createTestHost
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//# debugId=1BDD75435E03F45E64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/testing/integration-helpers.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import assert from \"node:assert/strict\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { createIsolateHost } from \"../index.mjs\";\nimport type { IsolateHost, RequestResult } from \"../types.mjs\";\n\nfunction sanitizeLabel(label: string): string {\n return label.replace(/[^a-z0-9_-]+/gi, \"-\").toLowerCase();\n}\n\nexport function createTestId(label: string): string {\n return `${sanitizeLabel(label)}-${process.pid}-${randomUUID()}`;\n}\n\nfunction createTestSocketPath(label: string): string {\n const suffix = randomUUID().slice(0, 8);\n return path.join(\"/tmp\", `isolate-${sanitizeLabel(label)}-${suffix}.sock`);\n}\n\nexport async function createTestHost(\n label: string,\n): Promise<{\n host: IsolateHost;\n socketPath: string;\n cleanup: () => Promise<void>;\n}> {\n const socketPath = createTestSocketPath(label);\n await fs.rm(socketPath, { force: true });\n\n const host = await createIsolateHost({\n daemon: {\n socketPath,\n timeoutMs: 15_000,\n },\n });\n\n return {\n host,\n socketPath,\n cleanup: async () => {\n await host.close().catch(() => {});\n await fs.rm(socketPath, { force: true }).catch(() => {});\n },\n };\n}\n\nexport function expectResponse(result: RequestResult): Response {\n if (result.type !== \"response\") {\n assert.fail(`Expected a response result, received ${result.type}`);\n }\n return result.response;\n}\n\nexport async function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n label: string,\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<T>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new Error(`Timed out after ${timeoutMs}ms: ${label}`));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeoutPromise]);\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n }\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAAA;AACA;AACA;AACA;AACA;AAGA,SAAS,aAAa,CAAC,OAAuB;AAAA,EAC5C,OAAO,MAAM,QAAQ,kBAAkB,GAAG,EAAE,YAAY;AAAA;AAGnD,SAAS,YAAY,CAAC,OAAuB;AAAA,EAClD,OAAO,GAAG,cAAc,KAAK,KAAK,QAAQ,OAAO,WAAW;AAAA;AAG9D,SAAS,oBAAoB,CAAC,OAAuB;AAAA,EACnD,MAAM,SAAS,WAAW,EAAE,MAAM,GAAG,CAAC;AAAA,EACtC,OAAO,KAAK,KAAK,QAAQ,WAAW,cAAc,KAAK,KAAK,aAAa;AAAA;AAG3E,eAAsB,cAAc,CAClC,OAKC;AAAA,EACD,MAAM,aAAa,qBAAqB,KAAK;AAAA,EAC7C,MAAM,GAAG,GAAG,YAAY,EAAE,OAAO,KAAK,CAAC;AAAA,EAEvC,MAAM,OAAO,MAAM,kBAAkB;AAAA,IACnC,QAAQ;AAAA,MACN;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,YAAY;AAAA,MACnB,MAAM,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE;AAAA,MACjC,MAAM,GAAG,GAAG,YAAY,EAAE,OAAO,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE;AAAA;AAAA,EAE3D;AAAA;AAGK,SAAS,cAAc,CAAC,QAAiC;AAAA,EAC9D,IAAI,OAAO,SAAS,YAAY;AAAA,IAC9B,OAAO,KAAK,wCAAwC,OAAO,MAAM;AAAA,EACnE;AAAA,EACA,OAAO,OAAO;AAAA;AAGhB,eAAsB,WAAc,CAClC,SACA,WACA,OACY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM,iBAAiB,IAAI,QAAW,CAAC,GAAG,WAAW;AAAA,IACnD,YAAY,WAAW,MAAM;AAAA,MAC3B,OAAO,IAAI,MAAM,mBAAmB,gBAAgB,OAAO,CAAC;AAAA,OAC3D,SAAS;AAAA,GACb;AAAA,EAED,IAAI;AAAA,IACF,OAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,cAAc,CAAC;AAAA,YACnD;AAAA,IACA,IAAI,cAAc,WAAW;AAAA,MAC3B,aAAa,SAAS;AAAA,IACxB;AAAA;AAAA;",
|
|
8
|
+
"debugId": "1BDD75435E03F45E64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// packages/isolate/src/typecheck/index.ts
|
|
2
|
+
import { TYPE_DEFINITIONS, formatTypecheckErrors as formatLegacyTypecheckErrors, typecheckIsolateCode } from "../internal/typecheck/index.mjs";
|
|
3
|
+
var CAPABILITY_MAP = {
|
|
4
|
+
fetch: ["fetch"],
|
|
5
|
+
files: ["fs"],
|
|
6
|
+
tests: ["testEnvironment"],
|
|
7
|
+
browser: ["playwright"],
|
|
8
|
+
tools: [],
|
|
9
|
+
console: ["console"],
|
|
10
|
+
encoding: ["encoding"],
|
|
11
|
+
timers: ["timers"]
|
|
12
|
+
};
|
|
13
|
+
var PROFILE_DEFAULTS = {
|
|
14
|
+
backend: ["console", "encoding", "fetch", "files", "timers"],
|
|
15
|
+
agent: ["console", "encoding", "fetch", "files", "timers"],
|
|
16
|
+
"browser-test": ["console", "encoding", "fetch", "tests", "browser", "timers"]
|
|
17
|
+
};
|
|
18
|
+
function unique(values) {
|
|
19
|
+
return [...new Set(values)];
|
|
20
|
+
}
|
|
21
|
+
function getTypeProfile(input) {
|
|
22
|
+
const profile = input?.profile ?? "backend";
|
|
23
|
+
const capabilities = unique([...PROFILE_DEFAULTS[profile] ?? PROFILE_DEFAULTS.backend, ...input?.capabilities ?? []]);
|
|
24
|
+
const include = unique([
|
|
25
|
+
"core",
|
|
26
|
+
...capabilities.flatMap((capability) => CAPABILITY_MAP[capability])
|
|
27
|
+
]);
|
|
28
|
+
return {
|
|
29
|
+
profile,
|
|
30
|
+
capabilities,
|
|
31
|
+
include,
|
|
32
|
+
files: include.map((key) => ({
|
|
33
|
+
name: `isolate-${key}.d.ts`,
|
|
34
|
+
content: TYPE_DEFINITIONS[key]
|
|
35
|
+
})).filter((entry) => Boolean(entry.content))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function typecheck(request) {
|
|
39
|
+
const profile = getTypeProfile({
|
|
40
|
+
profile: request.profile,
|
|
41
|
+
capabilities: request.capabilities
|
|
42
|
+
});
|
|
43
|
+
return typecheckIsolateCode(request.code, {
|
|
44
|
+
include: profile.include,
|
|
45
|
+
libraryTypes: request.libraryTypes,
|
|
46
|
+
compilerOptions: request.compilerOptions
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
var formatTypecheckErrors = formatLegacyTypecheckErrors;
|
|
50
|
+
export {
|
|
51
|
+
typecheck,
|
|
52
|
+
getTypeProfile,
|
|
53
|
+
formatTypecheckErrors
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//# debugId=F61B6EBA06E30ECD64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/typecheck/index.ts"],
|
|
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 = \"core\" | \"fetch\" | \"fs\" | \"console\" | \"encoding\" | \"timers\" | \"testEnvironment\" | \"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 ...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
|
+
],
|
|
7
|
+
"mappings": ";AAAA,oDAA2B;AAK3B,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,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": "F61B6EBA06E30ECD64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RuntimeDiagnostics } from "../types.ts";
|
|
2
|
+
export interface MutableRuntimeDiagnostics extends RuntimeDiagnostics {
|
|
3
|
+
activeRequests: number;
|
|
4
|
+
activeResources: number;
|
|
5
|
+
pendingFiles: number;
|
|
6
|
+
pendingFetches: number;
|
|
7
|
+
pendingModules: number;
|
|
8
|
+
pendingTools: number;
|
|
9
|
+
streamCount: number;
|
|
10
|
+
lifecycleState: "idle" | "active" | "reloading" | "disposing";
|
|
11
|
+
}
|
|
12
|
+
export declare function createRuntimeDiagnostics(): MutableRuntimeDiagnostics;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RuntimeOptions } from "../internal/client/index.ts";
|
|
2
|
+
import type { ModuleLoaderCallback } from "../internal/protocol/index.ts";
|
|
3
|
+
import type { HostBindings, HostCallContext, ModuleResolveResult, ModuleResolver, ModuleSource } from "../types.ts";
|
|
4
|
+
import type { MutableRuntimeDiagnostics } from "./diagnostics.ts";
|
|
5
|
+
export declare function createLegacyRuntimeOptions(bindings: HostBindings, getRuntimeId: () => string, diagnostics: MutableRuntimeDiagnostics): RuntimeOptions;
|
|
6
|
+
export declare function createMappedNodeModulesLoader(mappings: Array<{
|
|
7
|
+
from: string;
|
|
8
|
+
to: string;
|
|
9
|
+
}>): ModuleLoaderCallback | undefined;
|
|
10
|
+
export declare function tryResolveModule(resolver: ModuleResolver | undefined, specifier: string, importer: {
|
|
11
|
+
path: string;
|
|
12
|
+
resolveDir: string;
|
|
13
|
+
}, context: HostCallContext): Promise<ModuleSource | null>;
|
|
14
|
+
export declare function normalizeExplicitModuleResult(specifier: string, result: ModuleResolveResult, fallbackResolveDir?: string): Promise<ModuleSource | null>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function withRequestContext<T>(context: {
|
|
2
|
+
requestId?: string;
|
|
3
|
+
metadata?: Record<string, string>;
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
}, fn: () => Promise<T>): Promise<T>;
|
|
6
|
+
export declare function getRequestContext(): {
|
|
7
|
+
requestId?: string;
|
|
8
|
+
metadata: Record<string, string>;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RuntimeOptions } from "../internal/client/index.ts";
|
|
2
|
+
import type { HostBindings, HostCallContext, ModuleResolveResult, ModuleResolver, ModuleSource } from "../types.ts";
|
|
3
|
+
import type { MutableRuntimeDiagnostics } from "./diagnostics.ts";
|
|
4
|
+
export interface RuntimeBindingsAdapter {
|
|
5
|
+
runtimeOptions: RuntimeOptions;
|
|
6
|
+
abort(reason?: unknown): void;
|
|
7
|
+
reset(reason?: unknown): void;
|
|
8
|
+
}
|
|
9
|
+
export declare function createRuntimeBindingsAdapter(bindings: HostBindings, getRuntimeId: () => string, diagnostics: MutableRuntimeDiagnostics): RuntimeBindingsAdapter;
|
|
10
|
+
export declare function tryResolveModule(resolver: ModuleResolver | undefined, specifier: string, importer: {
|
|
11
|
+
path: string;
|
|
12
|
+
resolveDir: string;
|
|
13
|
+
}, context: HostCallContext): Promise<ModuleSource | null>;
|
|
14
|
+
export declare function normalizeExplicitModuleResult(specifier: string, result: ModuleResolveResult, fallbackResolveDir?: string): Promise<ModuleSource | null>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RemoteRuntime, RuntimeOptions } from "../internal/client/index.ts";
|
|
2
|
+
import type { BrowserRuntime, CreateBrowserRuntimeOptions } from "../types.ts";
|
|
3
|
+
export declare function createBrowserRuntimeAdapter(createRuntime: (options: RuntimeOptions) => Promise<RemoteRuntime>, options: CreateBrowserRuntimeOptions): Promise<BrowserRuntime>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createIsolateHost } from "./create-isolate-host.ts";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createIsolateHost } from "./host/index.ts";
|
|
2
|
+
export { createModuleResolver } from "./modules/index.ts";
|
|
3
|
+
export { createFileBindings } from "./files/index.ts";
|
|
4
|
+
export { getTypeProfile, typecheck, formatTypecheckErrors } from "./typecheck/index.ts";
|
|
5
|
+
export type { AppServer, BrowserRuntime, BrowserRuntimeDiagnostics, ConsoleEntry, CreateAppServerOptions, CreateBrowserRuntimeOptions, CreateIsolateHostOptions, CreateRuntimeOptions, FileBindings, HostBindings, HostCallContext, IsolateHost, ModuleImporter, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource, PlaywrightEvent, RequestResult, RunResults, ScriptRuntime, TestEvent, ToolBindings, ToolHandler, RuntimeDiagnostics, TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest, WebSocketUpgradeData, } from "./types.ts";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection handling for the isolate client.
|
|
3
|
+
*/
|
|
4
|
+
import type { ConnectOptions, DaemonConnection } from "./types.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Connect to the isolate daemon.
|
|
7
|
+
*/
|
|
8
|
+
export declare function connect(options?: ConnectOptions): Promise<DaemonConnection>;
|
|
9
|
+
export declare function isBenignDisposeError(error: unknown): boolean;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./index.ts
|
|
3
|
+
*
|
|
4
|
+
* Client library for connecting to the isolate daemon.
|
|
5
|
+
* Works with Bun, Node.js, and other JavaScript runtimes.
|
|
6
|
+
*/
|
|
7
|
+
export { connect, isBenignDisposeError } from "./connection.ts";
|
|
8
|
+
export type { ConnectOptions, DaemonConnection, Namespace, RuntimeOptions, RemoteRuntime, RemoteFetchHandle, RemoteTimersHandle, RemoteConsoleHandle, RemoteTestEnvironmentHandle, RemotePlaywrightHandle, DisposeRuntimeOptions, DispatchOptions, ConsoleCallbacks, FetchCallback, FileSystemCallbacks, PlaywrightOptions, PlaywrightEvent, TestEnvironmentOptions, RunResults, TestResult, TestInfo, TestError, TestEvent, SuiteInfo, SuiteResult, CollectedData, ConsoleEntry, CustomFunctions, UpgradeRequest, WebSocketCommand, } from "./types.ts";
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the isolate client.
|
|
3
|
+
*/
|
|
4
|
+
import type { RunTestsResult, TestResult as ProtocolTestResult, TestInfo as ProtocolTestInfo, TestError as ProtocolTestError, TestEvent as ProtocolTestEvent, SuiteInfo as ProtocolSuiteInfo, SuiteResult as ProtocolSuiteResult, CollectedData as ProtocolCollectedData, ConsoleEntry as ProtocolConsoleEntry, PlaywrightEvent as ProtocolPlaywrightEvent, CustomFunctionType, EvalOptions as ProtocolEvalOptions, TestEnvironmentOptions as ProtocolTestEnvironmentOptions, PlaywrightOptions as ProtocolPlaywrightOptions, BaseRuntimeOptions, ConsoleCallbacks, FetchCallback, WebSocketCallback, FileSystemCallbacks, ModuleLoaderCallback, ModuleLoaderResult, CustomFunction, CustomAsyncGeneratorFunction, CustomFunctionDefinition, CustomFunctions, DispatchOptions } from "../protocol/index.ts";
|
|
5
|
+
export type RunResults = RunTestsResult;
|
|
6
|
+
export type TestResult = ProtocolTestResult;
|
|
7
|
+
export type TestInfo = ProtocolTestInfo;
|
|
8
|
+
export type TestError = ProtocolTestError;
|
|
9
|
+
export type TestEvent = ProtocolTestEvent;
|
|
10
|
+
export type SuiteInfo = ProtocolSuiteInfo;
|
|
11
|
+
export type SuiteResult = ProtocolSuiteResult;
|
|
12
|
+
export type CollectedData = ProtocolCollectedData;
|
|
13
|
+
export type ConsoleEntry = ProtocolConsoleEntry;
|
|
14
|
+
export type PlaywrightEvent = ProtocolPlaywrightEvent;
|
|
15
|
+
export type EvalOptions = ProtocolEvalOptions;
|
|
16
|
+
export type TestEnvironmentOptions = ProtocolTestEnvironmentOptions;
|
|
17
|
+
export type PlaywrightOptions = ProtocolPlaywrightOptions;
|
|
18
|
+
export type { ConsoleCallbacks, FetchCallback, WebSocketCallback, FileSystemCallbacks, ModuleLoaderCallback, ModuleLoaderResult, CustomFunction, CustomAsyncGeneratorFunction, CustomFunctionDefinition, CustomFunctions, CustomFunctionType, DispatchOptions, };
|
|
19
|
+
/**
|
|
20
|
+
* Options for connecting to the daemon.
|
|
21
|
+
*/
|
|
22
|
+
export interface ConnectOptions {
|
|
23
|
+
/** Unix socket path */
|
|
24
|
+
socket?: string;
|
|
25
|
+
/** TCP host */
|
|
26
|
+
host?: string;
|
|
27
|
+
/** TCP port */
|
|
28
|
+
port?: number;
|
|
29
|
+
/** Connection timeout in ms */
|
|
30
|
+
timeout?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Namespace for runtime pooling/reuse.
|
|
34
|
+
* Runtimes created in a namespace are cached on dispose and can be reused.
|
|
35
|
+
*/
|
|
36
|
+
export interface Namespace {
|
|
37
|
+
/** The namespace ID */
|
|
38
|
+
readonly id: string;
|
|
39
|
+
/** Create a runtime in this namespace (cacheable on dispose) */
|
|
40
|
+
createRuntime(options?: RuntimeOptions): Promise<RemoteRuntime>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Connection to the daemon.
|
|
44
|
+
*/
|
|
45
|
+
export interface DaemonConnection {
|
|
46
|
+
/** Create a new runtime in the daemon */
|
|
47
|
+
createRuntime(options?: RuntimeOptions): Promise<RemoteRuntime>;
|
|
48
|
+
/** Create a namespace for runtime pooling/reuse */
|
|
49
|
+
createNamespace(id: string): Namespace;
|
|
50
|
+
/** Close the connection */
|
|
51
|
+
close(): Promise<void>;
|
|
52
|
+
/** Check if connected */
|
|
53
|
+
isConnected(): boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Options for creating a runtime.
|
|
57
|
+
* Extends BaseRuntimeOptions and adds client-specific fs type.
|
|
58
|
+
*/
|
|
59
|
+
export interface RuntimeOptions<T extends Record<string, any[]> = Record<string, unknown[]>> extends BaseRuntimeOptions<T> {
|
|
60
|
+
/** File system callback handlers */
|
|
61
|
+
fs?: FileSystemCallbacks;
|
|
62
|
+
/** Register callback for WebSocket commands from isolate at runtime creation time */
|
|
63
|
+
onWebSocketCommand?: (cmd: WebSocketCommand) => void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* WebSocket upgrade request info.
|
|
67
|
+
*/
|
|
68
|
+
export interface UpgradeRequest {
|
|
69
|
+
requested: true;
|
|
70
|
+
connectionId: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* WebSocket command from isolate.
|
|
74
|
+
*/
|
|
75
|
+
export interface WebSocketCommand {
|
|
76
|
+
type: "message" | "close";
|
|
77
|
+
connectionId: string;
|
|
78
|
+
data?: string | ArrayBuffer;
|
|
79
|
+
code?: number;
|
|
80
|
+
reason?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remote fetch handle - provides access to fetch/serve operations.
|
|
84
|
+
* All methods are async since they communicate over IPC.
|
|
85
|
+
*/
|
|
86
|
+
export interface RemoteFetchHandle {
|
|
87
|
+
/** Dispatch HTTP request to serve() handler */
|
|
88
|
+
dispatchRequest(request: Request, options?: DispatchOptions): Promise<Response>;
|
|
89
|
+
/** Check if isolate requested WebSocket upgrade */
|
|
90
|
+
getUpgradeRequest(): Promise<UpgradeRequest | null>;
|
|
91
|
+
/** Dispatch WebSocket open event to isolate */
|
|
92
|
+
dispatchWebSocketOpen(connectionId: string): Promise<void>;
|
|
93
|
+
/** Dispatch WebSocket message event to isolate */
|
|
94
|
+
dispatchWebSocketMessage(connectionId: string, message: string | ArrayBuffer): Promise<void>;
|
|
95
|
+
/** Dispatch WebSocket close event to isolate */
|
|
96
|
+
dispatchWebSocketClose(connectionId: string, code: number, reason: string): Promise<void>;
|
|
97
|
+
/** Dispatch WebSocket error event to isolate */
|
|
98
|
+
dispatchWebSocketError(connectionId: string, error: Error): Promise<void>;
|
|
99
|
+
/** Register callback for WebSocket commands from isolate */
|
|
100
|
+
onWebSocketCommand(callback: (cmd: WebSocketCommand) => void): () => void;
|
|
101
|
+
/** Check if serve() has been called */
|
|
102
|
+
hasServeHandler(): Promise<boolean>;
|
|
103
|
+
/** Check if there are active WebSocket connections */
|
|
104
|
+
hasActiveConnections(): Promise<boolean>;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Remote timers handle - provides access to timer operations.
|
|
108
|
+
* Timers fire automatically based on real time.
|
|
109
|
+
* All methods are async since they communicate over IPC.
|
|
110
|
+
*/
|
|
111
|
+
export interface RemoteTimersHandle {
|
|
112
|
+
/** Clear all pending timers */
|
|
113
|
+
clearAll(): Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Remote console handle - provides access to console state.
|
|
117
|
+
* All methods are async since they communicate over IPC.
|
|
118
|
+
*/
|
|
119
|
+
export interface RemoteConsoleHandle {
|
|
120
|
+
/** Reset all console state (timers, counters, group depth) */
|
|
121
|
+
reset(): Promise<void>;
|
|
122
|
+
/** Get console.time() timers */
|
|
123
|
+
getTimers(): Promise<Map<string, number>>;
|
|
124
|
+
/** Get console.count() counters */
|
|
125
|
+
getCounters(): Promise<Map<string, number>>;
|
|
126
|
+
/** Get current console.group() nesting depth */
|
|
127
|
+
getGroupDepth(): Promise<number>;
|
|
128
|
+
}
|
|
129
|
+
export interface DisposeRuntimeOptions {
|
|
130
|
+
/** Permanently delete the runtime instead of allowing namespaced reuse. */
|
|
131
|
+
hard?: boolean;
|
|
132
|
+
/** Optional caller-supplied reason for disposal, used for diagnostics/logging. */
|
|
133
|
+
reason?: string;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Remote runtime handle.
|
|
137
|
+
*/
|
|
138
|
+
export interface RemoteRuntime {
|
|
139
|
+
/** Unique runtime identifier */
|
|
140
|
+
readonly id: string;
|
|
141
|
+
/** True if runtime was reused from namespace pool */
|
|
142
|
+
readonly reused?: boolean;
|
|
143
|
+
/** Fetch handle - access to fetch/serve operations */
|
|
144
|
+
readonly fetch: RemoteFetchHandle;
|
|
145
|
+
/** Timers handle - access to timer operations */
|
|
146
|
+
readonly timers: RemoteTimersHandle;
|
|
147
|
+
/** Console handle - access to console state */
|
|
148
|
+
readonly console: RemoteConsoleHandle;
|
|
149
|
+
/** Test environment handle (methods throw if not enabled) */
|
|
150
|
+
readonly testEnvironment: RemoteTestEnvironmentHandle;
|
|
151
|
+
/** Playwright handle (methods throw if not configured) */
|
|
152
|
+
readonly playwright: RemotePlaywrightHandle;
|
|
153
|
+
/**
|
|
154
|
+
* Execute code as ES module in the isolate.
|
|
155
|
+
* Supports top-level await.
|
|
156
|
+
* @param code - The code to execute
|
|
157
|
+
* @param filenameOrOptions - Optional filename or eval options
|
|
158
|
+
*/
|
|
159
|
+
eval(code: string, filenameOrOptions?: string | EvalOptions): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Listen for events emitted from isolate code (via __emit).
|
|
162
|
+
* @param event - The event name to listen for
|
|
163
|
+
* @param callback - Called when the event is received
|
|
164
|
+
* @returns Unsubscribe function
|
|
165
|
+
*/
|
|
166
|
+
on(event: string, callback: (payload: unknown) => void): () => void;
|
|
167
|
+
/**
|
|
168
|
+
* Emit an event to the isolate (received via __on in isolate code).
|
|
169
|
+
* @param event - The event name
|
|
170
|
+
* @param payload - The event payload (must be JSON-serializable)
|
|
171
|
+
*/
|
|
172
|
+
emit(event: string, payload: unknown): void;
|
|
173
|
+
/** Dispose the runtime */
|
|
174
|
+
dispose(options?: DisposeRuntimeOptions): Promise<void>;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Remote test environment handle.
|
|
178
|
+
* All methods are async since they communicate over IPC.
|
|
179
|
+
*/
|
|
180
|
+
export interface RemoteTestEnvironmentHandle {
|
|
181
|
+
/** Run all registered tests and return results */
|
|
182
|
+
runTests(timeout?: number): Promise<RunResults>;
|
|
183
|
+
/** Check if any tests are registered */
|
|
184
|
+
hasTests(): Promise<boolean>;
|
|
185
|
+
/** Get count of registered tests */
|
|
186
|
+
getTestCount(): Promise<number>;
|
|
187
|
+
/** Reset test environment state */
|
|
188
|
+
reset(): Promise<void>;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Remote playwright handle - provides access to browser data collection.
|
|
192
|
+
*/
|
|
193
|
+
export interface RemotePlaywrightHandle {
|
|
194
|
+
/** Get collected browser console logs and network data */
|
|
195
|
+
getCollectedData(): CollectedData;
|
|
196
|
+
/** Clear collected data */
|
|
197
|
+
clearCollectedData(): void;
|
|
198
|
+
}
|