patchright-core 1.51.3 → 1.52.1
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/browsers.json +15 -13
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +54 -67
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +312 -328
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +141 -228
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +57 -61
- package/lib/client/browserContext.js +297 -326
- package/lib/client/browserType.js +92 -106
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +82 -95
- package/lib/client/clientHelper.js +46 -38
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +190 -212
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +73 -75
- package/lib/client/elementHandle.js +111 -147
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +135 -158
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +187 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +56 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -28
- package/lib/client/locator.js +161 -245
- package/lib/client/network.js +277 -295
- package/lib/client/page.js +270 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -66
- package/lib/client/selectors.js +48 -46
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +49 -39
- package/lib/client/tracing.js +48 -84
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +61 -56
- package/lib/client/worker.js +48 -58
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +371 -4
- package/lib/inProcessFactory.js +53 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -46
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2714 -2714
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +140 -157
- package/lib/remote/playwrightServer.js +99 -84
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -209
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +221 -155
- package/lib/server/bidi/bidiChromium.js +106 -79
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +128 -113
- package/lib/server/bidi/bidiFirefox.js +76 -69
- package/lib/server/bidi/bidiInput.js +86 -97
- package/lib/server/bidi/bidiNetworkManager.js +137 -154
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +247 -219
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +321 -346
- package/lib/server/browserType.js +169 -182
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +86 -64
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +253 -273
- package/lib/server/chromium/crConnection.js +91 -116
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +59 -51
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +88 -83
- package/lib/server/chromium/crInput.js +97 -95
- package/lib/server/chromium/crNetworkManager.js +284 -404
- package/lib/server/chromium/crPage.js +522 -608
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +82 -67
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +62 -50
- package/lib/server/codegen/csharp.js +185 -160
- package/lib/server/codegen/java.js +155 -128
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +140 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +97 -124
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +169 -220
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
- package/lib/server/dispatchers/frameDispatcher.js +99 -163
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
- package/lib/server/dispatchers/networkDispatchers.js +90 -107
- package/lib/server/dispatchers/pageDispatcher.js +128 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -45
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
- package/lib/server/dom.js +413 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -176
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +289 -323
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +65 -59
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +213 -277
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +91 -73
- package/lib/server/firefox/ffInput.js +67 -69
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +236 -273
- package/lib/server/firefox/firefox.js +76 -67
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +221 -112
- package/lib/server/frames.js +731 -894
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +287 -222
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +134 -163
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +143 -134
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +130 -122
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +262 -296
- package/lib/server/page.js +326 -423
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/contextRecorder.js +134 -138
- package/lib/server/recorder/recorderApp.js +127 -136
- package/lib/server/recorder/recorderCollection.js +56 -44
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +79 -103
- package/lib/server/recorder/recorderUtils.js +56 -45
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +177 -186
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +904 -792
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/storageScript.js +94 -100
- package/lib/server/timeoutSettings.js +58 -43
- package/lib/server/trace/recorder/snapshotter.js +70 -89
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +321 -333
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +168 -146
- package/lib/server/transport.js +124 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +37 -28
- package/lib/server/utils/debugLogger.js +69 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +138 -123
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +143 -86
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +73 -69
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +159 -176
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +84 -70
- package/lib/server/webkit/wkInput.js +82 -80
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +525 -619
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/builtins.js +86 -0
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +121 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +340 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +47 -39
- package/lib/utils/isomorphic/mimeType.js +448 -25
- package/lib/utils/isomorphic/multimap.js +35 -27
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +41 -22
- package/lib/utils/isomorphic/timeoutRunner.js +55 -54
- package/lib/utils/isomorphic/traceUtils.js +38 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +112 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +97 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/vite/htmlReport/index.html +21 -15
- package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-CXVeovup.js} +1 -1
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-_GLjJL-7.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +2 -0
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/zipBundle.js +32 -23
- package/package.json +1 -1
- package/types/protocol.d.ts +436 -17
- package/types/types.d.ts +35 -16
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-l0TyP_G8.js +0 -259
- package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
- package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
|
@@ -1,129 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
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 chat_exports = {};
|
|
20
|
+
__export(chat_exports, {
|
|
21
|
+
Chat: () => Chat,
|
|
22
|
+
asString: () => asString
|
|
5
23
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
var _transport = require("../transport");
|
|
9
|
-
/**
|
|
10
|
-
* Copyright (c) Microsoft Corporation.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
|
-
|
|
24
|
+
module.exports = __toCommonJS(chat_exports);
|
|
25
|
+
var import_transport = require("../transport");
|
|
25
26
|
class Chat {
|
|
26
27
|
constructor(wsEndpoint) {
|
|
27
28
|
this._history = [];
|
|
28
|
-
this.
|
|
29
|
-
this._chatSinks = new Map();
|
|
30
|
-
this._wsEndpoint = void 0;
|
|
29
|
+
this._chatSinks = /* @__PURE__ */ new Map();
|
|
31
30
|
this._wsEndpoint = wsEndpoint;
|
|
32
31
|
}
|
|
33
32
|
clearHistory() {
|
|
34
33
|
this._history = [];
|
|
35
34
|
}
|
|
36
35
|
async post(prompt) {
|
|
37
|
-
await this._append(
|
|
36
|
+
await this._append("user", prompt);
|
|
38
37
|
let text = await asString(await this._post());
|
|
39
|
-
if (text.startsWith(
|
|
38
|
+
if (text.startsWith("```json") && text.endsWith("```"))
|
|
39
|
+
text = text.substring("```json".length, text.length - "```".length);
|
|
40
40
|
for (let i = 0; i < 3; ++i) {
|
|
41
41
|
try {
|
|
42
42
|
return JSON.parse(text);
|
|
43
43
|
} catch (e) {
|
|
44
|
-
await this._append(
|
|
44
|
+
await this._append("user", String(e));
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
throw new Error(
|
|
47
|
+
throw new Error("Failed to parse response: " + text);
|
|
48
48
|
}
|
|
49
49
|
async _append(user, content) {
|
|
50
|
-
this._history.push({
|
|
51
|
-
user,
|
|
52
|
-
content
|
|
53
|
-
});
|
|
50
|
+
this._history.push({ user, content });
|
|
54
51
|
}
|
|
55
52
|
async _connection() {
|
|
56
53
|
if (!this._connectionPromise) {
|
|
57
|
-
this._connectionPromise =
|
|
58
|
-
return new Connection(transport, (method, params) => this._dispatchEvent(method, params), () => {
|
|
54
|
+
this._connectionPromise = import_transport.WebSocketTransport.connect(void 0, this._wsEndpoint).then((transport) => {
|
|
55
|
+
return new Connection(transport, (method, params) => this._dispatchEvent(method, params), () => {
|
|
56
|
+
});
|
|
59
57
|
});
|
|
60
58
|
}
|
|
61
59
|
return this._connectionPromise;
|
|
62
60
|
}
|
|
63
61
|
_dispatchEvent(method, params) {
|
|
64
|
-
if (method ===
|
|
65
|
-
const {
|
|
66
|
-
chatId,
|
|
67
|
-
chunk
|
|
68
|
-
} = params;
|
|
62
|
+
if (method === "chatChunk") {
|
|
63
|
+
const { chatId, chunk } = params;
|
|
69
64
|
const chunkSink = this._chatSinks.get(chatId);
|
|
70
65
|
chunkSink(chunk);
|
|
71
|
-
if (!chunk)
|
|
66
|
+
if (!chunk)
|
|
67
|
+
this._chatSinks.delete(chatId);
|
|
72
68
|
}
|
|
73
69
|
}
|
|
74
70
|
async _post() {
|
|
75
71
|
const connection = await this._connection();
|
|
76
|
-
const result = await connection.send(
|
|
77
|
-
|
|
78
|
-
});
|
|
79
|
-
const {
|
|
80
|
-
chatId
|
|
81
|
-
} = result;
|
|
82
|
-
const {
|
|
83
|
-
iterable,
|
|
84
|
-
addChunk
|
|
85
|
-
} = iterablePump();
|
|
72
|
+
const result = await connection.send("chat", { history: this._history });
|
|
73
|
+
const { chatId } = result;
|
|
74
|
+
const { iterable, addChunk } = iterablePump();
|
|
86
75
|
this._chatSinks.set(chatId, addChunk);
|
|
87
76
|
return iterable;
|
|
88
77
|
}
|
|
89
78
|
}
|
|
90
|
-
exports.Chat = Chat;
|
|
91
79
|
async function asString(stream) {
|
|
92
|
-
let result =
|
|
93
|
-
for await (const chunk of stream)
|
|
80
|
+
let result = "";
|
|
81
|
+
for await (const chunk of stream)
|
|
82
|
+
result += chunk;
|
|
94
83
|
return result;
|
|
95
84
|
}
|
|
96
85
|
function iterablePump() {
|
|
97
86
|
let controller;
|
|
98
|
-
const stream = new ReadableStream({
|
|
99
|
-
start: c => controller = c
|
|
100
|
-
});
|
|
87
|
+
const stream = new ReadableStream({ start: (c) => controller = c });
|
|
101
88
|
const iterable = async function* () {
|
|
102
89
|
const reader = stream.getReader();
|
|
103
90
|
while (true) {
|
|
104
|
-
const {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
} = await reader.read();
|
|
108
|
-
if (done) break;
|
|
91
|
+
const { done, value } = await reader.read();
|
|
92
|
+
if (done)
|
|
93
|
+
break;
|
|
109
94
|
yield value;
|
|
110
95
|
}
|
|
111
96
|
}();
|
|
112
97
|
return {
|
|
113
98
|
iterable,
|
|
114
|
-
addChunk: chunk => {
|
|
115
|
-
if (chunk)
|
|
99
|
+
addChunk: (chunk) => {
|
|
100
|
+
if (chunk)
|
|
101
|
+
controller.enqueue(chunk);
|
|
102
|
+
else
|
|
103
|
+
controller.close();
|
|
116
104
|
}
|
|
117
105
|
};
|
|
118
106
|
}
|
|
119
107
|
class Connection {
|
|
120
108
|
constructor(transport, onEvent, onClose) {
|
|
121
|
-
this._transport = void 0;
|
|
122
109
|
this._lastId = 0;
|
|
123
110
|
this._closed = false;
|
|
124
|
-
this._pending = new Map();
|
|
125
|
-
this._onEvent = void 0;
|
|
126
|
-
this._onClose = void 0;
|
|
111
|
+
this._pending = /* @__PURE__ */ new Map();
|
|
127
112
|
this._transport = transport;
|
|
128
113
|
this._onEvent = onEvent;
|
|
129
114
|
this._onClose = onClose;
|
|
@@ -132,27 +117,21 @@ class Connection {
|
|
|
132
117
|
}
|
|
133
118
|
send(method, params) {
|
|
134
119
|
const id = this._lastId++;
|
|
135
|
-
const message = {
|
|
136
|
-
id,
|
|
137
|
-
method,
|
|
138
|
-
params
|
|
139
|
-
};
|
|
120
|
+
const message = { id, method, params };
|
|
140
121
|
this._transport.send(message);
|
|
141
122
|
return new Promise((resolve, reject) => {
|
|
142
|
-
this._pending.set(id, {
|
|
143
|
-
resolve,
|
|
144
|
-
reject
|
|
145
|
-
});
|
|
123
|
+
this._pending.set(id, { resolve, reject });
|
|
146
124
|
});
|
|
147
125
|
}
|
|
148
126
|
_dispatchMessage(message) {
|
|
149
|
-
if (message.id ===
|
|
127
|
+
if (message.id === void 0) {
|
|
150
128
|
this._onEvent(message.method, message.params);
|
|
151
129
|
return;
|
|
152
130
|
}
|
|
153
131
|
const callback = this._pending.get(message.id);
|
|
154
132
|
this._pending.delete(message.id);
|
|
155
|
-
if (!callback)
|
|
133
|
+
if (!callback)
|
|
134
|
+
return;
|
|
156
135
|
if (message.error) {
|
|
157
136
|
callback.reject(new Error(message.error.message));
|
|
158
137
|
return;
|
|
@@ -161,17 +140,22 @@ class Connection {
|
|
|
161
140
|
}
|
|
162
141
|
_close() {
|
|
163
142
|
this._closed = true;
|
|
164
|
-
this._transport.onmessage =
|
|
165
|
-
this._transport.onclose =
|
|
166
|
-
for (const {
|
|
167
|
-
reject
|
|
168
|
-
} of this._pending.values()) reject(new Error('Connection closed'));
|
|
143
|
+
this._transport.onmessage = void 0;
|
|
144
|
+
this._transport.onclose = void 0;
|
|
145
|
+
for (const { reject } of this._pending.values())
|
|
146
|
+
reject(new Error("Connection closed"));
|
|
169
147
|
this._onClose();
|
|
170
148
|
}
|
|
171
149
|
isClosed() {
|
|
172
150
|
return this._closed;
|
|
173
151
|
}
|
|
174
152
|
close() {
|
|
175
|
-
if (!this._closed)
|
|
153
|
+
if (!this._closed)
|
|
154
|
+
this._transport.close();
|
|
176
155
|
}
|
|
177
|
-
}
|
|
156
|
+
}
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
Chat,
|
|
160
|
+
asString
|
|
161
|
+
});
|
|
@@ -1,51 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var contextRecorder_exports = {};
|
|
30
|
+
__export(contextRecorder_exports, {
|
|
31
|
+
ContextRecorder: () => ContextRecorder,
|
|
32
|
+
generateFrameSelector: () => generateFrameSelector
|
|
5
33
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
20
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
|
-
/**
|
|
22
|
-
* Copyright (c) Microsoft Corporation.
|
|
23
|
-
*
|
|
24
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
25
|
-
* you may not use this file except in compliance with the License.
|
|
26
|
-
* You may obtain a copy of the License at
|
|
27
|
-
*
|
|
28
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
29
|
-
*
|
|
30
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
31
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
32
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
33
|
-
* See the License for the specific language governing permissions and
|
|
34
|
-
* limitations under the License.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
class ContextRecorder extends _events.EventEmitter {
|
|
34
|
+
module.exports = __toCommonJS(contextRecorder_exports);
|
|
35
|
+
var import_events = require("events");
|
|
36
|
+
var import_recorderCollection = require("./recorderCollection");
|
|
37
|
+
var recorderSource = __toESM(require("../../generated/pollingRecorderSource"));
|
|
38
|
+
var import_utils = require("../../utils");
|
|
39
|
+
var import_timeoutRunner = require("../../utils/isomorphic/timeoutRunner");
|
|
40
|
+
var import_browserContext = require("../browserContext");
|
|
41
|
+
var import_languages = require("../codegen/languages");
|
|
42
|
+
var import_frames = require("../frames");
|
|
43
|
+
var import_page = require("../page");
|
|
44
|
+
var import_throttledFile = require("./throttledFile");
|
|
45
|
+
var import_language = require("../codegen/language");
|
|
46
|
+
class ContextRecorder extends import_events.EventEmitter {
|
|
38
47
|
constructor(context, params, delegate) {
|
|
39
48
|
super();
|
|
40
|
-
this.
|
|
41
|
-
this._pageAliases = new Map();
|
|
49
|
+
this._pageAliases = /* @__PURE__ */ new Map();
|
|
42
50
|
this._lastPopupOrdinal = 0;
|
|
43
51
|
this._lastDialogOrdinal = -1;
|
|
44
52
|
this._lastDownloadOrdinal = -1;
|
|
45
|
-
this._context = void 0;
|
|
46
|
-
this._params = void 0;
|
|
47
|
-
this._delegate = void 0;
|
|
48
|
-
this._recorderSources = void 0;
|
|
49
53
|
this._throttledOutputFile = null;
|
|
50
54
|
this._orderedLanguages = [];
|
|
51
55
|
this._listeners = [];
|
|
@@ -55,32 +59,18 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
55
59
|
this._recorderSources = [];
|
|
56
60
|
const language = params.language || context.attribution.playwright.options.sdkLanguage;
|
|
57
61
|
this.setOutput(language, params.outputFile);
|
|
58
|
-
|
|
59
|
-
// Make a copy of options to modify them later.
|
|
60
62
|
const languageGeneratorOptions = {
|
|
61
63
|
browserName: context._browser.options.name,
|
|
62
|
-
launchOptions: {
|
|
63
|
-
|
|
64
|
-
...params.launchOptions,
|
|
65
|
-
tracesDir: undefined
|
|
66
|
-
},
|
|
67
|
-
contextOptions: {
|
|
68
|
-
...params.contextOptions
|
|
69
|
-
},
|
|
64
|
+
launchOptions: { headless: false, ...params.launchOptions, tracesDir: void 0 },
|
|
65
|
+
contextOptions: { ...params.contextOptions },
|
|
70
66
|
deviceName: params.device,
|
|
71
67
|
saveStorage: params.saveStorage
|
|
72
68
|
};
|
|
73
|
-
this._collection = new
|
|
74
|
-
this._collection.on(
|
|
69
|
+
this._collection = new import_recorderCollection.RecorderCollection(this._pageAliases);
|
|
70
|
+
this._collection.on("change", (actions) => {
|
|
75
71
|
this._recorderSources = [];
|
|
76
72
|
for (const languageGenerator of this._orderedLanguages) {
|
|
77
|
-
|
|
78
|
-
const {
|
|
79
|
-
header,
|
|
80
|
-
footer,
|
|
81
|
-
actionTexts,
|
|
82
|
-
text
|
|
83
|
-
} = (0, _language.generateCode)(actions, languageGenerator, languageGeneratorOptions);
|
|
73
|
+
const { header, footer, actionTexts, text } = (0, import_language.generateCode)(actions, languageGenerator, languageGeneratorOptions);
|
|
84
74
|
const source = {
|
|
85
75
|
isRecorded: true,
|
|
86
76
|
label: languageGenerator.name,
|
|
@@ -93,80 +83,93 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
93
83
|
language: languageGenerator.highlighter,
|
|
94
84
|
highlight: []
|
|
95
85
|
};
|
|
96
|
-
source.revealLine = text.split(
|
|
86
|
+
source.revealLine = text.split("\n").length - 1;
|
|
97
87
|
this._recorderSources.push(source);
|
|
98
|
-
if (languageGenerator === this._orderedLanguages[0])
|
|
88
|
+
if (languageGenerator === this._orderedLanguages[0])
|
|
89
|
+
this._throttledOutputFile?.setContent(source.text);
|
|
99
90
|
}
|
|
100
91
|
this.emit(ContextRecorder.Events.Change, {
|
|
101
92
|
sources: this._recorderSources,
|
|
102
93
|
actions
|
|
103
94
|
});
|
|
104
95
|
});
|
|
105
|
-
context.on(
|
|
106
|
-
|
|
107
|
-
(_this$_throttledOutpu2 = this._throttledOutputFile) === null || _this$_throttledOutpu2 === void 0 || _this$_throttledOutpu2.flush();
|
|
96
|
+
context.on(import_browserContext.BrowserContext.Events.BeforeClose, () => {
|
|
97
|
+
this._throttledOutputFile?.flush();
|
|
108
98
|
});
|
|
109
|
-
this._listeners.push(
|
|
110
|
-
|
|
111
|
-
(_this$_throttledOutpu3 = this._throttledOutputFile) === null || _this$_throttledOutpu3 === void 0 || _this$_throttledOutpu3.flush();
|
|
99
|
+
this._listeners.push(import_utils.eventsHelper.addEventListener(process, "exit", () => {
|
|
100
|
+
this._throttledOutputFile?.flush();
|
|
112
101
|
}));
|
|
113
|
-
this.setEnabled(params.mode ===
|
|
102
|
+
this.setEnabled(params.mode === "recording");
|
|
103
|
+
}
|
|
104
|
+
static {
|
|
105
|
+
this.Events = {
|
|
106
|
+
Change: "change"
|
|
107
|
+
};
|
|
114
108
|
}
|
|
115
109
|
setOutput(codegenId, outputFile) {
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
110
|
+
const languages = (0, import_languages.languageSet)();
|
|
111
|
+
const primaryLanguage = [...languages].find((l) => l.id === codegenId);
|
|
112
|
+
if (!primaryLanguage)
|
|
113
|
+
throw new Error(`
|
|
114
|
+
===============================
|
|
115
|
+
Unsupported language: '${codegenId}'
|
|
116
|
+
===============================
|
|
117
|
+
`);
|
|
120
118
|
languages.delete(primaryLanguage);
|
|
121
119
|
this._orderedLanguages = [primaryLanguage, ...languages];
|
|
122
|
-
this._throttledOutputFile = outputFile ? new
|
|
123
|
-
|
|
120
|
+
this._throttledOutputFile = outputFile ? new import_throttledFile.ThrottledFile(outputFile) : null;
|
|
121
|
+
this._collection?.restart();
|
|
124
122
|
}
|
|
125
123
|
languageName(id) {
|
|
126
124
|
for (const lang of this._orderedLanguages) {
|
|
127
|
-
if (!id || lang.id === id)
|
|
125
|
+
if (!id || lang.id === id)
|
|
126
|
+
return lang.highlighter;
|
|
128
127
|
}
|
|
129
|
-
return
|
|
128
|
+
return "javascript";
|
|
130
129
|
}
|
|
131
130
|
async install() {
|
|
132
|
-
this._context.on(
|
|
133
|
-
for (const page of this._context.pages())
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
await this._context.exposeBinding(
|
|
131
|
+
this._context.on(import_browserContext.BrowserContext.Events.Page, (page) => this._onPage(page));
|
|
132
|
+
for (const page of this._context.pages())
|
|
133
|
+
this._onPage(page);
|
|
134
|
+
this._context.on(import_browserContext.BrowserContext.Events.Dialog, (dialog) => this._onDialog(dialog.page()));
|
|
135
|
+
await this._context.exposeBinding(
|
|
136
|
+
"__pw_recorderPerformAction",
|
|
137
|
+
false,
|
|
138
|
+
(source, action) => this._performAction(source.frame, action)
|
|
139
|
+
);
|
|
140
|
+
await this._context.exposeBinding(
|
|
141
|
+
"__pw_recorderRecordAction",
|
|
142
|
+
false,
|
|
143
|
+
(source, action) => this._recordAction(source.frame, action)
|
|
144
|
+
);
|
|
142
145
|
await this._context.extendInjectedScript(recorderSource.source);
|
|
143
146
|
}
|
|
144
147
|
setEnabled(enabled) {
|
|
145
148
|
this._collection.setEnabled(enabled);
|
|
146
149
|
}
|
|
147
150
|
dispose() {
|
|
148
|
-
|
|
151
|
+
import_utils.eventsHelper.removeEventListeners(this._listeners);
|
|
149
152
|
}
|
|
150
153
|
async _onPage(page) {
|
|
151
|
-
// First page is called page, others are called popup1, popup2, etc.
|
|
152
154
|
const frame = page.mainFrame();
|
|
153
|
-
page.on(
|
|
155
|
+
page.on("close", () => {
|
|
154
156
|
this._collection.addRecordedAction({
|
|
155
157
|
frame: this._describeMainFrame(page),
|
|
156
158
|
action: {
|
|
157
|
-
name:
|
|
159
|
+
name: "closePage",
|
|
158
160
|
signals: []
|
|
159
161
|
},
|
|
160
|
-
startTime: (0,
|
|
162
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
161
163
|
});
|
|
162
164
|
this._pageAliases.delete(page);
|
|
163
165
|
});
|
|
164
|
-
frame.on(
|
|
165
|
-
if (event.isPublic)
|
|
166
|
+
frame.on(import_frames.Frame.Events.InternalNavigation, (event) => {
|
|
167
|
+
if (event.isPublic)
|
|
168
|
+
this._onFrameNavigated(frame, page);
|
|
166
169
|
});
|
|
167
|
-
page.on(
|
|
168
|
-
const suffix = this._pageAliases.size ? String(++this._lastPopupOrdinal) :
|
|
169
|
-
const pageAlias =
|
|
170
|
+
page.on(import_page.Page.Events.Download, () => this._onDownload(page));
|
|
171
|
+
const suffix = this._pageAliases.size ? String(++this._lastPopupOrdinal) : "";
|
|
172
|
+
const pageAlias = "page" + suffix;
|
|
170
173
|
this._pageAliases.set(page, pageAlias);
|
|
171
174
|
if (page.opener()) {
|
|
172
175
|
this._onPopup(page.opener(), page);
|
|
@@ -174,22 +177,22 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
174
177
|
this._collection.addRecordedAction({
|
|
175
178
|
frame: this._describeMainFrame(page),
|
|
176
179
|
action: {
|
|
177
|
-
name:
|
|
180
|
+
name: "openPage",
|
|
178
181
|
url: page.mainFrame().url(),
|
|
179
182
|
signals: []
|
|
180
183
|
},
|
|
181
|
-
startTime: (0,
|
|
184
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
182
185
|
});
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
188
|
clearScript() {
|
|
186
189
|
this._collection.restart();
|
|
187
|
-
if (this._params.mode ===
|
|
188
|
-
for (const page of this._context.pages())
|
|
190
|
+
if (this._params.mode === "recording") {
|
|
191
|
+
for (const page of this._context.pages())
|
|
192
|
+
this._onFrameNavigated(page.mainFrame(), page);
|
|
189
193
|
}
|
|
190
194
|
}
|
|
191
195
|
runTask(task) {
|
|
192
|
-
// TODO: implement
|
|
193
196
|
}
|
|
194
197
|
_describeMainFrame(page) {
|
|
195
198
|
return {
|
|
@@ -204,18 +207,17 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
204
207
|
};
|
|
205
208
|
}
|
|
206
209
|
testIdAttributeName() {
|
|
207
|
-
return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() ||
|
|
210
|
+
return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() || "data-testid";
|
|
208
211
|
}
|
|
209
212
|
async _createActionInContext(frame, action) {
|
|
210
|
-
var _this$_delegate$rewri, _this$_delegate;
|
|
211
213
|
const frameDescription = await this._describeFrame(frame);
|
|
212
214
|
const actionInContext = {
|
|
213
215
|
frame: frameDescription,
|
|
214
216
|
action,
|
|
215
|
-
description:
|
|
216
|
-
startTime: (0,
|
|
217
|
+
description: void 0,
|
|
218
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
217
219
|
};
|
|
218
|
-
await
|
|
220
|
+
await this._delegate.rewriteActionInContext?.(this._pageAliases, actionInContext);
|
|
219
221
|
return actionInContext;
|
|
220
222
|
}
|
|
221
223
|
async _performAction(frame, action) {
|
|
@@ -226,45 +228,30 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
226
228
|
}
|
|
227
229
|
_onFrameNavigated(frame, page) {
|
|
228
230
|
const pageAlias = this._pageAliases.get(page);
|
|
229
|
-
this._collection.signal(pageAlias, frame, {
|
|
230
|
-
name: 'navigation',
|
|
231
|
-
url: frame.url()
|
|
232
|
-
});
|
|
231
|
+
this._collection.signal(pageAlias, frame, { name: "navigation", url: frame.url() });
|
|
233
232
|
}
|
|
234
233
|
_onPopup(page, popup) {
|
|
235
234
|
const pageAlias = this._pageAliases.get(page);
|
|
236
235
|
const popupAlias = this._pageAliases.get(popup);
|
|
237
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
238
|
-
name: 'popup',
|
|
239
|
-
popupAlias
|
|
240
|
-
});
|
|
236
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "popup", popupAlias });
|
|
241
237
|
}
|
|
242
238
|
_onDownload(page) {
|
|
243
239
|
const pageAlias = this._pageAliases.get(page);
|
|
244
240
|
++this._lastDownloadOrdinal;
|
|
245
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
246
|
-
name: 'download',
|
|
247
|
-
downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : ''
|
|
248
|
-
});
|
|
241
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "download", downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : "" });
|
|
249
242
|
}
|
|
250
243
|
_onDialog(page) {
|
|
251
244
|
const pageAlias = this._pageAliases.get(page);
|
|
252
245
|
++this._lastDialogOrdinal;
|
|
253
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
254
|
-
name: 'dialog',
|
|
255
|
-
dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : ''
|
|
256
|
-
});
|
|
246
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "dialog", dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : "" });
|
|
257
247
|
}
|
|
258
248
|
}
|
|
259
|
-
exports.ContextRecorder = ContextRecorder;
|
|
260
|
-
ContextRecorder.Events = {
|
|
261
|
-
Change: 'change'
|
|
262
|
-
};
|
|
263
249
|
async function generateFrameSelector(frame) {
|
|
264
250
|
const selectorPromises = [];
|
|
265
251
|
while (frame) {
|
|
266
252
|
const parent = frame.parentFrame();
|
|
267
|
-
if (!parent)
|
|
253
|
+
if (!parent)
|
|
254
|
+
break;
|
|
268
255
|
selectorPromises.push(generateFrameSelectorInParent(parent, frame));
|
|
269
256
|
frame = parent;
|
|
270
257
|
}
|
|
@@ -272,19 +259,28 @@ async function generateFrameSelector(frame) {
|
|
|
272
259
|
return result.reverse();
|
|
273
260
|
}
|
|
274
261
|
async function generateFrameSelectorInParent(parent, frame) {
|
|
275
|
-
const result = await (0,
|
|
262
|
+
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
276
263
|
try {
|
|
277
264
|
const frameElement = await frame.frameElement();
|
|
278
|
-
if (!frameElement || !parent)
|
|
265
|
+
if (!frameElement || !parent)
|
|
266
|
+
return;
|
|
279
267
|
const utility = await parent._utilityContext();
|
|
280
268
|
const injected = await utility.injectedScript();
|
|
281
|
-
const selector = await injected.evaluate((
|
|
282
|
-
return
|
|
269
|
+
const selector = await injected.evaluate((injected2, element) => {
|
|
270
|
+
return injected2.generateSelectorSimple(element);
|
|
283
271
|
}, frameElement);
|
|
284
272
|
return selector;
|
|
285
|
-
} catch (e) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if (
|
|
289
|
-
|
|
290
|
-
|
|
273
|
+
} catch (e) {
|
|
274
|
+
}
|
|
275
|
+
}, (0, import_utils.monotonicTime)() + 2e3);
|
|
276
|
+
if (!result.timedOut && result.result)
|
|
277
|
+
return result.result;
|
|
278
|
+
if (frame.name())
|
|
279
|
+
return `iframe[name=${(0, import_utils.quoteCSSAttributeValue)(frame.name())}]`;
|
|
280
|
+
return `iframe[src=${(0, import_utils.quoteCSSAttributeValue)(frame.url())}]`;
|
|
281
|
+
}
|
|
282
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
283
|
+
0 && (module.exports = {
|
|
284
|
+
ContextRecorder,
|
|
285
|
+
generateFrameSelector
|
|
286
|
+
});
|