@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.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/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -35
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +89 -112
- package/lib/client/clientHelper.js +48 -39
- 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 +188 -214
- 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 +80 -77
- package/lib/client/elementHandle.js +120 -159
- 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 +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- 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 +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- 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 +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- 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 +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- 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 +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- 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 +36 -32
- package/lib/server/utils/debugLogger.js +77 -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 +141 -126
- 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 +152 -96
- 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 +68 -75
- 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 +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- 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/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- 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/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- 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/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- 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 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
|
@@ -1,138 +1,179 @@
|
|
|
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 validatorPrimitives_exports = {};
|
|
20
|
+
__export(validatorPrimitives_exports, {
|
|
21
|
+
ValidationError: () => ValidationError,
|
|
22
|
+
createMetadataValidator: () => createMetadataValidator,
|
|
23
|
+
findValidator: () => findValidator,
|
|
24
|
+
maybeFindValidator: () => maybeFindValidator,
|
|
25
|
+
scheme: () => scheme,
|
|
26
|
+
tAny: () => tAny,
|
|
27
|
+
tArray: () => tArray,
|
|
28
|
+
tBinary: () => tBinary,
|
|
29
|
+
tBoolean: () => tBoolean,
|
|
30
|
+
tChannel: () => tChannel,
|
|
31
|
+
tEnum: () => tEnum,
|
|
32
|
+
tNumber: () => tNumber,
|
|
33
|
+
tObject: () => tObject,
|
|
34
|
+
tOptional: () => tOptional,
|
|
35
|
+
tString: () => tString,
|
|
36
|
+
tType: () => tType,
|
|
37
|
+
tUndefined: () => tUndefined
|
|
5
38
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
exports.tUndefined = exports.tType = exports.tString = exports.tOptional = exports.tObject = exports.tNumber = exports.tEnum = exports.tChannel = exports.tBoolean = exports.tBinary = exports.tArray = exports.tAny = exports.scheme = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* Copyright (c) Microsoft Corporation.
|
|
13
|
-
*
|
|
14
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
-
* you may not use this file except in compliance with the License.
|
|
16
|
-
* You may obtain a copy of the License at
|
|
17
|
-
*
|
|
18
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
19
|
-
*
|
|
20
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
21
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
22
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
23
|
-
* See the License for the specific language governing permissions and
|
|
24
|
-
* limitations under the License.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
class ValidationError extends Error {}
|
|
28
|
-
exports.ValidationError = ValidationError;
|
|
29
|
-
const scheme = exports.scheme = {};
|
|
39
|
+
module.exports = __toCommonJS(validatorPrimitives_exports);
|
|
40
|
+
class ValidationError extends Error {
|
|
41
|
+
}
|
|
42
|
+
const scheme = {};
|
|
30
43
|
function findValidator(type, method, kind) {
|
|
31
44
|
const validator = maybeFindValidator(type, method, kind);
|
|
32
|
-
if (!validator)
|
|
45
|
+
if (!validator)
|
|
46
|
+
throw new ValidationError(`Unknown scheme for ${kind}: ${type}.${method}`);
|
|
33
47
|
return validator;
|
|
34
48
|
}
|
|
35
49
|
function maybeFindValidator(type, method, kind) {
|
|
36
|
-
const schemeName = type + (kind ===
|
|
50
|
+
const schemeName = type + (kind === "Initializer" ? "" : method[0].toUpperCase() + method.substring(1)) + kind;
|
|
37
51
|
return scheme[schemeName];
|
|
38
52
|
}
|
|
39
53
|
function createMetadataValidator() {
|
|
40
|
-
return tOptional(scheme[
|
|
54
|
+
return tOptional(scheme["Metadata"]);
|
|
41
55
|
}
|
|
42
56
|
const tNumber = (arg, path, context) => {
|
|
43
|
-
if (arg instanceof Number)
|
|
44
|
-
|
|
57
|
+
if (arg instanceof Number)
|
|
58
|
+
return arg.valueOf();
|
|
59
|
+
if (typeof arg === "number")
|
|
60
|
+
return arg;
|
|
45
61
|
throw new ValidationError(`${path}: expected number, got ${typeof arg}`);
|
|
46
62
|
};
|
|
47
|
-
exports.tNumber = tNumber;
|
|
48
63
|
const tBoolean = (arg, path, context) => {
|
|
49
|
-
if (arg instanceof Boolean)
|
|
50
|
-
|
|
64
|
+
if (arg instanceof Boolean)
|
|
65
|
+
return arg.valueOf();
|
|
66
|
+
if (typeof arg === "boolean")
|
|
67
|
+
return arg;
|
|
51
68
|
throw new ValidationError(`${path}: expected boolean, got ${typeof arg}`);
|
|
52
69
|
};
|
|
53
|
-
exports.tBoolean = tBoolean;
|
|
54
70
|
const tString = (arg, path, context) => {
|
|
55
|
-
if (arg instanceof String)
|
|
56
|
-
|
|
71
|
+
if (arg instanceof String)
|
|
72
|
+
return arg.valueOf();
|
|
73
|
+
if (typeof arg === "string")
|
|
74
|
+
return arg;
|
|
57
75
|
throw new ValidationError(`${path}: expected string, got ${typeof arg}`);
|
|
58
76
|
};
|
|
59
|
-
exports.tString = tString;
|
|
60
77
|
const tBinary = (arg, path, context) => {
|
|
61
|
-
if (context.binary ===
|
|
62
|
-
if (arg instanceof String)
|
|
63
|
-
|
|
78
|
+
if (context.binary === "fromBase64") {
|
|
79
|
+
if (arg instanceof String)
|
|
80
|
+
return Buffer.from(arg.valueOf(), "base64");
|
|
81
|
+
if (typeof arg === "string")
|
|
82
|
+
return Buffer.from(arg, "base64");
|
|
64
83
|
throw new ValidationError(`${path}: expected base64-encoded buffer, got ${typeof arg}`);
|
|
65
84
|
}
|
|
66
|
-
if (context.binary ===
|
|
67
|
-
if (!(arg instanceof Buffer))
|
|
68
|
-
|
|
85
|
+
if (context.binary === "toBase64") {
|
|
86
|
+
if (!(arg instanceof Buffer))
|
|
87
|
+
throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);
|
|
88
|
+
return arg.toString("base64");
|
|
69
89
|
}
|
|
70
|
-
if (context.binary ===
|
|
71
|
-
if (!(arg instanceof Buffer))
|
|
90
|
+
if (context.binary === "buffer") {
|
|
91
|
+
if (!(arg instanceof Buffer))
|
|
92
|
+
throw new ValidationError(`${path}: expected Buffer, got ${typeof arg}`);
|
|
72
93
|
return arg;
|
|
73
94
|
}
|
|
74
95
|
throw new ValidationError(`Unsupported binary behavior "${context.binary}"`);
|
|
75
96
|
};
|
|
76
|
-
exports.tBinary = tBinary;
|
|
77
97
|
const tUndefined = (arg, path, context) => {
|
|
78
|
-
if (Object.is(arg,
|
|
98
|
+
if (Object.is(arg, void 0))
|
|
99
|
+
return arg;
|
|
79
100
|
throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`);
|
|
80
101
|
};
|
|
81
|
-
exports.tUndefined = tUndefined;
|
|
82
102
|
const tAny = (arg, path, context) => {
|
|
83
103
|
return arg;
|
|
84
104
|
};
|
|
85
|
-
|
|
86
|
-
const tOptional = v => {
|
|
105
|
+
const tOptional = (v) => {
|
|
87
106
|
return (arg, path, context) => {
|
|
88
|
-
if (Object.is(arg,
|
|
107
|
+
if (Object.is(arg, void 0))
|
|
108
|
+
return arg;
|
|
89
109
|
return v(arg, path, context);
|
|
90
110
|
};
|
|
91
111
|
};
|
|
92
|
-
|
|
93
|
-
const tArray = v => {
|
|
112
|
+
const tArray = (v) => {
|
|
94
113
|
return (arg, path, context) => {
|
|
95
|
-
if (!Array.isArray(arg))
|
|
96
|
-
|
|
114
|
+
if (!Array.isArray(arg))
|
|
115
|
+
throw new ValidationError(`${path}: expected array, got ${typeof arg}`);
|
|
116
|
+
return arg.map((x, index) => v(x, path + "[" + index + "]", context));
|
|
97
117
|
};
|
|
98
118
|
};
|
|
99
|
-
|
|
100
|
-
const tObject = s => {
|
|
119
|
+
const tObject = (s) => {
|
|
101
120
|
return (arg, path, context) => {
|
|
102
|
-
if (Object.is(arg, null))
|
|
103
|
-
|
|
121
|
+
if (Object.is(arg, null))
|
|
122
|
+
throw new ValidationError(`${path}: expected object, got null`);
|
|
123
|
+
if (typeof arg !== "object")
|
|
124
|
+
throw new ValidationError(`${path}: expected object, got ${typeof arg}`);
|
|
104
125
|
const result = {};
|
|
105
126
|
for (const [key, v] of Object.entries(s)) {
|
|
106
|
-
const value = v(arg[key], path ? path +
|
|
107
|
-
if (!Object.is(value,
|
|
127
|
+
const value = v(arg[key], path ? path + "." + key : key, context);
|
|
128
|
+
if (!Object.is(value, void 0))
|
|
129
|
+
result[key] = value;
|
|
108
130
|
}
|
|
109
131
|
if (context.isUnderTest()) {
|
|
110
132
|
for (const [key, value] of Object.entries(arg)) {
|
|
111
|
-
if (key.startsWith(
|
|
133
|
+
if (key.startsWith("__testHook"))
|
|
134
|
+
result[key] = value;
|
|
112
135
|
}
|
|
113
136
|
}
|
|
114
137
|
return result;
|
|
115
138
|
};
|
|
116
139
|
};
|
|
117
|
-
|
|
118
|
-
const tEnum = e => {
|
|
140
|
+
const tEnum = (e) => {
|
|
119
141
|
return (arg, path, context) => {
|
|
120
|
-
if (!e.includes(arg))
|
|
142
|
+
if (!e.includes(arg))
|
|
143
|
+
throw new ValidationError(`${path}: expected one of (${e.join("|")})`);
|
|
121
144
|
return arg;
|
|
122
145
|
};
|
|
123
146
|
};
|
|
124
|
-
|
|
125
|
-
const tChannel = names => {
|
|
147
|
+
const tChannel = (names) => {
|
|
126
148
|
return (arg, path, context) => {
|
|
127
149
|
return context.tChannelImpl(names, arg, path, context);
|
|
128
150
|
};
|
|
129
151
|
};
|
|
130
|
-
|
|
131
|
-
const tType = name => {
|
|
152
|
+
const tType = (name) => {
|
|
132
153
|
return (arg, path, context) => {
|
|
133
154
|
const v = scheme[name];
|
|
134
|
-
if (!v)
|
|
155
|
+
if (!v)
|
|
156
|
+
throw new ValidationError(path + ': unknown type "' + name + '"');
|
|
135
157
|
return v(arg, path, context);
|
|
136
158
|
};
|
|
137
159
|
};
|
|
138
|
-
|
|
160
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
161
|
+
0 && (module.exports = {
|
|
162
|
+
ValidationError,
|
|
163
|
+
createMetadataValidator,
|
|
164
|
+
findValidator,
|
|
165
|
+
maybeFindValidator,
|
|
166
|
+
scheme,
|
|
167
|
+
tAny,
|
|
168
|
+
tArray,
|
|
169
|
+
tBinary,
|
|
170
|
+
tBoolean,
|
|
171
|
+
tChannel,
|
|
172
|
+
tEnum,
|
|
173
|
+
tNumber,
|
|
174
|
+
tObject,
|
|
175
|
+
tOptional,
|
|
176
|
+
tString,
|
|
177
|
+
tType,
|
|
178
|
+
tUndefined
|
|
179
|
+
});
|
|
@@ -1,230 +1,107 @@
|
|
|
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 playwrightConnection_exports = {};
|
|
20
|
+
__export(playwrightConnection_exports, {
|
|
21
|
+
PlaywrightConnection: () => PlaywrightConnection
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var _debug = require("../server/utils/debug");
|
|
15
|
-
var _profiler = require("../server/utils/profiler");
|
|
16
|
-
var _utils = require("../utils");
|
|
17
|
-
var _debugLogger = require("../server/utils/debugLogger");
|
|
18
|
-
/**
|
|
19
|
-
* Copyright (c) Microsoft Corporation.
|
|
20
|
-
*
|
|
21
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
22
|
-
* you may not use this file except in compliance with the License.
|
|
23
|
-
* You may obtain a copy of the License at
|
|
24
|
-
*
|
|
25
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
26
|
-
*
|
|
27
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
28
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
29
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
30
|
-
* See the License for the specific language governing permissions and
|
|
31
|
-
* limitations under the License.
|
|
32
|
-
*/
|
|
33
|
-
|
|
23
|
+
module.exports = __toCommonJS(playwrightConnection_exports);
|
|
24
|
+
var import_server = require("../server");
|
|
25
|
+
var import_android = require("../server/android/android");
|
|
26
|
+
var import_browser = require("../server/browser");
|
|
27
|
+
var import_debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
|
|
28
|
+
var import_profiler = require("../server/utils/profiler");
|
|
29
|
+
var import_utils = require("../utils");
|
|
30
|
+
var import_debugLogger = require("../server/utils/debugLogger");
|
|
34
31
|
class PlaywrightConnection {
|
|
35
|
-
constructor(
|
|
36
|
-
this._ws = void 0;
|
|
37
|
-
this._onClose = void 0;
|
|
38
|
-
this._dispatcherConnection = void 0;
|
|
32
|
+
constructor(semaphore, ws, controller, playwright, initialize, id) {
|
|
39
33
|
this._cleanups = [];
|
|
40
|
-
this._id = void 0;
|
|
41
34
|
this._disconnected = false;
|
|
42
|
-
this._preLaunched = void 0;
|
|
43
|
-
this._options = void 0;
|
|
44
|
-
this._root = void 0;
|
|
45
|
-
this._profileName = void 0;
|
|
46
35
|
this._ws = ws;
|
|
47
|
-
this.
|
|
48
|
-
this._options = options;
|
|
49
|
-
options.launchOptions = filterLaunchOptions(options.launchOptions, options.allowFSPaths);
|
|
50
|
-
if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.playwright);
|
|
51
|
-
if (clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.browser || preLaunched.androidDevice);
|
|
52
|
-
this._onClose = onClose;
|
|
36
|
+
this._semaphore = semaphore;
|
|
53
37
|
this._id = id;
|
|
54
|
-
this._profileName =
|
|
55
|
-
|
|
56
|
-
this._dispatcherConnection
|
|
38
|
+
this._profileName = (/* @__PURE__ */ new Date()).toISOString();
|
|
39
|
+
const lock = this._semaphore.acquire();
|
|
40
|
+
this._dispatcherConnection = new import_server.DispatcherConnection();
|
|
41
|
+
this._dispatcherConnection.onmessage = async (message) => {
|
|
57
42
|
await lock;
|
|
58
43
|
if (ws.readyState !== ws.CLOSING) {
|
|
59
44
|
const messageString = JSON.stringify(message);
|
|
60
|
-
if (
|
|
61
|
-
|
|
45
|
+
if (import_debugLogger.debugLogger.isEnabled("server:channel"))
|
|
46
|
+
import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} SEND \u25BA ${messageString}`);
|
|
47
|
+
if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
|
|
48
|
+
this.logServerMetadata(message, messageString, "SEND");
|
|
62
49
|
ws.send(messageString);
|
|
63
50
|
}
|
|
64
51
|
};
|
|
65
|
-
ws.on(
|
|
52
|
+
ws.on("message", async (message) => {
|
|
66
53
|
await lock;
|
|
67
54
|
const messageString = Buffer.from(message).toString();
|
|
68
55
|
const jsonMessage = JSON.parse(messageString);
|
|
69
|
-
if (
|
|
70
|
-
|
|
56
|
+
if (import_debugLogger.debugLogger.isEnabled("server:channel"))
|
|
57
|
+
import_debugLogger.debugLogger.log("server:channel", `[${this._id}] ${(0, import_utils.monotonicTime)() * 1e3} \u25C0 RECV ${messageString}`);
|
|
58
|
+
if (import_debugLogger.debugLogger.isEnabled("server:metadata"))
|
|
59
|
+
this.logServerMetadata(jsonMessage, messageString, "RECV");
|
|
71
60
|
this._dispatcherConnection.dispatch(jsonMessage);
|
|
72
61
|
});
|
|
73
|
-
ws.on(
|
|
74
|
-
ws.on(
|
|
75
|
-
if (
|
|
76
|
-
this.
|
|
62
|
+
ws.on("close", () => this._onDisconnect());
|
|
63
|
+
ws.on("error", (error) => this._onDisconnect(error));
|
|
64
|
+
if (controller) {
|
|
65
|
+
import_debugLogger.debugLogger.log("server", `[${this._id}] engaged reuse controller mode`);
|
|
66
|
+
this._root = new import_debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
|
|
77
67
|
return;
|
|
78
68
|
}
|
|
79
|
-
this._root = new
|
|
80
|
-
await (0,
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
async _initLaunchBrowserMode(scope, options) {
|
|
88
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] engaged launch mode for "${this._options.browserName}"`);
|
|
89
|
-
const playwright = (0, _server.createPlaywright)({
|
|
90
|
-
sdkLanguage: options.sdkLanguage,
|
|
91
|
-
isServer: true
|
|
92
|
-
});
|
|
93
|
-
const ownedSocksProxy = await this._createOwnedSocksProxy(playwright);
|
|
94
|
-
let browserName = this._options.browserName;
|
|
95
|
-
if ('bidi' === browserName) {
|
|
96
|
-
var _this$_options$launch;
|
|
97
|
-
if ((_this$_options$launch = this._options.launchOptions) !== null && _this$_options$launch !== void 0 && (_this$_options$launch = _this$_options$launch.channel) !== null && _this$_options$launch !== void 0 && _this$_options$launch.toLocaleLowerCase().includes('firefox')) browserName = 'bidiFirefox';else browserName = 'bidiChromium';
|
|
98
|
-
}
|
|
99
|
-
const browser = await playwright[browserName].launch((0, _instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
|
|
100
|
-
this._cleanups.push(async () => {
|
|
101
|
-
for (const browser of playwright.allBrowsers()) await browser.close({
|
|
102
|
-
reason: 'Connection terminated'
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
browser.on(_browser.Browser.Events.Disconnected, () => {
|
|
106
|
-
// Underlying browser did close for some reason - force disconnect the client.
|
|
107
|
-
this.close({
|
|
108
|
-
code: 1001,
|
|
109
|
-
reason: 'Browser closed'
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
return new _server.PlaywrightDispatcher(scope, playwright, ownedSocksProxy, browser);
|
|
113
|
-
}
|
|
114
|
-
async _initPreLaunchedBrowserMode(scope) {
|
|
115
|
-
var _this$_preLaunched$so;
|
|
116
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] engaged pre-launched (browser) mode`);
|
|
117
|
-
const playwright = this._preLaunched.playwright;
|
|
118
|
-
|
|
119
|
-
// Note: connected client owns the socks proxy and configures the pattern.
|
|
120
|
-
(_this$_preLaunched$so = this._preLaunched.socksProxy) === null || _this$_preLaunched$so === void 0 || _this$_preLaunched$so.setPattern(this._options.socksProxyPattern);
|
|
121
|
-
const browser = this._preLaunched.browser;
|
|
122
|
-
browser.on(_browser.Browser.Events.Disconnected, () => {
|
|
123
|
-
// Underlying browser did close for some reason - force disconnect the client.
|
|
124
|
-
this.close({
|
|
125
|
-
code: 1001,
|
|
126
|
-
reason: 'Browser closed'
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, this._preLaunched.socksProxy, browser);
|
|
130
|
-
// In pre-launched mode, keep only the pre-launched browser.
|
|
131
|
-
for (const b of playwright.allBrowsers()) {
|
|
132
|
-
if (b !== browser) await b.close({
|
|
133
|
-
reason: 'Connection terminated'
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
this._cleanups.push(() => playwrightDispatcher.cleanup());
|
|
137
|
-
return playwrightDispatcher;
|
|
138
|
-
}
|
|
139
|
-
async _initPreLaunchedAndroidMode(scope) {
|
|
140
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] engaged pre-launched (Android) mode`);
|
|
141
|
-
const playwright = this._preLaunched.playwright;
|
|
142
|
-
const androidDevice = this._preLaunched.androidDevice;
|
|
143
|
-
androidDevice.on(_android.AndroidDevice.Events.Close, () => {
|
|
144
|
-
// Underlying browser did close for some reason - force disconnect the client.
|
|
145
|
-
this.close({
|
|
146
|
-
code: 1001,
|
|
147
|
-
reason: 'Android device disconnected'
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, undefined, undefined, androidDevice);
|
|
151
|
-
this._cleanups.push(() => playwrightDispatcher.cleanup());
|
|
152
|
-
return playwrightDispatcher;
|
|
153
|
-
}
|
|
154
|
-
_initDebugControllerMode() {
|
|
155
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] engaged reuse controller mode`);
|
|
156
|
-
const playwright = this._preLaunched.playwright;
|
|
157
|
-
// Always create new instance based on the reused Playwright instance.
|
|
158
|
-
return new _debugControllerDispatcher.DebugControllerDispatcher(this._dispatcherConnection, playwright.debugController);
|
|
159
|
-
}
|
|
160
|
-
async _initReuseBrowsersMode(scope) {
|
|
161
|
-
// Note: reuse browser mode does not support socks proxy, because
|
|
162
|
-
// clients come and go, while the browser stays the same.
|
|
163
|
-
|
|
164
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] engaged reuse browsers mode for ${this._options.browserName}`);
|
|
165
|
-
const playwright = this._preLaunched.playwright;
|
|
166
|
-
const requestedOptions = launchOptionsHash(this._options.launchOptions);
|
|
167
|
-
let browser = playwright.allBrowsers().find(b => {
|
|
168
|
-
if (b.options.name !== this._options.browserName) return false;
|
|
169
|
-
const existingOptions = launchOptionsHash(b.options.originalLaunchOptions);
|
|
170
|
-
return existingOptions === requestedOptions;
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
// Close remaining browsers of this type+channel. Keep different browser types for the speed.
|
|
174
|
-
for (const b of playwright.allBrowsers()) {
|
|
175
|
-
if (b === browser) continue;
|
|
176
|
-
if (b.options.name === this._options.browserName && b.options.channel === this._options.launchOptions.channel) await b.close({
|
|
177
|
-
reason: 'Connection terminated'
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
if (!browser) {
|
|
181
|
-
browser = await playwright[this._options.browserName || 'chromium'].launch((0, _instrumentation.serverSideCallMetadata)(), {
|
|
182
|
-
...this._options.launchOptions,
|
|
183
|
-
headless: !!process.env.PW_DEBUG_CONTROLLER_HEADLESS
|
|
184
|
-
});
|
|
185
|
-
browser.on(_browser.Browser.Events.Disconnected, () => {
|
|
186
|
-
// Underlying browser did close for some reason - force disconnect the client.
|
|
187
|
-
this.close({
|
|
188
|
-
code: 1001,
|
|
189
|
-
reason: 'Browser closed'
|
|
69
|
+
this._root = new import_server.RootDispatcher(this._dispatcherConnection, async (scope, params) => {
|
|
70
|
+
await (0, import_profiler.startProfiling)();
|
|
71
|
+
const options = await initialize();
|
|
72
|
+
if (options.preLaunchedBrowser) {
|
|
73
|
+
const browser = options.preLaunchedBrowser;
|
|
74
|
+
browser.options.sdkLanguage = params.sdkLanguage;
|
|
75
|
+
browser.on(import_browser.Browser.Events.Disconnected, () => {
|
|
76
|
+
this.close({ code: 1001, reason: "Browser closed" });
|
|
190
77
|
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
for (const browser of playwright.allBrowsers()) {
|
|
197
|
-
for (const context of browser.contexts()) {
|
|
198
|
-
if (!context.pages().length) await context.close({
|
|
199
|
-
reason: 'Connection terminated'
|
|
200
|
-
});else await context.stopPendingOperations('Connection closed');
|
|
201
|
-
}
|
|
202
|
-
if (!browser.contexts()) await browser.close({
|
|
203
|
-
reason: 'Connection terminated'
|
|
78
|
+
}
|
|
79
|
+
if (options.preLaunchedAndroidDevice) {
|
|
80
|
+
const androidDevice = options.preLaunchedAndroidDevice;
|
|
81
|
+
androidDevice.on(import_android.AndroidDevice.Events.Close, () => {
|
|
82
|
+
this.close({ code: 1001, reason: "Android device disconnected" });
|
|
204
83
|
});
|
|
205
84
|
}
|
|
85
|
+
if (options.dispose)
|
|
86
|
+
this._cleanups.push(options.dispose);
|
|
87
|
+
const dispatcher = new import_server.PlaywrightDispatcher(scope, playwright, options);
|
|
88
|
+
this._cleanups.push(() => dispatcher.cleanup());
|
|
89
|
+
return dispatcher;
|
|
206
90
|
});
|
|
207
|
-
const playwrightDispatcher = new _server.PlaywrightDispatcher(scope, playwright, undefined, browser);
|
|
208
|
-
return playwrightDispatcher;
|
|
209
|
-
}
|
|
210
|
-
async _createOwnedSocksProxy(playwright) {
|
|
211
|
-
if (!this._options.socksProxyPattern) return;
|
|
212
|
-
const socksProxy = new _socksProxy.SocksProxy();
|
|
213
|
-
socksProxy.setPattern(this._options.socksProxyPattern);
|
|
214
|
-
playwright.options.socksProxyPort = await socksProxy.listen(0);
|
|
215
|
-
_debugLogger.debugLogger.log('server', `[${this._id}] started socks proxy on port ${playwright.options.socksProxyPort}`);
|
|
216
|
-
this._cleanups.push(() => socksProxy.close());
|
|
217
|
-
return socksProxy;
|
|
218
91
|
}
|
|
219
92
|
async _onDisconnect(error) {
|
|
220
93
|
this._disconnected = true;
|
|
221
|
-
|
|
94
|
+
import_debugLogger.debugLogger.log("server", `[${this._id}] disconnected. error: ${error}`);
|
|
95
|
+
await this._root.stopPendingOperations(new Error("Disconnected")).catch(() => {
|
|
96
|
+
});
|
|
222
97
|
this._root._dispose();
|
|
223
|
-
|
|
224
|
-
for (const cleanup of this._cleanups)
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
98
|
+
import_debugLogger.debugLogger.log("server", `[${this._id}] starting cleanup`);
|
|
99
|
+
for (const cleanup of this._cleanups)
|
|
100
|
+
await cleanup().catch(() => {
|
|
101
|
+
});
|
|
102
|
+
await (0, import_profiler.stopProfiling)(this._profileName);
|
|
103
|
+
this._semaphore.release();
|
|
104
|
+
import_debugLogger.debugLogger.log("server", `[${this._id}] finished cleanup`);
|
|
228
105
|
}
|
|
229
106
|
logServerMetadata(message, messageString, direction) {
|
|
230
107
|
const serverLogMetadata = {
|
|
@@ -232,52 +109,21 @@ class PlaywrightConnection {
|
|
|
232
109
|
id: message.id,
|
|
233
110
|
guid: message.guid,
|
|
234
111
|
method: message.method,
|
|
235
|
-
payloadSizeInBytes: Buffer.byteLength(messageString,
|
|
112
|
+
payloadSizeInBytes: Buffer.byteLength(messageString, "utf-8")
|
|
236
113
|
};
|
|
237
|
-
|
|
114
|
+
import_debugLogger.debugLogger.log("server:metadata", (direction === "SEND" ? "SEND \u25BA " : "\u25C0 RECV ") + JSON.stringify(serverLogMetadata));
|
|
238
115
|
}
|
|
239
116
|
async close(reason) {
|
|
240
|
-
if (this._disconnected)
|
|
241
|
-
|
|
117
|
+
if (this._disconnected)
|
|
118
|
+
return;
|
|
119
|
+
import_debugLogger.debugLogger.log("server", `[${this._id}] force closing connection: ${reason?.reason || ""} (${reason?.code || 0})`);
|
|
242
120
|
try {
|
|
243
|
-
this._ws.close(reason
|
|
244
|
-
} catch (e) {
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
exports.PlaywrightConnection = PlaywrightConnection;
|
|
248
|
-
function launchOptionsHash(options) {
|
|
249
|
-
const copy = {
|
|
250
|
-
...options
|
|
251
|
-
};
|
|
252
|
-
for (const k of Object.keys(copy)) {
|
|
253
|
-
const key = k;
|
|
254
|
-
if (copy[key] === defaultLaunchOptions[key]) delete copy[key];
|
|
121
|
+
this._ws.close(reason?.code, reason?.reason);
|
|
122
|
+
} catch (e) {
|
|
123
|
+
}
|
|
255
124
|
}
|
|
256
|
-
for (const key of optionsThatAllowBrowserReuse) delete copy[key];
|
|
257
|
-
return JSON.stringify(copy);
|
|
258
|
-
}
|
|
259
|
-
function filterLaunchOptions(options, allowFSPaths) {
|
|
260
|
-
return {
|
|
261
|
-
channel: options.channel,
|
|
262
|
-
args: options.args,
|
|
263
|
-
ignoreAllDefaultArgs: options.ignoreAllDefaultArgs,
|
|
264
|
-
ignoreDefaultArgs: options.ignoreDefaultArgs,
|
|
265
|
-
timeout: options.timeout,
|
|
266
|
-
headless: options.headless,
|
|
267
|
-
proxy: options.proxy,
|
|
268
|
-
chromiumSandbox: options.chromiumSandbox,
|
|
269
|
-
firefoxUserPrefs: options.firefoxUserPrefs,
|
|
270
|
-
slowMo: options.slowMo,
|
|
271
|
-
executablePath: (0, _debug.isUnderTest)() || allowFSPaths ? options.executablePath : undefined,
|
|
272
|
-
downloadsPath: allowFSPaths ? options.downloadsPath : undefined
|
|
273
|
-
};
|
|
274
125
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
handleSIGHUP: false,
|
|
280
|
-
headless: true,
|
|
281
|
-
devtools: false
|
|
282
|
-
};
|
|
283
|
-
const optionsThatAllowBrowserReuse = ['headless', 'tracesDir'];
|
|
126
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
127
|
+
0 && (module.exports = {
|
|
128
|
+
PlaywrightConnection
|
|
129
|
+
});
|