@ricsam/isolate 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +257 -18
- package/dist/cjs/bridge/diagnostics.cjs +37 -2
- package/dist/cjs/bridge/diagnostics.cjs.map +3 -3
- package/dist/cjs/bridge/runtime-bindings.cjs +230 -51
- package/dist/cjs/bridge/runtime-bindings.cjs.map +3 -3
- package/dist/cjs/bridge/sandbox-isolate.cjs +464 -0
- package/dist/cjs/bridge/sandbox-isolate.cjs.map +10 -0
- package/dist/cjs/host/create-isolate-host.cjs +130 -25
- package/dist/cjs/host/create-isolate-host.cjs.map +3 -3
- package/dist/cjs/host/nested-host-controller.cjs +369 -0
- package/dist/cjs/host/nested-host-controller.cjs.map +10 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/internal/browser-source.cjs +102 -0
- package/dist/cjs/internal/browser-source.cjs.map +10 -0
- package/dist/cjs/internal/client/connection.cjs +163 -172
- package/dist/cjs/internal/client/connection.cjs.map +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs +3 -3
- package/dist/cjs/internal/daemon/callback-fs-handler.cjs.map +3 -3
- package/dist/cjs/internal/daemon/connection.cjs +156 -13
- package/dist/cjs/internal/daemon/connection.cjs.map +3 -3
- package/dist/cjs/internal/playwright/client.cjs +4 -2
- package/dist/cjs/internal/playwright/client.cjs.map +3 -3
- package/dist/cjs/internal/playwright/handler.cjs +298 -25
- package/dist/cjs/internal/playwright/handler.cjs.map +3 -3
- package/dist/cjs/internal/playwright/index.cjs +54 -8
- package/dist/cjs/internal/playwright/index.cjs.map +3 -3
- package/dist/cjs/internal/playwright/types.cjs +3 -1
- package/dist/cjs/internal/playwright/types.cjs.map +3 -3
- package/dist/cjs/internal/protocol/codec.cjs +16 -5
- package/dist/cjs/internal/protocol/codec.cjs.map +3 -3
- package/dist/cjs/internal/protocol/marshalValue.cjs +37 -6
- package/dist/cjs/internal/protocol/marshalValue.cjs.map +3 -3
- package/dist/cjs/internal/protocol/types.cjs +2 -1
- package/dist/cjs/internal/protocol/types.cjs.map +3 -3
- package/dist/cjs/internal/runtime/index.cjs +377 -22
- package/dist/cjs/internal/runtime/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/index.cjs +2 -1
- package/dist/cjs/internal/typecheck/index.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/isolate-types.cjs +218 -13
- package/dist/cjs/internal/typecheck/isolate-types.cjs.map +3 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs +2 -3
- package/dist/cjs/internal/typecheck/typecheck.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/playwright.cjs +76 -0
- package/dist/cjs/playwright.cjs.map +10 -0
- package/dist/cjs/runtime/namespaced-runtime.cjs +181 -0
- package/dist/cjs/runtime/namespaced-runtime.cjs.map +10 -0
- package/dist/cjs/runtime/script-runtime.cjs +14 -12
- package/dist/cjs/runtime/script-runtime.cjs.map +3 -3
- package/dist/cjs/runtime/test-runtime.cjs +113 -0
- package/dist/cjs/runtime/test-runtime.cjs.map +10 -0
- package/dist/cjs/server/app-server.cjs +16 -9
- package/dist/cjs/server/app-server.cjs.map +3 -3
- package/dist/cjs/typecheck/index.cjs +2 -1
- package/dist/cjs/typecheck/index.cjs.map +3 -3
- package/dist/mjs/bridge/diagnostics.mjs +37 -2
- package/dist/mjs/bridge/diagnostics.mjs.map +3 -3
- package/dist/mjs/bridge/runtime-bindings.mjs +233 -51
- package/dist/mjs/bridge/runtime-bindings.mjs.map +3 -3
- package/dist/mjs/bridge/sandbox-isolate.mjs +424 -0
- package/dist/mjs/bridge/sandbox-isolate.mjs.map +10 -0
- package/dist/mjs/host/create-isolate-host.mjs +132 -25
- package/dist/mjs/host/create-isolate-host.mjs.map +3 -3
- package/dist/mjs/host/nested-host-controller.mjs +333 -0
- package/dist/mjs/host/nested-host-controller.mjs.map +10 -0
- package/dist/mjs/index.mjs.map +1 -1
- package/dist/mjs/internal/browser-source.mjs +62 -0
- package/dist/mjs/internal/browser-source.mjs.map +10 -0
- package/dist/mjs/internal/client/connection.mjs +165 -173
- package/dist/mjs/internal/client/connection.mjs.map +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs +3 -3
- package/dist/mjs/internal/daemon/callback-fs-handler.mjs.map +3 -3
- package/dist/mjs/internal/daemon/connection.mjs +156 -13
- package/dist/mjs/internal/daemon/connection.mjs.map +3 -3
- package/dist/mjs/internal/playwright/client.mjs +7 -3
- package/dist/mjs/internal/playwright/client.mjs.map +3 -3
- package/dist/mjs/internal/playwright/handler.mjs +300 -26
- package/dist/mjs/internal/playwright/handler.mjs.map +3 -3
- package/dist/mjs/internal/playwright/index.mjs +59 -9
- package/dist/mjs/internal/playwright/index.mjs.map +3 -3
- package/dist/mjs/internal/playwright/types.mjs +3 -1
- package/dist/mjs/internal/playwright/types.mjs.map +3 -3
- package/dist/mjs/internal/protocol/codec.mjs +16 -5
- package/dist/mjs/internal/protocol/codec.mjs.map +3 -3
- package/dist/mjs/internal/protocol/marshalValue.mjs +38 -6
- package/dist/mjs/internal/protocol/marshalValue.mjs.map +3 -3
- package/dist/mjs/internal/protocol/types.mjs +2 -1
- package/dist/mjs/internal/protocol/types.mjs.map +3 -3
- package/dist/mjs/internal/runtime/index.mjs +377 -22
- package/dist/mjs/internal/runtime/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/index.mjs +3 -1
- package/dist/mjs/internal/typecheck/index.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/isolate-types.mjs +218 -13
- package/dist/mjs/internal/typecheck/isolate-types.mjs.map +3 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs +2 -3
- package/dist/mjs/internal/typecheck/typecheck.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/playwright.mjs +47 -0
- package/dist/mjs/playwright.mjs.map +10 -0
- package/dist/mjs/runtime/namespaced-runtime.mjs +143 -0
- package/dist/mjs/runtime/namespaced-runtime.mjs.map +10 -0
- package/dist/mjs/runtime/script-runtime.mjs +16 -12
- package/dist/mjs/runtime/script-runtime.mjs.map +3 -3
- package/dist/mjs/runtime/test-runtime.mjs +78 -0
- package/dist/mjs/runtime/test-runtime.mjs.map +10 -0
- package/dist/mjs/server/app-server.mjs +23 -11
- package/dist/mjs/server/app-server.mjs.map +3 -3
- package/dist/mjs/typecheck/index.mjs +2 -1
- package/dist/mjs/typecheck/index.mjs.map +3 -3
- package/dist/types/bridge/diagnostics.d.ts +6 -1
- package/dist/types/bridge/runtime-bindings.d.ts +5 -1
- package/dist/types/bridge/sandbox-isolate.d.ts +21 -0
- package/dist/types/host/nested-host-controller.d.ts +15 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal/browser-source.d.ts +10 -0
- package/dist/types/internal/client/types.d.ts +9 -0
- package/dist/types/internal/daemon/types.d.ts +0 -2
- package/dist/types/internal/playwright/client.d.ts +2 -2
- package/dist/types/internal/playwright/handler.d.ts +27 -4
- package/dist/types/internal/playwright/index.d.ts +2 -2
- package/dist/types/internal/playwright/types.d.ts +33 -1
- package/dist/types/internal/protocol/codec.d.ts +12 -2
- package/dist/types/internal/protocol/marshalValue.d.ts +3 -2
- package/dist/types/internal/protocol/types.d.ts +33 -2
- package/dist/types/internal/runtime/index.d.ts +5 -0
- package/dist/types/internal/typecheck/index.d.ts +1 -1
- package/dist/types/internal/typecheck/isolate-types.d.ts +6 -4
- package/dist/types/internal/typecheck/typecheck.d.ts +1 -1
- package/dist/types/playwright.d.ts +26 -0
- package/dist/types/runtime/namespaced-runtime.d.ts +11 -0
- package/dist/types/runtime/script-runtime.d.ts +2 -1
- package/dist/types/runtime/test-runtime.d.ts +4 -0
- package/dist/types/server/app-server.d.ts +2 -1
- package/dist/types/types.d.ts +75 -33
- package/package.json +8 -3
- package/dist/cjs/browser/browser-runtime.cjs +0 -157
- package/dist/cjs/browser/browser-runtime.cjs.map +0 -10
- package/dist/mjs/browser/browser-runtime.mjs +0 -93
- package/dist/mjs/browser/browser-runtime.mjs.map +0 -10
- package/dist/types/browser/browser-runtime.d.ts +0 -3
|
@@ -20,7 +20,8 @@ import {
|
|
|
20
20
|
} from "../protocol/index.mjs";
|
|
21
21
|
import {
|
|
22
22
|
defaultPlaywrightHandler,
|
|
23
|
-
getDefaultPlaywrightHandlerMetadata
|
|
23
|
+
getDefaultPlaywrightHandlerMetadata,
|
|
24
|
+
getPlaywrightHandlerMetadata
|
|
24
25
|
} from "../playwright/client.mjs";
|
|
25
26
|
var isolateWsCallbacks = new Map;
|
|
26
27
|
var isolateClientWebSockets = new Map;
|
|
@@ -44,8 +45,13 @@ async function connect(options = {}) {
|
|
|
44
45
|
callbackStreamReaders: new Map,
|
|
45
46
|
activeCallbackInvocations: new Map,
|
|
46
47
|
callbackAbortControllers: new Map,
|
|
48
|
+
clientIteratorSessions: new Map,
|
|
49
|
+
returnedPromiseRegistry: new Map,
|
|
50
|
+
returnedIteratorRegistry: new Map,
|
|
47
51
|
closing: false,
|
|
48
|
-
namespacedRuntimes: new Map
|
|
52
|
+
namespacedRuntimes: new Map,
|
|
53
|
+
nextClientIteratorId: 1,
|
|
54
|
+
nextReturnedRefId: 1
|
|
49
55
|
};
|
|
50
56
|
function setupSocket(sock) {
|
|
51
57
|
const parser = createFrameParser();
|
|
@@ -89,6 +95,9 @@ async function connect(options = {}) {
|
|
|
89
95
|
}
|
|
90
96
|
state.callbackAbortControllers.clear();
|
|
91
97
|
state.activeCallbackInvocations.clear();
|
|
98
|
+
state.clientIteratorSessions.clear();
|
|
99
|
+
state.returnedPromiseRegistry.clear();
|
|
100
|
+
state.returnedIteratorRegistry.clear();
|
|
92
101
|
if (!state.closing && state.namespacedRuntimes.size > 0) {
|
|
93
102
|
state.reconnecting = reconnect(state, options).catch(() => {
|
|
94
103
|
state.namespacedRuntimes.clear();
|
|
@@ -197,6 +206,17 @@ async function connect(options = {}) {
|
|
|
197
206
|
id,
|
|
198
207
|
createRuntime: (runtimeOptions) => createRuntime(state, runtimeOptions, id)
|
|
199
208
|
}),
|
|
209
|
+
disposeNamespace: async (id, options2) => {
|
|
210
|
+
state.namespacedRuntimes.delete(id);
|
|
211
|
+
const requestId = state.nextRequestId++;
|
|
212
|
+
const request = {
|
|
213
|
+
type: MessageType.DISPOSE_NAMESPACE,
|
|
214
|
+
requestId,
|
|
215
|
+
namespaceId: id,
|
|
216
|
+
reason: typeof options2?.reason === "string" && options2.reason.length > 0 ? options2.reason : undefined
|
|
217
|
+
};
|
|
218
|
+
await sendRequest(state, request);
|
|
219
|
+
},
|
|
200
220
|
close: async () => {
|
|
201
221
|
state.closing = true;
|
|
202
222
|
state.connected = false;
|
|
@@ -609,145 +629,57 @@ async function createRuntime(state, options = {}, namespaceId) {
|
|
|
609
629
|
callbacks.custom = registerCustomFunctions(state, options.customFunctions);
|
|
610
630
|
}
|
|
611
631
|
let playwrightHandler;
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
632
|
+
let getCollectedData = () => ({
|
|
633
|
+
browserConsoleLogs: [],
|
|
634
|
+
pageErrors: [],
|
|
635
|
+
networkRequests: [],
|
|
636
|
+
networkResponses: [],
|
|
637
|
+
requestFailures: []
|
|
638
|
+
});
|
|
639
|
+
let getTrackedResources = () => ({
|
|
640
|
+
contexts: [],
|
|
641
|
+
pages: []
|
|
642
|
+
});
|
|
643
|
+
let clearCollectedData = () => {};
|
|
644
|
+
const playwrightListenerCleanups = [];
|
|
618
645
|
if (normalizedPlaywrightOptions) {
|
|
619
646
|
playwrightHandler = normalizedPlaywrightOptions.handler;
|
|
620
647
|
if (!playwrightHandler) {
|
|
621
648
|
throw new Error("playwright.handler is required when using playwright options");
|
|
622
649
|
}
|
|
623
|
-
const
|
|
650
|
+
const handlerMetadata = getPlaywrightHandlerMetadata(playwrightHandler);
|
|
651
|
+
if (handlerMetadata) {
|
|
652
|
+
getCollectedData = () => handlerMetadata.collector.getCollectedData();
|
|
653
|
+
getTrackedResources = () => handlerMetadata.collector.getTrackedResources();
|
|
654
|
+
clearCollectedData = () => {
|
|
655
|
+
handlerMetadata.collector.clearCollectedData();
|
|
656
|
+
};
|
|
657
|
+
playwrightListenerCleanups.push(handlerMetadata.collector.onEvent((event) => {
|
|
658
|
+
if (normalizedPlaywrightOptions.onEvent) {
|
|
659
|
+
normalizedPlaywrightOptions.onEvent(event);
|
|
660
|
+
}
|
|
661
|
+
if (event.type === "browserConsoleLog") {
|
|
662
|
+
if (normalizedPlaywrightOptions.console && options.console?.onEntry) {
|
|
663
|
+
options.console.onEntry({
|
|
664
|
+
type: "browserOutput",
|
|
665
|
+
level: event.level,
|
|
666
|
+
stdout: event.stdout,
|
|
667
|
+
location: event.location,
|
|
668
|
+
timestamp: event.timestamp
|
|
669
|
+
});
|
|
670
|
+
} else if (normalizedPlaywrightOptions.console) {
|
|
671
|
+
const prefix = event.level === "error" ? "[browser:error]" : "[browser]";
|
|
672
|
+
console.log(prefix, event.stdout);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
}));
|
|
676
|
+
}
|
|
624
677
|
const handlerCallbackId = state.nextCallbackId++;
|
|
625
678
|
state.callbacks.set(handlerCallbackId, async (opJson) => {
|
|
626
679
|
const op = JSON.parse(opJson);
|
|
627
680
|
const result2 = await playwrightHandler(op);
|
|
628
681
|
return JSON.stringify(result2);
|
|
629
682
|
});
|
|
630
|
-
if (page) {
|
|
631
|
-
const requestIds = new WeakMap;
|
|
632
|
-
let nextRequestId = 1;
|
|
633
|
-
const getRequestId = (request2) => {
|
|
634
|
-
let requestId2 = requestIds.get(request2);
|
|
635
|
-
if (!requestId2) {
|
|
636
|
-
requestId2 = `req_${nextRequestId++}`;
|
|
637
|
-
requestIds.set(request2, requestId2);
|
|
638
|
-
}
|
|
639
|
-
return requestId2;
|
|
640
|
-
};
|
|
641
|
-
const toLocation = (location) => {
|
|
642
|
-
if (!location || !location.url && location.lineNumber == null && location.columnNumber == null) {
|
|
643
|
-
return;
|
|
644
|
-
}
|
|
645
|
-
return {
|
|
646
|
-
url: location.url || undefined,
|
|
647
|
-
lineNumber: location.lineNumber != null ? location.lineNumber + 1 : undefined,
|
|
648
|
-
columnNumber: location.columnNumber != null ? location.columnNumber + 1 : undefined
|
|
649
|
-
};
|
|
650
|
-
};
|
|
651
|
-
const onConsole = (msg) => {
|
|
652
|
-
const entry = {
|
|
653
|
-
level: msg.type(),
|
|
654
|
-
stdout: msg.text(),
|
|
655
|
-
location: toLocation(msg.location()),
|
|
656
|
-
timestamp: Date.now()
|
|
657
|
-
};
|
|
658
|
-
browserConsoleLogs.push(entry);
|
|
659
|
-
if (normalizedPlaywrightOptions.onEvent) {
|
|
660
|
-
normalizedPlaywrightOptions.onEvent({
|
|
661
|
-
type: "browserConsoleLog",
|
|
662
|
-
...entry
|
|
663
|
-
});
|
|
664
|
-
}
|
|
665
|
-
if (normalizedPlaywrightOptions.console && options.console?.onEntry) {
|
|
666
|
-
options.console.onEntry({
|
|
667
|
-
type: "browserOutput",
|
|
668
|
-
...entry
|
|
669
|
-
});
|
|
670
|
-
} else if (normalizedPlaywrightOptions.console) {
|
|
671
|
-
const prefix = entry.level === "error" ? "[browser:error]" : "[browser]";
|
|
672
|
-
console.log(prefix, entry.stdout);
|
|
673
|
-
}
|
|
674
|
-
};
|
|
675
|
-
const onRequest = (request2) => {
|
|
676
|
-
const info = {
|
|
677
|
-
requestId: getRequestId(request2),
|
|
678
|
-
url: request2.url(),
|
|
679
|
-
method: request2.method(),
|
|
680
|
-
headers: request2.headers(),
|
|
681
|
-
postData: request2.postData() ?? undefined,
|
|
682
|
-
resourceType: request2.resourceType(),
|
|
683
|
-
timestamp: Date.now()
|
|
684
|
-
};
|
|
685
|
-
networkRequests.push(info);
|
|
686
|
-
if (normalizedPlaywrightOptions.onEvent) {
|
|
687
|
-
normalizedPlaywrightOptions.onEvent({
|
|
688
|
-
type: "networkRequest",
|
|
689
|
-
...info
|
|
690
|
-
});
|
|
691
|
-
}
|
|
692
|
-
};
|
|
693
|
-
const onResponse = (response) => {
|
|
694
|
-
const request2 = response.request();
|
|
695
|
-
const info = {
|
|
696
|
-
requestId: getRequestId(request2),
|
|
697
|
-
url: response.url(),
|
|
698
|
-
status: response.status(),
|
|
699
|
-
statusText: response.statusText(),
|
|
700
|
-
headers: response.headers(),
|
|
701
|
-
resourceType: request2.resourceType(),
|
|
702
|
-
timestamp: Date.now()
|
|
703
|
-
};
|
|
704
|
-
networkResponses.push(info);
|
|
705
|
-
if (normalizedPlaywrightOptions.onEvent) {
|
|
706
|
-
normalizedPlaywrightOptions.onEvent({
|
|
707
|
-
type: "networkResponse",
|
|
708
|
-
...info
|
|
709
|
-
});
|
|
710
|
-
}
|
|
711
|
-
};
|
|
712
|
-
const onRequestFailed = (request2) => {
|
|
713
|
-
const info = {
|
|
714
|
-
requestId: getRequestId(request2),
|
|
715
|
-
url: request2.url(),
|
|
716
|
-
method: request2.method(),
|
|
717
|
-
failureText: request2.failure()?.errorText || "request failed",
|
|
718
|
-
resourceType: request2.resourceType(),
|
|
719
|
-
timestamp: Date.now()
|
|
720
|
-
};
|
|
721
|
-
requestFailures.push(info);
|
|
722
|
-
if (normalizedPlaywrightOptions.onEvent) {
|
|
723
|
-
normalizedPlaywrightOptions.onEvent({
|
|
724
|
-
type: "requestFailure",
|
|
725
|
-
...info
|
|
726
|
-
});
|
|
727
|
-
}
|
|
728
|
-
};
|
|
729
|
-
const onPageError = (error) => {
|
|
730
|
-
const entry = {
|
|
731
|
-
name: error.name,
|
|
732
|
-
message: error.message,
|
|
733
|
-
stack: error.stack,
|
|
734
|
-
timestamp: Date.now()
|
|
735
|
-
};
|
|
736
|
-
pageErrors.push(entry);
|
|
737
|
-
if (normalizedPlaywrightOptions.onEvent) {
|
|
738
|
-
normalizedPlaywrightOptions.onEvent({
|
|
739
|
-
type: "pageError",
|
|
740
|
-
...entry
|
|
741
|
-
});
|
|
742
|
-
}
|
|
743
|
-
};
|
|
744
|
-
page.on("console", onConsole);
|
|
745
|
-
page.on("request", onRequest);
|
|
746
|
-
page.on("response", onResponse);
|
|
747
|
-
page.on("requestfailed", onRequestFailed);
|
|
748
|
-
page.on("pageerror", onPageError);
|
|
749
|
-
pageListenerCleanups.push(() => page.removeListener("console", onConsole), () => page.removeListener("request", onRequest), () => page.removeListener("response", onResponse), () => page.removeListener("requestfailed", onRequestFailed), () => page.removeListener("pageerror", onPageError));
|
|
750
|
-
}
|
|
751
683
|
callbacks.playwright = {
|
|
752
684
|
handlerCallbackId,
|
|
753
685
|
console: normalizedPlaywrightOptions.console && !options.console?.onEntry
|
|
@@ -778,7 +710,10 @@ async function createRuntime(state, options = {}, namespaceId) {
|
|
|
778
710
|
testEnvironmentOption = true;
|
|
779
711
|
}
|
|
780
712
|
}
|
|
781
|
-
const playwrightOption = normalizedPlaywrightOptions
|
|
713
|
+
const playwrightOption = normalizedPlaywrightOptions ? {
|
|
714
|
+
timeout: normalizedPlaywrightOptions.timeout,
|
|
715
|
+
hasDefaultPage: normalizedPlaywrightOptions.hasDefaultPage
|
|
716
|
+
} : undefined;
|
|
782
717
|
const requestId = state.nextRequestId++;
|
|
783
718
|
const request = {
|
|
784
719
|
type: MessageType.CREATE_RUNTIME,
|
|
@@ -1089,23 +1024,19 @@ async function createRuntime(state, options = {}, namespaceId) {
|
|
|
1089
1024
|
if (!playwrightEnabled) {
|
|
1090
1025
|
throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
|
|
1091
1026
|
}
|
|
1092
|
-
return
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1027
|
+
return getCollectedData();
|
|
1028
|
+
},
|
|
1029
|
+
getTrackedResources() {
|
|
1030
|
+
if (!playwrightEnabled) {
|
|
1031
|
+
throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
|
|
1032
|
+
}
|
|
1033
|
+
return getTrackedResources();
|
|
1099
1034
|
},
|
|
1100
1035
|
clearCollectedData() {
|
|
1101
1036
|
if (!playwrightEnabled) {
|
|
1102
1037
|
throw new Error("Playwright not configured. Provide playwright.handler in createRuntime options.");
|
|
1103
1038
|
}
|
|
1104
|
-
|
|
1105
|
-
pageErrors.length = 0;
|
|
1106
|
-
networkRequests.length = 0;
|
|
1107
|
-
networkResponses.length = 0;
|
|
1108
|
-
requestFailures.length = 0;
|
|
1039
|
+
clearCollectedData();
|
|
1109
1040
|
}
|
|
1110
1041
|
};
|
|
1111
1042
|
return {
|
|
@@ -1160,7 +1091,7 @@ async function createRuntime(state, options = {}, namespaceId) {
|
|
|
1160
1091
|
});
|
|
1161
1092
|
},
|
|
1162
1093
|
dispose: async (options2) => {
|
|
1163
|
-
for (const cleanup of
|
|
1094
|
+
for (const cleanup of playwrightListenerCleanups) {
|
|
1164
1095
|
cleanup();
|
|
1165
1096
|
}
|
|
1166
1097
|
isolateWsCallbacks.delete(isolateId);
|
|
@@ -1404,10 +1335,6 @@ function registerModuleLoaderCallback(state, callback) {
|
|
|
1404
1335
|
});
|
|
1405
1336
|
return { callbackId, name: "moduleLoader", type: "async" };
|
|
1406
1337
|
}
|
|
1407
|
-
var clientIteratorSessions = new Map;
|
|
1408
|
-
var nextClientIteratorId = 1;
|
|
1409
|
-
var returnedPromiseRegistry = new Map;
|
|
1410
|
-
var returnedIteratorRegistry = new Map;
|
|
1411
1338
|
function registerCustomFunctions(state, customFunctions) {
|
|
1412
1339
|
const registrations = {};
|
|
1413
1340
|
const addCallbackIdsToRefs = (value) => {
|
|
@@ -1418,12 +1345,12 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1418
1345
|
const resolveCallbackId = state.nextCallbackId++;
|
|
1419
1346
|
state.callbacks.set(resolveCallbackId, async (...args) => {
|
|
1420
1347
|
const promiseId = args[0];
|
|
1421
|
-
const promise = returnedPromiseRegistry.get(promiseId);
|
|
1348
|
+
const promise = state.returnedPromiseRegistry.get(promiseId);
|
|
1422
1349
|
if (!promise) {
|
|
1423
1350
|
throw new Error(`Promise ${promiseId} not found`);
|
|
1424
1351
|
}
|
|
1425
1352
|
const promiseResult = await promise;
|
|
1426
|
-
returnedPromiseRegistry.delete(promiseId);
|
|
1353
|
+
state.returnedPromiseRegistry.delete(promiseId);
|
|
1427
1354
|
const marshalledResult = await marshalValue(promiseResult, marshalCtx);
|
|
1428
1355
|
return addCallbackIdsToRefs(marshalledResult);
|
|
1429
1356
|
});
|
|
@@ -1436,13 +1363,13 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1436
1363
|
const nextCallbackId = state.nextCallbackId++;
|
|
1437
1364
|
state.callbacks.set(nextCallbackId, async (...args) => {
|
|
1438
1365
|
const iteratorId = args[0];
|
|
1439
|
-
const iterator = returnedIteratorRegistry.get(iteratorId);
|
|
1366
|
+
const iterator = state.returnedIteratorRegistry.get(iteratorId);
|
|
1440
1367
|
if (!iterator) {
|
|
1441
1368
|
throw new Error(`Iterator ${iteratorId} not found`);
|
|
1442
1369
|
}
|
|
1443
1370
|
const iterResult = await iterator.next();
|
|
1444
1371
|
if (iterResult.done) {
|
|
1445
|
-
returnedIteratorRegistry.delete(iteratorId);
|
|
1372
|
+
state.returnedIteratorRegistry.delete(iteratorId);
|
|
1446
1373
|
}
|
|
1447
1374
|
const marshalledValue = await marshalValue(iterResult.value, marshalCtx);
|
|
1448
1375
|
return {
|
|
@@ -1454,8 +1381,8 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1454
1381
|
state.callbacks.set(returnCallbackId, async (...args) => {
|
|
1455
1382
|
const iteratorId = args[0];
|
|
1456
1383
|
const returnValue = args[1];
|
|
1457
|
-
const iterator = returnedIteratorRegistry.get(iteratorId);
|
|
1458
|
-
returnedIteratorRegistry.delete(iteratorId);
|
|
1384
|
+
const iterator = state.returnedIteratorRegistry.get(iteratorId);
|
|
1385
|
+
state.returnedIteratorRegistry.delete(iteratorId);
|
|
1459
1386
|
if (!iterator || !iterator.return) {
|
|
1460
1387
|
return { done: true, value: undefined };
|
|
1461
1388
|
}
|
|
@@ -1470,7 +1397,7 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1470
1397
|
state.callbacks.set(throwCallbackId, async (...args) => {
|
|
1471
1398
|
const iteratorId = args[0];
|
|
1472
1399
|
const errorValue = args[1];
|
|
1473
|
-
const iterator = returnedIteratorRegistry.get(iteratorId);
|
|
1400
|
+
const iterator = state.returnedIteratorRegistry.get(iteratorId);
|
|
1474
1401
|
if (!iterator) {
|
|
1475
1402
|
throw new Error(`Iterator ${iteratorId} not found`);
|
|
1476
1403
|
}
|
|
@@ -1481,7 +1408,7 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1481
1408
|
const thrownError = Object.assign(new Error(errorValue?.message ?? "Iterator throw()"), { name: errorValue?.name ?? "Error", stack: errorValue?.stack });
|
|
1482
1409
|
const iterResult = await iterator.throw(thrownError);
|
|
1483
1410
|
if (iterResult.done) {
|
|
1484
|
-
returnedIteratorRegistry.delete(iteratorId);
|
|
1411
|
+
state.returnedIteratorRegistry.delete(iteratorId);
|
|
1485
1412
|
}
|
|
1486
1413
|
const marshalledValue = await marshalValue(iterResult.value, marshalCtx);
|
|
1487
1414
|
return {
|
|
@@ -1489,7 +1416,7 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1489
1416
|
value: addCallbackIdsToRefs(marshalledValue)
|
|
1490
1417
|
};
|
|
1491
1418
|
} catch (error) {
|
|
1492
|
-
returnedIteratorRegistry.delete(iteratorId);
|
|
1419
|
+
state.returnedIteratorRegistry.delete(iteratorId);
|
|
1493
1420
|
throw error;
|
|
1494
1421
|
}
|
|
1495
1422
|
});
|
|
@@ -1520,13 +1447,13 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1520
1447
|
return returnedCallbackId;
|
|
1521
1448
|
},
|
|
1522
1449
|
registerPromise: (promise) => {
|
|
1523
|
-
const promiseId = state.
|
|
1524
|
-
returnedPromiseRegistry.set(promiseId, promise);
|
|
1450
|
+
const promiseId = state.nextReturnedRefId++;
|
|
1451
|
+
state.returnedPromiseRegistry.set(promiseId, promise);
|
|
1525
1452
|
return promiseId;
|
|
1526
1453
|
},
|
|
1527
1454
|
registerIterator: (iterator) => {
|
|
1528
|
-
const iteratorId = state.
|
|
1529
|
-
returnedIteratorRegistry.set(iteratorId, iterator);
|
|
1455
|
+
const iteratorId = state.nextReturnedRefId++;
|
|
1456
|
+
state.returnedIteratorRegistry.set(iteratorId, iterator);
|
|
1530
1457
|
return iteratorId;
|
|
1531
1458
|
}
|
|
1532
1459
|
};
|
|
@@ -1538,6 +1465,71 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1538
1465
|
return unmarshalValue(result, unmarshalCtx);
|
|
1539
1466
|
};
|
|
1540
1467
|
};
|
|
1468
|
+
unmarshalCtx.createPromiseProxy = (promiseId, ref) => {
|
|
1469
|
+
const resolveCallbackId = ref?.__resolveCallbackId;
|
|
1470
|
+
if (typeof resolveCallbackId !== "number") {
|
|
1471
|
+
throw new Error(`Promise ${promiseId} is missing a resolve callback`);
|
|
1472
|
+
}
|
|
1473
|
+
return (async () => {
|
|
1474
|
+
const result = await invokeDaemonCallback(state, resolveCallbackId, [promiseId]);
|
|
1475
|
+
return unmarshalValue(result, unmarshalCtx);
|
|
1476
|
+
})();
|
|
1477
|
+
};
|
|
1478
|
+
unmarshalCtx.createIteratorProxy = (iteratorId, ref) => {
|
|
1479
|
+
const nextCallbackId = ref?.__nextCallbackId;
|
|
1480
|
+
const returnCallbackId = ref?.__returnCallbackId;
|
|
1481
|
+
const throwCallbackId = ref?.__throwCallbackId;
|
|
1482
|
+
if (typeof nextCallbackId !== "number") {
|
|
1483
|
+
throw new Error(`Iterator ${iteratorId} is missing a next callback`);
|
|
1484
|
+
}
|
|
1485
|
+
const invokeIteratorCallback = async (callbackId, args, label) => {
|
|
1486
|
+
const result = await invokeDaemonCallback(state, callbackId, args);
|
|
1487
|
+
if (!result || typeof result !== "object" || !("done" in result)) {
|
|
1488
|
+
throw new Error(`${label} returned an invalid iterator result`);
|
|
1489
|
+
}
|
|
1490
|
+
return result;
|
|
1491
|
+
};
|
|
1492
|
+
return {
|
|
1493
|
+
[Symbol.asyncIterator]() {
|
|
1494
|
+
return this;
|
|
1495
|
+
},
|
|
1496
|
+
async next() {
|
|
1497
|
+
const result = await invokeIteratorCallback(nextCallbackId, [iteratorId], "Iterator next()");
|
|
1498
|
+
return {
|
|
1499
|
+
done: Boolean(result.done),
|
|
1500
|
+
value: unmarshalValue(result.value, unmarshalCtx)
|
|
1501
|
+
};
|
|
1502
|
+
},
|
|
1503
|
+
async return(value) {
|
|
1504
|
+
if (typeof returnCallbackId !== "number") {
|
|
1505
|
+
return { done: true, value };
|
|
1506
|
+
}
|
|
1507
|
+
const result = await invokeIteratorCallback(returnCallbackId, [iteratorId, value], "Iterator return()");
|
|
1508
|
+
return {
|
|
1509
|
+
done: result.done ?? true,
|
|
1510
|
+
value: unmarshalValue(result.value, unmarshalCtx)
|
|
1511
|
+
};
|
|
1512
|
+
},
|
|
1513
|
+
async throw(errorValue) {
|
|
1514
|
+
if (typeof throwCallbackId !== "number") {
|
|
1515
|
+
throw errorValue;
|
|
1516
|
+
}
|
|
1517
|
+
const serializedError = errorValue && typeof errorValue === "object" ? {
|
|
1518
|
+
message: errorValue.message,
|
|
1519
|
+
name: errorValue.name,
|
|
1520
|
+
stack: errorValue.stack
|
|
1521
|
+
} : {
|
|
1522
|
+
message: String(errorValue ?? "Iterator throw()"),
|
|
1523
|
+
name: "Error"
|
|
1524
|
+
};
|
|
1525
|
+
const result = await invokeIteratorCallback(throwCallbackId, [iteratorId, serializedError], "Iterator throw()");
|
|
1526
|
+
return {
|
|
1527
|
+
done: Boolean(result.done),
|
|
1528
|
+
value: unmarshalValue(result.value, unmarshalCtx)
|
|
1529
|
+
};
|
|
1530
|
+
}
|
|
1531
|
+
};
|
|
1532
|
+
};
|
|
1541
1533
|
for (const [name, def] of Object.entries(customFunctions)) {
|
|
1542
1534
|
if (def.type === "asyncIterator") {
|
|
1543
1535
|
const startCallbackId = state.nextCallbackId++;
|
|
@@ -1545,8 +1537,8 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1545
1537
|
try {
|
|
1546
1538
|
const fn = def.fn;
|
|
1547
1539
|
const iterator = fn(...unmarshalValue(args, unmarshalCtx));
|
|
1548
|
-
const iteratorId = nextClientIteratorId++;
|
|
1549
|
-
clientIteratorSessions.set(iteratorId, { iterator });
|
|
1540
|
+
const iteratorId = state.nextClientIteratorId++;
|
|
1541
|
+
state.clientIteratorSessions.set(iteratorId, { iterator });
|
|
1550
1542
|
return { iteratorId };
|
|
1551
1543
|
} catch (error) {
|
|
1552
1544
|
throw error;
|
|
@@ -1554,39 +1546,39 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1554
1546
|
});
|
|
1555
1547
|
const nextCallbackId = state.nextCallbackId++;
|
|
1556
1548
|
state.callbacks.set(nextCallbackId, async (iteratorId) => {
|
|
1557
|
-
const session = clientIteratorSessions.get(iteratorId);
|
|
1549
|
+
const session = state.clientIteratorSessions.get(iteratorId);
|
|
1558
1550
|
if (!session) {
|
|
1559
1551
|
throw new Error(`Iterator session ${iteratorId} not found`);
|
|
1560
1552
|
}
|
|
1561
1553
|
try {
|
|
1562
1554
|
const result = await session.iterator.next();
|
|
1563
1555
|
if (result.done) {
|
|
1564
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1556
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1565
1557
|
}
|
|
1566
1558
|
return { done: result.done, value: await marshalValue(result.value) };
|
|
1567
1559
|
} catch (error) {
|
|
1568
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1560
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1569
1561
|
throw error;
|
|
1570
1562
|
}
|
|
1571
1563
|
});
|
|
1572
1564
|
const returnCallbackId = state.nextCallbackId++;
|
|
1573
1565
|
state.callbacks.set(returnCallbackId, async (iteratorId, value) => {
|
|
1574
|
-
const session = clientIteratorSessions.get(iteratorId);
|
|
1566
|
+
const session = state.clientIteratorSessions.get(iteratorId);
|
|
1575
1567
|
if (!session) {
|
|
1576
1568
|
return { done: true, value: await marshalValue(undefined) };
|
|
1577
1569
|
}
|
|
1578
1570
|
try {
|
|
1579
1571
|
const result = await session.iterator.return?.(value);
|
|
1580
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1572
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1581
1573
|
return { done: true, value: await marshalValue(result?.value) };
|
|
1582
1574
|
} catch (error) {
|
|
1583
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1575
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1584
1576
|
throw error;
|
|
1585
1577
|
}
|
|
1586
1578
|
});
|
|
1587
1579
|
const throwCallbackId = state.nextCallbackId++;
|
|
1588
1580
|
state.callbacks.set(throwCallbackId, async (iteratorId, errorData) => {
|
|
1589
|
-
const session = clientIteratorSessions.get(iteratorId);
|
|
1581
|
+
const session = state.clientIteratorSessions.get(iteratorId);
|
|
1590
1582
|
if (!session) {
|
|
1591
1583
|
throw new Error(`Iterator session ${iteratorId} not found`);
|
|
1592
1584
|
}
|
|
@@ -1594,10 +1586,10 @@ function registerCustomFunctions(state, customFunctions) {
|
|
|
1594
1586
|
const errInfo = errorData;
|
|
1595
1587
|
const error = Object.assign(new Error(errInfo.message), { name: errInfo.name });
|
|
1596
1588
|
const result = await session.iterator.throw?.(error);
|
|
1597
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1589
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1598
1590
|
return { done: result?.done ?? true, value: await marshalValue(result?.value) };
|
|
1599
1591
|
} catch (error) {
|
|
1600
|
-
clientIteratorSessions.delete(iteratorId);
|
|
1592
|
+
state.clientIteratorSessions.delete(iteratorId);
|
|
1601
1593
|
throw error;
|
|
1602
1594
|
}
|
|
1603
1595
|
});
|
|
@@ -1922,4 +1914,4 @@ export {
|
|
|
1922
1914
|
connect
|
|
1923
1915
|
};
|
|
1924
1916
|
|
|
1925
|
-
//# debugId=
|
|
1917
|
+
//# debugId=C25497E94950531064756E2164756E21
|