@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
|
@@ -39,11 +39,13 @@ var __export = (target, all) => {
|
|
|
39
39
|
// src/internal/playwright/client.ts
|
|
40
40
|
var exports_client = {};
|
|
41
41
|
__export(exports_client, {
|
|
42
|
+
getPlaywrightHandlerMetadata: () => import_handler.getPlaywrightHandlerMetadata,
|
|
42
43
|
getDefaultPlaywrightHandlerMetadata: () => import_handler.getDefaultPlaywrightHandlerMetadata,
|
|
43
44
|
defaultPlaywrightHandler: () => import_handler.defaultPlaywrightHandler,
|
|
44
|
-
createPlaywrightHandler: () => import_handler.createPlaywrightHandler
|
|
45
|
+
createPlaywrightHandler: () => import_handler.createPlaywrightHandler,
|
|
46
|
+
createPlaywrightFactoryHandler: () => import_handler.createPlaywrightFactoryHandler
|
|
45
47
|
});
|
|
46
48
|
module.exports = __toCommonJS(exports_client);
|
|
47
49
|
var import_handler = require("./handler.cjs");
|
|
48
50
|
|
|
49
|
-
//# debugId=
|
|
51
|
+
//# debugId=BD3C24F38A9EF75364756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/playwright/client.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Client-safe exports for ./index.ts\n * This module can be imported without loading isolated-vm\n */\n\n// Re-export types from types.ts\nexport type {\n NetworkRequestInfo,\n NetworkResponseInfo,\n BrowserConsoleLogEntry,\n PageErrorInfo,\n RequestFailureInfo,\n DefaultPlaywrightHandler,\n DefaultPlaywrightHandlerMetadata,\n DefaultPlaywrightHandlerOptions,\n PlaywrightSetupOptions,\n PlaywrightHandle,\n PlaywrightCallback,\n} from \"./types.cjs\";\n\nexport type { PlaywrightOperation, PlaywrightResult, PlaywrightEvent, PlaywrightFileData } from \"../protocol/index.cjs\";\n\n// Re-export handler functions\nexport {\n createPlaywrightHandler,\n defaultPlaywrightHandler,\n getDefaultPlaywrightHandlerMetadata,\n} from \"./handler.cjs\";\n"
|
|
5
|
+
"/**\n * Client-safe exports for ./index.ts\n * This module can be imported without loading isolated-vm\n */\n\n// Re-export types from types.ts\nexport type {\n NetworkRequestInfo,\n NetworkResponseInfo,\n BrowserConsoleLogEntry,\n PageErrorInfo,\n RequestFailureInfo,\n DefaultPlaywrightHandler,\n DefaultPlaywrightHandlerMetadata,\n DefaultPlaywrightHandlerOptions,\n PlaywrightCollector,\n PlaywrightHandlerMetadata,\n PlaywrightSetupOptions,\n PlaywrightHandle,\n PlaywrightCallback,\n} from \"./types.cjs\";\n\nexport type { PlaywrightOperation, PlaywrightResult, PlaywrightEvent, PlaywrightFileData } from \"../protocol/index.cjs\";\n\n// Re-export handler functions\nexport {\n createPlaywrightHandler,\n createPlaywrightFactoryHandler,\n defaultPlaywrightHandler,\n getDefaultPlaywrightHandlerMetadata,\n getPlaywrightHandlerMetadata,\n} from \"./handler.cjs\";\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,IANP;",
|
|
8
|
+
"debugId": "BD3C24F38A9EF75364756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -39,18 +39,259 @@ var __export = (target, all) => {
|
|
|
39
39
|
// src/internal/playwright/handler.ts
|
|
40
40
|
var exports_handler = {};
|
|
41
41
|
__export(exports_handler, {
|
|
42
|
+
getPlaywrightHandlerMetadata: () => getPlaywrightHandlerMetadata,
|
|
42
43
|
getLocator: () => getLocator,
|
|
43
44
|
getDefaultPlaywrightHandlerMetadata: () => getDefaultPlaywrightHandlerMetadata,
|
|
44
45
|
executePageExpectAssertion: () => executePageExpectAssertion,
|
|
45
46
|
executeLocatorAction: () => executeLocatorAction,
|
|
46
47
|
executeExpectAssertion: () => executeExpectAssertion,
|
|
47
48
|
defaultPlaywrightHandler: () => defaultPlaywrightHandler,
|
|
48
|
-
createPlaywrightHandler: () => createPlaywrightHandler
|
|
49
|
+
createPlaywrightHandler: () => createPlaywrightHandler,
|
|
50
|
+
createPlaywrightFactoryHandler: () => createPlaywrightFactoryHandler
|
|
49
51
|
});
|
|
50
52
|
module.exports = __toCommonJS(exports_handler);
|
|
51
53
|
var import_types = require("./types.cjs");
|
|
52
54
|
var INPUT_FILES_VALIDATION_ERROR = "setInputFiles() expects a file path string, an array of file path strings, " + "a single inline file object ({ name, mimeType, buffer }), or an array of inline file objects.";
|
|
53
55
|
var MIXED_INPUT_FILES_ERROR = "setInputFiles() does not support mixing file paths and inline file objects in the same array.";
|
|
56
|
+
function cloneCollectedData(collectedData) {
|
|
57
|
+
return {
|
|
58
|
+
browserConsoleLogs: [...collectedData.browserConsoleLogs],
|
|
59
|
+
pageErrors: [...collectedData.pageErrors],
|
|
60
|
+
networkRequests: [...collectedData.networkRequests],
|
|
61
|
+
networkResponses: [...collectedData.networkResponses],
|
|
62
|
+
requestFailures: [...collectedData.requestFailures]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createPlaywrightCollector(registry) {
|
|
66
|
+
const emitEvent = (event) => {
|
|
67
|
+
for (const callback of registry.eventSubscribers) {
|
|
68
|
+
try {
|
|
69
|
+
callback(event);
|
|
70
|
+
} catch {}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const getRequestId = (request) => {
|
|
74
|
+
let requestId = registry.requestIds.get(request);
|
|
75
|
+
if (!requestId) {
|
|
76
|
+
requestId = `req_${registry.nextRequestId++}`;
|
|
77
|
+
registry.requestIds.set(request, requestId);
|
|
78
|
+
}
|
|
79
|
+
return requestId;
|
|
80
|
+
};
|
|
81
|
+
const toLocation = (location) => {
|
|
82
|
+
if (!location || !location.url && location.lineNumber == null && location.columnNumber == null) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
url: location.url || undefined,
|
|
87
|
+
lineNumber: location.lineNumber != null ? location.lineNumber + 1 : undefined,
|
|
88
|
+
columnNumber: location.columnNumber != null ? location.columnNumber + 1 : undefined
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
const registerContext = (context, preferredId, includeExistingPages = true) => {
|
|
92
|
+
const existingId = registry.contextIdsByObject.get(context);
|
|
93
|
+
if (existingId) {
|
|
94
|
+
return existingId;
|
|
95
|
+
}
|
|
96
|
+
const contextId = preferredId ?? `ctx_${registry.nextContextId++}`;
|
|
97
|
+
registry.contexts.set(contextId, {
|
|
98
|
+
context,
|
|
99
|
+
pageIds: new Set
|
|
100
|
+
});
|
|
101
|
+
registry.contextIdsByObject.set(context, contextId);
|
|
102
|
+
const onPage = (page) => {
|
|
103
|
+
registerPage(page, contextId);
|
|
104
|
+
};
|
|
105
|
+
const onClose = () => {
|
|
106
|
+
unregisterContext(contextId);
|
|
107
|
+
};
|
|
108
|
+
context.on("page", onPage);
|
|
109
|
+
context.on("close", onClose);
|
|
110
|
+
registry.contextListenerCleanups.set(contextId, () => {
|
|
111
|
+
context.removeListener("page", onPage);
|
|
112
|
+
context.removeListener("close", onClose);
|
|
113
|
+
});
|
|
114
|
+
if (includeExistingPages) {
|
|
115
|
+
for (const page of context.pages()) {
|
|
116
|
+
registerPage(page, contextId);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return contextId;
|
|
120
|
+
};
|
|
121
|
+
const unregisterPage = (pageId) => {
|
|
122
|
+
const record = registry.pages.get(pageId);
|
|
123
|
+
if (!record) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
registry.pageListenerCleanups.get(pageId)?.();
|
|
127
|
+
registry.pageListenerCleanups.delete(pageId);
|
|
128
|
+
registry.pageIdsByObject.delete(record.page);
|
|
129
|
+
registry.pages.delete(pageId);
|
|
130
|
+
registry.contexts.get(record.contextId)?.pageIds.delete(pageId);
|
|
131
|
+
};
|
|
132
|
+
const unregisterContext = (contextId) => {
|
|
133
|
+
const record = registry.contexts.get(contextId);
|
|
134
|
+
if (!record) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
for (const pageId of [...record.pageIds]) {
|
|
138
|
+
unregisterPage(pageId);
|
|
139
|
+
}
|
|
140
|
+
registry.contextListenerCleanups.get(contextId)?.();
|
|
141
|
+
registry.contextListenerCleanups.delete(contextId);
|
|
142
|
+
registry.contextIdsByObject.delete(record.context);
|
|
143
|
+
registry.contexts.delete(contextId);
|
|
144
|
+
};
|
|
145
|
+
const registerPage = (page, preferredContextId, preferredPageId) => {
|
|
146
|
+
const existingId = registry.pageIdsByObject.get(page);
|
|
147
|
+
if (existingId) {
|
|
148
|
+
const existingRecord = registry.pages.get(existingId);
|
|
149
|
+
if (existingRecord && preferredContextId) {
|
|
150
|
+
registry.contexts.get(preferredContextId)?.pageIds.add(existingId);
|
|
151
|
+
}
|
|
152
|
+
return existingId;
|
|
153
|
+
}
|
|
154
|
+
const contextId = preferredContextId ?? registry.contextIdsByObject.get(page.context()) ?? registerContext(page.context());
|
|
155
|
+
const pageId = preferredPageId ?? `page_${registry.nextPageId++}`;
|
|
156
|
+
registry.pages.set(pageId, {
|
|
157
|
+
page,
|
|
158
|
+
contextId
|
|
159
|
+
});
|
|
160
|
+
registry.pageIdsByObject.set(page, pageId);
|
|
161
|
+
registry.contexts.get(contextId)?.pageIds.add(pageId);
|
|
162
|
+
const requestHandler = (request) => {
|
|
163
|
+
const info = {
|
|
164
|
+
contextId,
|
|
165
|
+
pageId,
|
|
166
|
+
requestId: getRequestId(request),
|
|
167
|
+
url: request.url(),
|
|
168
|
+
method: request.method(),
|
|
169
|
+
headers: request.headers(),
|
|
170
|
+
postData: request.postData() ?? undefined,
|
|
171
|
+
resourceType: request.resourceType(),
|
|
172
|
+
timestamp: Date.now()
|
|
173
|
+
};
|
|
174
|
+
registry.collectedData.networkRequests.push(info);
|
|
175
|
+
emitEvent({
|
|
176
|
+
type: "networkRequest",
|
|
177
|
+
...info
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
const responseHandler = (response) => {
|
|
181
|
+
const request = response.request();
|
|
182
|
+
const info = {
|
|
183
|
+
contextId,
|
|
184
|
+
pageId,
|
|
185
|
+
requestId: getRequestId(request),
|
|
186
|
+
url: response.url(),
|
|
187
|
+
status: response.status(),
|
|
188
|
+
statusText: response.statusText(),
|
|
189
|
+
headers: response.headers(),
|
|
190
|
+
resourceType: request.resourceType(),
|
|
191
|
+
timestamp: Date.now()
|
|
192
|
+
};
|
|
193
|
+
registry.collectedData.networkResponses.push(info);
|
|
194
|
+
emitEvent({
|
|
195
|
+
type: "networkResponse",
|
|
196
|
+
...info
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
const requestFailedHandler = (request) => {
|
|
200
|
+
const info = {
|
|
201
|
+
contextId,
|
|
202
|
+
pageId,
|
|
203
|
+
requestId: getRequestId(request),
|
|
204
|
+
url: request.url(),
|
|
205
|
+
method: request.method(),
|
|
206
|
+
failureText: request.failure()?.errorText || "request failed",
|
|
207
|
+
resourceType: request.resourceType(),
|
|
208
|
+
timestamp: Date.now()
|
|
209
|
+
};
|
|
210
|
+
registry.collectedData.requestFailures.push(info);
|
|
211
|
+
emitEvent({
|
|
212
|
+
type: "requestFailure",
|
|
213
|
+
...info
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
const consoleHandler = (msg) => {
|
|
217
|
+
const args = msg.args().map((arg) => String(arg));
|
|
218
|
+
const entry = {
|
|
219
|
+
contextId,
|
|
220
|
+
pageId,
|
|
221
|
+
level: msg.type(),
|
|
222
|
+
stdout: args.join(" "),
|
|
223
|
+
location: toLocation(msg.location()),
|
|
224
|
+
timestamp: Date.now()
|
|
225
|
+
};
|
|
226
|
+
registry.collectedData.browserConsoleLogs.push(entry);
|
|
227
|
+
emitEvent({
|
|
228
|
+
type: "browserConsoleLog",
|
|
229
|
+
...entry
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
const pageErrorHandler = (error) => {
|
|
233
|
+
const entry = {
|
|
234
|
+
contextId,
|
|
235
|
+
pageId,
|
|
236
|
+
name: error.name,
|
|
237
|
+
message: error.message,
|
|
238
|
+
stack: error.stack,
|
|
239
|
+
timestamp: Date.now()
|
|
240
|
+
};
|
|
241
|
+
registry.collectedData.pageErrors.push(entry);
|
|
242
|
+
emitEvent({
|
|
243
|
+
type: "pageError",
|
|
244
|
+
...entry
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
const closeHandler = () => {
|
|
248
|
+
unregisterPage(pageId);
|
|
249
|
+
};
|
|
250
|
+
page.on("request", requestHandler);
|
|
251
|
+
page.on("response", responseHandler);
|
|
252
|
+
page.on("requestfailed", requestFailedHandler);
|
|
253
|
+
page.on("console", consoleHandler);
|
|
254
|
+
page.on("pageerror", pageErrorHandler);
|
|
255
|
+
page.on("close", closeHandler);
|
|
256
|
+
registry.pageListenerCleanups.set(pageId, () => {
|
|
257
|
+
page.removeListener("request", requestHandler);
|
|
258
|
+
page.removeListener("response", responseHandler);
|
|
259
|
+
page.removeListener("requestfailed", requestFailedHandler);
|
|
260
|
+
page.removeListener("console", consoleHandler);
|
|
261
|
+
page.removeListener("pageerror", pageErrorHandler);
|
|
262
|
+
page.removeListener("close", closeHandler);
|
|
263
|
+
});
|
|
264
|
+
return pageId;
|
|
265
|
+
};
|
|
266
|
+
return {
|
|
267
|
+
registerContext,
|
|
268
|
+
registerPage,
|
|
269
|
+
unregisterContext,
|
|
270
|
+
unregisterPage,
|
|
271
|
+
getCollectedData() {
|
|
272
|
+
return cloneCollectedData(registry.collectedData);
|
|
273
|
+
},
|
|
274
|
+
getTrackedResources() {
|
|
275
|
+
return {
|
|
276
|
+
contexts: [...registry.contexts.keys()],
|
|
277
|
+
pages: [...registry.pages.keys()]
|
|
278
|
+
};
|
|
279
|
+
},
|
|
280
|
+
clearCollectedData() {
|
|
281
|
+
registry.collectedData.browserConsoleLogs.length = 0;
|
|
282
|
+
registry.collectedData.pageErrors.length = 0;
|
|
283
|
+
registry.collectedData.networkRequests.length = 0;
|
|
284
|
+
registry.collectedData.networkResponses.length = 0;
|
|
285
|
+
registry.collectedData.requestFailures.length = 0;
|
|
286
|
+
},
|
|
287
|
+
onEvent(callback) {
|
|
288
|
+
registry.eventSubscribers.add(callback);
|
|
289
|
+
return () => {
|
|
290
|
+
registry.eventSubscribers.delete(callback);
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
}
|
|
54
295
|
function isSerializedInputFilePayload(value) {
|
|
55
296
|
if (!value || typeof value !== "object") {
|
|
56
297
|
return false;
|
|
@@ -406,11 +647,11 @@ async function executeLocatorAction(locator, action, actionArg, timeout, fileIO)
|
|
|
406
647
|
});
|
|
407
648
|
if (opts?.path) {
|
|
408
649
|
if (!fileIO?.writeFile) {
|
|
409
|
-
throw new Error("screenshot() with path option requires a writeFile callback to be provided. " + "Either provide a writeFile callback in defaultPlaywrightHandler options, or
|
|
650
|
+
throw new Error("screenshot() with path option requires a writeFile callback to be provided. " + "Either provide a writeFile callback in defaultPlaywrightHandler options, or remove the path option.");
|
|
410
651
|
}
|
|
411
652
|
await fileIO.writeFile(opts.path, buffer);
|
|
412
653
|
}
|
|
413
|
-
return
|
|
654
|
+
return;
|
|
414
655
|
}
|
|
415
656
|
case "dragTo": {
|
|
416
657
|
const targetInfo = actionArg;
|
|
@@ -848,25 +1089,53 @@ function createPlaywrightHandler(page, options) {
|
|
|
848
1089
|
writeFile: options?.writeFile
|
|
849
1090
|
};
|
|
850
1091
|
const registry = {
|
|
851
|
-
pages: new Map
|
|
852
|
-
contexts: new Map
|
|
1092
|
+
pages: new Map,
|
|
1093
|
+
contexts: new Map,
|
|
1094
|
+
pageIdsByObject: new WeakMap,
|
|
1095
|
+
contextIdsByObject: new WeakMap,
|
|
853
1096
|
nextPageId: 1,
|
|
854
1097
|
nextContextId: 1,
|
|
1098
|
+
nextRequestId: 1,
|
|
855
1099
|
pendingResponses: new Map,
|
|
856
1100
|
pendingRequests: new Map,
|
|
857
|
-
nextListenerId: 0
|
|
1101
|
+
nextListenerId: 0,
|
|
1102
|
+
requestIds: new WeakMap,
|
|
1103
|
+
pageListenerCleanups: new Map,
|
|
1104
|
+
contextListenerCleanups: new Map,
|
|
1105
|
+
eventSubscribers: new Set,
|
|
1106
|
+
collectedData: {
|
|
1107
|
+
browserConsoleLogs: [],
|
|
1108
|
+
pageErrors: [],
|
|
1109
|
+
networkRequests: [],
|
|
1110
|
+
networkResponses: [],
|
|
1111
|
+
requestFailures: []
|
|
1112
|
+
}
|
|
858
1113
|
};
|
|
859
|
-
|
|
1114
|
+
const collector = createPlaywrightCollector(registry);
|
|
1115
|
+
if (page) {
|
|
1116
|
+
collector.registerContext(page.context(), "ctx_0", false);
|
|
1117
|
+
collector.registerPage(page, "ctx_0", "page_0");
|
|
1118
|
+
}
|
|
1119
|
+
const handler = async (op) => {
|
|
860
1120
|
try {
|
|
861
1121
|
switch (op.type) {
|
|
1122
|
+
case "contexts":
|
|
1123
|
+
return { ok: true, value: [...registry.contexts.keys()] };
|
|
1124
|
+
case "pages": {
|
|
1125
|
+
const contextId2 = op.contextId ?? "ctx_0";
|
|
1126
|
+
const context = registry.contexts.get(contextId2);
|
|
1127
|
+
if (!context) {
|
|
1128
|
+
return { ok: false, error: { name: "Error", message: `Context ${contextId2} not found` } };
|
|
1129
|
+
}
|
|
1130
|
+
return { ok: true, value: [...context.pageIds] };
|
|
1131
|
+
}
|
|
862
1132
|
case "newContext": {
|
|
863
1133
|
if (!options?.createContext) {
|
|
864
1134
|
return { ok: false, error: { name: "Error", message: "createContext callback not provided. Configure createContext in playwright options to enable browser.newContext()." } };
|
|
865
1135
|
}
|
|
866
1136
|
const [contextOptions] = op.args;
|
|
867
1137
|
const newContext = await options.createContext(contextOptions);
|
|
868
|
-
const contextId2 =
|
|
869
|
-
registry.contexts.set(contextId2, newContext);
|
|
1138
|
+
const contextId2 = collector.registerContext(newContext);
|
|
870
1139
|
return { ok: true, value: { contextId: contextId2 } };
|
|
871
1140
|
}
|
|
872
1141
|
case "newPage": {
|
|
@@ -878,9 +1147,8 @@ function createPlaywrightHandler(page, options) {
|
|
|
878
1147
|
if (!targetContext2) {
|
|
879
1148
|
return { ok: false, error: { name: "Error", message: `Context ${contextId2} not found` } };
|
|
880
1149
|
}
|
|
881
|
-
const newPage = await options.createPage(targetContext2);
|
|
882
|
-
const pageId2 =
|
|
883
|
-
registry.pages.set(pageId2, newPage);
|
|
1150
|
+
const newPage = await options.createPage(targetContext2.context);
|
|
1151
|
+
const pageId2 = collector.registerPage(newPage, contextId2);
|
|
884
1152
|
return { ok: true, value: { pageId: pageId2 } };
|
|
885
1153
|
}
|
|
886
1154
|
case "closeContext": {
|
|
@@ -889,23 +1157,18 @@ function createPlaywrightHandler(page, options) {
|
|
|
889
1157
|
if (!context) {
|
|
890
1158
|
return { ok: false, error: { name: "Error", message: `Context ${contextId2} not found` } };
|
|
891
1159
|
}
|
|
892
|
-
await context.close();
|
|
893
|
-
|
|
894
|
-
for (const [pid, p] of registry.pages) {
|
|
895
|
-
if (p.context() === context) {
|
|
896
|
-
registry.pages.delete(pid);
|
|
897
|
-
}
|
|
898
|
-
}
|
|
1160
|
+
await context.context.close();
|
|
1161
|
+
collector.unregisterContext(contextId2);
|
|
899
1162
|
return { ok: true };
|
|
900
1163
|
}
|
|
901
1164
|
}
|
|
902
1165
|
const pageId = op.pageId ?? "page_0";
|
|
903
|
-
const targetPage = registry.pages.get(pageId);
|
|
1166
|
+
const targetPage = registry.pages.get(pageId)?.page;
|
|
904
1167
|
if (!targetPage) {
|
|
905
1168
|
return { ok: false, error: { name: "Error", message: `Page ${pageId} not found` } };
|
|
906
1169
|
}
|
|
907
1170
|
const contextId = op.contextId ?? "ctx_0";
|
|
908
|
-
const targetContext = registry.contexts.get(contextId);
|
|
1171
|
+
const targetContext = registry.contexts.get(contextId)?.context;
|
|
909
1172
|
switch (op.type) {
|
|
910
1173
|
case "goto": {
|
|
911
1174
|
const [url, waitUntil] = op.args;
|
|
@@ -1265,11 +1528,11 @@ function createPlaywrightHandler(page, options) {
|
|
|
1265
1528
|
});
|
|
1266
1529
|
if (screenshotOptions?.path) {
|
|
1267
1530
|
if (!fileIO.writeFile) {
|
|
1268
|
-
throw new Error("screenshot() with path option requires a writeFile callback to be provided. " + "Either provide a writeFile callback in defaultPlaywrightHandler options, or
|
|
1531
|
+
throw new Error("screenshot() with path option requires a writeFile callback to be provided. " + "Either provide a writeFile callback in defaultPlaywrightHandler options, or remove the path option.");
|
|
1269
1532
|
}
|
|
1270
1533
|
await fileIO.writeFile(screenshotOptions.path, buffer);
|
|
1271
1534
|
}
|
|
1272
|
-
return { ok: true
|
|
1535
|
+
return { ok: true };
|
|
1273
1536
|
}
|
|
1274
1537
|
case "setViewportSize": {
|
|
1275
1538
|
const [size] = op.args;
|
|
@@ -1351,7 +1614,7 @@ function createPlaywrightHandler(page, options) {
|
|
|
1351
1614
|
}
|
|
1352
1615
|
case "close": {
|
|
1353
1616
|
await targetPage.close();
|
|
1354
|
-
|
|
1617
|
+
collector.unregisterPage(pageId);
|
|
1355
1618
|
return { ok: true };
|
|
1356
1619
|
}
|
|
1357
1620
|
case "isClosed": {
|
|
@@ -1403,14 +1666,24 @@ function createPlaywrightHandler(page, options) {
|
|
|
1403
1666
|
return { ok: false, error: { name: error.name, message: error.message } };
|
|
1404
1667
|
}
|
|
1405
1668
|
};
|
|
1669
|
+
handler[import_types.PLAYWRIGHT_HANDLER_META] = {
|
|
1670
|
+
collector
|
|
1671
|
+
};
|
|
1672
|
+
return handler;
|
|
1406
1673
|
}
|
|
1407
1674
|
function defaultPlaywrightHandler(page, options) {
|
|
1408
1675
|
const handler = createPlaywrightHandler(page, options);
|
|
1409
1676
|
handler[import_types.DEFAULT_PLAYWRIGHT_HANDLER_META] = { page, options };
|
|
1410
1677
|
return handler;
|
|
1411
1678
|
}
|
|
1679
|
+
function createPlaywrightFactoryHandler(options) {
|
|
1680
|
+
return createPlaywrightHandler(undefined, options);
|
|
1681
|
+
}
|
|
1682
|
+
function getPlaywrightHandlerMetadata(handler) {
|
|
1683
|
+
return handler[import_types.PLAYWRIGHT_HANDLER_META];
|
|
1684
|
+
}
|
|
1412
1685
|
function getDefaultPlaywrightHandlerMetadata(handler) {
|
|
1413
1686
|
return handler[import_types.DEFAULT_PLAYWRIGHT_HANDLER_META];
|
|
1414
1687
|
}
|
|
1415
1688
|
|
|
1416
|
-
//# debugId=
|
|
1689
|
+
//# debugId=1E1ED47A7B37F25964756E2164756E21
|