patchright-core 1.57.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +2688 -297
- package/browsers.json +23 -22
- package/lib/bootstrap.js +77 -0
- package/lib/cli/browserActions.js +308 -0
- package/lib/cli/driver.js +3 -2
- package/lib/cli/installActions.js +171 -0
- package/lib/cli/program.js +48 -413
- package/lib/client/android.js +4 -4
- package/lib/client/api.js +3 -0
- package/lib/client/browser.js +11 -5
- package/lib/client/browserContext.js +20 -23
- package/lib/client/browserType.js +23 -54
- package/lib/client/cdpSession.js +6 -2
- package/lib/client/channelOwner.js +1 -1
- package/lib/client/clientHelper.js +2 -1
- package/lib/client/clock.js +0 -1
- package/lib/client/{webSocket.js → connect.js} +57 -7
- package/lib/client/connection.js +8 -0
- package/lib/client/consoleMessage.js +3 -0
- package/lib/client/debugger.js +57 -0
- package/lib/client/dialog.js +8 -1
- package/lib/client/disposable.js +76 -0
- package/lib/client/electron.js +1 -0
- package/lib/client/elementHandle.js +1 -1
- package/lib/client/events.js +3 -0
- package/lib/client/fetch.js +2 -4
- package/lib/client/frame.js +9 -13
- package/lib/client/harRouter.js +13 -1
- package/lib/client/jsHandle.js +4 -8
- package/lib/client/locator.js +13 -36
- package/lib/client/network.js +14 -11
- package/lib/client/page.js +44 -50
- package/lib/client/screencast.js +88 -0
- package/lib/client/selectors.js +3 -1
- package/lib/client/tracing.js +11 -5
- package/lib/client/video.js +13 -20
- package/lib/client/worker.js +6 -6
- package/lib/generated/bindingsControllerSource.js +1 -1
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/mcpBundle.js +78 -0
- package/lib/mcpBundleImpl.js +91 -0
- package/lib/protocol/serializers.js +5 -0
- package/lib/protocol/validator.js +228 -58
- package/lib/protocol/validatorPrimitives.js +1 -1
- package/lib/remote/playwrightConnection.js +10 -8
- package/lib/remote/playwrightPipeServer.js +100 -0
- package/lib/remote/playwrightServer.js +14 -10
- package/lib/remote/playwrightWebSocketServer.js +73 -0
- package/lib/remote/serverTransport.js +96 -0
- package/lib/server/android/android.js +2 -2
- package/lib/server/artifact.js +1 -1
- package/lib/server/bidi/bidiBrowser.js +80 -14
- package/lib/server/bidi/bidiChromium.js +23 -14
- package/lib/server/bidi/bidiConnection.js +1 -0
- package/lib/server/bidi/bidiDeserializer.js +116 -0
- package/lib/server/bidi/bidiExecutionContext.js +75 -29
- package/lib/server/bidi/bidiFirefox.js +6 -8
- package/lib/server/bidi/bidiNetworkManager.js +40 -12
- package/lib/server/bidi/bidiPage.js +67 -40
- package/lib/server/bidi/third_party/bidiProtocolCore.js +1 -0
- package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
- package/lib/server/browser.js +84 -21
- package/lib/server/browserContext.js +137 -77
- package/lib/server/browserType.js +26 -16
- package/lib/server/chromium/chromium.js +28 -31
- package/lib/server/chromium/chromiumSwitches.js +16 -4
- package/lib/server/chromium/crBrowser.js +40 -27
- package/lib/server/chromium/crConnection.js +0 -5
- package/lib/server/chromium/crDevTools.js +1 -2
- package/lib/server/chromium/crNetworkManager.js +54 -229
- package/lib/server/chromium/crPage.js +74 -260
- package/lib/server/chromium/crServiceWorker.js +7 -14
- package/lib/server/clock.js +33 -41
- package/lib/server/codegen/javascript.js +6 -29
- package/lib/server/console.js +5 -1
- package/lib/server/debugController.js +12 -6
- package/lib/server/debugger.js +40 -47
- package/lib/server/deviceDescriptorsSource.json +137 -137
- package/lib/server/dispatchers/browserContextDispatcher.js +30 -30
- package/lib/server/dispatchers/browserDispatcher.js +11 -5
- package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
- package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
- package/lib/server/dispatchers/dispatcher.js +7 -14
- package/lib/server/dispatchers/disposableDispatcher.js +39 -0
- package/lib/server/dispatchers/electronDispatcher.js +2 -1
- package/lib/server/dispatchers/frameDispatcher.js +7 -7
- package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
- package/lib/server/dispatchers/networkDispatchers.js +6 -5
- package/lib/server/dispatchers/pageDispatcher.js +101 -34
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
- package/lib/server/disposable.js +41 -0
- package/lib/server/dom.js +56 -29
- package/lib/server/download.js +3 -2
- package/lib/server/electron/electron.js +17 -9
- package/lib/server/firefox/ffBrowser.js +9 -29
- package/lib/server/firefox/ffConnection.js +0 -5
- package/lib/server/firefox/ffInput.js +21 -5
- package/lib/server/firefox/ffNetworkManager.js +4 -4
- package/lib/server/firefox/ffPage.js +27 -33
- package/lib/server/firefox/firefox.js +6 -8
- package/lib/server/frameSelectors.js +14 -169
- package/lib/server/frames.js +263 -551
- package/lib/server/har/harRecorder.js +2 -2
- package/lib/server/har/harTracer.js +5 -4
- package/lib/server/input.js +49 -4
- package/lib/server/instrumentation.js +8 -0
- package/lib/server/javascript.js +6 -22
- package/lib/server/launchApp.js +0 -1
- package/lib/server/localUtils.js +6 -6
- package/lib/server/network.js +59 -20
- package/lib/server/overlay.js +138 -0
- package/lib/server/page.js +179 -157
- package/lib/server/progress.js +32 -6
- package/lib/server/recorder/recorderApp.js +84 -104
- package/lib/server/recorder.js +76 -40
- package/lib/server/registry/browserFetcher.js +6 -4
- package/lib/server/registry/index.js +222 -226
- package/lib/server/registry/nativeDeps.js +1 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +3 -0
- package/lib/server/screencast.js +137 -0
- package/lib/server/trace/recorder/snapshotter.js +2 -2
- package/lib/server/trace/recorder/snapshotterInjected.js +21 -1
- package/lib/server/trace/recorder/tracing.js +98 -47
- package/lib/server/trace/viewer/traceViewer.js +24 -21
- package/lib/server/usKeyboardLayout.js +7 -0
- package/lib/server/utils/comparators.js +1 -1
- package/lib/server/utils/disposable.js +32 -0
- package/lib/server/utils/eventsHelper.js +3 -1
- package/lib/server/utils/expectUtils.js +87 -2
- package/lib/server/utils/fileUtils.js +16 -2
- package/lib/server/utils/happyEyeballs.js +15 -12
- package/lib/server/utils/httpServer.js +10 -23
- package/lib/server/utils/network.js +39 -29
- package/lib/server/utils/processLauncher.js +8 -6
- package/lib/server/utils/zipFile.js +2 -2
- package/lib/server/videoRecorder.js +194 -0
- package/lib/server/webkit/webkit.js +4 -6
- package/lib/server/webkit/wkBrowser.js +1 -10
- package/lib/server/webkit/wkConnection.js +1 -6
- package/lib/server/webkit/wkInterceptableRequest.js +29 -1
- package/lib/server/webkit/wkPage.js +88 -57
- package/lib/server/webkit/wkWorkers.js +2 -1
- package/lib/serverRegistry.js +156 -0
- package/lib/tools/backend/browserBackend.js +79 -0
- package/lib/tools/backend/common.js +63 -0
- package/lib/tools/backend/config.js +41 -0
- package/lib/tools/backend/console.js +66 -0
- package/lib/tools/backend/context.js +296 -0
- package/lib/tools/backend/cookies.js +152 -0
- package/lib/tools/backend/devtools.js +69 -0
- package/lib/tools/backend/dialogs.js +59 -0
- package/lib/tools/backend/evaluate.js +64 -0
- package/lib/tools/backend/files.js +60 -0
- package/lib/tools/backend/form.js +64 -0
- package/lib/tools/backend/keyboard.js +155 -0
- package/lib/tools/backend/logFile.js +95 -0
- package/lib/tools/backend/mouse.js +168 -0
- package/lib/tools/backend/navigate.js +106 -0
- package/lib/tools/backend/network.js +135 -0
- package/lib/tools/backend/pdf.js +48 -0
- package/lib/tools/backend/response.js +305 -0
- package/lib/tools/backend/route.js +140 -0
- package/lib/tools/backend/runCode.js +77 -0
- package/lib/tools/backend/screenshot.js +88 -0
- package/lib/tools/backend/sessionLog.js +74 -0
- package/lib/tools/backend/snapshot.js +208 -0
- package/lib/tools/backend/storage.js +68 -0
- package/lib/tools/backend/tab.js +445 -0
- package/lib/tools/backend/tabs.js +67 -0
- package/lib/tools/backend/tool.js +47 -0
- package/lib/tools/backend/tools.js +102 -0
- package/lib/tools/backend/tracing.js +78 -0
- package/lib/tools/backend/utils.js +83 -0
- package/lib/tools/backend/verify.js +151 -0
- package/lib/tools/backend/video.js +98 -0
- package/lib/tools/backend/wait.js +63 -0
- package/lib/tools/backend/webstorage.js +223 -0
- package/lib/tools/cli-client/cli.js +6 -0
- package/lib/tools/cli-client/help.json +399 -0
- package/lib/tools/cli-client/minimist.js +128 -0
- package/lib/tools/cli-client/program.js +350 -0
- package/lib/tools/cli-client/registry.js +176 -0
- package/lib/tools/cli-client/session.js +289 -0
- package/lib/tools/cli-client/skill/SKILL.md +328 -0
- package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
- package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
- package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
- package/lib/tools/cli-client/skill/references/running-code.md +231 -0
- package/lib/tools/cli-client/skill/references/session-management.md +169 -0
- package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
- package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
- package/lib/tools/cli-client/skill/references/tracing.md +139 -0
- package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
- package/lib/tools/cli-daemon/command.js +73 -0
- package/lib/tools/cli-daemon/commands.js +956 -0
- package/lib/tools/cli-daemon/daemon.js +157 -0
- package/lib/tools/cli-daemon/helpGenerator.js +177 -0
- package/lib/tools/cli-daemon/program.js +129 -0
- package/lib/tools/dashboard/appIcon.png +0 -0
- package/lib/tools/dashboard/dashboardApp.js +284 -0
- package/lib/tools/dashboard/dashboardController.js +296 -0
- package/lib/tools/exports.js +60 -0
- package/lib/tools/mcp/browserFactory.js +233 -0
- package/lib/tools/mcp/cdpRelay.js +352 -0
- package/lib/tools/mcp/cli-stub.js +7 -0
- package/lib/tools/mcp/config.d.js +16 -0
- package/lib/tools/mcp/config.js +446 -0
- package/lib/tools/mcp/configIni.js +189 -0
- package/lib/tools/mcp/extensionContextFactory.js +55 -0
- package/lib/tools/mcp/index.js +62 -0
- package/lib/tools/mcp/log.js +35 -0
- package/lib/tools/mcp/program.js +107 -0
- package/lib/tools/mcp/protocol.js +28 -0
- package/lib/tools/mcp/watchdog.js +44 -0
- package/lib/tools/trace/SKILL.md +171 -0
- package/lib/tools/trace/installSkill.js +48 -0
- package/lib/tools/trace/traceActions.js +142 -0
- package/lib/tools/trace/traceAttachments.js +69 -0
- package/lib/tools/trace/traceCli.js +87 -0
- package/lib/tools/trace/traceConsole.js +97 -0
- package/lib/tools/trace/traceErrors.js +55 -0
- package/lib/tools/trace/traceOpen.js +69 -0
- package/lib/tools/trace/traceParser.js +96 -0
- package/lib/tools/trace/traceRequests.js +182 -0
- package/lib/tools/trace/traceScreenshot.js +68 -0
- package/lib/tools/trace/traceSnapshot.js +149 -0
- package/lib/tools/trace/traceUtils.js +153 -0
- package/lib/tools/utils/connect.js +32 -0
- package/lib/tools/utils/mcp/http.js +152 -0
- package/lib/tools/utils/mcp/server.js +230 -0
- package/lib/tools/utils/mcp/tool.js +47 -0
- package/lib/tools/utils/socketConnection.js +108 -0
- package/lib/utils/isomorphic/ariaSnapshot.js +60 -2
- package/lib/utils/isomorphic/formatUtils.js +64 -0
- package/lib/utils/isomorphic/jsonSchema.js +89 -0
- package/lib/utils/isomorphic/lruCache.js +51 -0
- package/lib/utils/isomorphic/mimeType.js +7 -2
- package/lib/utils/isomorphic/protocolFormatter.js +2 -2
- package/lib/utils/isomorphic/protocolMetainfo.js +127 -98
- package/lib/utils/isomorphic/stringUtils.js +49 -0
- package/lib/utils/isomorphic/timeoutRunner.js +3 -3
- package/lib/utils/isomorphic/trace/entries.js +16 -0
- package/lib/utils/isomorphic/trace/snapshotRenderer.js +492 -0
- package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
- package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
- package/lib/utils/isomorphic/trace/traceLoader.js +132 -0
- package/lib/utils/isomorphic/trace/traceModel.js +366 -0
- package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
- package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
- package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
- package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
- package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
- package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
- package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +54 -1
- package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
- package/lib/utils/isomorphic/yaml.js +84 -0
- package/lib/utils.js +8 -2
- package/lib/utilsBundle.js +5 -26
- package/lib/utilsBundleImpl/index.js +172 -173
- package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
- package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
- package/lib/vite/dashboard/index.html +28 -0
- package/lib/vite/htmlReport/index.html +2 -70
- package/lib/vite/htmlReport/report.css +1 -0
- package/lib/vite/htmlReport/report.js +72 -0
- package/lib/vite/recorder/assets/codeMirrorModule-C8KMvO9L.js +32 -0
- package/lib/vite/recorder/assets/{codeMirrorModule-C3UTv-Ge.css → codeMirrorModule-DYBRYzYX.css} +1 -1
- package/lib/vite/recorder/assets/{index-Ri0uHF7I.css → index-BSjZa4pk.css} +1 -1
- package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DS0FLvoc.js +32 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
- package/lib/vite/traceViewer/{codeMirrorModule.C3UTv-Ge.css → codeMirrorModule.DYBRYzYX.css} +1 -1
- package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
- package/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
- package/lib/vite/traceViewer/index.Dtstcb7U.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -4
- package/lib/vite/traceViewer/sw.bundle.js +5 -3
- package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundleImpl.js +2 -2
- package/lib/zodBundle.js +39 -0
- package/lib/zodBundleImpl.js +40 -0
- package/package.json +7 -1
- package/types/protocol.d.ts +1696 -221
- package/types/types.d.ts +879 -112
- package/lib/server/bidi/third_party/bidiDeserializer.js +0 -98
- package/lib/server/chromium/videoRecorder.js +0 -115
- package/lib/server/pageBinding.js +0 -87
- package/lib/server/trace/test/inMemorySnapshotter.js +0 -87
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
- package/lib/vite/recorder/assets/codeMirrorModule-CBbSe-ZI.js +0 -25
- package/lib/vite/recorder/assets/index-CpZVd2nA.js +0 -193
- package/lib/vite/traceViewer/assets/codeMirrorModule-DHz0wP2C.js +0 -25
- package/lib/vite/traceViewer/assets/defaultSettingsView-WsZP88O6.js +0 -266
- package/lib/vite/traceViewer/defaultSettingsView.ConWv5KN.css +0 -1
- package/lib/vite/traceViewer/index.C4Y3Aw8n.css +0 -1
- package/lib/vite/traceViewer/index.C8xAeo93.js +0 -2
- package/lib/vite/traceViewer/uiMode.BltraIJB.js +0 -5
- /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
- /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
|
@@ -39,7 +39,9 @@ var import_channelOwner = require("./channelOwner");
|
|
|
39
39
|
var import_clientHelper = require("./clientHelper");
|
|
40
40
|
var import_clock = require("./clock");
|
|
41
41
|
var import_consoleMessage = require("./consoleMessage");
|
|
42
|
+
var import_debugger = require("./debugger");
|
|
42
43
|
var import_dialog = require("./dialog");
|
|
44
|
+
var import_disposable = require("./disposable");
|
|
43
45
|
var import_errors = require("./errors");
|
|
44
46
|
var import_events = require("./events");
|
|
45
47
|
var import_fetch = require("./fetch");
|
|
@@ -71,9 +73,9 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
71
73
|
this._harRecorders = /* @__PURE__ */ new Map();
|
|
72
74
|
this._closingStatus = "none";
|
|
73
75
|
this._harRouters = [];
|
|
74
|
-
this.routeInjecting = false;
|
|
75
76
|
this._options = initializer.options;
|
|
76
77
|
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(this._platform);
|
|
78
|
+
this.debugger = import_debugger.Debugger.from(initializer.debugger);
|
|
77
79
|
this.tracing = import_tracing.Tracing.from(initializer.tracing);
|
|
78
80
|
this.request = import_fetch.APIRequestContext.from(initializer.requestContext);
|
|
79
81
|
this.request._timeoutSettings = this._timeoutSettings;
|
|
@@ -204,7 +206,7 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
204
206
|
const page = route.request()._safePage();
|
|
205
207
|
const routeHandlers = this._routes.slice();
|
|
206
208
|
for (const routeHandler of routeHandlers) {
|
|
207
|
-
if (page?._closeWasCalled || this.
|
|
209
|
+
if (page?._closeWasCalled || this.isClosed())
|
|
208
210
|
return;
|
|
209
211
|
if (!routeHandler.matches(route.request().url()))
|
|
210
212
|
continue;
|
|
@@ -261,6 +263,9 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
261
263
|
pages() {
|
|
262
264
|
return [...this._pages];
|
|
263
265
|
}
|
|
266
|
+
isClosed() {
|
|
267
|
+
return this._closingStatus !== "none";
|
|
268
|
+
}
|
|
264
269
|
async newPage() {
|
|
265
270
|
if (this._ownerPage)
|
|
266
271
|
throw new Error("Please use browser.newContext()");
|
|
@@ -309,24 +314,24 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
309
314
|
await this._channel.setHTTPCredentials({ httpCredentials: httpCredentials || void 0 });
|
|
310
315
|
}
|
|
311
316
|
async addInitScript(script, arg) {
|
|
312
|
-
await this.installInjectRoute();
|
|
313
317
|
const source = await (0, import_clientHelper.evaluationScript)(this._platform, script, arg);
|
|
314
|
-
await this._channel.addInitScript({ source });
|
|
318
|
+
return import_disposable.DisposableObject.from((await this._channel.addInitScript({ source })).disposable);
|
|
315
319
|
}
|
|
316
320
|
async exposeBinding(name, callback, options = {}) {
|
|
317
|
-
await this.
|
|
318
|
-
await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
|
321
|
+
const result = await this._channel.exposeBinding({ name, needsHandle: options.handle });
|
|
319
322
|
this._bindings.set(name, callback);
|
|
323
|
+
return import_disposable.DisposableObject.from(result.disposable);
|
|
320
324
|
}
|
|
321
325
|
async exposeFunction(name, callback) {
|
|
322
|
-
await this.
|
|
323
|
-
await this._channel.exposeBinding({ name });
|
|
326
|
+
const result = await this._channel.exposeBinding({ name });
|
|
324
327
|
const binding = (source, ...args) => callback(...args);
|
|
325
328
|
this._bindings.set(name, binding);
|
|
329
|
+
return import_disposable.DisposableObject.from(result.disposable);
|
|
326
330
|
}
|
|
327
331
|
async route(url, handler, options = {}) {
|
|
328
332
|
this._routes.unshift(new network.RouteHandler(this._platform, this._options.baseURL, url, handler, options.times));
|
|
329
333
|
await this._updateInterceptionPatterns({ title: "Route requests" });
|
|
334
|
+
return new import_disposable.DisposableStub(() => this.unroute(url, handler));
|
|
330
335
|
}
|
|
331
336
|
async routeWebSocket(url, handler) {
|
|
332
337
|
this._webSocketRoutes.unshift(new network.WebSocketRouteHandler(this._options.baseURL, url, handler));
|
|
@@ -417,6 +422,10 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
417
422
|
}
|
|
418
423
|
return state;
|
|
419
424
|
}
|
|
425
|
+
async setStorageState(storageState) {
|
|
426
|
+
const state = await prepareStorageState(this._platform, storageState);
|
|
427
|
+
await this._channel.setStorageState({ storageState: state });
|
|
428
|
+
}
|
|
420
429
|
backgroundPages() {
|
|
421
430
|
return [];
|
|
422
431
|
}
|
|
@@ -442,7 +451,7 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
442
451
|
await this.close();
|
|
443
452
|
}
|
|
444
453
|
async close(options = {}) {
|
|
445
|
-
if (this.
|
|
454
|
+
if (this.isClosed())
|
|
446
455
|
return;
|
|
447
456
|
this._closeReason = options.reason;
|
|
448
457
|
this._closingStatus = "closing";
|
|
@@ -478,20 +487,8 @@ class BrowserContext extends import_channelOwner.ChannelOwner {
|
|
|
478
487
|
this._onRecorderEventSink = void 0;
|
|
479
488
|
await this._channel.disableRecorder();
|
|
480
489
|
}
|
|
481
|
-
async
|
|
482
|
-
|
|
483
|
-
await this.route("**/*", async (route) => {
|
|
484
|
-
try {
|
|
485
|
-
if (route.request().resourceType() === "document" && route.request().url().startsWith("http")) {
|
|
486
|
-
const protocol = route.request().url().split(":")[0];
|
|
487
|
-
await route.fallback({ url: protocol + "://patchright-init-script-inject.internal/" });
|
|
488
|
-
} else {
|
|
489
|
-
await route.fallback();
|
|
490
|
-
}
|
|
491
|
-
} catch (error) {
|
|
492
|
-
await route.fallback();
|
|
493
|
-
}
|
|
494
|
-
});
|
|
490
|
+
async _exposeConsoleApi() {
|
|
491
|
+
await this._channel.exposeConsoleApi();
|
|
495
492
|
}
|
|
496
493
|
}
|
|
497
494
|
async function prepareStorageState(platform, storageState) {
|
|
@@ -25,12 +25,9 @@ var import_browser = require("./browser");
|
|
|
25
25
|
var import_browserContext = require("./browserContext");
|
|
26
26
|
var import_channelOwner = require("./channelOwner");
|
|
27
27
|
var import_clientHelper = require("./clientHelper");
|
|
28
|
-
var import_events = require("./events");
|
|
29
28
|
var import_assert = require("../utils/isomorphic/assert");
|
|
30
29
|
var import_headers = require("../utils/isomorphic/headers");
|
|
31
|
-
var
|
|
32
|
-
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
33
|
-
var import_webSocket = require("./webSocket");
|
|
30
|
+
var import_connect = require("./connect");
|
|
34
31
|
var import_timeoutSettings = require("./timeoutSettings");
|
|
35
32
|
class BrowserType extends import_channelOwner.ChannelOwner {
|
|
36
33
|
constructor() {
|
|
@@ -73,13 +70,13 @@ class BrowserType extends import_channelOwner.ChannelOwner {
|
|
|
73
70
|
return await this._serverLauncher.launchServer(options);
|
|
74
71
|
}
|
|
75
72
|
async launchPersistentContext(userDataDir, options = {}) {
|
|
76
|
-
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
|
77
73
|
(0, import_assert.assert)(!options.port, "Cannot specify a port without launching as a server.");
|
|
78
74
|
options = this._playwright.selectors._withSelectorOptions({
|
|
79
75
|
...this._playwright._defaultLaunchOptions,
|
|
80
|
-
...this._playwright._defaultContextOptions,
|
|
81
76
|
...options
|
|
82
77
|
});
|
|
78
|
+
await this._instrumentation.runBeforeCreateBrowserContext(options);
|
|
79
|
+
const logger = options.logger || this._playwright._defaultLaunchOptions?.logger;
|
|
83
80
|
const contextParams = await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options);
|
|
84
81
|
const persistentParams = {
|
|
85
82
|
...contextParams,
|
|
@@ -101,57 +98,18 @@ class BrowserType extends import_channelOwner.ChannelOwner {
|
|
|
101
98
|
await this._instrumentation.runAfterCreateBrowserContext(context);
|
|
102
99
|
return context;
|
|
103
100
|
}
|
|
104
|
-
async connect(
|
|
105
|
-
if (typeof
|
|
106
|
-
return await this._connect({ ...options,
|
|
107
|
-
(0, import_assert.assert)(
|
|
108
|
-
return await this._connect(
|
|
101
|
+
async connect(optionsOrEndpoint, options) {
|
|
102
|
+
if (typeof optionsOrEndpoint === "string")
|
|
103
|
+
return await this._connect({ ...options, endpoint: optionsOrEndpoint });
|
|
104
|
+
(0, import_assert.assert)(optionsOrEndpoint.wsEndpoint, "options.wsEndpoint is required");
|
|
105
|
+
return await this._connect({ ...options, endpoint: optionsOrEndpoint.wsEndpoint });
|
|
109
106
|
}
|
|
110
107
|
async _connect(params) {
|
|
111
108
|
const logger = params.logger;
|
|
112
109
|
return await this._wrapApiCall(async () => {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
wsEndpoint: params.wsEndpoint,
|
|
117
|
-
headers,
|
|
118
|
-
exposeNetwork: params.exposeNetwork ?? params._exposeNetwork,
|
|
119
|
-
slowMo: params.slowMo,
|
|
120
|
-
timeout: params.timeout || 0
|
|
121
|
-
};
|
|
122
|
-
if (params.__testHookRedirectPortForwarding)
|
|
123
|
-
connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
|
|
124
|
-
const connection = await (0, import_webSocket.connectOverWebSocket)(this._connection, connectParams);
|
|
125
|
-
let browser;
|
|
126
|
-
connection.on("close", () => {
|
|
127
|
-
for (const context of browser?.contexts() || []) {
|
|
128
|
-
for (const page of context.pages())
|
|
129
|
-
page._onClose();
|
|
130
|
-
context._onClose();
|
|
131
|
-
}
|
|
132
|
-
setTimeout(() => browser?._didClose(), 0);
|
|
133
|
-
});
|
|
134
|
-
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
135
|
-
if (params.__testHookBeforeCreateBrowser)
|
|
136
|
-
await params.__testHookBeforeCreateBrowser();
|
|
137
|
-
const playwright = await connection.initializePlaywright();
|
|
138
|
-
if (!playwright._initializer.preLaunchedBrowser) {
|
|
139
|
-
connection.close();
|
|
140
|
-
throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
|
|
141
|
-
}
|
|
142
|
-
playwright.selectors = this._playwright.selectors;
|
|
143
|
-
browser = import_browser.Browser.from(playwright._initializer.preLaunchedBrowser);
|
|
144
|
-
browser._connectToBrowserType(this, {}, logger);
|
|
145
|
-
browser._shouldCloseConnectionOnClose = true;
|
|
146
|
-
browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
|
|
147
|
-
return browser;
|
|
148
|
-
}, deadline);
|
|
149
|
-
if (!result.timedOut) {
|
|
150
|
-
return result.result;
|
|
151
|
-
} else {
|
|
152
|
-
connection.close();
|
|
153
|
-
throw new Error(`Timeout ${params.timeout}ms exceeded`);
|
|
154
|
-
}
|
|
110
|
+
const browser = await (0, import_connect.connectToBrowser)(this._playwright, { browserName: this.name(), ...params });
|
|
111
|
+
browser._connectToBrowserType(this, {}, logger);
|
|
112
|
+
return browser;
|
|
155
113
|
});
|
|
156
114
|
}
|
|
157
115
|
async connectOverCDP(endpointURLOrOptions, options) {
|
|
@@ -169,7 +127,8 @@ class BrowserType extends import_channelOwner.ChannelOwner {
|
|
|
169
127
|
endpointURL,
|
|
170
128
|
headers,
|
|
171
129
|
slowMo: params.slowMo,
|
|
172
|
-
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).timeout(params)
|
|
130
|
+
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).timeout(params),
|
|
131
|
+
isLocal: params.isLocal
|
|
173
132
|
});
|
|
174
133
|
const browser = import_browser.Browser.from(result.browser);
|
|
175
134
|
browser._connectToBrowserType(this, {}, params.logger);
|
|
@@ -177,6 +136,16 @@ class BrowserType extends import_channelOwner.ChannelOwner {
|
|
|
177
136
|
await this._instrumentation.runAfterCreateBrowserContext(import_browserContext.BrowserContext.from(result.defaultContext));
|
|
178
137
|
return browser;
|
|
179
138
|
}
|
|
139
|
+
async _connectOverCDPTransport(transport) {
|
|
140
|
+
if (this.name() !== "chromium")
|
|
141
|
+
throw new Error("Connecting over CDP is only supported in Chromium.");
|
|
142
|
+
const result = await this._channel.connectOverCDPTransport({ transport });
|
|
143
|
+
const browser = import_browser.Browser.from(result.browser);
|
|
144
|
+
browser._connectToBrowserType(this, {}, void 0);
|
|
145
|
+
if (result.defaultContext)
|
|
146
|
+
await this._instrumentation.runAfterCreateBrowserContext(import_browserContext.BrowserContext.from(result.defaultContext));
|
|
147
|
+
return browser;
|
|
148
|
+
}
|
|
180
149
|
}
|
|
181
150
|
// Annotate the CommonJS export names for ESM import in node:
|
|
182
151
|
0 && (module.exports = {
|
package/lib/client/cdpSession.js
CHANGED
|
@@ -28,8 +28,12 @@ class CDPSession extends import_channelOwner.ChannelOwner {
|
|
|
28
28
|
}
|
|
29
29
|
constructor(parent, type, guid, initializer) {
|
|
30
30
|
super(parent, type, guid, initializer);
|
|
31
|
-
this._channel.on("event", (
|
|
32
|
-
this.emit(method, params);
|
|
31
|
+
this._channel.on("event", (event) => {
|
|
32
|
+
this.emit(event.method, event.params);
|
|
33
|
+
this.emit("event", event);
|
|
34
|
+
});
|
|
35
|
+
this._channel.on("close", () => {
|
|
36
|
+
this.emit("close", this);
|
|
33
37
|
});
|
|
34
38
|
this.on = super.on;
|
|
35
39
|
this.addListener = super.addListener;
|
|
@@ -118,7 +118,7 @@ class ChannelOwner extends import_eventEmitter.EventEmitter {
|
|
|
118
118
|
get: (obj, prop) => {
|
|
119
119
|
if (typeof prop === "string") {
|
|
120
120
|
const validator = (0, import_validator.maybeFindValidator)(this._type, prop, "Params");
|
|
121
|
-
const { internal } = import_protocolMetainfo.
|
|
121
|
+
const { internal } = (0, import_protocolMetainfo.getMetainfo)({ type: this._type, method: prop }) || {};
|
|
122
122
|
if (validator) {
|
|
123
123
|
return async (params) => {
|
|
124
124
|
return await this._wrapApiCall(async (apiZone) => {
|
|
@@ -53,7 +53,8 @@ async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
|
|
|
53
53
|
throw new Error("Either path or content property must be present");
|
|
54
54
|
}
|
|
55
55
|
function addSourceUrlToScript(source, path) {
|
|
56
|
-
return source
|
|
56
|
+
return `${source}
|
|
57
|
+
//# sourceURL=${path.replace(/\n/g, "")}`;
|
|
57
58
|
}
|
|
58
59
|
// Annotate the CommonJS export names for ESM import in node:
|
|
59
60
|
0 && (module.exports = {
|
package/lib/client/clock.js
CHANGED
|
@@ -26,7 +26,6 @@ class Clock {
|
|
|
26
26
|
this._browserContext = browserContext;
|
|
27
27
|
}
|
|
28
28
|
async install(options = {}) {
|
|
29
|
-
await this._browserContext.installInjectRoute();
|
|
30
29
|
await this._browserContext._channel.clockInstall(options.time !== void 0 ? parseTime(options.time) : {});
|
|
31
30
|
}
|
|
32
31
|
async fastForward(ticks) {
|
|
@@ -16,13 +16,62 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var connect_exports = {};
|
|
20
|
+
__export(connect_exports, {
|
|
21
|
+
connectToBrowser: () => connectToBrowser,
|
|
22
|
+
connectToEndpoint: () => connectToEndpoint
|
|
22
23
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
+
module.exports = __toCommonJS(connect_exports);
|
|
25
|
+
var import_time = require("../utils/isomorphic/time");
|
|
26
|
+
var import_timeoutRunner = require("../utils/isomorphic/timeoutRunner");
|
|
27
|
+
var import_browser = require("./browser");
|
|
24
28
|
var import_connection = require("./connection");
|
|
25
|
-
|
|
29
|
+
var import_events = require("./events");
|
|
30
|
+
async function connectToBrowser(playwright, params) {
|
|
31
|
+
const deadline = params.timeout ? (0, import_time.monotonicTime)() + params.timeout : 0;
|
|
32
|
+
const nameParam = params.browserName ? { "x-playwright-browser": params.browserName } : {};
|
|
33
|
+
const headers = { ...nameParam, ...params.headers };
|
|
34
|
+
const connectParams = {
|
|
35
|
+
endpoint: params.endpoint,
|
|
36
|
+
headers,
|
|
37
|
+
exposeNetwork: params.exposeNetwork,
|
|
38
|
+
slowMo: params.slowMo,
|
|
39
|
+
timeout: params.timeout || 0
|
|
40
|
+
};
|
|
41
|
+
if (params.__testHookRedirectPortForwarding)
|
|
42
|
+
connectParams.socksProxyRedirectPortForTest = params.__testHookRedirectPortForwarding;
|
|
43
|
+
const connection = await connectToEndpoint(playwright._connection, connectParams);
|
|
44
|
+
let browser;
|
|
45
|
+
connection.on("close", () => {
|
|
46
|
+
for (const context of browser?.contexts() || []) {
|
|
47
|
+
for (const page of context.pages())
|
|
48
|
+
page._onClose();
|
|
49
|
+
context._onClose();
|
|
50
|
+
}
|
|
51
|
+
setTimeout(() => browser?._didClose(), 0);
|
|
52
|
+
});
|
|
53
|
+
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
54
|
+
if (params.__testHookBeforeCreateBrowser)
|
|
55
|
+
await params.__testHookBeforeCreateBrowser();
|
|
56
|
+
const playwright2 = await connection.initializePlaywright();
|
|
57
|
+
if (!playwright2._initializer.preLaunchedBrowser) {
|
|
58
|
+
connection.close();
|
|
59
|
+
throw new Error("Malformed endpoint. Did you use BrowserType.launchServer method?");
|
|
60
|
+
}
|
|
61
|
+
playwright2.selectors = playwright2.selectors;
|
|
62
|
+
browser = import_browser.Browser.from(playwright2._initializer.preLaunchedBrowser);
|
|
63
|
+
browser._shouldCloseConnectionOnClose = true;
|
|
64
|
+
browser.on(import_events.Events.Browser.Disconnected, () => connection.close());
|
|
65
|
+
return browser;
|
|
66
|
+
}, deadline);
|
|
67
|
+
if (!result.timedOut) {
|
|
68
|
+
return result.result;
|
|
69
|
+
} else {
|
|
70
|
+
connection.close();
|
|
71
|
+
throw new Error(`Timeout ${params.timeout}ms exceeded`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function connectToEndpoint(parentConnection, params) {
|
|
26
75
|
const localUtils = parentConnection.localUtils();
|
|
27
76
|
const transport = localUtils ? new JsonPipeTransport(localUtils) : new WebSocketTransport();
|
|
28
77
|
const connectHeaders = await transport.connect(params);
|
|
@@ -71,7 +120,7 @@ class JsonPipeTransport {
|
|
|
71
120
|
}
|
|
72
121
|
class WebSocketTransport {
|
|
73
122
|
async connect(params) {
|
|
74
|
-
this._ws = new window.WebSocket(params.
|
|
123
|
+
this._ws = new window.WebSocket(params.endpoint);
|
|
75
124
|
return [];
|
|
76
125
|
}
|
|
77
126
|
async send(message) {
|
|
@@ -89,5 +138,6 @@ class WebSocketTransport {
|
|
|
89
138
|
}
|
|
90
139
|
// Annotate the CommonJS export names for ESM import in node:
|
|
91
140
|
0 && (module.exports = {
|
|
92
|
-
|
|
141
|
+
connectToBrowser,
|
|
142
|
+
connectToEndpoint
|
|
93
143
|
});
|
package/lib/client/connection.js
CHANGED
|
@@ -30,7 +30,9 @@ var import_browserType = require("./browserType");
|
|
|
30
30
|
var import_cdpSession = require("./cdpSession");
|
|
31
31
|
var import_channelOwner = require("./channelOwner");
|
|
32
32
|
var import_clientInstrumentation = require("./clientInstrumentation");
|
|
33
|
+
var import_debugger = require("./debugger");
|
|
33
34
|
var import_dialog = require("./dialog");
|
|
35
|
+
var import_disposable = require("./disposable");
|
|
34
36
|
var import_electron = require("./electron");
|
|
35
37
|
var import_elementHandle = require("./elementHandle");
|
|
36
38
|
var import_errors = require("./errors");
|
|
@@ -232,9 +234,15 @@ class Connection extends import_eventEmitter.EventEmitter {
|
|
|
232
234
|
case "CDPSession":
|
|
233
235
|
result = new import_cdpSession.CDPSession(parent, type, guid, initializer);
|
|
234
236
|
break;
|
|
237
|
+
case "Debugger":
|
|
238
|
+
result = new import_debugger.Debugger(parent, type, guid, initializer);
|
|
239
|
+
break;
|
|
235
240
|
case "Dialog":
|
|
236
241
|
result = new import_dialog.Dialog(parent, type, guid, initializer);
|
|
237
242
|
break;
|
|
243
|
+
case "Disposable":
|
|
244
|
+
result = new import_disposable.DisposableObject(parent, type, guid, initializer);
|
|
245
|
+
break;
|
|
238
246
|
case "Electron":
|
|
239
247
|
result = new import_electron.Electron(parent, type, guid, initializer);
|
|
240
248
|
break;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var debugger_exports = {};
|
|
20
|
+
__export(debugger_exports, {
|
|
21
|
+
Debugger: () => Debugger
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(debugger_exports);
|
|
24
|
+
var import_channelOwner = require("./channelOwner");
|
|
25
|
+
var import_events = require("./events");
|
|
26
|
+
class Debugger extends import_channelOwner.ChannelOwner {
|
|
27
|
+
constructor(parent, type, guid, initializer) {
|
|
28
|
+
super(parent, type, guid, initializer);
|
|
29
|
+
this._pausedDetails = null;
|
|
30
|
+
this._channel.on("pausedStateChanged", ({ pausedDetails }) => {
|
|
31
|
+
this._pausedDetails = pausedDetails ?? null;
|
|
32
|
+
this.emit(import_events.Events.Debugger.PausedStateChanged);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
static from(channel) {
|
|
36
|
+
return channel._object;
|
|
37
|
+
}
|
|
38
|
+
async requestPause() {
|
|
39
|
+
await this._channel.requestPause();
|
|
40
|
+
}
|
|
41
|
+
async resume() {
|
|
42
|
+
await this._channel.resume();
|
|
43
|
+
}
|
|
44
|
+
async next() {
|
|
45
|
+
await this._channel.next();
|
|
46
|
+
}
|
|
47
|
+
async runTo(location) {
|
|
48
|
+
await this._channel.runTo({ location });
|
|
49
|
+
}
|
|
50
|
+
pausedDetails() {
|
|
51
|
+
return this._pausedDetails;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
Debugger
|
|
57
|
+
});
|
package/lib/client/dialog.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(dialog_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(dialog_exports);
|
|
24
24
|
var import_channelOwner = require("./channelOwner");
|
|
25
25
|
var import_page = require("./page");
|
|
26
|
+
var import_errors = require("./errors");
|
|
26
27
|
class Dialog extends import_channelOwner.ChannelOwner {
|
|
27
28
|
static from(dialog) {
|
|
28
29
|
return dialog._object;
|
|
@@ -47,7 +48,13 @@ class Dialog extends import_channelOwner.ChannelOwner {
|
|
|
47
48
|
await this._channel.accept({ promptText });
|
|
48
49
|
}
|
|
49
50
|
async dismiss() {
|
|
50
|
-
|
|
51
|
+
try {
|
|
52
|
+
await this._channel.dismiss();
|
|
53
|
+
} catch (e) {
|
|
54
|
+
if ((0, import_errors.isTargetClosedError)(e))
|
|
55
|
+
return;
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var disposable_exports = {};
|
|
20
|
+
__export(disposable_exports, {
|
|
21
|
+
DisposableObject: () => DisposableObject,
|
|
22
|
+
DisposableStub: () => DisposableStub,
|
|
23
|
+
disposeAll: () => disposeAll
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(disposable_exports);
|
|
26
|
+
var import_channelOwner = require("./channelOwner");
|
|
27
|
+
var import_errors = require("./errors");
|
|
28
|
+
class DisposableObject extends import_channelOwner.ChannelOwner {
|
|
29
|
+
static from(channel) {
|
|
30
|
+
return channel._object;
|
|
31
|
+
}
|
|
32
|
+
async [Symbol.asyncDispose]() {
|
|
33
|
+
await this.dispose();
|
|
34
|
+
}
|
|
35
|
+
async dispose() {
|
|
36
|
+
try {
|
|
37
|
+
await this._channel.dispose();
|
|
38
|
+
} catch (e) {
|
|
39
|
+
if ((0, import_errors.isTargetClosedError)(e))
|
|
40
|
+
return;
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
class DisposableStub {
|
|
46
|
+
constructor(dispose) {
|
|
47
|
+
this._dispose = dispose;
|
|
48
|
+
}
|
|
49
|
+
async [Symbol.asyncDispose]() {
|
|
50
|
+
await this.dispose();
|
|
51
|
+
}
|
|
52
|
+
async dispose() {
|
|
53
|
+
if (!this._dispose)
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
const dispose = this._dispose;
|
|
57
|
+
this._dispose = void 0;
|
|
58
|
+
await dispose();
|
|
59
|
+
} catch (e) {
|
|
60
|
+
if ((0, import_errors.isTargetClosedError)(e))
|
|
61
|
+
return;
|
|
62
|
+
throw e;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function disposeAll(disposables) {
|
|
67
|
+
const copy = [...disposables];
|
|
68
|
+
disposables.length = 0;
|
|
69
|
+
await Promise.all(copy.map((d) => d.dispose()));
|
|
70
|
+
}
|
|
71
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
72
|
+
0 && (module.exports = {
|
|
73
|
+
DisposableObject,
|
|
74
|
+
DisposableStub,
|
|
75
|
+
disposeAll
|
|
76
|
+
});
|
package/lib/client/electron.js
CHANGED
|
@@ -44,6 +44,7 @@ class Electron extends import_channelOwner.ChannelOwner {
|
|
|
44
44
|
...await (0, import_browserContext.prepareBrowserContextParams)(this._platform, options),
|
|
45
45
|
env: (0, import_clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
|
|
46
46
|
tracesDir: options.tracesDir,
|
|
47
|
+
artifactsDir: options.artifactsDir,
|
|
47
48
|
timeout: new import_timeoutSettings.TimeoutSettings(this._platform).launchTimeout(options)
|
|
48
49
|
};
|
|
49
50
|
const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
|
|
@@ -231,7 +231,7 @@ async function convertInputFiles(platform, files, context) {
|
|
|
231
231
|
throw new Error("File paths cannot be mixed with buffers");
|
|
232
232
|
const [localPaths, localDirectory] = await resolvePathsAndDirectoryForInputFiles(platform, items);
|
|
233
233
|
if (context._connection.isRemote()) {
|
|
234
|
-
const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.
|
|
234
|
+
const files2 = localDirectory ? (await platform.fs().promises.readdir(localDirectory, { withFileTypes: true, recursive: true })).filter((f) => f.isFile()).map((f) => platform.path().join(f.parentPath, f.name)) : localPaths;
|
|
235
235
|
const { writableStreams, rootDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({
|
|
236
236
|
rootDirName: localDirectory ? platform.path().basename(localDirectory) : void 0,
|
|
237
237
|
items: await Promise.all(files2.map(async (file) => {
|
package/lib/client/events.js
CHANGED
package/lib/client/fetch.js
CHANGED
|
@@ -39,10 +39,8 @@ class APIRequest {
|
|
|
39
39
|
this._playwright = playwright;
|
|
40
40
|
}
|
|
41
41
|
async newContext(options = {}) {
|
|
42
|
-
options = {
|
|
43
|
-
|
|
44
|
-
...options
|
|
45
|
-
};
|
|
42
|
+
options = { ...options };
|
|
43
|
+
await this._playwright._instrumentation.runBeforeCreateRequestContext(options);
|
|
46
44
|
const storageState = typeof options.storageState === "string" ? JSON.parse(await this._playwright._platform.fs().promises.readFile(options.storageState, "utf8")) : options.storageState;
|
|
47
45
|
const context = APIRequestContext.from((await this._playwright._channel.newRequest({
|
|
48
46
|
...options,
|
package/lib/client/frame.js
CHANGED
|
@@ -166,18 +166,14 @@ class Frame extends import_channelOwner.ChannelOwner {
|
|
|
166
166
|
async frameElement() {
|
|
167
167
|
return import_elementHandle.ElementHandle.from((await this._channel.frameElement()).element);
|
|
168
168
|
}
|
|
169
|
-
async evaluateHandle(pageFunction, arg
|
|
170
|
-
(0, import_jsHandle.assertMaxArguments)(arguments.length,
|
|
171
|
-
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg)
|
|
169
|
+
async evaluateHandle(pageFunction, arg) {
|
|
170
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
171
|
+
const result = await this._channel.evaluateExpressionHandle({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
172
172
|
return import_jsHandle.JSHandle.from(result.handle);
|
|
173
173
|
}
|
|
174
|
-
async evaluate(pageFunction, arg
|
|
175
|
-
(0, import_jsHandle.assertMaxArguments)(arguments.length,
|
|
176
|
-
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg)
|
|
177
|
-
return (0, import_jsHandle.parseResult)(result.value);
|
|
178
|
-
}
|
|
179
|
-
async _evaluateFunction(functionDeclaration) {
|
|
180
|
-
const result = await this._channel.evaluateExpression({ expression: functionDeclaration, isFunction: true, arg: (0, import_jsHandle.serializeArgument)(void 0) });
|
|
174
|
+
async evaluate(pageFunction, arg) {
|
|
175
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 2);
|
|
176
|
+
const result = await this._channel.evaluateExpression({ expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
181
177
|
return (0, import_jsHandle.parseResult)(result.value);
|
|
182
178
|
}
|
|
183
179
|
async _evaluateExposeUtilityScript(pageFunction, arg) {
|
|
@@ -205,9 +201,9 @@ class Frame extends import_channelOwner.ChannelOwner {
|
|
|
205
201
|
const result = await this._channel.evalOnSelector({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
206
202
|
return (0, import_jsHandle.parseResult)(result.value);
|
|
207
203
|
}
|
|
208
|
-
async $$eval(selector, pageFunction, arg
|
|
209
|
-
(0, import_jsHandle.assertMaxArguments)(arguments.length,
|
|
210
|
-
const result = await this._channel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg)
|
|
204
|
+
async $$eval(selector, pageFunction, arg) {
|
|
205
|
+
(0, import_jsHandle.assertMaxArguments)(arguments.length, 3);
|
|
206
|
+
const result = await this._channel.evalOnSelectorAll({ selector, expression: String(pageFunction), isFunction: typeof pageFunction === "function", arg: (0, import_jsHandle.serializeArgument)(arg) });
|
|
211
207
|
return (0, import_jsHandle.parseResult)(result.value);
|
|
212
208
|
}
|
|
213
209
|
async $$(selector) {
|