patchright-core 1.51.3 → 1.52.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/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 +54 -69
- 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 +375 -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 +77 -111
- package/lib/server/frames.js +730 -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 +329 -426
- 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 +90 -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-DVQi6prl.js} +1 -1
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/index.html +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-1DiydmYA.js → codeMirrorModule-dvXVzLxY.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
- package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
- package/lib/vite/traceViewer/index.ChIUCJnj.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.html +3 -3
- package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
- 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
package/lib/server/recorder.js
CHANGED
|
@@ -1,45 +1,75 @@
|
|
|
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 recorder_exports = {};
|
|
30
|
+
__export(recorder_exports, {
|
|
31
|
+
Recorder: () => Recorder
|
|
5
32
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var consoleApiSource =
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
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; }
|
|
18
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
-
/**
|
|
20
|
-
* Copyright (c) Microsoft Corporation.
|
|
21
|
-
*
|
|
22
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
23
|
-
* you may not use this file except in compliance with the License.
|
|
24
|
-
* You may obtain a copy of the License at
|
|
25
|
-
*
|
|
26
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
27
|
-
*
|
|
28
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
29
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
30
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
31
|
-
* See the License for the specific language governing permissions and
|
|
32
|
-
* limitations under the License.
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
const recorderSymbol = Symbol('recorderSymbol');
|
|
33
|
+
module.exports = __toCommonJS(recorder_exports);
|
|
34
|
+
var import_fs = __toESM(require("fs"));
|
|
35
|
+
var consoleApiSource = __toESM(require("../generated/consoleApiSource"));
|
|
36
|
+
var import_utils = require("../utils");
|
|
37
|
+
var import_browserContext = require("./browserContext");
|
|
38
|
+
var import_debugger = require("./debugger");
|
|
39
|
+
var import_contextRecorder = require("./recorder/contextRecorder");
|
|
40
|
+
var import_recorderUtils = require("./recorder/recorderUtils");
|
|
41
|
+
var import_locatorParser = require("../utils/isomorphic/locatorParser");
|
|
42
|
+
var import_selectorParser = require("../utils/isomorphic/selectorParser");
|
|
43
|
+
const recorderSymbol = Symbol("recorderSymbol");
|
|
36
44
|
class Recorder {
|
|
45
|
+
constructor(context, params) {
|
|
46
|
+
this._highlightedElement = {};
|
|
47
|
+
this._overlayState = { offsetX: 0 };
|
|
48
|
+
this._recorderApp = null;
|
|
49
|
+
this._currentCallsMetadata = /* @__PURE__ */ new Map();
|
|
50
|
+
this._recorderSources = [];
|
|
51
|
+
this._userSources = /* @__PURE__ */ new Map();
|
|
52
|
+
this._omitCallTracking = false;
|
|
53
|
+
this._mode = params.mode || "none";
|
|
54
|
+
this.handleSIGINT = params.handleSIGINT;
|
|
55
|
+
this._contextRecorder = new import_contextRecorder.ContextRecorder(context, params, {});
|
|
56
|
+
this._context = context;
|
|
57
|
+
this._omitCallTracking = !!params.omitCallTracking;
|
|
58
|
+
this._debugger = context.debugger();
|
|
59
|
+
context.instrumentation.addListener(this, context);
|
|
60
|
+
this._currentLanguage = this._contextRecorder.languageName();
|
|
61
|
+
if ((0, import_utils.isUnderTest)()) {
|
|
62
|
+
this._overlayState.offsetX = 200;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
37
65
|
static async showInspector(context, params, recorderAppFactory) {
|
|
38
|
-
if ((0,
|
|
66
|
+
if ((0, import_utils.isUnderTest)())
|
|
67
|
+
params.language = process.env.TEST_INSPECTOR_LANGUAGE;
|
|
39
68
|
return await Recorder.show(context, recorderAppFactory, params);
|
|
40
69
|
}
|
|
41
70
|
static showInspectorNoReply(context, recorderAppFactory) {
|
|
42
|
-
Recorder.showInspector(context, {}, recorderAppFactory).catch(() => {
|
|
71
|
+
Recorder.showInspector(context, {}, recorderAppFactory).catch(() => {
|
|
72
|
+
});
|
|
43
73
|
}
|
|
44
74
|
static show(context, recorderAppFactory, params) {
|
|
45
75
|
let recorderPromise = context[recorderSymbol];
|
|
@@ -55,91 +85,68 @@ class Recorder {
|
|
|
55
85
|
await recorder._install(recorderApp);
|
|
56
86
|
return recorder;
|
|
57
87
|
}
|
|
58
|
-
constructor(context, params) {
|
|
59
|
-
this.handleSIGINT = void 0;
|
|
60
|
-
this._context = void 0;
|
|
61
|
-
this._mode = void 0;
|
|
62
|
-
this._highlightedElement = {};
|
|
63
|
-
this._overlayState = {
|
|
64
|
-
offsetX: 0
|
|
65
|
-
};
|
|
66
|
-
this._recorderApp = null;
|
|
67
|
-
this._currentCallsMetadata = new Map();
|
|
68
|
-
this._recorderSources = [];
|
|
69
|
-
this._userSources = new Map();
|
|
70
|
-
this._debugger = void 0;
|
|
71
|
-
this._contextRecorder = void 0;
|
|
72
|
-
this._omitCallTracking = false;
|
|
73
|
-
this._currentLanguage = void 0;
|
|
74
|
-
this._mode = params.mode || 'none';
|
|
75
|
-
this.handleSIGINT = params.handleSIGINT;
|
|
76
|
-
this._contextRecorder = new _contextRecorder.ContextRecorder(context, params, {});
|
|
77
|
-
this._context = context;
|
|
78
|
-
this._omitCallTracking = !!params.omitCallTracking;
|
|
79
|
-
this._debugger = context.debugger();
|
|
80
|
-
context.instrumentation.addListener(this, context);
|
|
81
|
-
this._currentLanguage = this._contextRecorder.languageName();
|
|
82
|
-
if ((0, _utils.isUnderTest)()) {
|
|
83
|
-
// Most of our tests put elements at the top left, so get out of the way.
|
|
84
|
-
this._overlayState.offsetX = 200;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
88
|
async _install(recorderApp) {
|
|
88
89
|
this._recorderApp = recorderApp;
|
|
89
|
-
recorderApp.once(
|
|
90
|
+
recorderApp.once("close", () => {
|
|
90
91
|
this._debugger.resume(false);
|
|
91
92
|
this._recorderApp = null;
|
|
92
93
|
});
|
|
93
|
-
recorderApp.on(
|
|
94
|
-
if (data.event ===
|
|
94
|
+
recorderApp.on("event", (data) => {
|
|
95
|
+
if (data.event === "setMode") {
|
|
95
96
|
this.setMode(data.params.mode);
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
|
-
if (data.event ===
|
|
99
|
-
if (data.params.selector)
|
|
100
|
-
|
|
99
|
+
if (data.event === "highlightRequested") {
|
|
100
|
+
if (data.params.selector)
|
|
101
|
+
this.setHighlightedSelector(this._currentLanguage, data.params.selector);
|
|
102
|
+
if (data.params.ariaTemplate)
|
|
103
|
+
this.setHighlightedAriaTemplate(data.params.ariaTemplate);
|
|
101
104
|
return;
|
|
102
105
|
}
|
|
103
|
-
if (data.event ===
|
|
106
|
+
if (data.event === "step") {
|
|
104
107
|
this._debugger.resume(true);
|
|
105
108
|
return;
|
|
106
109
|
}
|
|
107
|
-
if (data.event ===
|
|
110
|
+
if (data.event === "fileChanged") {
|
|
108
111
|
this._currentLanguage = this._contextRecorder.languageName(data.params.file);
|
|
109
112
|
this._refreshOverlay();
|
|
110
113
|
return;
|
|
111
114
|
}
|
|
112
|
-
if (data.event ===
|
|
115
|
+
if (data.event === "resume") {
|
|
113
116
|
this._debugger.resume(false);
|
|
114
117
|
return;
|
|
115
118
|
}
|
|
116
|
-
if (data.event ===
|
|
119
|
+
if (data.event === "pause") {
|
|
117
120
|
this._debugger.pauseOnNextStatement();
|
|
118
121
|
return;
|
|
119
122
|
}
|
|
120
|
-
if (data.event ===
|
|
123
|
+
if (data.event === "clear") {
|
|
121
124
|
this._contextRecorder.clearScript();
|
|
122
125
|
return;
|
|
123
126
|
}
|
|
124
|
-
if (data.event ===
|
|
127
|
+
if (data.event === "runTask") {
|
|
125
128
|
this._contextRecorder.runTask(data.params.task);
|
|
126
129
|
return;
|
|
127
130
|
}
|
|
128
131
|
});
|
|
129
|
-
await Promise.all([
|
|
130
|
-
|
|
131
|
-
|
|
132
|
+
await Promise.all([
|
|
133
|
+
recorderApp.setMode(this._mode),
|
|
134
|
+
recorderApp.setPaused(this._debugger.isPaused()),
|
|
135
|
+
this._pushAllSources()
|
|
136
|
+
]);
|
|
137
|
+
this._context.once(import_browserContext.BrowserContext.Events.Close, () => {
|
|
132
138
|
this._contextRecorder.dispose();
|
|
133
139
|
this._context.instrumentation.removeListener(this);
|
|
134
|
-
|
|
140
|
+
this._recorderApp?.close().catch(() => {
|
|
141
|
+
});
|
|
135
142
|
});
|
|
136
|
-
this._contextRecorder.on(
|
|
143
|
+
this._contextRecorder.on(import_contextRecorder.ContextRecorder.Events.Change, (data) => {
|
|
137
144
|
this._recorderSources = data.sources;
|
|
138
145
|
recorderApp.setActions(data.actions, data.sources);
|
|
139
|
-
recorderApp.setRunningFile(
|
|
146
|
+
recorderApp.setRunningFile(void 0);
|
|
140
147
|
this._pushAllSources();
|
|
141
148
|
});
|
|
142
|
-
await this._context.exposeBinding(
|
|
149
|
+
await this._context.exposeBinding("__pw_recorderState", false, async (source) => {
|
|
143
150
|
let actionSelector;
|
|
144
151
|
let actionPoint;
|
|
145
152
|
const hasActiveScreenshotCommand = [...this._currentCallsMetadata.keys()].some(isScreenshotCommand);
|
|
@@ -163,59 +170,50 @@ class Recorder {
|
|
|
163
170
|
};
|
|
164
171
|
return uiState;
|
|
165
172
|
});
|
|
166
|
-
await this._context.exposeBinding(
|
|
167
|
-
frame
|
|
168
|
-
|
|
169
|
-
var _this$_recorderApp2;
|
|
170
|
-
const selectorChain = await (0, _contextRecorder.generateFrameSelector)(frame);
|
|
171
|
-
await ((_this$_recorderApp2 = this._recorderApp) === null || _this$_recorderApp2 === void 0 ? void 0 : _this$_recorderApp2.elementPicked({
|
|
172
|
-
selector: (0, _recorderUtils.buildFullSelector)(selectorChain, elementInfo.selector),
|
|
173
|
-
ariaSnapshot: elementInfo.ariaSnapshot
|
|
174
|
-
}, true));
|
|
173
|
+
await this._context.exposeBinding("__pw_recorderElementPicked", false, async ({ frame }, elementInfo) => {
|
|
174
|
+
const selectorChain = await (0, import_contextRecorder.generateFrameSelector)(frame);
|
|
175
|
+
await this._recorderApp?.elementPicked({ selector: (0, import_recorderUtils.buildFullSelector)(selectorChain, elementInfo.selector), ariaSnapshot: elementInfo.ariaSnapshot }, true);
|
|
175
176
|
});
|
|
176
|
-
await this._context.exposeBinding(
|
|
177
|
-
frame
|
|
178
|
-
|
|
179
|
-
if (frame.parentFrame()) return;
|
|
177
|
+
await this._context.exposeBinding("__pw_recorderSetMode", false, async ({ frame }, mode) => {
|
|
178
|
+
if (frame.parentFrame())
|
|
179
|
+
return;
|
|
180
180
|
this.setMode(mode);
|
|
181
181
|
});
|
|
182
|
-
await this._context.exposeBinding(
|
|
183
|
-
frame
|
|
184
|
-
|
|
185
|
-
if (frame.parentFrame()) return;
|
|
182
|
+
await this._context.exposeBinding("__pw_recorderSetOverlayState", false, async ({ frame }, state) => {
|
|
183
|
+
if (frame.parentFrame())
|
|
184
|
+
return;
|
|
186
185
|
this._overlayState = state;
|
|
187
186
|
});
|
|
188
|
-
await this._context.exposeBinding(
|
|
187
|
+
await this._context.exposeBinding("__pw_resume", false, () => {
|
|
189
188
|
this._debugger.resume(false);
|
|
190
189
|
});
|
|
191
190
|
await this._context.extendInjectedScript(consoleApiSource.source);
|
|
192
191
|
await this._contextRecorder.install();
|
|
193
|
-
if (this._debugger.isPaused())
|
|
194
|
-
|
|
192
|
+
if (this._debugger.isPaused())
|
|
193
|
+
this._pausedStateChanged();
|
|
194
|
+
this._debugger.on(import_debugger.Debugger.Events.PausedStateChanged, () => this._pausedStateChanged());
|
|
195
195
|
this._context.recorderAppForTest = this._recorderApp;
|
|
196
196
|
}
|
|
197
197
|
_pausedStateChanged() {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
metadata,
|
|
202
|
-
sdkObject
|
|
203
|
-
} of this._debugger.pausedDetails()) {
|
|
204
|
-
if (!this._currentCallsMetadata.has(metadata)) this.onBeforeCall(sdkObject, metadata);
|
|
198
|
+
for (const { metadata, sdkObject } of this._debugger.pausedDetails()) {
|
|
199
|
+
if (!this._currentCallsMetadata.has(metadata))
|
|
200
|
+
this.onBeforeCall(sdkObject, metadata);
|
|
205
201
|
}
|
|
206
|
-
|
|
202
|
+
this._recorderApp?.setPaused(this._debugger.isPaused());
|
|
207
203
|
this._updateUserSources();
|
|
208
204
|
this.updateCallLog([...this._currentCallsMetadata.keys()]);
|
|
209
205
|
}
|
|
210
206
|
setMode(mode) {
|
|
211
|
-
|
|
212
|
-
|
|
207
|
+
if (this._mode === mode)
|
|
208
|
+
return;
|
|
213
209
|
this._highlightedElement = {};
|
|
214
210
|
this._mode = mode;
|
|
215
|
-
|
|
211
|
+
this._recorderApp?.setMode(this._mode);
|
|
216
212
|
this._contextRecorder.setEnabled(this._isRecording());
|
|
217
213
|
this._debugger.setMuted(this._isRecording());
|
|
218
|
-
if (this._mode !==
|
|
214
|
+
if (this._mode !== "none" && this._mode !== "standby" && this._context.pages().length === 1)
|
|
215
|
+
this._context.pages()[0].bringToFront().catch(() => {
|
|
216
|
+
});
|
|
219
217
|
this._refreshOverlay();
|
|
220
218
|
}
|
|
221
219
|
resume() {
|
|
@@ -225,15 +223,11 @@ class Recorder {
|
|
|
225
223
|
return this._mode;
|
|
226
224
|
}
|
|
227
225
|
setHighlightedSelector(language, selector) {
|
|
228
|
-
this._highlightedElement = {
|
|
229
|
-
selector: (0, _locatorParser.locatorOrSelectorAsSelector)(language, selector, this._context.selectors().testIdAttributeName())
|
|
230
|
-
};
|
|
226
|
+
this._highlightedElement = { selector: (0, import_locatorParser.locatorOrSelectorAsSelector)(language, selector, this._context.selectors().testIdAttributeName()) };
|
|
231
227
|
this._refreshOverlay();
|
|
232
228
|
}
|
|
233
229
|
setHighlightedAriaTemplate(ariaTemplate) {
|
|
234
|
-
this._highlightedElement = {
|
|
235
|
-
ariaTemplate
|
|
236
|
-
};
|
|
230
|
+
this._highlightedElement = { ariaTemplate };
|
|
237
231
|
this._refreshOverlay();
|
|
238
232
|
}
|
|
239
233
|
hideHighlightedSelector() {
|
|
@@ -241,23 +235,20 @@ class Recorder {
|
|
|
241
235
|
this._refreshOverlay();
|
|
242
236
|
}
|
|
243
237
|
async _scopeHighlightedSelectorToFrame(frame) {
|
|
244
|
-
if (!this._highlightedElement.selector)
|
|
238
|
+
if (!this._highlightedElement.selector)
|
|
239
|
+
return;
|
|
245
240
|
try {
|
|
246
241
|
const mainFrame = frame._page.mainFrame();
|
|
247
242
|
const resolved = await mainFrame.selectors.resolveFrameForSelector(this._highlightedElement.selector);
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
if (
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
if ((resolved === null || resolved === void 0 ? void 0 : resolved.frame) === frame) return (0, _selectorParser.stringifySelector)(resolved.info.parsed);
|
|
256
|
-
|
|
257
|
-
// selector points to a different frame, highlight nothing
|
|
258
|
-
return '';
|
|
243
|
+
if (!resolved)
|
|
244
|
+
return "";
|
|
245
|
+
if (resolved?.frame === mainFrame)
|
|
246
|
+
return (0, import_selectorParser.stringifySelector)(resolved.info.parsed);
|
|
247
|
+
if (resolved?.frame === frame)
|
|
248
|
+
return (0, import_selectorParser.stringifySelector)(resolved.info.parsed);
|
|
249
|
+
return "";
|
|
259
250
|
} catch {
|
|
260
|
-
return
|
|
251
|
+
return "";
|
|
261
252
|
}
|
|
262
253
|
}
|
|
263
254
|
setOutput(codegenId, outputFile) {
|
|
@@ -265,105 +256,105 @@ class Recorder {
|
|
|
265
256
|
}
|
|
266
257
|
_refreshOverlay() {
|
|
267
258
|
for (const page of this._context.pages()) {
|
|
268
|
-
for (const frame of page.frames())
|
|
259
|
+
for (const frame of page.frames())
|
|
260
|
+
frame.evaluateExpression("window.__pw_refreshOverlay()").catch(() => {
|
|
261
|
+
});
|
|
269
262
|
}
|
|
270
263
|
}
|
|
271
264
|
async onBeforeCall(sdkObject, metadata) {
|
|
272
|
-
if (this._omitCallTracking || this._isRecording())
|
|
265
|
+
if (this._omitCallTracking || this._isRecording())
|
|
266
|
+
return;
|
|
273
267
|
this._currentCallsMetadata.set(metadata, sdkObject);
|
|
274
268
|
this._updateUserSources();
|
|
275
269
|
this.updateCallLog([metadata]);
|
|
276
|
-
if (isScreenshotCommand(metadata))
|
|
277
|
-
|
|
278
|
-
|
|
270
|
+
if (isScreenshotCommand(metadata))
|
|
271
|
+
this.hideHighlightedSelector();
|
|
272
|
+
else if (metadata.params && metadata.params.selector)
|
|
273
|
+
this._highlightedElement = { selector: metadata.params.selector };
|
|
279
274
|
}
|
|
280
275
|
async onAfterCall(sdkObject, metadata) {
|
|
281
|
-
if (this._omitCallTracking || this._isRecording())
|
|
282
|
-
|
|
276
|
+
if (this._omitCallTracking || this._isRecording())
|
|
277
|
+
return;
|
|
278
|
+
if (!metadata.error)
|
|
279
|
+
this._currentCallsMetadata.delete(metadata);
|
|
283
280
|
this._updateUserSources();
|
|
284
281
|
this.updateCallLog([metadata]);
|
|
285
282
|
}
|
|
286
283
|
_updateUserSources() {
|
|
287
|
-
var _this$_recorderApp5;
|
|
288
|
-
// Remove old decorations.
|
|
289
284
|
for (const source of this._userSources.values()) {
|
|
290
285
|
source.highlight = [];
|
|
291
|
-
source.revealLine =
|
|
286
|
+
source.revealLine = void 0;
|
|
292
287
|
}
|
|
293
|
-
|
|
294
|
-
// Apply new decorations.
|
|
295
|
-
let fileToSelect = undefined;
|
|
288
|
+
let fileToSelect = void 0;
|
|
296
289
|
for (const metadata of this._currentCallsMetadata.keys()) {
|
|
297
|
-
if (!metadata.location)
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
line
|
|
301
|
-
} = metadata.location;
|
|
290
|
+
if (!metadata.location)
|
|
291
|
+
continue;
|
|
292
|
+
const { file, line } = metadata.location;
|
|
302
293
|
let source = this._userSources.get(file);
|
|
303
294
|
if (!source) {
|
|
304
|
-
source = {
|
|
305
|
-
isRecorded: false,
|
|
306
|
-
label: file,
|
|
307
|
-
id: file,
|
|
308
|
-
text: this._readSource(file),
|
|
309
|
-
highlight: [],
|
|
310
|
-
language: languageForFile(file)
|
|
311
|
-
};
|
|
295
|
+
source = { isRecorded: false, label: file, id: file, text: this._readSource(file), highlight: [], language: languageForFile(file) };
|
|
312
296
|
this._userSources.set(file, source);
|
|
313
297
|
}
|
|
314
298
|
if (line) {
|
|
315
299
|
const paused = this._debugger.isPaused(metadata);
|
|
316
|
-
source.highlight.push({
|
|
317
|
-
line,
|
|
318
|
-
type: metadata.error ? 'error' : paused ? 'paused' : 'running'
|
|
319
|
-
});
|
|
300
|
+
source.highlight.push({ line, type: metadata.error ? "error" : paused ? "paused" : "running" });
|
|
320
301
|
source.revealLine = line;
|
|
321
302
|
fileToSelect = source.id;
|
|
322
303
|
}
|
|
323
304
|
}
|
|
324
305
|
this._pushAllSources();
|
|
325
|
-
if (fileToSelect)
|
|
306
|
+
if (fileToSelect)
|
|
307
|
+
this._recorderApp?.setRunningFile(fileToSelect);
|
|
326
308
|
}
|
|
327
309
|
_pushAllSources() {
|
|
328
|
-
var _this$_recorderApp6;
|
|
329
310
|
const primaryPage = this._context.pages()[0];
|
|
330
|
-
|
|
311
|
+
this._recorderApp?.setSources([...this._recorderSources, ...this._userSources.values()], primaryPage?.mainFrame().url());
|
|
312
|
+
}
|
|
313
|
+
async onBeforeInputAction(sdkObject, metadata) {
|
|
331
314
|
}
|
|
332
|
-
async onBeforeInputAction(sdkObject, metadata) {}
|
|
333
315
|
async onCallLog(sdkObject, metadata, logName, message) {
|
|
334
316
|
this.updateCallLog([metadata]);
|
|
335
317
|
}
|
|
336
318
|
updateCallLog(metadatas) {
|
|
337
|
-
|
|
338
|
-
|
|
319
|
+
if (this._isRecording())
|
|
320
|
+
return;
|
|
339
321
|
const logs = [];
|
|
340
322
|
for (const metadata of metadatas) {
|
|
341
|
-
if (!metadata.method || metadata.internal)
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
if (this.
|
|
345
|
-
|
|
323
|
+
if (!metadata.method || metadata.internal)
|
|
324
|
+
continue;
|
|
325
|
+
let status = "done";
|
|
326
|
+
if (this._currentCallsMetadata.has(metadata))
|
|
327
|
+
status = "in-progress";
|
|
328
|
+
if (this._debugger.isPaused(metadata))
|
|
329
|
+
status = "paused";
|
|
330
|
+
logs.push((0, import_recorderUtils.metadataToCallLog)(metadata, status));
|
|
346
331
|
}
|
|
347
|
-
|
|
332
|
+
this._recorderApp?.updateCallLogs(logs);
|
|
348
333
|
}
|
|
349
334
|
_isRecording() {
|
|
350
|
-
return [
|
|
335
|
+
return ["recording", "assertingText", "assertingVisibility", "assertingValue", "assertingSnapshot"].includes(this._mode);
|
|
351
336
|
}
|
|
352
337
|
_readSource(fileName) {
|
|
353
338
|
try {
|
|
354
|
-
return
|
|
339
|
+
return import_fs.default.readFileSync(fileName, "utf-8");
|
|
355
340
|
} catch (e) {
|
|
356
|
-
return
|
|
341
|
+
return "// No source available";
|
|
357
342
|
}
|
|
358
343
|
}
|
|
359
344
|
}
|
|
360
|
-
exports.Recorder = Recorder;
|
|
361
345
|
function isScreenshotCommand(metadata) {
|
|
362
|
-
return metadata.method.toLowerCase().includes(
|
|
346
|
+
return metadata.method.toLowerCase().includes("screenshot");
|
|
363
347
|
}
|
|
364
348
|
function languageForFile(file) {
|
|
365
|
-
if (file.endsWith(
|
|
366
|
-
|
|
367
|
-
if (file.endsWith(
|
|
368
|
-
|
|
369
|
-
|
|
349
|
+
if (file.endsWith(".py"))
|
|
350
|
+
return "python";
|
|
351
|
+
if (file.endsWith(".java"))
|
|
352
|
+
return "java";
|
|
353
|
+
if (file.endsWith(".cs"))
|
|
354
|
+
return "csharp";
|
|
355
|
+
return "javascript";
|
|
356
|
+
}
|
|
357
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
358
|
+
0 && (module.exports = {
|
|
359
|
+
Recorder
|
|
360
|
+
});
|