@ricsam/isolate 0.1.8 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -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 +203 -51
- package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
- package/dist/cjs/bridge/sandbox-isolate.cjs +365 -0
- package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
- package/dist/cjs/host/create-isolate-host.cjs +51 -25
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/nested-host-controller.cjs +311 -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 +91 -0
- package/dist/cjs/internal/browser-source.cjs.map +10 -0
- package/dist/cjs/internal/client/connection.cjs +152 -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 +129 -4
- package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
- package/dist/cjs/internal/encoding/index.cjs +27 -4
- package/dist/cjs/internal/encoding/index.cjs.map +3 -3
- package/dist/cjs/internal/fetch/index.cjs +2 -7
- package/dist/cjs/internal/fetch/index.cjs.map +3 -3
- package/dist/cjs/internal/module-loader/bundle.cjs +128 -1
- package/dist/cjs/internal/module-loader/bundle.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.map +2 -2
- 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 +186 -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/modules/index.cjs +6 -1
- package/dist/cjs/modules/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- 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 +206 -51
- package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
- package/dist/mjs/bridge/sandbox-isolate.mjs +325 -0
- package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
- package/dist/mjs/host/create-isolate-host.mjs +53 -25
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/nested-host-controller.mjs +275 -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 +51 -0
- package/dist/mjs/internal/browser-source.mjs.map +10 -0
- package/dist/mjs/internal/client/connection.mjs +154 -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 +129 -4
- package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
- package/dist/mjs/internal/encoding/index.mjs +27 -4
- package/dist/mjs/internal/encoding/index.mjs.map +3 -3
- package/dist/mjs/internal/fetch/index.mjs +2 -7
- package/dist/mjs/internal/fetch/index.mjs.map +3 -3
- package/dist/mjs/internal/module-loader/bundle.mjs +129 -2
- package/dist/mjs/internal/module-loader/bundle.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.map +2 -2
- 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 +186 -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/modules/index.mjs +6 -1
- package/dist/mjs/modules/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- 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 +15 -0
- package/dist/types/host/nested-host-controller.d.ts +11 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal/browser-source.d.ts +11 -0
- package/dist/types/internal/client/types.d.ts +5 -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 +25 -1
- 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/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 +33 -33
- package/package.json +3 -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
|
@@ -33,6 +33,7 @@ class ModuleResolverBuilder {
|
|
|
33
33
|
return this;
|
|
34
34
|
}
|
|
35
35
|
async resolve(specifier, importer, context) {
|
|
36
|
+
let nodeModulesError;
|
|
36
37
|
const explicit = this.virtualEntries.get(specifier);
|
|
37
38
|
if (explicit) {
|
|
38
39
|
const raw = typeof explicit.source === "function" ? await explicit.source() : await explicit.source;
|
|
@@ -73,6 +74,7 @@ class ModuleResolverBuilder {
|
|
|
73
74
|
try {
|
|
74
75
|
return await this.getNodeModulesLoader()(specifier, importer);
|
|
75
76
|
} catch (error) {
|
|
77
|
+
nodeModulesError = error;
|
|
76
78
|
if (!this.fallbackLoader) {
|
|
77
79
|
throw error;
|
|
78
80
|
}
|
|
@@ -84,6 +86,9 @@ class ModuleResolverBuilder {
|
|
|
84
86
|
return normalized;
|
|
85
87
|
}
|
|
86
88
|
}
|
|
89
|
+
if (nodeModulesError) {
|
|
90
|
+
throw nodeModulesError;
|
|
91
|
+
}
|
|
87
92
|
throw new Error(`Unable to resolve module: ${specifier}`);
|
|
88
93
|
}
|
|
89
94
|
getNodeModulesLoader() {
|
|
@@ -100,4 +105,4 @@ export {
|
|
|
100
105
|
createModuleResolver
|
|
101
106
|
};
|
|
102
107
|
|
|
103
|
-
//# debugId=
|
|
108
|
+
//# debugId=7D06ACD3E3CCF6C564756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { defaultModuleLoader } from \"../internal/module-loader/index.mjs\";\nimport { normalizeExplicitModuleResult } from \"../bridge/legacy-adapters.mjs\";\nimport type { HostCallContext, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource } from \"../types.mjs\";\n\nclass ModuleResolverBuilder implements ModuleResolver {\n private readonly nodeModuleMappings: Array<{ from: string; to: string }> = [];\n private readonly virtualEntries = new Map<string, { source: ModuleResolveResult | (() => ModuleResolveResult); options?: Partial<ModuleSource> }>();\n private readonly virtualFiles = new Map<string, { filePath: string; options?: Partial<ModuleSource> }>();\n private readonly sourceTrees: Array<{ prefix: string; loader: ModuleResolverSourceLoader }> = [];\n private fallbackLoader?: ModuleResolverFallback;\n private nodeModulesLoader?: ReturnType<typeof defaultModuleLoader>;\n\n mountNodeModules(virtualMount: string, hostPath: string): ModuleResolver {\n this.nodeModuleMappings.push({ from: hostPath, to: virtualMount });\n this.nodeModulesLoader = undefined;\n return this;\n }\n\n virtual(specifier: string, source: ModuleResolveResult | (() => ModuleResolveResult), options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualEntries.set(specifier, { source, options });\n return this;\n }\n\n virtualFile(specifier: string, filePath: string, options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualFiles.set(specifier, { filePath, options });\n return this;\n }\n\n sourceTree(prefix: string, loader: ModuleResolverSourceLoader): ModuleResolver {\n this.sourceTrees.push({ prefix, loader });\n return this;\n }\n\n fallback(loader: ModuleResolverFallback): ModuleResolver {\n this.fallbackLoader = loader;\n return this;\n }\n\n async resolve(specifier: string, importer: { path: string; resolveDir: string }, context: HostCallContext): Promise<ModuleSource> {\n const explicit = this.virtualEntries.get(specifier);\n if (explicit) {\n const raw = typeof explicit.source === \"function\" ? await explicit.source() : await explicit.source;\n const normalized = await normalizeExplicitModuleResult(specifier, raw, importer.resolveDir);\n if (!normalized) {\n throw new Error(`Virtual module ${specifier} returned no source.`);\n }\n return {\n ...normalized,\n ...explicit.options,\n };\n }\n\n const virtualFile = this.virtualFiles.get(specifier);\n if (virtualFile) {\n const code = fs.readFileSync(virtualFile.filePath, \"utf-8\");\n const fallback = await normalizeExplicitModuleResult(\n specifier,\n {\n code,\n filename: virtualFile.options?.filename ?? path.basename(virtualFile.filePath),\n resolveDir: virtualFile.options?.resolveDir ?? path.posix.dirname(specifier.startsWith(\"/\") ? specifier : `/${specifier}`),\n static: virtualFile.options?.static,\n },\n importer.resolveDir,\n );\n if (!fallback) {\n throw new Error(`Virtual file module ${specifier} returned no source.`);\n }\n return fallback;\n }\n\n for (const sourceTree of this.sourceTrees) {\n if (!specifier.startsWith(sourceTree.prefix)) {\n continue;\n }\n const relativePath = specifier.slice(sourceTree.prefix.length);\n const normalized = await normalizeExplicitModuleResult(specifier, sourceTree.loader(relativePath, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (this.nodeModuleMappings.length > 0) {\n try {\n return await this.getNodeModulesLoader()(specifier, importer);\n } catch (error) {\n if (!this.fallbackLoader) {\n throw error;\n }\n }\n }\n\n if (this.fallbackLoader) {\n const normalized = await normalizeExplicitModuleResult(specifier, this.fallbackLoader(specifier, importer, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n private getNodeModulesLoader(): ReturnType<typeof defaultModuleLoader> {\n if (!this.nodeModulesLoader) {\n this.nodeModulesLoader = defaultModuleLoader(...this.nodeModuleMappings);\n }\n return this.nodeModulesLoader;\n }\n}\n\nexport function createModuleResolver(): ModuleResolver {\n return new ModuleResolverBuilder();\n}\n"
|
|
5
|
+
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { defaultModuleLoader } from \"../internal/module-loader/index.mjs\";\nimport { normalizeExplicitModuleResult } from \"../bridge/legacy-adapters.mjs\";\nimport type { HostCallContext, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource } from \"../types.mjs\";\n\nclass ModuleResolverBuilder implements ModuleResolver {\n private readonly nodeModuleMappings: Array<{ from: string; to: string }> = [];\n private readonly virtualEntries = new Map<string, { source: ModuleResolveResult | (() => ModuleResolveResult); options?: Partial<ModuleSource> }>();\n private readonly virtualFiles = new Map<string, { filePath: string; options?: Partial<ModuleSource> }>();\n private readonly sourceTrees: Array<{ prefix: string; loader: ModuleResolverSourceLoader }> = [];\n private fallbackLoader?: ModuleResolverFallback;\n private nodeModulesLoader?: ReturnType<typeof defaultModuleLoader>;\n\n mountNodeModules(virtualMount: string, hostPath: string): ModuleResolver {\n this.nodeModuleMappings.push({ from: hostPath, to: virtualMount });\n this.nodeModulesLoader = undefined;\n return this;\n }\n\n virtual(specifier: string, source: ModuleResolveResult | (() => ModuleResolveResult), options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualEntries.set(specifier, { source, options });\n return this;\n }\n\n virtualFile(specifier: string, filePath: string, options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualFiles.set(specifier, { filePath, options });\n return this;\n }\n\n sourceTree(prefix: string, loader: ModuleResolverSourceLoader): ModuleResolver {\n this.sourceTrees.push({ prefix, loader });\n return this;\n }\n\n fallback(loader: ModuleResolverFallback): ModuleResolver {\n this.fallbackLoader = loader;\n return this;\n }\n\n async resolve(specifier: string, importer: { path: string; resolveDir: string }, context: HostCallContext): Promise<ModuleSource> {\n let nodeModulesError: unknown;\n\n const explicit = this.virtualEntries.get(specifier);\n if (explicit) {\n const raw = typeof explicit.source === \"function\" ? await explicit.source() : await explicit.source;\n const normalized = await normalizeExplicitModuleResult(specifier, raw, importer.resolveDir);\n if (!normalized) {\n throw new Error(`Virtual module ${specifier} returned no source.`);\n }\n return {\n ...normalized,\n ...explicit.options,\n };\n }\n\n const virtualFile = this.virtualFiles.get(specifier);\n if (virtualFile) {\n const code = fs.readFileSync(virtualFile.filePath, \"utf-8\");\n const fallback = await normalizeExplicitModuleResult(\n specifier,\n {\n code,\n filename: virtualFile.options?.filename ?? path.basename(virtualFile.filePath),\n resolveDir: virtualFile.options?.resolveDir ?? path.posix.dirname(specifier.startsWith(\"/\") ? specifier : `/${specifier}`),\n static: virtualFile.options?.static,\n },\n importer.resolveDir,\n );\n if (!fallback) {\n throw new Error(`Virtual file module ${specifier} returned no source.`);\n }\n return fallback;\n }\n\n for (const sourceTree of this.sourceTrees) {\n if (!specifier.startsWith(sourceTree.prefix)) {\n continue;\n }\n const relativePath = specifier.slice(sourceTree.prefix.length);\n const normalized = await normalizeExplicitModuleResult(specifier, sourceTree.loader(relativePath, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (this.nodeModuleMappings.length > 0) {\n try {\n return await this.getNodeModulesLoader()(specifier, importer);\n } catch (error) {\n nodeModulesError = error;\n if (!this.fallbackLoader) {\n throw error;\n }\n }\n }\n\n if (this.fallbackLoader) {\n const normalized = await normalizeExplicitModuleResult(specifier, this.fallbackLoader(specifier, importer, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (nodeModulesError) {\n throw nodeModulesError;\n }\n\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n private getNodeModulesLoader(): ReturnType<typeof defaultModuleLoader> {\n if (!this.nodeModulesLoader) {\n this.nodeModulesLoader = defaultModuleLoader(...this.nodeModuleMappings);\n }\n return this.nodeModulesLoader;\n }\n}\n\nexport function createModuleResolver(): ModuleResolver {\n return new ModuleResolverBuilder();\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "7D06ACD3E3CCF6C564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/mjs/package.json
CHANGED
|
@@ -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,15 @@
|
|
|
1
|
+
import type { CreateAppServerOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, HostCallContext } from "../types.ts";
|
|
2
|
+
export declare const SANDBOX_ISOLATE_MODULE_SPECIFIER = "@ricsam/isolate";
|
|
3
|
+
export type NestedResourceKind = "runtime" | "appServer" | "testRuntime";
|
|
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, context: HostCallContext): Promise<string>;
|
|
13
|
+
callResource(kind: NestedResourceKind, resourceId: string, method: string, args: unknown[], context: HostCallContext): Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
export declare const SANDBOX_ISOLATE_MODULE_SOURCE: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NestedHostBindings } from "../bridge/sandbox-isolate.ts";
|
|
2
|
+
import { type BrowserSource } from "../internal/browser-source.ts";
|
|
3
|
+
import type { AppServer, CreateAppServerOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, ScriptRuntime, TestRuntime } from "../types.ts";
|
|
4
|
+
interface NestedHostFactory {
|
|
5
|
+
createRuntime(options: CreateRuntimeOptions): Promise<ScriptRuntime>;
|
|
6
|
+
createAppServer(options: CreateAppServerOptions): Promise<AppServer>;
|
|
7
|
+
createTestRuntime(options: CreateTestRuntimeOptions): Promise<TestRuntime>;
|
|
8
|
+
isConnected(): boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function createNestedHostBindings(factory: NestedHostFactory, defaultBrowserSource: BrowserSource | undefined): NestedHostBindings;
|
|
11
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ export { createIsolateHost } from "./host/index.ts";
|
|
|
2
2
|
export { createModuleResolver } from "./modules/index.ts";
|
|
3
3
|
export { createFileBindings } from "./files/index.ts";
|
|
4
4
|
export { getTypeProfile, typecheck, formatTypecheckErrors } from "./typecheck/index.ts";
|
|
5
|
-
export type { AppServer,
|
|
5
|
+
export type { AppServer, BrowserDiagnostics, ConsoleEntry, CreateAppServerOptions, CreateIsolateHostOptions, CreateRuntimeOptions, CreateTestRuntimeOptions, FileBindings, HostBindings, HostBrowserBindings, HostCallContext, IsolateHost, ModuleImporter, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource, PlaywrightEvent, RequestResult, RuntimeResourceDiagnostics, RunResults, ScriptRuntime, TestDiagnostics, TestEvent, TestRuntime, TestRuntimeDiagnostics, ToolBindings, ToolHandler, RuntimeDiagnostics, TypeCapability, TypeProfile, TypeProfileName, TypecheckRequest, WebSocketUpgradeData, } from "./types.ts";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HostBrowserBindings } from "../types.ts";
|
|
2
|
+
export declare const ISOLATE_BROWSER_DESCRIPTOR_PROPERTY = "__isolateBrowserBinding";
|
|
3
|
+
export declare const ISOLATE_BROWSER_DESCRIPTOR_VALUE = "default";
|
|
4
|
+
export interface BrowserSource extends HostBrowserBindings {
|
|
5
|
+
}
|
|
6
|
+
export declare function isBrowserBindingLike(value: unknown): value is HostBrowserBindings;
|
|
7
|
+
export declare function isDefaultBrowserDescriptor(value: unknown): boolean;
|
|
8
|
+
export declare function createBrowserSourceFromBindings(browser: HostBrowserBindings | undefined): BrowserSource | undefined;
|
|
9
|
+
export declare function createBrowserSourceFromUnknown(browser: unknown): BrowserSource | undefined;
|
|
10
|
+
export declare function requireBrowserSource(source: BrowserSource | undefined, operation: string): BrowserSource;
|
|
11
|
+
export declare function cloneBrowserDescriptor(): Record<string, string>;
|
|
@@ -193,6 +193,11 @@ export interface RemoteTestEnvironmentHandle {
|
|
|
193
193
|
export interface RemotePlaywrightHandle {
|
|
194
194
|
/** Get collected browser console logs and network data */
|
|
195
195
|
getCollectedData(): CollectedData;
|
|
196
|
+
/** Get tracked browser context/page ids */
|
|
197
|
+
getTrackedResources(): {
|
|
198
|
+
contexts: string[];
|
|
199
|
+
pages: string[];
|
|
200
|
+
};
|
|
196
201
|
/** Clear collected data */
|
|
197
202
|
clearCollectedData(): void;
|
|
198
203
|
}
|
|
@@ -61,8 +61,6 @@ export interface IsolateInstance {
|
|
|
61
61
|
returnedPromises?: Map<number, Promise<unknown>>;
|
|
62
62
|
/** Async iterators returned by custom function calls (iterable from isolate) */
|
|
63
63
|
returnedIterators?: Map<number, AsyncIterator<unknown>>;
|
|
64
|
-
/** Next ID for daemon-local callback registration (starts at high number to avoid conflicts) */
|
|
65
|
-
nextLocalCallbackId?: number;
|
|
66
64
|
/** Namespace ID for pooling/reuse (if set, runtime is cached on dispose) */
|
|
67
65
|
namespaceId?: string;
|
|
68
66
|
/** Whether this runtime is soft-deleted (disposed but cached for reuse) */
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Client-safe exports for ./index.ts
|
|
3
3
|
* This module can be imported without loading isolated-vm
|
|
4
4
|
*/
|
|
5
|
-
export type { NetworkRequestInfo, NetworkResponseInfo, BrowserConsoleLogEntry, PageErrorInfo, RequestFailureInfo, DefaultPlaywrightHandler, DefaultPlaywrightHandlerMetadata, DefaultPlaywrightHandlerOptions, PlaywrightSetupOptions, PlaywrightHandle, PlaywrightCallback, } from "./types.ts";
|
|
5
|
+
export type { NetworkRequestInfo, NetworkResponseInfo, BrowserConsoleLogEntry, PageErrorInfo, RequestFailureInfo, DefaultPlaywrightHandler, DefaultPlaywrightHandlerMetadata, DefaultPlaywrightHandlerOptions, PlaywrightCollector, PlaywrightHandlerMetadata, PlaywrightSetupOptions, PlaywrightHandle, PlaywrightCallback, } from "./types.ts";
|
|
6
6
|
export type { PlaywrightOperation, PlaywrightResult, PlaywrightEvent, PlaywrightFileData } from "../protocol/index.ts";
|
|
7
|
-
export { createPlaywrightHandler, defaultPlaywrightHandler, getDefaultPlaywrightHandlerMetadata, } from "./handler.ts";
|
|
7
|
+
export { createPlaywrightHandler, createPlaywrightFactoryHandler, defaultPlaywrightHandler, getDefaultPlaywrightHandlerMetadata, getPlaywrightHandlerMetadata, } from "./handler.ts";
|
|
@@ -3,13 +3,22 @@
|
|
|
3
3
|
* Used by both index.ts (with isolated-vm) and client.ts (without isolated-vm)
|
|
4
4
|
*/
|
|
5
5
|
import type { Page, Locator as PlaywrightLocator, BrowserContext, Response } from "playwright";
|
|
6
|
-
import
|
|
6
|
+
import type { CollectedData, PlaywrightEvent } from "../protocol/index.ts";
|
|
7
|
+
import { type DefaultPlaywrightHandlerMetadata, type DefaultPlaywrightHandlerOptions, type PlaywrightCallback, type PlaywrightHandlerMetadata, type PlaywrightSetupOptions } from "./types.ts";
|
|
7
8
|
type ReadFileCallback = NonNullable<PlaywrightSetupOptions['readFile']>;
|
|
8
9
|
type WriteFileCallback = NonNullable<PlaywrightSetupOptions['writeFile']>;
|
|
9
10
|
export interface FileIOCallbacks {
|
|
10
11
|
readFile?: ReadFileCallback;
|
|
11
12
|
writeFile?: WriteFileCallback;
|
|
12
13
|
}
|
|
14
|
+
interface CollectorContextRecord {
|
|
15
|
+
context: BrowserContext;
|
|
16
|
+
pageIds: Set<string>;
|
|
17
|
+
}
|
|
18
|
+
interface CollectorPageRecord {
|
|
19
|
+
page: Page;
|
|
20
|
+
contextId: string;
|
|
21
|
+
}
|
|
13
22
|
export declare function getLocator(page: Page, selectorType: string, selectorValue: string, optionsJson: string | null): PlaywrightLocator;
|
|
14
23
|
export declare function executeLocatorAction(locator: PlaywrightLocator, action: string, actionArg: unknown, timeout: number, fileIO?: FileIOCallbacks): Promise<unknown>;
|
|
15
24
|
export declare function executeExpectAssertion(locator: PlaywrightLocator, matcher: string, expected: unknown, negated: boolean, timeout: number): Promise<void>;
|
|
@@ -18,25 +27,39 @@ export declare function executePageExpectAssertion(page: Page, matcher: string,
|
|
|
18
27
|
* Registry for tracking multiple pages and contexts.
|
|
19
28
|
*/
|
|
20
29
|
export interface PlaywrightRegistry {
|
|
21
|
-
pages: Map<string,
|
|
22
|
-
contexts: Map<string,
|
|
30
|
+
pages: Map<string, CollectorPageRecord>;
|
|
31
|
+
contexts: Map<string, CollectorContextRecord>;
|
|
32
|
+
pageIdsByObject: WeakMap<Page, string>;
|
|
33
|
+
contextIdsByObject: WeakMap<BrowserContext, string>;
|
|
23
34
|
nextPageId: number;
|
|
24
35
|
nextContextId: number;
|
|
36
|
+
nextRequestId: number;
|
|
25
37
|
pendingResponses: Map<string, Promise<Response>>;
|
|
26
38
|
pendingRequests: Map<string, Promise<import("playwright").Request>>;
|
|
27
39
|
nextListenerId: number;
|
|
40
|
+
requestIds: WeakMap<object, string>;
|
|
41
|
+
pageListenerCleanups: Map<string, () => void>;
|
|
42
|
+
contextListenerCleanups: Map<string, () => void>;
|
|
43
|
+
eventSubscribers: Set<(event: PlaywrightEvent) => void>;
|
|
44
|
+
collectedData: CollectedData;
|
|
28
45
|
}
|
|
29
46
|
/**
|
|
30
47
|
* Create a playwright handler from a Page object.
|
|
31
48
|
* This handler is called by the daemon (via callback) when sandbox needs page operations.
|
|
32
49
|
* Used for remote runtime where the browser runs on the client.
|
|
33
50
|
*/
|
|
34
|
-
export declare function createPlaywrightHandler(page: Page, options?: DefaultPlaywrightHandlerOptions): PlaywrightCallback;
|
|
51
|
+
export declare function createPlaywrightHandler(page: Page | undefined, options?: DefaultPlaywrightHandlerOptions): PlaywrightCallback;
|
|
35
52
|
/**
|
|
36
53
|
* Public helper for handler-first runtime options.
|
|
37
54
|
* Adds metadata used by adapters for local event capture and collected data.
|
|
38
55
|
*/
|
|
39
56
|
export declare function defaultPlaywrightHandler(page: Page, options?: DefaultPlaywrightHandlerOptions): PlaywrightCallback;
|
|
57
|
+
/**
|
|
58
|
+
* Handler-first factory for contexts/pages without a default page.
|
|
59
|
+
* Used by browser bindings that expose only a stable browser object.
|
|
60
|
+
*/
|
|
61
|
+
export declare function createPlaywrightFactoryHandler(options?: DefaultPlaywrightHandlerOptions): PlaywrightCallback;
|
|
62
|
+
export declare function getPlaywrightHandlerMetadata(handler: PlaywrightCallback): PlaywrightHandlerMetadata | undefined;
|
|
40
63
|
/**
|
|
41
64
|
* Extract metadata from handlers created by defaultPlaywrightHandler().
|
|
42
65
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import ivm from "@ricsam/isolated-vm";
|
|
2
2
|
import { DEFAULT_PLAYWRIGHT_HANDLER_META } from "./types.ts";
|
|
3
|
-
export { createPlaywrightHandler, defaultPlaywrightHandler, getDefaultPlaywrightHandlerMetadata, } from "./handler.ts";
|
|
3
|
+
export { createPlaywrightHandler, defaultPlaywrightHandler, getDefaultPlaywrightHandlerMetadata, getPlaywrightHandlerMetadata, } from "./handler.ts";
|
|
4
4
|
export type { PlaywrightOperation, PlaywrightResult, PlaywrightEvent, PlaywrightFileData } from "../protocol/index.ts";
|
|
5
5
|
export { DEFAULT_PLAYWRIGHT_HANDLER_META };
|
|
6
|
-
export type { NetworkRequestInfo, NetworkResponseInfo, BrowserConsoleLogEntry, PageErrorInfo, RequestFailureInfo, PlaywrightCallback, PlaywrightSetupOptions, PlaywrightHandle, } from "./types.ts";
|
|
6
|
+
export type { NetworkRequestInfo, NetworkResponseInfo, BrowserConsoleLogEntry, PageErrorInfo, RequestFailureInfo, PlaywrightCallback, PlaywrightHandlerMetadata, PlaywrightSetupOptions, PlaywrightHandle, } from "./types.ts";
|
|
7
7
|
import type { PlaywrightSetupOptions, PlaywrightHandle } from "./types.ts";
|
|
8
8
|
/**
|
|
9
9
|
* Set up playwright in an isolate context.
|