rebrowser-playwright-core 1.49.1 → 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/ThirdPartyNotices.txt +381 -55
- package/bin/reinstall_msedge_beta_linux.sh +6 -0
- package/bin/reinstall_msedge_dev_linux.sh +6 -0
- package/bin/reinstall_msedge_stable_linux.sh +6 -0
- package/browsers.json +28 -13
- package/index.js +0 -1
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +60 -64
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +314 -354
- package/lib/cli/programWithTestStub.js +51 -44
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +146 -254
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -39
- package/lib/client/browser.js +59 -68
- package/lib/client/browserContext.js +302 -322
- package/lib/client/browserType.js +95 -143
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +109 -139
- package/lib/client/clientHelper.js +49 -42
- package/lib/client/clientInstrumentation.js +40 -35
- package/lib/client/clientStackTrace.js +69 -0
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +203 -218
- package/lib/client/consoleMessage.js +33 -33
- 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 +74 -76
- package/lib/client/elementHandle.js +126 -163
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +127 -127
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +154 -178
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +34 -0
- package/lib/client/frame.js +189 -307
- package/lib/client/harRouter.js +44 -56
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +55 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +53 -28
- package/lib/client/locator.js +144 -230
- package/lib/client/network.js +285 -301
- package/lib/client/page.js +273 -312
- package/lib/client/platform.js +74 -0
- package/lib/client/playwright.js +62 -57
- package/lib/client/selectors.js +51 -43
- package/lib/client/stream.js +30 -45
- package/lib/client/timeoutSettings.js +75 -0
- package/lib/client/tracing.js +49 -82
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +71 -91
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +111 -0
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +28 -43
- 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 -48
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -42
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2712 -2667
- package/lib/protocol/validatorPrimitives.js +115 -75
- package/lib/remote/playwrightConnection.js +144 -152
- package/lib/remote/playwrightServer.js +106 -77
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -206
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +227 -158
- package/lib/server/bidi/bidiChromium.js +106 -78
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +161 -97
- package/lib/server/bidi/bidiFirefox.js +76 -68
- package/lib/server/bidi/bidiInput.js +90 -102
- package/lib/server/bidi/bidiNetworkManager.js +141 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +262 -261
- 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 +241 -223
- 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 +149 -111
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +343 -360
- package/lib/server/browserType.js +169 -181
- package/lib/server/callLog.js +82 -0
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +99 -44
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +262 -280
- package/lib/server/chromium/crConnection.js +121 -178
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +64 -55
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +100 -91
- package/lib/server/chromium/crInput.js +101 -88
- package/lib/server/chromium/crNetworkManager.js +269 -370
- package/lib/server/chromium/crPage.js +509 -597
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +85 -69
- 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 +58 -46
- package/lib/server/codegen/csharp.js +191 -156
- package/lib/server/codegen/java.js +163 -125
- package/lib/server/codegen/javascript.js +166 -143
- package/lib/server/codegen/jsonl.js +33 -29
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -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 +102 -154
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +131 -131
- 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 +177 -217
- 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 -64
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +180 -229
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
- package/lib/server/dispatchers/frameDispatcher.js +93 -162
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
- package/lib/server/dispatchers/networkDispatchers.js +92 -109
- package/lib/server/dispatchers/pageDispatcher.js +130 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -44
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
- package/lib/server/dom.js +424 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -175
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +302 -331
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -57
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +218 -274
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +103 -77
- package/lib/server/firefox/ffInput.js +72 -63
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +244 -302
- package/lib/server/firefox/firefox.js +76 -69
- 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 +719 -855
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +288 -224
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -106
- package/lib/server/input.js +136 -166
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +157 -151
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +211 -0
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +263 -297
- package/lib/server/page.js +351 -434
- 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 +161 -0
- package/lib/server/recorder/contextRecorder.js +135 -148
- package/lib/server/recorder/recorderApp.js +129 -132
- package/lib/server/recorder/recorderCollection.js +57 -57
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +80 -100
- package/lib/server/recorder/recorderUtils.js +59 -72
- package/lib/server/recorder/throttledFile.js +42 -31
- package/lib/server/recorder.js +186 -190
- package/lib/server/registry/browserFetcher.js +107 -100
- package/lib/server/registry/dependencies.js +247 -198
- package/lib/server/registry/index.js +928 -709
- package/lib/server/registry/nativeDeps.js +1073 -461
- 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 -67
- package/lib/server/storageScript.js +154 -0
- package/lib/server/timeoutSettings.js +89 -0
- package/lib/server/trace/recorder/snapshotter.js +70 -88
- package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
- package/lib/server/trace/recorder/tracing.js +324 -327
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +172 -137
- package/lib/server/transport.js +125 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +44 -0
- package/lib/server/utils/comparators.js +161 -0
- package/lib/server/utils/crypto.js +216 -0
- package/lib/server/utils/debug.js +47 -0
- package/lib/server/utils/debugLogger.js +114 -0
- package/lib/server/utils/env.js +68 -0
- package/lib/server/utils/eventsHelper.js +39 -0
- package/lib/server/utils/expectUtils.js +38 -0
- package/lib/server/utils/fileUtils.js +191 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +109 -0
- package/lib/server/utils/httpServer.js +218 -0
- package/lib/server/utils/image_tools/colorUtils.js +89 -0
- package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +78 -0
- package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +71 -0
- package/lib/server/utils/network.js +217 -0
- package/lib/server/utils/nodePlatform.js +148 -0
- package/lib/server/utils/pipeTransport.js +84 -0
- package/lib/server/utils/processLauncher.js +238 -0
- package/lib/server/utils/profiler.js +65 -0
- package/lib/server/utils/socksProxy.js +511 -0
- package/lib/server/utils/spawnAsync.js +41 -0
- package/lib/server/utils/task.js +51 -0
- package/lib/server/utils/userAgent.js +98 -0
- package/lib/server/utils/wsServer.js +132 -0
- package/lib/server/utils/zipFile.js +74 -0
- package/lib/server/utils/zones.js +57 -0
- 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 +163 -180
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +96 -73
- package/lib/server/webkit/wkInput.js +87 -75
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +536 -647
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
- package/lib/utils/isomorphic/assert.js +31 -0
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +72 -0
- package/lib/utils/isomorphic/cssParser.js +123 -127
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +53 -0
- package/lib/utils/isomorphic/locatorGenerators.js +344 -349
- package/lib/utils/isomorphic/locatorParser.js +103 -106
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +115 -0
- package/lib/utils/isomorphic/mimeType.js +453 -22
- package/lib/utils/isomorphic/multimap.js +81 -0
- package/lib/utils/isomorphic/rtti.js +43 -0
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +54 -0
- package/lib/utils/isomorphic/stackTrace.js +158 -0
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +44 -0
- package/lib/utils/isomorphic/timeoutRunner.js +67 -0
- package/lib/utils/isomorphic/traceUtils.js +52 -32
- package/lib/utils/isomorphic/types.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +114 -71
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +101 -0
- package/lib/utilsBundle.js +101 -76
- package/lib/utilsBundleImpl/index.js +114 -116
- package/lib/vite/htmlReport/index.html +26 -20
- package/lib/vite/recorder/assets/{codeMirrorModule-C5j27SYZ.js → codeMirrorModule-DVQi6prl.js} +13 -13
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
- package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -7
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -7
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +819 -127
- package/types/types.d.ts +181 -69
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/protocol/transport.js +0 -82
- package/lib/server/ariaSnapshot.js +0 -33
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
- package/lib/server/recorder/recorderInTraceViewer.js +0 -144
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -153
- package/lib/utils/crypto.js +0 -171
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/expectUtils.js +0 -33
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -194
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -139
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/isomorphic/recorderUtils.js +0 -227
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/sequence.js +0 -64
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -134
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -71
- package/lib/vite/recorder/assets/index-m0XdVJHe.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-BBCX0spr.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-B4Iw34Ow.js +0 -68
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DFlGYqou.js +0 -9
- package/lib/vite/traceViewer/embedded.CmarehFk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
- package/lib/vite/traceViewer/index.FBucu_gE.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
- package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
- package/lib/vite/traceViewer/recorder.CW_rzcEp.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/uiMode.CDUVjusr.js +0 -5
- package/lib/vite/traceViewer/workbench.C-zR9ysA.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
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 chat_exports = {};
|
|
20
|
+
__export(chat_exports, {
|
|
21
|
+
Chat: () => Chat,
|
|
22
|
+
asString: () => asString
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(chat_exports);
|
|
25
|
+
var import_transport = require("../transport");
|
|
26
|
+
class Chat {
|
|
27
|
+
constructor(wsEndpoint) {
|
|
28
|
+
this._history = [];
|
|
29
|
+
this._chatSinks = /* @__PURE__ */ new Map();
|
|
30
|
+
this._wsEndpoint = wsEndpoint;
|
|
31
|
+
}
|
|
32
|
+
clearHistory() {
|
|
33
|
+
this._history = [];
|
|
34
|
+
}
|
|
35
|
+
async post(prompt) {
|
|
36
|
+
await this._append("user", prompt);
|
|
37
|
+
let text = await asString(await this._post());
|
|
38
|
+
if (text.startsWith("```json") && text.endsWith("```"))
|
|
39
|
+
text = text.substring("```json".length, text.length - "```".length);
|
|
40
|
+
for (let i = 0; i < 3; ++i) {
|
|
41
|
+
try {
|
|
42
|
+
return JSON.parse(text);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
await this._append("user", String(e));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new Error("Failed to parse response: " + text);
|
|
48
|
+
}
|
|
49
|
+
async _append(user, content) {
|
|
50
|
+
this._history.push({ user, content });
|
|
51
|
+
}
|
|
52
|
+
async _connection() {
|
|
53
|
+
if (!this._connectionPromise) {
|
|
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
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return this._connectionPromise;
|
|
60
|
+
}
|
|
61
|
+
_dispatchEvent(method, params) {
|
|
62
|
+
if (method === "chatChunk") {
|
|
63
|
+
const { chatId, chunk } = params;
|
|
64
|
+
const chunkSink = this._chatSinks.get(chatId);
|
|
65
|
+
chunkSink(chunk);
|
|
66
|
+
if (!chunk)
|
|
67
|
+
this._chatSinks.delete(chatId);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async _post() {
|
|
71
|
+
const connection = await this._connection();
|
|
72
|
+
const result = await connection.send("chat", { history: this._history });
|
|
73
|
+
const { chatId } = result;
|
|
74
|
+
const { iterable, addChunk } = iterablePump();
|
|
75
|
+
this._chatSinks.set(chatId, addChunk);
|
|
76
|
+
return iterable;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async function asString(stream) {
|
|
80
|
+
let result = "";
|
|
81
|
+
for await (const chunk of stream)
|
|
82
|
+
result += chunk;
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
function iterablePump() {
|
|
86
|
+
let controller;
|
|
87
|
+
const stream = new ReadableStream({ start: (c) => controller = c });
|
|
88
|
+
const iterable = async function* () {
|
|
89
|
+
const reader = stream.getReader();
|
|
90
|
+
while (true) {
|
|
91
|
+
const { done, value } = await reader.read();
|
|
92
|
+
if (done)
|
|
93
|
+
break;
|
|
94
|
+
yield value;
|
|
95
|
+
}
|
|
96
|
+
}();
|
|
97
|
+
return {
|
|
98
|
+
iterable,
|
|
99
|
+
addChunk: (chunk) => {
|
|
100
|
+
if (chunk)
|
|
101
|
+
controller.enqueue(chunk);
|
|
102
|
+
else
|
|
103
|
+
controller.close();
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
class Connection {
|
|
108
|
+
constructor(transport, onEvent, onClose) {
|
|
109
|
+
this._lastId = 0;
|
|
110
|
+
this._closed = false;
|
|
111
|
+
this._pending = /* @__PURE__ */ new Map();
|
|
112
|
+
this._transport = transport;
|
|
113
|
+
this._onEvent = onEvent;
|
|
114
|
+
this._onClose = onClose;
|
|
115
|
+
this._transport.onmessage = this._dispatchMessage.bind(this);
|
|
116
|
+
this._transport.onclose = this._close.bind(this);
|
|
117
|
+
}
|
|
118
|
+
send(method, params) {
|
|
119
|
+
const id = this._lastId++;
|
|
120
|
+
const message = { id, method, params };
|
|
121
|
+
this._transport.send(message);
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
this._pending.set(id, { resolve, reject });
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
_dispatchMessage(message) {
|
|
127
|
+
if (message.id === void 0) {
|
|
128
|
+
this._onEvent(message.method, message.params);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const callback = this._pending.get(message.id);
|
|
132
|
+
this._pending.delete(message.id);
|
|
133
|
+
if (!callback)
|
|
134
|
+
return;
|
|
135
|
+
if (message.error) {
|
|
136
|
+
callback.reject(new Error(message.error.message));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
callback.resolve(message.result);
|
|
140
|
+
}
|
|
141
|
+
_close() {
|
|
142
|
+
this._closed = true;
|
|
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"));
|
|
147
|
+
this._onClose();
|
|
148
|
+
}
|
|
149
|
+
isClosed() {
|
|
150
|
+
return this._closed;
|
|
151
|
+
}
|
|
152
|
+
close() {
|
|
153
|
+
if (!this._closed)
|
|
154
|
+
this._transport.close();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
Chat,
|
|
160
|
+
asString
|
|
161
|
+
});
|
|
@@ -1,88 +1,76 @@
|
|
|
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 recorderSource =
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
|
|
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 && Object.prototype.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 {
|
|
38
|
-
constructor(codegenMode, context, params, delegate) {
|
|
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 {
|
|
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 = [];
|
|
52
|
-
this._codegenMode = void 0;
|
|
53
|
-
this._codegenMode = codegenMode;
|
|
54
56
|
this._context = context;
|
|
55
57
|
this._params = params;
|
|
56
58
|
this._delegate = delegate;
|
|
57
59
|
this._recorderSources = [];
|
|
58
60
|
const language = params.language || context.attribution.playwright.options.sdkLanguage;
|
|
59
61
|
this.setOutput(language, params.outputFile);
|
|
60
|
-
|
|
61
|
-
// Make a copy of options to modify them later.
|
|
62
62
|
const languageGeneratorOptions = {
|
|
63
63
|
browserName: context._browser.options.name,
|
|
64
|
-
launchOptions: {
|
|
65
|
-
|
|
66
|
-
...params.launchOptions,
|
|
67
|
-
tracesDir: undefined
|
|
68
|
-
},
|
|
69
|
-
contextOptions: {
|
|
70
|
-
...params.contextOptions
|
|
71
|
-
},
|
|
64
|
+
launchOptions: { headless: false, ...params.launchOptions, tracesDir: void 0 },
|
|
65
|
+
contextOptions: { ...params.contextOptions },
|
|
72
66
|
deviceName: params.device,
|
|
73
67
|
saveStorage: params.saveStorage
|
|
74
68
|
};
|
|
75
|
-
this._collection = new
|
|
76
|
-
this._collection.on(
|
|
69
|
+
this._collection = new import_recorderCollection.RecorderCollection(this._pageAliases);
|
|
70
|
+
this._collection.on("change", (actions) => {
|
|
77
71
|
this._recorderSources = [];
|
|
78
72
|
for (const languageGenerator of this._orderedLanguages) {
|
|
79
|
-
|
|
80
|
-
const {
|
|
81
|
-
header,
|
|
82
|
-
footer,
|
|
83
|
-
actionTexts,
|
|
84
|
-
text
|
|
85
|
-
} = (0, _language.generateCode)(actions, languageGenerator, languageGeneratorOptions);
|
|
73
|
+
const { header, footer, actionTexts, text } = (0, import_language.generateCode)(actions, languageGenerator, languageGeneratorOptions);
|
|
86
74
|
const source = {
|
|
87
75
|
isRecorded: true,
|
|
88
76
|
label: languageGenerator.name,
|
|
@@ -95,88 +83,93 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
95
83
|
language: languageGenerator.highlighter,
|
|
96
84
|
highlight: []
|
|
97
85
|
};
|
|
98
|
-
source.revealLine = text.split(
|
|
86
|
+
source.revealLine = text.split("\n").length - 1;
|
|
99
87
|
this._recorderSources.push(source);
|
|
100
|
-
if (languageGenerator === this._orderedLanguages[0])
|
|
88
|
+
if (languageGenerator === this._orderedLanguages[0])
|
|
89
|
+
this._throttledOutputFile?.setContent(source.text);
|
|
101
90
|
}
|
|
102
91
|
this.emit(ContextRecorder.Events.Change, {
|
|
103
92
|
sources: this._recorderSources,
|
|
104
93
|
actions
|
|
105
94
|
});
|
|
106
95
|
});
|
|
107
|
-
context.on(
|
|
108
|
-
|
|
109
|
-
(_this$_throttledOutpu2 = this._throttledOutputFile) === null || _this$_throttledOutpu2 === void 0 || _this$_throttledOutpu2.flush();
|
|
96
|
+
context.on(import_browserContext.BrowserContext.Events.BeforeClose, () => {
|
|
97
|
+
this._throttledOutputFile?.flush();
|
|
110
98
|
});
|
|
111
|
-
this._listeners.push(
|
|
112
|
-
|
|
113
|
-
(_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();
|
|
114
101
|
}));
|
|
115
|
-
this.setEnabled(
|
|
102
|
+
this.setEnabled(params.mode === "recording");
|
|
103
|
+
}
|
|
104
|
+
static {
|
|
105
|
+
this.Events = {
|
|
106
|
+
Change: "change"
|
|
107
|
+
};
|
|
116
108
|
}
|
|
117
109
|
setOutput(codegenId, outputFile) {
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
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
|
+
`);
|
|
122
118
|
languages.delete(primaryLanguage);
|
|
123
119
|
this._orderedLanguages = [primaryLanguage, ...languages];
|
|
124
|
-
this._throttledOutputFile = outputFile ? new
|
|
125
|
-
|
|
120
|
+
this._throttledOutputFile = outputFile ? new import_throttledFile.ThrottledFile(outputFile) : null;
|
|
121
|
+
this._collection?.restart();
|
|
126
122
|
}
|
|
127
123
|
languageName(id) {
|
|
128
124
|
for (const lang of this._orderedLanguages) {
|
|
129
|
-
if (!id || lang.id === id)
|
|
125
|
+
if (!id || lang.id === id)
|
|
126
|
+
return lang.highlighter;
|
|
130
127
|
}
|
|
131
|
-
return
|
|
128
|
+
return "javascript";
|
|
132
129
|
}
|
|
133
130
|
async install() {
|
|
134
|
-
this._context.on(
|
|
135
|
-
for (const page of this._context.pages())
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
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
|
+
);
|
|
144
145
|
await this._context.extendInjectedScript(recorderSource.source);
|
|
145
146
|
}
|
|
146
147
|
setEnabled(enabled) {
|
|
147
148
|
this._collection.setEnabled(enabled);
|
|
148
|
-
if (this._codegenMode === 'trace-events') {
|
|
149
|
-
if (enabled) this._context.tracing.startChunk({
|
|
150
|
-
name: 'trace',
|
|
151
|
-
title: 'trace'
|
|
152
|
-
}).catch(() => {});else this._context.tracing.stopChunk({
|
|
153
|
-
mode: 'discard'
|
|
154
|
-
}).catch(() => {});
|
|
155
|
-
}
|
|
156
149
|
}
|
|
157
150
|
dispose() {
|
|
158
|
-
|
|
151
|
+
import_utils.eventsHelper.removeEventListeners(this._listeners);
|
|
159
152
|
}
|
|
160
153
|
async _onPage(page) {
|
|
161
|
-
// First page is called page, others are called popup1, popup2, etc.
|
|
162
154
|
const frame = page.mainFrame();
|
|
163
|
-
page.on(
|
|
155
|
+
page.on("close", () => {
|
|
164
156
|
this._collection.addRecordedAction({
|
|
165
157
|
frame: this._describeMainFrame(page),
|
|
166
158
|
action: {
|
|
167
|
-
name:
|
|
159
|
+
name: "closePage",
|
|
168
160
|
signals: []
|
|
169
161
|
},
|
|
170
|
-
startTime: (0,
|
|
162
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
171
163
|
});
|
|
172
164
|
this._pageAliases.delete(page);
|
|
173
165
|
});
|
|
174
|
-
frame.on(
|
|
175
|
-
if (event.isPublic)
|
|
166
|
+
frame.on(import_frames.Frame.Events.InternalNavigation, (event) => {
|
|
167
|
+
if (event.isPublic)
|
|
168
|
+
this._onFrameNavigated(frame, page);
|
|
176
169
|
});
|
|
177
|
-
page.on(
|
|
178
|
-
const suffix = this._pageAliases.size ? String(++this._lastPopupOrdinal) :
|
|
179
|
-
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;
|
|
180
173
|
this._pageAliases.set(page, pageAlias);
|
|
181
174
|
if (page.opener()) {
|
|
182
175
|
this._onPopup(page.opener(), page);
|
|
@@ -184,20 +177,23 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
184
177
|
this._collection.addRecordedAction({
|
|
185
178
|
frame: this._describeMainFrame(page),
|
|
186
179
|
action: {
|
|
187
|
-
name:
|
|
180
|
+
name: "openPage",
|
|
188
181
|
url: page.mainFrame().url(),
|
|
189
182
|
signals: []
|
|
190
183
|
},
|
|
191
|
-
startTime: (0,
|
|
184
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
192
185
|
});
|
|
193
186
|
}
|
|
194
187
|
}
|
|
195
188
|
clearScript() {
|
|
196
189
|
this._collection.restart();
|
|
197
|
-
if (this._params.mode ===
|
|
198
|
-
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);
|
|
199
193
|
}
|
|
200
194
|
}
|
|
195
|
+
runTask(task) {
|
|
196
|
+
}
|
|
201
197
|
_describeMainFrame(page) {
|
|
202
198
|
return {
|
|
203
199
|
pageAlias: this._pageAliases.get(page),
|
|
@@ -211,18 +207,17 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
211
207
|
};
|
|
212
208
|
}
|
|
213
209
|
testIdAttributeName() {
|
|
214
|
-
return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() ||
|
|
210
|
+
return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() || "data-testid";
|
|
215
211
|
}
|
|
216
212
|
async _createActionInContext(frame, action) {
|
|
217
|
-
var _this$_delegate$rewri, _this$_delegate;
|
|
218
213
|
const frameDescription = await this._describeFrame(frame);
|
|
219
214
|
const actionInContext = {
|
|
220
215
|
frame: frameDescription,
|
|
221
216
|
action,
|
|
222
|
-
description:
|
|
223
|
-
startTime: (0,
|
|
217
|
+
description: void 0,
|
|
218
|
+
startTime: (0, import_utils.monotonicTime)()
|
|
224
219
|
};
|
|
225
|
-
await
|
|
220
|
+
await this._delegate.rewriteActionInContext?.(this._pageAliases, actionInContext);
|
|
226
221
|
return actionInContext;
|
|
227
222
|
}
|
|
228
223
|
async _performAction(frame, action) {
|
|
@@ -233,45 +228,30 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
233
228
|
}
|
|
234
229
|
_onFrameNavigated(frame, page) {
|
|
235
230
|
const pageAlias = this._pageAliases.get(page);
|
|
236
|
-
this._collection.signal(pageAlias, frame, {
|
|
237
|
-
name: 'navigation',
|
|
238
|
-
url: frame.url()
|
|
239
|
-
});
|
|
231
|
+
this._collection.signal(pageAlias, frame, { name: "navigation", url: frame.url() });
|
|
240
232
|
}
|
|
241
233
|
_onPopup(page, popup) {
|
|
242
234
|
const pageAlias = this._pageAliases.get(page);
|
|
243
235
|
const popupAlias = this._pageAliases.get(popup);
|
|
244
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
245
|
-
name: 'popup',
|
|
246
|
-
popupAlias
|
|
247
|
-
});
|
|
236
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "popup", popupAlias });
|
|
248
237
|
}
|
|
249
238
|
_onDownload(page) {
|
|
250
239
|
const pageAlias = this._pageAliases.get(page);
|
|
251
240
|
++this._lastDownloadOrdinal;
|
|
252
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
253
|
-
name: 'download',
|
|
254
|
-
downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : ''
|
|
255
|
-
});
|
|
241
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "download", downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : "" });
|
|
256
242
|
}
|
|
257
243
|
_onDialog(page) {
|
|
258
244
|
const pageAlias = this._pageAliases.get(page);
|
|
259
245
|
++this._lastDialogOrdinal;
|
|
260
|
-
this._collection.signal(pageAlias, page.mainFrame(), {
|
|
261
|
-
name: 'dialog',
|
|
262
|
-
dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : ''
|
|
263
|
-
});
|
|
246
|
+
this._collection.signal(pageAlias, page.mainFrame(), { name: "dialog", dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : "" });
|
|
264
247
|
}
|
|
265
248
|
}
|
|
266
|
-
exports.ContextRecorder = ContextRecorder;
|
|
267
|
-
ContextRecorder.Events = {
|
|
268
|
-
Change: 'change'
|
|
269
|
-
};
|
|
270
249
|
async function generateFrameSelector(frame) {
|
|
271
250
|
const selectorPromises = [];
|
|
272
251
|
while (frame) {
|
|
273
252
|
const parent = frame.parentFrame();
|
|
274
|
-
if (!parent)
|
|
253
|
+
if (!parent)
|
|
254
|
+
break;
|
|
275
255
|
selectorPromises.push(generateFrameSelectorInParent(parent, frame));
|
|
276
256
|
frame = parent;
|
|
277
257
|
}
|
|
@@ -279,21 +259,28 @@ async function generateFrameSelector(frame) {
|
|
|
279
259
|
return result.reverse();
|
|
280
260
|
}
|
|
281
261
|
async function generateFrameSelectorInParent(parent, frame) {
|
|
282
|
-
const result = await (0,
|
|
262
|
+
const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
|
|
283
263
|
try {
|
|
284
264
|
const frameElement = await frame.frameElement();
|
|
285
|
-
if (!frameElement || !parent)
|
|
265
|
+
if (!frameElement || !parent)
|
|
266
|
+
return;
|
|
286
267
|
const utility = await parent._utilityContext();
|
|
287
268
|
const injected = await utility.injectedScript();
|
|
288
|
-
const selector = await injected.evaluate((
|
|
289
|
-
return
|
|
269
|
+
const selector = await injected.evaluate((injected2, element) => {
|
|
270
|
+
return injected2.generateSelectorSimple(element);
|
|
290
271
|
}, frameElement);
|
|
291
272
|
return selector;
|
|
292
273
|
} catch (e) {
|
|
293
|
-
return e.toString();
|
|
294
274
|
}
|
|
295
|
-
}, (0,
|
|
296
|
-
if (!result.timedOut && result.result)
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
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
|
+
});
|