@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.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 +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 +90 -113
- 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,753 +1,779 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 });
|
|
16
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 registry_exports = {};
|
|
30
|
+
__export(registry_exports, {
|
|
31
|
+
Registry: () => Registry,
|
|
32
|
+
browserDirectoryToMarkerFilePath: () => browserDirectoryToMarkerFilePath,
|
|
33
|
+
buildPlaywrightCLICommand: () => buildPlaywrightCLICommand,
|
|
34
|
+
findChromiumChannelBestEffort: () => findChromiumChannelBestEffort,
|
|
35
|
+
installBrowsersForNpmInstall: () => installBrowsersForNpmInstall,
|
|
36
|
+
registry: () => registry,
|
|
37
|
+
registryDirectory: () => registryDirectory,
|
|
38
|
+
writeDockerVersion: () => import_dependencies3.writeDockerVersion
|
|
17
39
|
});
|
|
18
|
-
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*
|
|
46
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
47
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
48
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
49
|
-
* See the License for the specific language governing permissions and
|
|
50
|
-
* limitations under the License.
|
|
51
|
-
*/
|
|
52
|
-
|
|
53
|
-
const PACKAGE_PATH = _path.default.join(__dirname, '..', '..', '..');
|
|
54
|
-
const BIN_PATH = _path.default.join(__dirname, '..', '..', '..', 'bin');
|
|
55
|
-
const PLAYWRIGHT_CDN_MIRRORS = ['https://cdn.playwright.dev/dbazure/download/playwright',
|
|
56
|
-
// ESRP CDN
|
|
57
|
-
'https://playwright.download.prss.microsoft.com/dbazure/download/playwright',
|
|
58
|
-
// Directly hit ESRP CDN
|
|
59
|
-
'https://cdn.playwright.dev' // Hit the Storage Bucket directly
|
|
40
|
+
module.exports = __toCommonJS(registry_exports);
|
|
41
|
+
var import_fs = __toESM(require("fs"));
|
|
42
|
+
var import_os = __toESM(require("os"));
|
|
43
|
+
var import_path = __toESM(require("path"));
|
|
44
|
+
var util = __toESM(require("util"));
|
|
45
|
+
var import_browserFetcher = require("./browserFetcher");
|
|
46
|
+
var import_dependencies = require("./dependencies");
|
|
47
|
+
var import_dependencies2 = require("./dependencies");
|
|
48
|
+
var import_utils = require("../../utils");
|
|
49
|
+
var import_ascii = require("../utils/ascii");
|
|
50
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
51
|
+
var import_hostPlatform = require("../utils/hostPlatform");
|
|
52
|
+
var import_network = require("../utils/network");
|
|
53
|
+
var import_spawnAsync = require("../utils/spawnAsync");
|
|
54
|
+
var import_userAgent = require("../utils/userAgent");
|
|
55
|
+
var import_utilsBundle = require("../../utilsBundle");
|
|
56
|
+
var import_fileUtils = require("../utils/fileUtils");
|
|
57
|
+
var import_dependencies3 = require("./dependencies");
|
|
58
|
+
const PACKAGE_PATH = import_path.default.join(__dirname, "..", "..", "..");
|
|
59
|
+
const BIN_PATH = import_path.default.join(__dirname, "..", "..", "..", "bin");
|
|
60
|
+
const PLAYWRIGHT_CDN_MIRRORS = [
|
|
61
|
+
"https://cdn.playwright.dev/dbazure/download/playwright",
|
|
62
|
+
// ESRP CDN
|
|
63
|
+
"https://playwright.download.prss.microsoft.com/dbazure/download/playwright",
|
|
64
|
+
// Directly hit ESRP CDN
|
|
65
|
+
"https://cdn.playwright.dev"
|
|
66
|
+
// Hit the Storage Bucket directly
|
|
60
67
|
];
|
|
61
68
|
if (process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
|
|
62
69
|
for (let i = 0; i < PLAYWRIGHT_CDN_MIRRORS.length; i++) {
|
|
63
70
|
const cdn = PLAYWRIGHT_CDN_MIRRORS[i];
|
|
64
71
|
if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
|
|
65
72
|
const parsedCDN = new URL(cdn);
|
|
66
|
-
parsedCDN.hostname = parsedCDN.hostname +
|
|
73
|
+
parsedCDN.hostname = parsedCDN.hostname + ".does-not-resolve.playwright.dev";
|
|
67
74
|
PLAYWRIGHT_CDN_MIRRORS[i] = parsedCDN.toString();
|
|
68
75
|
}
|
|
69
76
|
}
|
|
70
77
|
}
|
|
71
78
|
const EXECUTABLE_PATHS = {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
"chromium": {
|
|
80
|
+
"linux": ["chrome-linux", "chrome"],
|
|
81
|
+
"mac": ["chrome-mac", "Chromium.app", "Contents", "MacOS", "Chromium"],
|
|
82
|
+
"win": ["chrome-win", "chrome.exe"]
|
|
76
83
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
84
|
+
"chromium-headless-shell": {
|
|
85
|
+
"linux": ["chrome-linux", "headless_shell"],
|
|
86
|
+
"mac": ["chrome-mac", "headless_shell"],
|
|
87
|
+
"win": ["chrome-win", "headless_shell.exe"]
|
|
81
88
|
},
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
"firefox": {
|
|
90
|
+
"linux": ["firefox", "firefox"],
|
|
91
|
+
"mac": ["firefox", "Nightly.app", "Contents", "MacOS", "firefox"],
|
|
92
|
+
"win": ["firefox", "firefox.exe"]
|
|
86
93
|
},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
94
|
+
"webkit": {
|
|
95
|
+
"linux": ["pw_run.sh"],
|
|
96
|
+
"mac": ["pw_run.sh"],
|
|
97
|
+
"win": ["Playwright.exe"]
|
|
91
98
|
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
"ffmpeg": {
|
|
100
|
+
"linux": ["ffmpeg-linux"],
|
|
101
|
+
"mac": ["ffmpeg-mac"],
|
|
102
|
+
"win": ["ffmpeg-win64.exe"]
|
|
96
103
|
},
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
"winldd": {
|
|
105
|
+
"linux": void 0,
|
|
106
|
+
"mac": void 0,
|
|
107
|
+
"win": ["PrintDeps.exe"]
|
|
101
108
|
}
|
|
102
109
|
};
|
|
103
110
|
const DOWNLOAD_PATHS = {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
111
|
+
"chromium": {
|
|
112
|
+
"<unknown>": void 0,
|
|
113
|
+
"ubuntu18.04-x64": void 0,
|
|
114
|
+
"ubuntu20.04-x64": "builds/chromium/%s/chromium-linux.zip",
|
|
115
|
+
"ubuntu22.04-x64": "builds/chromium/%s/chromium-linux.zip",
|
|
116
|
+
"ubuntu24.04-x64": "builds/chromium/%s/chromium-linux.zip",
|
|
117
|
+
"ubuntu18.04-arm64": void 0,
|
|
118
|
+
"ubuntu20.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
|
|
119
|
+
"ubuntu22.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
|
|
120
|
+
"ubuntu24.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
|
|
121
|
+
"debian11-x64": "builds/chromium/%s/chromium-linux.zip",
|
|
122
|
+
"debian11-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
|
|
123
|
+
"debian12-x64": "builds/chromium/%s/chromium-linux.zip",
|
|
124
|
+
"debian12-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
|
|
125
|
+
"mac10.13": "builds/chromium/%s/chromium-mac.zip",
|
|
126
|
+
"mac10.14": "builds/chromium/%s/chromium-mac.zip",
|
|
127
|
+
"mac10.15": "builds/chromium/%s/chromium-mac.zip",
|
|
128
|
+
"mac11": "builds/chromium/%s/chromium-mac.zip",
|
|
129
|
+
"mac11-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
|
|
130
|
+
"mac12": "builds/chromium/%s/chromium-mac.zip",
|
|
131
|
+
"mac12-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
|
|
132
|
+
"mac13": "builds/chromium/%s/chromium-mac.zip",
|
|
133
|
+
"mac13-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
|
|
134
|
+
"mac14": "builds/chromium/%s/chromium-mac.zip",
|
|
135
|
+
"mac14-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
|
|
136
|
+
"mac15": "builds/chromium/%s/chromium-mac.zip",
|
|
137
|
+
"mac15-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
|
|
138
|
+
"win64": "builds/chromium/%s/chromium-win64.zip"
|
|
132
139
|
},
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
140
|
+
"chromium-headless-shell": {
|
|
141
|
+
"<unknown>": void 0,
|
|
142
|
+
"ubuntu18.04-x64": void 0,
|
|
143
|
+
"ubuntu20.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
|
|
144
|
+
"ubuntu22.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
|
|
145
|
+
"ubuntu24.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
|
|
146
|
+
"ubuntu18.04-arm64": void 0,
|
|
147
|
+
"ubuntu20.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
|
|
148
|
+
"ubuntu22.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
|
|
149
|
+
"ubuntu24.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
|
|
150
|
+
"debian11-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
|
|
151
|
+
"debian11-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
|
|
152
|
+
"debian12-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
|
|
153
|
+
"debian12-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
|
|
154
|
+
"mac10.13": void 0,
|
|
155
|
+
"mac10.14": void 0,
|
|
156
|
+
"mac10.15": void 0,
|
|
157
|
+
"mac11": "builds/chromium/%s/chromium-headless-shell-mac.zip",
|
|
158
|
+
"mac11-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
|
|
159
|
+
"mac12": "builds/chromium/%s/chromium-headless-shell-mac.zip",
|
|
160
|
+
"mac12-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
|
|
161
|
+
"mac13": "builds/chromium/%s/chromium-headless-shell-mac.zip",
|
|
162
|
+
"mac13-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
|
|
163
|
+
"mac14": "builds/chromium/%s/chromium-headless-shell-mac.zip",
|
|
164
|
+
"mac14-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
|
|
165
|
+
"mac15": "builds/chromium/%s/chromium-headless-shell-mac.zip",
|
|
166
|
+
"mac15-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
|
|
167
|
+
"win64": "builds/chromium/%s/chromium-headless-shell-win64.zip"
|
|
161
168
|
},
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
169
|
+
"chromium-tip-of-tree": {
|
|
170
|
+
"<unknown>": void 0,
|
|
171
|
+
"ubuntu18.04-x64": void 0,
|
|
172
|
+
"ubuntu20.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
|
|
173
|
+
"ubuntu22.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
|
|
174
|
+
"ubuntu24.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
|
|
175
|
+
"ubuntu18.04-arm64": void 0,
|
|
176
|
+
"ubuntu20.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
|
|
177
|
+
"ubuntu22.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
|
|
178
|
+
"ubuntu24.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
|
|
179
|
+
"debian11-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
|
|
180
|
+
"debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
|
|
181
|
+
"debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
|
|
182
|
+
"debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
|
|
183
|
+
"mac10.13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
184
|
+
"mac10.14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
185
|
+
"mac10.15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
186
|
+
"mac11": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
187
|
+
"mac11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
|
|
188
|
+
"mac12": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
189
|
+
"mac12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
|
|
190
|
+
"mac13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
191
|
+
"mac13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
|
|
192
|
+
"mac14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
193
|
+
"mac14-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
|
|
194
|
+
"mac15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
|
|
195
|
+
"mac15-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
|
|
196
|
+
"win64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip"
|
|
190
197
|
},
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
198
|
+
"chromium-tip-of-tree-headless-shell": {
|
|
199
|
+
"<unknown>": void 0,
|
|
200
|
+
"ubuntu18.04-x64": void 0,
|
|
201
|
+
"ubuntu20.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
|
|
202
|
+
"ubuntu22.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
|
|
203
|
+
"ubuntu24.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
|
|
204
|
+
"ubuntu18.04-arm64": void 0,
|
|
205
|
+
"ubuntu20.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
|
|
206
|
+
"ubuntu22.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
|
|
207
|
+
"ubuntu24.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
|
|
208
|
+
"debian11-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
|
|
209
|
+
"debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
|
|
210
|
+
"debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
|
|
211
|
+
"debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
|
|
212
|
+
"mac10.13": void 0,
|
|
213
|
+
"mac10.14": void 0,
|
|
214
|
+
"mac10.15": void 0,
|
|
215
|
+
"mac11": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
|
|
216
|
+
"mac11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
|
|
217
|
+
"mac12": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
|
|
218
|
+
"mac12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
|
|
219
|
+
"mac13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
|
|
220
|
+
"mac13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
|
|
221
|
+
"mac14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
|
|
222
|
+
"mac14-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
|
|
223
|
+
"mac15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
|
|
224
|
+
"mac15-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
|
|
225
|
+
"win64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-win64.zip"
|
|
219
226
|
},
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
227
|
+
"firefox": {
|
|
228
|
+
"<unknown>": void 0,
|
|
229
|
+
"ubuntu18.04-x64": void 0,
|
|
230
|
+
"ubuntu20.04-x64": "builds/firefox/%s/firefox-ubuntu-20.04.zip",
|
|
231
|
+
"ubuntu22.04-x64": "builds/firefox/%s/firefox-ubuntu-22.04.zip",
|
|
232
|
+
"ubuntu24.04-x64": "builds/firefox/%s/firefox-ubuntu-24.04.zip",
|
|
233
|
+
"ubuntu18.04-arm64": void 0,
|
|
234
|
+
"ubuntu20.04-arm64": "builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip",
|
|
235
|
+
"ubuntu22.04-arm64": "builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip",
|
|
236
|
+
"ubuntu24.04-arm64": "builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip",
|
|
237
|
+
"debian11-x64": "builds/firefox/%s/firefox-debian-11.zip",
|
|
238
|
+
"debian11-arm64": "builds/firefox/%s/firefox-debian-11-arm64.zip",
|
|
239
|
+
"debian12-x64": "builds/firefox/%s/firefox-debian-12.zip",
|
|
240
|
+
"debian12-arm64": "builds/firefox/%s/firefox-debian-12-arm64.zip",
|
|
241
|
+
"mac10.13": "builds/firefox/%s/firefox-mac.zip",
|
|
242
|
+
"mac10.14": "builds/firefox/%s/firefox-mac.zip",
|
|
243
|
+
"mac10.15": "builds/firefox/%s/firefox-mac.zip",
|
|
244
|
+
"mac11": "builds/firefox/%s/firefox-mac.zip",
|
|
245
|
+
"mac11-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
|
|
246
|
+
"mac12": "builds/firefox/%s/firefox-mac.zip",
|
|
247
|
+
"mac12-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
|
|
248
|
+
"mac13": "builds/firefox/%s/firefox-mac.zip",
|
|
249
|
+
"mac13-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
|
|
250
|
+
"mac14": "builds/firefox/%s/firefox-mac.zip",
|
|
251
|
+
"mac14-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
|
|
252
|
+
"mac15": "builds/firefox/%s/firefox-mac.zip",
|
|
253
|
+
"mac15-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
|
|
254
|
+
"win64": "builds/firefox/%s/firefox-win64.zip"
|
|
248
255
|
},
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
256
|
+
"firefox-beta": {
|
|
257
|
+
"<unknown>": void 0,
|
|
258
|
+
"ubuntu18.04-x64": void 0,
|
|
259
|
+
"ubuntu20.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip",
|
|
260
|
+
"ubuntu22.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip",
|
|
261
|
+
"ubuntu24.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip",
|
|
262
|
+
"ubuntu18.04-arm64": void 0,
|
|
263
|
+
"ubuntu20.04-arm64": void 0,
|
|
264
|
+
"ubuntu22.04-arm64": "builds/firefox-beta/%s/firefox-beta-ubuntu-22.04-arm64.zip",
|
|
265
|
+
"ubuntu24.04-arm64": "builds/firefox-beta/%s/firefox-beta-ubuntu-24.04-arm64.zip",
|
|
266
|
+
"debian11-x64": "builds/firefox-beta/%s/firefox-beta-debian-11.zip",
|
|
267
|
+
"debian11-arm64": "builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip",
|
|
268
|
+
"debian12-x64": "builds/firefox-beta/%s/firefox-beta-debian-12.zip",
|
|
269
|
+
"debian12-arm64": "builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip",
|
|
270
|
+
"mac10.13": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
271
|
+
"mac10.14": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
272
|
+
"mac10.15": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
273
|
+
"mac11": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
274
|
+
"mac11-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
|
|
275
|
+
"mac12": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
276
|
+
"mac12-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
|
|
277
|
+
"mac13": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
278
|
+
"mac13-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
|
|
279
|
+
"mac14": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
280
|
+
"mac14-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
|
|
281
|
+
"mac15": "builds/firefox-beta/%s/firefox-beta-mac.zip",
|
|
282
|
+
"mac15-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
|
|
283
|
+
"win64": "builds/firefox-beta/%s/firefox-beta-win64.zip"
|
|
277
284
|
},
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
285
|
+
"webkit": {
|
|
286
|
+
"<unknown>": void 0,
|
|
287
|
+
"ubuntu18.04-x64": void 0,
|
|
288
|
+
"ubuntu20.04-x64": "builds/webkit/%s/webkit-ubuntu-20.04.zip",
|
|
289
|
+
"ubuntu22.04-x64": "builds/webkit/%s/webkit-ubuntu-22.04.zip",
|
|
290
|
+
"ubuntu24.04-x64": "builds/webkit/%s/webkit-ubuntu-24.04.zip",
|
|
291
|
+
"ubuntu18.04-arm64": void 0,
|
|
292
|
+
"ubuntu20.04-arm64": "builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip",
|
|
293
|
+
"ubuntu22.04-arm64": "builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip",
|
|
294
|
+
"ubuntu24.04-arm64": "builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip",
|
|
295
|
+
"debian11-x64": "builds/webkit/%s/webkit-debian-11.zip",
|
|
296
|
+
"debian11-arm64": "builds/webkit/%s/webkit-debian-11-arm64.zip",
|
|
297
|
+
"debian12-x64": "builds/webkit/%s/webkit-debian-12.zip",
|
|
298
|
+
"debian12-arm64": "builds/webkit/%s/webkit-debian-12-arm64.zip",
|
|
299
|
+
"mac10.13": void 0,
|
|
300
|
+
"mac10.14": "builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip",
|
|
301
|
+
"mac10.15": "builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip",
|
|
302
|
+
"mac11": "builds/webkit/%s/webkit-mac-11.zip",
|
|
303
|
+
"mac11-arm64": "builds/webkit/%s/webkit-mac-11-arm64.zip",
|
|
304
|
+
"mac12": "builds/webkit/%s/webkit-mac-12.zip",
|
|
305
|
+
"mac12-arm64": "builds/webkit/%s/webkit-mac-12-arm64.zip",
|
|
306
|
+
"mac13": "builds/webkit/%s/webkit-mac-13.zip",
|
|
307
|
+
"mac13-arm64": "builds/webkit/%s/webkit-mac-13-arm64.zip",
|
|
308
|
+
"mac14": "builds/webkit/%s/webkit-mac-14.zip",
|
|
309
|
+
"mac14-arm64": "builds/webkit/%s/webkit-mac-14-arm64.zip",
|
|
310
|
+
"mac15": "builds/webkit/%s/webkit-mac-15.zip",
|
|
311
|
+
"mac15-arm64": "builds/webkit/%s/webkit-mac-15-arm64.zip",
|
|
312
|
+
"win64": "builds/webkit/%s/webkit-win64.zip"
|
|
306
313
|
},
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
314
|
+
"ffmpeg": {
|
|
315
|
+
"<unknown>": void 0,
|
|
316
|
+
"ubuntu18.04-x64": void 0,
|
|
317
|
+
"ubuntu20.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
|
|
318
|
+
"ubuntu22.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
|
|
319
|
+
"ubuntu24.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
|
|
320
|
+
"ubuntu18.04-arm64": void 0,
|
|
321
|
+
"ubuntu20.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
|
|
322
|
+
"ubuntu22.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
|
|
323
|
+
"ubuntu24.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
|
|
324
|
+
"debian11-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
|
|
325
|
+
"debian11-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
|
|
326
|
+
"debian12-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
|
|
327
|
+
"debian12-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
|
|
328
|
+
"mac10.13": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
329
|
+
"mac10.14": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
330
|
+
"mac10.15": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
331
|
+
"mac11": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
332
|
+
"mac11-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
|
|
333
|
+
"mac12": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
334
|
+
"mac12-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
|
|
335
|
+
"mac13": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
336
|
+
"mac13-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
|
|
337
|
+
"mac14": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
338
|
+
"mac14-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
|
|
339
|
+
"mac15": "builds/ffmpeg/%s/ffmpeg-mac.zip",
|
|
340
|
+
"mac15-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
|
|
341
|
+
"win64": "builds/ffmpeg/%s/ffmpeg-win64.zip"
|
|
335
342
|
},
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
343
|
+
"winldd": {
|
|
344
|
+
"<unknown>": void 0,
|
|
345
|
+
"ubuntu18.04-x64": void 0,
|
|
346
|
+
"ubuntu20.04-x64": void 0,
|
|
347
|
+
"ubuntu22.04-x64": void 0,
|
|
348
|
+
"ubuntu24.04-x64": void 0,
|
|
349
|
+
"ubuntu18.04-arm64": void 0,
|
|
350
|
+
"ubuntu20.04-arm64": void 0,
|
|
351
|
+
"ubuntu22.04-arm64": void 0,
|
|
352
|
+
"ubuntu24.04-arm64": void 0,
|
|
353
|
+
"debian11-x64": void 0,
|
|
354
|
+
"debian11-arm64": void 0,
|
|
355
|
+
"debian12-x64": void 0,
|
|
356
|
+
"debian12-arm64": void 0,
|
|
357
|
+
"mac10.13": void 0,
|
|
358
|
+
"mac10.14": void 0,
|
|
359
|
+
"mac10.15": void 0,
|
|
360
|
+
"mac11": void 0,
|
|
361
|
+
"mac11-arm64": void 0,
|
|
362
|
+
"mac12": void 0,
|
|
363
|
+
"mac12-arm64": void 0,
|
|
364
|
+
"mac13": void 0,
|
|
365
|
+
"mac13-arm64": void 0,
|
|
366
|
+
"mac14": void 0,
|
|
367
|
+
"mac14-arm64": void 0,
|
|
368
|
+
"mac15": void 0,
|
|
369
|
+
"mac15-arm64": void 0,
|
|
370
|
+
"win64": "builds/winldd/%s/winldd-win64.zip"
|
|
364
371
|
},
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
372
|
+
"android": {
|
|
373
|
+
"<unknown>": "builds/android/%s/android.zip",
|
|
374
|
+
"ubuntu18.04-x64": void 0,
|
|
375
|
+
"ubuntu20.04-x64": "builds/android/%s/android.zip",
|
|
376
|
+
"ubuntu22.04-x64": "builds/android/%s/android.zip",
|
|
377
|
+
"ubuntu24.04-x64": "builds/android/%s/android.zip",
|
|
378
|
+
"ubuntu18.04-arm64": void 0,
|
|
379
|
+
"ubuntu20.04-arm64": "builds/android/%s/android.zip",
|
|
380
|
+
"ubuntu22.04-arm64": "builds/android/%s/android.zip",
|
|
381
|
+
"ubuntu24.04-arm64": "builds/android/%s/android.zip",
|
|
382
|
+
"debian11-x64": "builds/android/%s/android.zip",
|
|
383
|
+
"debian11-arm64": "builds/android/%s/android.zip",
|
|
384
|
+
"debian12-x64": "builds/android/%s/android.zip",
|
|
385
|
+
"debian12-arm64": "builds/android/%s/android.zip",
|
|
386
|
+
"mac10.13": "builds/android/%s/android.zip",
|
|
387
|
+
"mac10.14": "builds/android/%s/android.zip",
|
|
388
|
+
"mac10.15": "builds/android/%s/android.zip",
|
|
389
|
+
"mac11": "builds/android/%s/android.zip",
|
|
390
|
+
"mac11-arm64": "builds/android/%s/android.zip",
|
|
391
|
+
"mac12": "builds/android/%s/android.zip",
|
|
392
|
+
"mac12-arm64": "builds/android/%s/android.zip",
|
|
393
|
+
"mac13": "builds/android/%s/android.zip",
|
|
394
|
+
"mac13-arm64": "builds/android/%s/android.zip",
|
|
395
|
+
"mac14": "builds/android/%s/android.zip",
|
|
396
|
+
"mac14-arm64": "builds/android/%s/android.zip",
|
|
397
|
+
"mac15": "builds/android/%s/android.zip",
|
|
398
|
+
"mac15-arm64": "builds/android/%s/android.zip",
|
|
399
|
+
"win64": "builds/android/%s/android.zip"
|
|
393
400
|
},
|
|
394
401
|
// TODO(bidi): implement downloads.
|
|
395
|
-
|
|
402
|
+
"_bidiFirefox": {},
|
|
403
|
+
"_bidiChromium": {}
|
|
396
404
|
};
|
|
397
|
-
const registryDirectory =
|
|
405
|
+
const registryDirectory = (() => {
|
|
398
406
|
let result;
|
|
399
|
-
const envDefined = (0,
|
|
400
|
-
if (envDefined ===
|
|
401
|
-
result =
|
|
407
|
+
const envDefined = (0, import_utils.getFromENV)("PLAYWRIGHT_BROWSERS_PATH");
|
|
408
|
+
if (envDefined === "0") {
|
|
409
|
+
result = import_path.default.join(__dirname, "..", "..", "..", ".local-browsers");
|
|
402
410
|
} else if (envDefined) {
|
|
403
411
|
result = envDefined;
|
|
404
412
|
} else {
|
|
405
413
|
let cacheDirectory;
|
|
406
|
-
if (process.platform ===
|
|
407
|
-
|
|
414
|
+
if (process.platform === "linux")
|
|
415
|
+
cacheDirectory = process.env.XDG_CACHE_HOME || import_path.default.join(import_os.default.homedir(), ".cache");
|
|
416
|
+
else if (process.platform === "darwin")
|
|
417
|
+
cacheDirectory = import_path.default.join(import_os.default.homedir(), "Library", "Caches");
|
|
418
|
+
else if (process.platform === "win32")
|
|
419
|
+
cacheDirectory = process.env.LOCALAPPDATA || import_path.default.join(import_os.default.homedir(), "AppData", "Local");
|
|
420
|
+
else
|
|
421
|
+
throw new Error("Unsupported platform: " + process.platform);
|
|
422
|
+
result = import_path.default.join(cacheDirectory, "ms-playwright");
|
|
408
423
|
}
|
|
409
|
-
if (!
|
|
410
|
-
|
|
411
|
-
// - for unzipping to work correctly;
|
|
412
|
-
// - so that registry directory matches between installation and execution.
|
|
413
|
-
// INIT_CWD points to the root of `npm/yarn install` and is probably what
|
|
414
|
-
// the user meant when typing the relative path.
|
|
415
|
-
result = _path.default.resolve((0, _utils.getFromENV)('INIT_CWD') || process.cwd(), result);
|
|
424
|
+
if (!import_path.default.isAbsolute(result)) {
|
|
425
|
+
result = import_path.default.resolve((0, import_utils.getFromENV)("INIT_CWD") || process.cwd(), result);
|
|
416
426
|
}
|
|
417
427
|
return result;
|
|
418
428
|
})();
|
|
419
429
|
function isBrowserDirectory(browserDirectory) {
|
|
420
|
-
const baseName =
|
|
430
|
+
const baseName = import_path.default.basename(browserDirectory);
|
|
421
431
|
for (const browserName of allDownloadable) {
|
|
422
|
-
if (baseName.startsWith(browserName.replace(/-/g,
|
|
432
|
+
if (baseName.startsWith(browserName.replace(/-/g, "_") + "-"))
|
|
433
|
+
return true;
|
|
423
434
|
}
|
|
424
435
|
return false;
|
|
425
436
|
}
|
|
426
437
|
function readDescriptors(browsersJSON) {
|
|
427
|
-
return browsersJSON[
|
|
438
|
+
return browsersJSON["browsers"].map((obj) => {
|
|
428
439
|
const name = obj.name;
|
|
429
|
-
const revisionOverride = (obj.revisionOverrides || {})[
|
|
440
|
+
const revisionOverride = (obj.revisionOverrides || {})[import_hostPlatform.hostPlatform];
|
|
430
441
|
const revision = revisionOverride || obj.revision;
|
|
431
|
-
const browserDirectoryPrefix = revisionOverride ? `${name}_${
|
|
442
|
+
const browserDirectoryPrefix = revisionOverride ? `${name}_${import_hostPlatform.hostPlatform}_special` : `${name}`;
|
|
432
443
|
const descriptor = {
|
|
433
444
|
name,
|
|
434
445
|
revision,
|
|
435
446
|
hasRevisionOverride: !!revisionOverride,
|
|
436
447
|
// We only put browser version for the supported operating systems.
|
|
437
|
-
browserVersion: revisionOverride ?
|
|
448
|
+
browserVersion: revisionOverride ? void 0 : obj.browserVersion,
|
|
438
449
|
installByDefault: !!obj.installByDefault,
|
|
439
450
|
// Method `isBrowserDirectory` determines directory to be browser iff
|
|
440
451
|
// it starts with some browser name followed by '-'. Some browser names
|
|
441
452
|
// are prefixes of others, e.g. 'webkit' is a prefix of `webkit-technology-preview`.
|
|
442
453
|
// To avoid older registries erroneously removing 'webkit-technology-preview', we have to
|
|
443
454
|
// ensure that browser folders to never include dashes inside.
|
|
444
|
-
dir:
|
|
455
|
+
dir: import_path.default.join(registryDirectory, browserDirectoryPrefix.replace(/-/g, "_") + "-" + revision)
|
|
445
456
|
};
|
|
446
457
|
return descriptor;
|
|
447
458
|
});
|
|
448
459
|
}
|
|
449
|
-
const allDownloadable = [
|
|
460
|
+
const allDownloadable = ["android", "chromium", "firefox", "webkit", "ffmpeg", "firefox-beta", "chromium-tip-of-tree", "chromium-headless-shell", "chromium-tip-of-tree-headless-shell"];
|
|
450
461
|
class Registry {
|
|
451
462
|
constructor(browsersJSON) {
|
|
452
|
-
this._executables = void 0;
|
|
453
463
|
const descriptors = readDescriptors(browsersJSON);
|
|
454
464
|
const findExecutablePath = (dir, name) => {
|
|
455
|
-
let tokens =
|
|
456
|
-
if (process.platform ===
|
|
457
|
-
|
|
465
|
+
let tokens = void 0;
|
|
466
|
+
if (process.platform === "linux")
|
|
467
|
+
tokens = EXECUTABLE_PATHS[name]["linux"];
|
|
468
|
+
else if (process.platform === "darwin")
|
|
469
|
+
tokens = EXECUTABLE_PATHS[name]["mac"];
|
|
470
|
+
else if (process.platform === "win32")
|
|
471
|
+
tokens = EXECUTABLE_PATHS[name]["win"];
|
|
472
|
+
return tokens ? import_path.default.join(dir, ...tokens) : void 0;
|
|
458
473
|
};
|
|
459
474
|
const executablePathOrDie = (name, e, installByDefault, sdkLanguage) => {
|
|
460
|
-
if (!e)
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
const
|
|
475
|
+
if (!e)
|
|
476
|
+
throw new Error(`${name} is not supported on ${import_hostPlatform.hostPlatform}`);
|
|
477
|
+
const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install${installByDefault ? "" : " " + name}`);
|
|
478
|
+
if (!(0, import_fileUtils.canAccessFile)(e)) {
|
|
479
|
+
const currentDockerVersion = (0, import_dependencies.readDockerVersionSync)();
|
|
480
|
+
const preferredDockerVersion = currentDockerVersion ? (0, import_dependencies.dockerVersion)(currentDockerVersion.dockerImageNameTemplate) : null;
|
|
465
481
|
const isOutdatedDockerImage = currentDockerVersion && preferredDockerVersion && currentDockerVersion.dockerImageName !== preferredDockerVersion.dockerImageName;
|
|
466
|
-
const prettyMessage = isOutdatedDockerImage ? [
|
|
467
|
-
|
|
482
|
+
const prettyMessage = isOutdatedDockerImage ? [
|
|
483
|
+
`Looks like ${sdkLanguage === "javascript" ? "Playwright Test or " : ""}Playwright was just updated to ${preferredDockerVersion.driverVersion}.`,
|
|
484
|
+
`Please update docker image as well.`,
|
|
485
|
+
`- current: ${currentDockerVersion.dockerImageName}`,
|
|
486
|
+
`- required: ${preferredDockerVersion.dockerImageName}`,
|
|
487
|
+
``,
|
|
488
|
+
`<3 Playwright Team`
|
|
489
|
+
].join("\n") : [
|
|
490
|
+
`Looks like ${sdkLanguage === "javascript" ? "Playwright Test or " : ""}Playwright was just installed or updated.`,
|
|
491
|
+
`Please run the following command to download new browser${installByDefault ? "s" : ""}:`,
|
|
492
|
+
``,
|
|
493
|
+
` ${installCommand}`,
|
|
494
|
+
``,
|
|
495
|
+
`<3 Playwright Team`
|
|
496
|
+
].join("\n");
|
|
497
|
+
throw new Error(`Executable doesn't exist at ${e}
|
|
498
|
+
${(0, import_ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
|
|
468
499
|
}
|
|
469
500
|
return e;
|
|
470
501
|
};
|
|
471
502
|
this._executables = [];
|
|
472
|
-
const chromium = descriptors.find(d => d.name ===
|
|
473
|
-
const chromiumExecutable = findExecutablePath(chromium.dir,
|
|
503
|
+
const chromium = descriptors.find((d) => d.name === "chromium");
|
|
504
|
+
const chromiumExecutable = findExecutablePath(chromium.dir, "chromium");
|
|
474
505
|
this._executables.push({
|
|
475
|
-
type:
|
|
476
|
-
name:
|
|
477
|
-
browserName:
|
|
506
|
+
type: "browser",
|
|
507
|
+
name: "chromium",
|
|
508
|
+
browserName: "chromium",
|
|
478
509
|
directory: chromium.dir,
|
|
479
510
|
executablePath: () => chromiumExecutable,
|
|
480
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
481
|
-
installType: chromium.installByDefault ?
|
|
482
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromium.dir, [
|
|
511
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumExecutable, chromium.installByDefault, sdkLanguage),
|
|
512
|
+
installType: chromium.installByDefault ? "download-by-default" : "download-on-demand",
|
|
513
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromium.dir, ["chrome-linux"], [], ["chrome-win"]),
|
|
483
514
|
downloadURLs: this._downloadURLs(chromium),
|
|
484
515
|
browserVersion: chromium.browserVersion,
|
|
485
516
|
_install: () => this._downloadExecutable(chromium, chromiumExecutable),
|
|
486
|
-
_dependencyGroup:
|
|
517
|
+
_dependencyGroup: "chromium",
|
|
487
518
|
_isHermeticInstallation: true
|
|
488
519
|
});
|
|
489
|
-
const chromiumHeadlessShell = descriptors.find(d => d.name ===
|
|
490
|
-
const chromiumHeadlessShellExecutable = findExecutablePath(chromiumHeadlessShell.dir,
|
|
520
|
+
const chromiumHeadlessShell = descriptors.find((d) => d.name === "chromium-headless-shell");
|
|
521
|
+
const chromiumHeadlessShellExecutable = findExecutablePath(chromiumHeadlessShell.dir, "chromium-headless-shell");
|
|
491
522
|
this._executables.push({
|
|
492
|
-
type:
|
|
493
|
-
name:
|
|
494
|
-
browserName:
|
|
523
|
+
type: "channel",
|
|
524
|
+
name: "chromium-headless-shell",
|
|
525
|
+
browserName: "chromium",
|
|
495
526
|
directory: chromiumHeadlessShell.dir,
|
|
496
527
|
executablePath: () => chromiumHeadlessShellExecutable,
|
|
497
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
498
|
-
installType: chromiumHeadlessShell.installByDefault ?
|
|
499
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumHeadlessShell.dir, [
|
|
528
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumHeadlessShellExecutable, chromiumHeadlessShell.installByDefault, sdkLanguage),
|
|
529
|
+
installType: chromiumHeadlessShell.installByDefault ? "download-by-default" : "download-on-demand",
|
|
530
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumHeadlessShell.dir, ["chrome-linux"], [], ["chrome-win"]),
|
|
500
531
|
downloadURLs: this._downloadURLs(chromiumHeadlessShell),
|
|
501
532
|
browserVersion: chromium.browserVersion,
|
|
502
533
|
_install: () => this._downloadExecutable(chromiumHeadlessShell, chromiumHeadlessShellExecutable),
|
|
503
|
-
_dependencyGroup:
|
|
534
|
+
_dependencyGroup: "chromium",
|
|
504
535
|
_isHermeticInstallation: true
|
|
505
536
|
});
|
|
506
|
-
const chromiumTipOfTreeHeadlessShell = descriptors.find(d => d.name ===
|
|
507
|
-
const chromiumTipOfTreeHeadlessShellExecutable = findExecutablePath(chromiumTipOfTreeHeadlessShell.dir,
|
|
537
|
+
const chromiumTipOfTreeHeadlessShell = descriptors.find((d) => d.name === "chromium-tip-of-tree-headless-shell");
|
|
538
|
+
const chromiumTipOfTreeHeadlessShellExecutable = findExecutablePath(chromiumTipOfTreeHeadlessShell.dir, "chromium-headless-shell");
|
|
508
539
|
this._executables.push({
|
|
509
|
-
type:
|
|
510
|
-
name:
|
|
511
|
-
browserName:
|
|
540
|
+
type: "channel",
|
|
541
|
+
name: "chromium-tip-of-tree-headless-shell",
|
|
542
|
+
browserName: "chromium",
|
|
512
543
|
directory: chromiumTipOfTreeHeadlessShell.dir,
|
|
513
544
|
executablePath: () => chromiumTipOfTreeHeadlessShellExecutable,
|
|
514
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
515
|
-
installType: chromiumTipOfTreeHeadlessShell.installByDefault ?
|
|
516
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumTipOfTreeHeadlessShell.dir, [
|
|
545
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumTipOfTreeHeadlessShellExecutable, chromiumTipOfTreeHeadlessShell.installByDefault, sdkLanguage),
|
|
546
|
+
installType: chromiumTipOfTreeHeadlessShell.installByDefault ? "download-by-default" : "download-on-demand",
|
|
547
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTreeHeadlessShell.dir, ["chrome-linux"], [], ["chrome-win"]),
|
|
517
548
|
downloadURLs: this._downloadURLs(chromiumTipOfTreeHeadlessShell),
|
|
518
549
|
browserVersion: chromium.browserVersion,
|
|
519
550
|
_install: () => this._downloadExecutable(chromiumTipOfTreeHeadlessShell, chromiumTipOfTreeHeadlessShellExecutable),
|
|
520
|
-
_dependencyGroup:
|
|
551
|
+
_dependencyGroup: "chromium",
|
|
521
552
|
_isHermeticInstallation: true
|
|
522
553
|
});
|
|
523
|
-
const chromiumTipOfTree = descriptors.find(d => d.name ===
|
|
524
|
-
const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir,
|
|
554
|
+
const chromiumTipOfTree = descriptors.find((d) => d.name === "chromium-tip-of-tree");
|
|
555
|
+
const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir, "chromium");
|
|
525
556
|
this._executables.push({
|
|
526
|
-
type:
|
|
527
|
-
name:
|
|
528
|
-
browserName:
|
|
557
|
+
type: "tool",
|
|
558
|
+
name: "chromium-tip-of-tree",
|
|
559
|
+
browserName: "chromium",
|
|
529
560
|
directory: chromiumTipOfTree.dir,
|
|
530
561
|
executablePath: () => chromiumTipOfTreeExecutable,
|
|
531
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
532
|
-
installType: chromiumTipOfTree.installByDefault ?
|
|
533
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumTipOfTree.dir, [
|
|
562
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium-tip-of-tree", chromiumTipOfTreeExecutable, chromiumTipOfTree.installByDefault, sdkLanguage),
|
|
563
|
+
installType: chromiumTipOfTree.installByDefault ? "download-by-default" : "download-on-demand",
|
|
564
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTree.dir, ["chrome-linux"], [], ["chrome-win"]),
|
|
534
565
|
downloadURLs: this._downloadURLs(chromiumTipOfTree),
|
|
535
566
|
browserVersion: chromiumTipOfTree.browserVersion,
|
|
536
567
|
_install: () => this._downloadExecutable(chromiumTipOfTree, chromiumTipOfTreeExecutable),
|
|
537
|
-
_dependencyGroup:
|
|
568
|
+
_dependencyGroup: "chromium",
|
|
538
569
|
_isHermeticInstallation: true
|
|
539
570
|
});
|
|
540
|
-
this._executables.push(this._createChromiumChannel(
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
}, () => this._installChromiumChannel(
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
571
|
+
this._executables.push(this._createChromiumChannel("chrome", {
|
|
572
|
+
"linux": "/opt/google/chrome/chrome",
|
|
573
|
+
"darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
574
|
+
"win32": `\\Google\\Chrome\\Application\\chrome.exe`
|
|
575
|
+
}, () => this._installChromiumChannel("chrome", {
|
|
576
|
+
"linux": "reinstall_chrome_stable_linux.sh",
|
|
577
|
+
"darwin": "reinstall_chrome_stable_mac.sh",
|
|
578
|
+
"win32": "reinstall_chrome_stable_win.ps1"
|
|
548
579
|
})));
|
|
549
|
-
this._executables.push(this._createChromiumChannel(
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
}, () => this._installChromiumChannel(
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
580
|
+
this._executables.push(this._createChromiumChannel("chrome-beta", {
|
|
581
|
+
"linux": "/opt/google/chrome-beta/chrome",
|
|
582
|
+
"darwin": "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta",
|
|
583
|
+
"win32": `\\Google\\Chrome Beta\\Application\\chrome.exe`
|
|
584
|
+
}, () => this._installChromiumChannel("chrome-beta", {
|
|
585
|
+
"linux": "reinstall_chrome_beta_linux.sh",
|
|
586
|
+
"darwin": "reinstall_chrome_beta_mac.sh",
|
|
587
|
+
"win32": "reinstall_chrome_beta_win.ps1"
|
|
557
588
|
})));
|
|
558
|
-
this._executables.push(this._createChromiumChannel(
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
589
|
+
this._executables.push(this._createChromiumChannel("chrome-dev", {
|
|
590
|
+
"linux": "/opt/google/chrome-unstable/chrome",
|
|
591
|
+
"darwin": "/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev",
|
|
592
|
+
"win32": `\\Google\\Chrome Dev\\Application\\chrome.exe`
|
|
562
593
|
}));
|
|
563
|
-
this._executables.push(this._createChromiumChannel(
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
594
|
+
this._executables.push(this._createChromiumChannel("chrome-canary", {
|
|
595
|
+
"linux": "",
|
|
596
|
+
"darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
|
|
597
|
+
"win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
|
|
567
598
|
}));
|
|
568
|
-
this._executables.push(this._createChromiumChannel(
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
}, () => this._installMSEdgeChannel(
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
599
|
+
this._executables.push(this._createChromiumChannel("msedge", {
|
|
600
|
+
"linux": "/opt/microsoft/msedge/msedge",
|
|
601
|
+
"darwin": "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
|
|
602
|
+
"win32": `\\Microsoft\\Edge\\Application\\msedge.exe`
|
|
603
|
+
}, () => this._installMSEdgeChannel("msedge", {
|
|
604
|
+
"linux": "reinstall_msedge_stable_linux.sh",
|
|
605
|
+
"darwin": "reinstall_msedge_stable_mac.sh",
|
|
606
|
+
"win32": "reinstall_msedge_stable_win.ps1"
|
|
576
607
|
})));
|
|
577
|
-
this._executables.push(this._createChromiumChannel(
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
}, () => this._installMSEdgeChannel(
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
608
|
+
this._executables.push(this._createChromiumChannel("msedge-beta", {
|
|
609
|
+
"linux": "/opt/microsoft/msedge-beta/msedge",
|
|
610
|
+
"darwin": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta",
|
|
611
|
+
"win32": `\\Microsoft\\Edge Beta\\Application\\msedge.exe`
|
|
612
|
+
}, () => this._installMSEdgeChannel("msedge-beta", {
|
|
613
|
+
"darwin": "reinstall_msedge_beta_mac.sh",
|
|
614
|
+
"linux": "reinstall_msedge_beta_linux.sh",
|
|
615
|
+
"win32": "reinstall_msedge_beta_win.ps1"
|
|
585
616
|
})));
|
|
586
|
-
this._executables.push(this._createChromiumChannel(
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
}, () => this._installMSEdgeChannel(
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
617
|
+
this._executables.push(this._createChromiumChannel("msedge-dev", {
|
|
618
|
+
"linux": "/opt/microsoft/msedge-dev/msedge",
|
|
619
|
+
"darwin": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev",
|
|
620
|
+
"win32": `\\Microsoft\\Edge Dev\\Application\\msedge.exe`
|
|
621
|
+
}, () => this._installMSEdgeChannel("msedge-dev", {
|
|
622
|
+
"darwin": "reinstall_msedge_dev_mac.sh",
|
|
623
|
+
"linux": "reinstall_msedge_dev_linux.sh",
|
|
624
|
+
"win32": "reinstall_msedge_dev_win.ps1"
|
|
594
625
|
})));
|
|
595
|
-
this._executables.push(this._createChromiumChannel(
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
626
|
+
this._executables.push(this._createChromiumChannel("msedge-canary", {
|
|
627
|
+
"linux": "",
|
|
628
|
+
"darwin": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary",
|
|
629
|
+
"win32": `\\Microsoft\\Edge SxS\\Application\\msedge.exe`
|
|
599
630
|
}));
|
|
600
|
-
this._executables.push(this._createBidiFirefoxChannel(
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
631
|
+
this._executables.push(this._createBidiFirefoxChannel("moz-firefox", {
|
|
632
|
+
"linux": "/snap/bin/firefox",
|
|
633
|
+
"darwin": "/Applications/Firefox.app/Contents/MacOS/firefox",
|
|
634
|
+
"win32": "\\Mozilla Firefox\\firefox.exe"
|
|
604
635
|
}));
|
|
605
|
-
this._executables.push(this._createBidiFirefoxChannel(
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
636
|
+
this._executables.push(this._createBidiFirefoxChannel("moz-firefox-beta", {
|
|
637
|
+
"linux": "/opt/firefox-beta/firefox",
|
|
638
|
+
"darwin": "/Applications/Firefox.app/Contents/MacOS/firefox",
|
|
639
|
+
"win32": "\\Mozilla Firefox\\firefox.exe"
|
|
609
640
|
}));
|
|
610
|
-
this._executables.push(this._createBidiFirefoxChannel(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
641
|
+
this._executables.push(this._createBidiFirefoxChannel("moz-firefox-nightly", {
|
|
642
|
+
"linux": "/opt/firefox-nightly/firefox",
|
|
643
|
+
"darwin": "/Applications/Firefox Nightly.app/Contents/MacOS/firefox",
|
|
644
|
+
"win32": "\\Mozilla Firefox\\firefox.exe"
|
|
614
645
|
}));
|
|
615
|
-
this._executables.push(this.
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
646
|
+
this._executables.push(this._createBidiChromiumChannel("bidi-chrome-stable", {
|
|
647
|
+
"linux": "/opt/google/chrome/chrome",
|
|
648
|
+
"darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
649
|
+
"win32": `\\Google\\Chrome\\Application\\chrome.exe`
|
|
619
650
|
}));
|
|
620
|
-
this._executables.push(this.
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
651
|
+
this._executables.push(this._createBidiChromiumChannel("bidi-chrome-canary", {
|
|
652
|
+
"linux": "",
|
|
653
|
+
"darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
|
|
654
|
+
"win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
|
|
624
655
|
}));
|
|
625
656
|
this._executables.push({
|
|
626
|
-
type:
|
|
627
|
-
name:
|
|
628
|
-
browserName:
|
|
657
|
+
type: "browser",
|
|
658
|
+
name: "_bidiChromium",
|
|
659
|
+
browserName: "_bidiChromium",
|
|
629
660
|
directory: chromium.dir,
|
|
630
661
|
executablePath: () => chromiumExecutable,
|
|
631
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
632
|
-
installType:
|
|
633
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromium.dir, [
|
|
662
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumExecutable, chromium.installByDefault, sdkLanguage),
|
|
663
|
+
installType: "download-on-demand",
|
|
664
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromium.dir, ["chrome-linux"], [], ["chrome-win"]),
|
|
634
665
|
downloadURLs: this._downloadURLs(chromium),
|
|
635
666
|
browserVersion: chromium.browserVersion,
|
|
636
667
|
_install: () => this._downloadExecutable(chromium, chromiumExecutable),
|
|
637
|
-
_dependencyGroup:
|
|
668
|
+
_dependencyGroup: "chromium",
|
|
638
669
|
_isHermeticInstallation: true
|
|
639
670
|
});
|
|
640
|
-
const firefox = descriptors.find(d => d.name ===
|
|
641
|
-
const firefoxExecutable = findExecutablePath(firefox.dir,
|
|
671
|
+
const firefox = descriptors.find((d) => d.name === "firefox");
|
|
672
|
+
const firefoxExecutable = findExecutablePath(firefox.dir, "firefox");
|
|
642
673
|
this._executables.push({
|
|
643
|
-
type:
|
|
644
|
-
name:
|
|
645
|
-
browserName:
|
|
674
|
+
type: "browser",
|
|
675
|
+
name: "firefox",
|
|
676
|
+
browserName: "firefox",
|
|
646
677
|
directory: firefox.dir,
|
|
647
678
|
executablePath: () => firefoxExecutable,
|
|
648
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
649
|
-
installType: firefox.installByDefault ?
|
|
650
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, firefox.dir, [
|
|
679
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("firefox", firefoxExecutable, firefox.installByDefault, sdkLanguage),
|
|
680
|
+
installType: firefox.installByDefault ? "download-by-default" : "download-on-demand",
|
|
681
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, firefox.dir, ["firefox"], [], ["firefox"]),
|
|
651
682
|
downloadURLs: this._downloadURLs(firefox),
|
|
652
683
|
browserVersion: firefox.browserVersion,
|
|
653
684
|
_install: () => this._downloadExecutable(firefox, firefoxExecutable),
|
|
654
|
-
_dependencyGroup:
|
|
685
|
+
_dependencyGroup: "firefox",
|
|
655
686
|
_isHermeticInstallation: true
|
|
656
687
|
});
|
|
657
|
-
const firefoxBeta = descriptors.find(d => d.name ===
|
|
658
|
-
const firefoxBetaExecutable = findExecutablePath(firefoxBeta.dir,
|
|
688
|
+
const firefoxBeta = descriptors.find((d) => d.name === "firefox-beta");
|
|
689
|
+
const firefoxBetaExecutable = findExecutablePath(firefoxBeta.dir, "firefox");
|
|
659
690
|
this._executables.push({
|
|
660
|
-
type:
|
|
661
|
-
name:
|
|
662
|
-
browserName:
|
|
691
|
+
type: "tool",
|
|
692
|
+
name: "firefox-beta",
|
|
693
|
+
browserName: "firefox",
|
|
663
694
|
directory: firefoxBeta.dir,
|
|
664
695
|
executablePath: () => firefoxBetaExecutable,
|
|
665
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
666
|
-
installType: firefoxBeta.installByDefault ?
|
|
667
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, firefoxBeta.dir, [
|
|
696
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("firefox-beta", firefoxBetaExecutable, firefoxBeta.installByDefault, sdkLanguage),
|
|
697
|
+
installType: firefoxBeta.installByDefault ? "download-by-default" : "download-on-demand",
|
|
698
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, firefoxBeta.dir, ["firefox"], [], ["firefox"]),
|
|
668
699
|
downloadURLs: this._downloadURLs(firefoxBeta),
|
|
669
700
|
browserVersion: firefoxBeta.browserVersion,
|
|
670
701
|
_install: () => this._downloadExecutable(firefoxBeta, firefoxBetaExecutable),
|
|
671
|
-
_dependencyGroup:
|
|
702
|
+
_dependencyGroup: "firefox",
|
|
672
703
|
_isHermeticInstallation: true
|
|
673
704
|
});
|
|
674
|
-
const webkit = descriptors.find(d => d.name ===
|
|
675
|
-
const webkitExecutable = findExecutablePath(webkit.dir,
|
|
676
|
-
const webkitLinuxLddDirectories = [
|
|
705
|
+
const webkit = descriptors.find((d) => d.name === "webkit");
|
|
706
|
+
const webkitExecutable = findExecutablePath(webkit.dir, "webkit");
|
|
707
|
+
const webkitLinuxLddDirectories = [
|
|
708
|
+
import_path.default.join("minibrowser-gtk"),
|
|
709
|
+
import_path.default.join("minibrowser-gtk", "bin"),
|
|
710
|
+
import_path.default.join("minibrowser-gtk", "lib"),
|
|
711
|
+
import_path.default.join("minibrowser-gtk", "sys", "lib"),
|
|
712
|
+
import_path.default.join("minibrowser-wpe"),
|
|
713
|
+
import_path.default.join("minibrowser-wpe", "bin"),
|
|
714
|
+
import_path.default.join("minibrowser-wpe", "lib"),
|
|
715
|
+
import_path.default.join("minibrowser-wpe", "sys", "lib")
|
|
716
|
+
];
|
|
677
717
|
this._executables.push({
|
|
678
|
-
type:
|
|
679
|
-
name:
|
|
680
|
-
browserName:
|
|
718
|
+
type: "browser",
|
|
719
|
+
name: "webkit",
|
|
720
|
+
browserName: "webkit",
|
|
681
721
|
directory: webkit.dir,
|
|
682
722
|
executablePath: () => webkitExecutable,
|
|
683
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
684
|
-
installType: webkit.installByDefault ?
|
|
685
|
-
_validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, webkit.dir, webkitLinuxLddDirectories, [
|
|
723
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("webkit", webkitExecutable, webkit.installByDefault, sdkLanguage),
|
|
724
|
+
installType: webkit.installByDefault ? "download-by-default" : "download-on-demand",
|
|
725
|
+
_validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, webkit.dir, webkitLinuxLddDirectories, ["libGLESv2.so.2", "libx264.so"], [""]),
|
|
686
726
|
downloadURLs: this._downloadURLs(webkit),
|
|
687
727
|
browserVersion: webkit.browserVersion,
|
|
688
728
|
_install: () => this._downloadExecutable(webkit, webkitExecutable),
|
|
689
|
-
_dependencyGroup:
|
|
729
|
+
_dependencyGroup: "webkit",
|
|
690
730
|
_isHermeticInstallation: true
|
|
691
731
|
});
|
|
692
|
-
const ffmpeg = descriptors.find(d => d.name ===
|
|
693
|
-
const ffmpegExecutable = findExecutablePath(ffmpeg.dir,
|
|
732
|
+
const ffmpeg = descriptors.find((d) => d.name === "ffmpeg");
|
|
733
|
+
const ffmpegExecutable = findExecutablePath(ffmpeg.dir, "ffmpeg");
|
|
694
734
|
this._executables.push({
|
|
695
|
-
type:
|
|
696
|
-
name:
|
|
697
|
-
browserName:
|
|
735
|
+
type: "tool",
|
|
736
|
+
name: "ffmpeg",
|
|
737
|
+
browserName: void 0,
|
|
698
738
|
directory: ffmpeg.dir,
|
|
699
739
|
executablePath: () => ffmpegExecutable,
|
|
700
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
701
|
-
installType: ffmpeg.installByDefault ?
|
|
740
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("ffmpeg", ffmpegExecutable, ffmpeg.installByDefault, sdkLanguage),
|
|
741
|
+
installType: ffmpeg.installByDefault ? "download-by-default" : "download-on-demand",
|
|
702
742
|
_validateHostRequirements: () => Promise.resolve(),
|
|
703
743
|
downloadURLs: this._downloadURLs(ffmpeg),
|
|
704
744
|
_install: () => this._downloadExecutable(ffmpeg, ffmpegExecutable),
|
|
705
|
-
_dependencyGroup:
|
|
745
|
+
_dependencyGroup: "tools",
|
|
706
746
|
_isHermeticInstallation: true
|
|
707
747
|
});
|
|
708
|
-
const winldd = descriptors.find(d => d.name ===
|
|
709
|
-
const winlddExecutable = findExecutablePath(winldd.dir,
|
|
748
|
+
const winldd = descriptors.find((d) => d.name === "winldd");
|
|
749
|
+
const winlddExecutable = findExecutablePath(winldd.dir, "winldd");
|
|
710
750
|
this._executables.push({
|
|
711
|
-
type:
|
|
712
|
-
name:
|
|
713
|
-
browserName:
|
|
751
|
+
type: "tool",
|
|
752
|
+
name: "winldd",
|
|
753
|
+
browserName: void 0,
|
|
714
754
|
directory: winldd.dir,
|
|
715
755
|
executablePath: () => winlddExecutable,
|
|
716
|
-
executablePathOrDie: sdkLanguage => executablePathOrDie(
|
|
717
|
-
installType: process.platform ===
|
|
756
|
+
executablePathOrDie: (sdkLanguage) => executablePathOrDie("winldd", winlddExecutable, winldd.installByDefault, sdkLanguage),
|
|
757
|
+
installType: process.platform === "win32" ? "download-by-default" : "none",
|
|
718
758
|
_validateHostRequirements: () => Promise.resolve(),
|
|
719
759
|
downloadURLs: this._downloadURLs(winldd),
|
|
720
760
|
_install: () => this._downloadExecutable(winldd, winlddExecutable),
|
|
721
|
-
_dependencyGroup:
|
|
761
|
+
_dependencyGroup: "tools",
|
|
722
762
|
_isHermeticInstallation: true
|
|
723
763
|
});
|
|
724
|
-
const android = descriptors.find(d => d.name ===
|
|
764
|
+
const android = descriptors.find((d) => d.name === "android");
|
|
725
765
|
this._executables.push({
|
|
726
|
-
type:
|
|
727
|
-
name:
|
|
728
|
-
browserName:
|
|
766
|
+
type: "tool",
|
|
767
|
+
name: "android",
|
|
768
|
+
browserName: void 0,
|
|
729
769
|
directory: android.dir,
|
|
730
|
-
executablePath: () =>
|
|
731
|
-
executablePathOrDie: () =>
|
|
732
|
-
installType:
|
|
770
|
+
executablePath: () => void 0,
|
|
771
|
+
executablePathOrDie: () => "",
|
|
772
|
+
installType: "download-on-demand",
|
|
733
773
|
_validateHostRequirements: () => Promise.resolve(),
|
|
734
774
|
downloadURLs: this._downloadURLs(android),
|
|
735
775
|
_install: () => this._downloadExecutable(android),
|
|
736
|
-
_dependencyGroup:
|
|
737
|
-
_isHermeticInstallation: true
|
|
738
|
-
});
|
|
739
|
-
this._executables.push({
|
|
740
|
-
type: 'browser',
|
|
741
|
-
name: 'bidi',
|
|
742
|
-
browserName: 'bidi',
|
|
743
|
-
directory: undefined,
|
|
744
|
-
executablePath: () => undefined,
|
|
745
|
-
executablePathOrDie: () => '',
|
|
746
|
-
installType: 'none',
|
|
747
|
-
_validateHostRequirements: () => Promise.resolve(),
|
|
748
|
-
downloadURLs: [],
|
|
749
|
-
_install: () => Promise.resolve(),
|
|
750
|
-
_dependencyGroup: 'tools',
|
|
776
|
+
_dependencyGroup: "tools",
|
|
751
777
|
_isHermeticInstallation: true
|
|
752
778
|
});
|
|
753
779
|
}
|
|
@@ -755,27 +781,38 @@ class Registry {
|
|
|
755
781
|
const executablePath = (sdkLanguage, shouldThrow) => {
|
|
756
782
|
const suffix = lookAt[process.platform];
|
|
757
783
|
if (!suffix) {
|
|
758
|
-
if (shouldThrow)
|
|
759
|
-
|
|
784
|
+
if (shouldThrow)
|
|
785
|
+
throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
|
|
786
|
+
return void 0;
|
|
760
787
|
}
|
|
761
|
-
const prefixes = process.platform ===
|
|
788
|
+
const prefixes = process.platform === "win32" ? [
|
|
789
|
+
process.env.LOCALAPPDATA,
|
|
790
|
+
process.env.PROGRAMFILES,
|
|
791
|
+
process.env["PROGRAMFILES(X86)"],
|
|
792
|
+
// In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
|
|
793
|
+
process.env.HOMEDRIVE + "\\Program Files",
|
|
794
|
+
process.env.HOMEDRIVE + "\\Program Files (x86)"
|
|
795
|
+
].filter(Boolean) : [""];
|
|
762
796
|
for (const prefix of prefixes) {
|
|
763
|
-
const
|
|
764
|
-
if ((0,
|
|
797
|
+
const executablePath2 = import_path.default.join(prefix, suffix);
|
|
798
|
+
if ((0, import_fileUtils.canAccessFile)(executablePath2))
|
|
799
|
+
return executablePath2;
|
|
765
800
|
}
|
|
766
|
-
if (!shouldThrow)
|
|
767
|
-
|
|
768
|
-
const
|
|
801
|
+
if (!shouldThrow)
|
|
802
|
+
return void 0;
|
|
803
|
+
const location = prefixes.length ? ` at ${import_path.default.join(prefixes[0], suffix)}` : ``;
|
|
804
|
+
const installation = install ? `
|
|
805
|
+
Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
|
|
769
806
|
throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
|
|
770
807
|
};
|
|
771
808
|
return {
|
|
772
|
-
type:
|
|
809
|
+
type: "channel",
|
|
773
810
|
name,
|
|
774
|
-
browserName:
|
|
775
|
-
directory:
|
|
776
|
-
executablePath: sdkLanguage => executablePath(sdkLanguage, false),
|
|
777
|
-
executablePathOrDie: sdkLanguage => executablePath(sdkLanguage, true),
|
|
778
|
-
installType: install ?
|
|
811
|
+
browserName: "chromium",
|
|
812
|
+
directory: void 0,
|
|
813
|
+
executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
|
|
814
|
+
executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
|
|
815
|
+
installType: install ? "install-script" : "none",
|
|
779
816
|
_validateHostRequirements: () => Promise.resolve(),
|
|
780
817
|
_isHermeticInstallation: false,
|
|
781
818
|
_install: install
|
|
@@ -785,59 +822,76 @@ class Registry {
|
|
|
785
822
|
const executablePath = (sdkLanguage, shouldThrow) => {
|
|
786
823
|
const suffix = lookAt[process.platform];
|
|
787
824
|
if (!suffix) {
|
|
788
|
-
if (shouldThrow)
|
|
789
|
-
|
|
825
|
+
if (shouldThrow)
|
|
826
|
+
throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);
|
|
827
|
+
return void 0;
|
|
790
828
|
}
|
|
791
|
-
const
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
829
|
+
const prefixes = process.platform === "win32" ? [
|
|
830
|
+
process.env.LOCALAPPDATA,
|
|
831
|
+
process.env.PROGRAMFILES,
|
|
832
|
+
process.env["PROGRAMFILES(X86)"],
|
|
833
|
+
// In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
|
|
834
|
+
process.env.HOMEDRIVE + "\\Program Files",
|
|
835
|
+
process.env.HOMEDRIVE + "\\Program Files (x86)"
|
|
836
|
+
].filter(Boolean) : [""];
|
|
837
|
+
for (const prefix of prefixes) {
|
|
838
|
+
const executablePath2 = import_path.default.join(prefix, suffix);
|
|
839
|
+
if ((0, import_fileUtils.canAccessFile)(executablePath2))
|
|
840
|
+
return executablePath2;
|
|
799
841
|
}
|
|
800
|
-
if (shouldThrow)
|
|
801
|
-
|
|
842
|
+
if (shouldThrow)
|
|
843
|
+
throw new Error(`Cannot find Firefox installation for channel '${name}' at the standard system paths.`);
|
|
844
|
+
return void 0;
|
|
802
845
|
};
|
|
803
846
|
return {
|
|
804
|
-
type:
|
|
847
|
+
type: "channel",
|
|
805
848
|
name,
|
|
806
|
-
browserName:
|
|
807
|
-
directory:
|
|
808
|
-
executablePath: sdkLanguage => executablePath(sdkLanguage, false),
|
|
809
|
-
executablePathOrDie: sdkLanguage => executablePath(sdkLanguage, true),
|
|
810
|
-
installType:
|
|
849
|
+
browserName: "_bidiFirefox",
|
|
850
|
+
directory: void 0,
|
|
851
|
+
executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
|
|
852
|
+
executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
|
|
853
|
+
installType: "none",
|
|
811
854
|
_validateHostRequirements: () => Promise.resolve(),
|
|
812
855
|
_isHermeticInstallation: true,
|
|
813
856
|
_install: install
|
|
814
857
|
};
|
|
815
858
|
}
|
|
816
|
-
|
|
859
|
+
_createBidiChromiumChannel(name, lookAt, install) {
|
|
817
860
|
const executablePath = (sdkLanguage, shouldThrow) => {
|
|
818
861
|
const suffix = lookAt[process.platform];
|
|
819
862
|
if (!suffix) {
|
|
820
|
-
if (shouldThrow)
|
|
821
|
-
|
|
863
|
+
if (shouldThrow)
|
|
864
|
+
throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
|
|
865
|
+
return void 0;
|
|
822
866
|
}
|
|
823
|
-
const prefixes = process.platform ===
|
|
867
|
+
const prefixes = process.platform === "win32" ? [
|
|
868
|
+
process.env.LOCALAPPDATA,
|
|
869
|
+
process.env.PROGRAMFILES,
|
|
870
|
+
process.env["PROGRAMFILES(X86)"],
|
|
871
|
+
// In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
|
|
872
|
+
process.env.HOMEDRIVE + "\\Program Files",
|
|
873
|
+
process.env.HOMEDRIVE + "\\Program Files (x86)"
|
|
874
|
+
].filter(Boolean) : [""];
|
|
824
875
|
for (const prefix of prefixes) {
|
|
825
|
-
const
|
|
826
|
-
if ((0,
|
|
876
|
+
const executablePath2 = import_path.default.join(prefix, suffix);
|
|
877
|
+
if ((0, import_fileUtils.canAccessFile)(executablePath2))
|
|
878
|
+
return executablePath2;
|
|
827
879
|
}
|
|
828
|
-
if (!shouldThrow)
|
|
829
|
-
|
|
830
|
-
const
|
|
831
|
-
|
|
880
|
+
if (!shouldThrow)
|
|
881
|
+
return void 0;
|
|
882
|
+
const location = prefixes.length ? ` at ${import_path.default.join(prefixes[0], suffix)}` : ``;
|
|
883
|
+
const installation = install ? `
|
|
884
|
+
Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
|
|
885
|
+
throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
|
|
832
886
|
};
|
|
833
887
|
return {
|
|
834
|
-
type:
|
|
888
|
+
type: "channel",
|
|
835
889
|
name,
|
|
836
|
-
browserName:
|
|
837
|
-
directory:
|
|
838
|
-
executablePath: sdkLanguage => executablePath(sdkLanguage, false),
|
|
839
|
-
executablePathOrDie: sdkLanguage => executablePath(sdkLanguage, true),
|
|
840
|
-
installType: install ?
|
|
890
|
+
browserName: "_bidiChromium",
|
|
891
|
+
directory: void 0,
|
|
892
|
+
executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
|
|
893
|
+
executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
|
|
894
|
+
installType: install ? "install-script" : "none",
|
|
841
895
|
_validateHostRequirements: () => Promise.resolve(),
|
|
842
896
|
_isHermeticInstallation: false,
|
|
843
897
|
_install: install
|
|
@@ -847,38 +901,41 @@ class Registry {
|
|
|
847
901
|
return this._executables;
|
|
848
902
|
}
|
|
849
903
|
findExecutable(name) {
|
|
850
|
-
return this._executables.find(b => b.name === name);
|
|
904
|
+
return this._executables.find((b) => b.name === name);
|
|
851
905
|
}
|
|
852
906
|
defaultExecutables() {
|
|
853
|
-
return this._executables.filter(e => e.installType ===
|
|
907
|
+
return this._executables.filter((e) => e.installType === "download-by-default");
|
|
854
908
|
}
|
|
855
909
|
_dedupe(executables) {
|
|
856
910
|
return Array.from(new Set(executables));
|
|
857
911
|
}
|
|
858
912
|
async _validateHostRequirements(sdkLanguage, browserDirectory, linuxLddDirectories, dlOpenLibraries, windowsExeAndDllDirectories) {
|
|
859
|
-
if (
|
|
860
|
-
|
|
913
|
+
if (import_os.default.platform() === "linux")
|
|
914
|
+
return await (0, import_dependencies2.validateDependenciesLinux)(sdkLanguage, linuxLddDirectories.map((d) => import_path.default.join(browserDirectory, d)), dlOpenLibraries);
|
|
915
|
+
if (import_os.default.platform() === "win32" && import_os.default.arch() === "x64")
|
|
916
|
+
return await (0, import_dependencies2.validateDependenciesWindows)(sdkLanguage, windowsExeAndDllDirectories.map((d) => import_path.default.join(browserDirectory, d)));
|
|
861
917
|
}
|
|
862
918
|
async installDeps(executablesToInstallDeps, dryRun) {
|
|
863
919
|
const executables = this._dedupe(executablesToInstallDeps);
|
|
864
|
-
const targets = new Set();
|
|
920
|
+
const targets = /* @__PURE__ */ new Set();
|
|
865
921
|
for (const executable of executables) {
|
|
866
|
-
if (executable._dependencyGroup)
|
|
922
|
+
if (executable._dependencyGroup)
|
|
923
|
+
targets.add(executable._dependencyGroup);
|
|
867
924
|
}
|
|
868
|
-
targets.add(
|
|
869
|
-
if (
|
|
870
|
-
|
|
925
|
+
targets.add("tools");
|
|
926
|
+
if (import_os.default.platform() === "win32")
|
|
927
|
+
return await (0, import_dependencies2.installDependenciesWindows)(targets, dryRun);
|
|
928
|
+
if (import_os.default.platform() === "linux")
|
|
929
|
+
return await (0, import_dependencies2.installDependenciesLinux)(targets, dryRun);
|
|
871
930
|
}
|
|
872
931
|
async install(executablesToInstall, forceReinstall) {
|
|
873
932
|
const executables = this._dedupe(executablesToInstall);
|
|
874
|
-
await
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
const lockfilePath = _path.default.join(registryDirectory, '__dirlock');
|
|
878
|
-
const linksDir = _path.default.join(registryDirectory, '.links');
|
|
933
|
+
await import_fs.default.promises.mkdir(registryDirectory, { recursive: true });
|
|
934
|
+
const lockfilePath = import_path.default.join(registryDirectory, "__dirlock");
|
|
935
|
+
const linksDir = import_path.default.join(registryDirectory, ".links");
|
|
879
936
|
let releaseLock;
|
|
880
937
|
try {
|
|
881
|
-
releaseLock = await
|
|
938
|
+
releaseLock = await import_utilsBundle.lockfile.lock(registryDirectory, {
|
|
882
939
|
retries: {
|
|
883
940
|
// Retry 20 times during 10 minutes with
|
|
884
941
|
// exponential back-off.
|
|
@@ -886,274 +943,344 @@ class Registry {
|
|
|
886
943
|
retries: 20,
|
|
887
944
|
factor: 1.27579
|
|
888
945
|
},
|
|
889
|
-
onCompromised: err => {
|
|
946
|
+
onCompromised: (err) => {
|
|
890
947
|
throw new Error(`${err.message} Path: ${lockfilePath}`);
|
|
891
948
|
},
|
|
892
949
|
lockfilePath
|
|
893
950
|
});
|
|
894
|
-
|
|
895
|
-
await
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
await _fs.default.promises.writeFile(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
|
|
899
|
-
|
|
900
|
-
// Remove stale browsers.
|
|
901
|
-
await this._validateInstallationCache(linksDir);
|
|
902
|
-
|
|
903
|
-
// Install browsers for this package.
|
|
951
|
+
await import_fs.default.promises.mkdir(linksDir, { recursive: true });
|
|
952
|
+
await import_fs.default.promises.writeFile(import_path.default.join(linksDir, (0, import_utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
|
|
953
|
+
if (!(0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_GC"))
|
|
954
|
+
await this._validateInstallationCache(linksDir);
|
|
904
955
|
for (const executable of executables) {
|
|
905
|
-
if (!executable._install)
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
956
|
+
if (!executable._install)
|
|
957
|
+
throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);
|
|
958
|
+
const { embedderName } = (0, import_userAgent.getEmbedderName)();
|
|
959
|
+
if (!(0, import_utils.getAsBooleanFromENV)("CI") && !executable._isHermeticInstallation && !forceReinstall && executable.executablePath(embedderName)) {
|
|
960
|
+
const command = buildPlaywrightCLICommand(embedderName, "install --force " + executable.name);
|
|
961
|
+
process.stderr.write("\n" + (0, import_ascii.wrapInASCIIBox)([
|
|
962
|
+
`ATTENTION: "${executable.name}" is already installed on the system!`,
|
|
963
|
+
``,
|
|
964
|
+
`"${executable.name}" installation is not hermetic; installing newer version`,
|
|
965
|
+
`requires *removal* of a current installation first.`,
|
|
966
|
+
``,
|
|
967
|
+
`To *uninstall* current version and re-install latest "${executable.name}":`,
|
|
968
|
+
``,
|
|
969
|
+
`- Close all running instances of "${executable.name}", if any`,
|
|
970
|
+
`- Use "--force" to install browser:`,
|
|
971
|
+
``,
|
|
972
|
+
` ${command}`,
|
|
973
|
+
``,
|
|
974
|
+
`<3 Playwright Team`
|
|
975
|
+
].join("\n"), 1) + "\n\n");
|
|
976
|
+
return;
|
|
912
977
|
}
|
|
913
978
|
await executable._install();
|
|
914
979
|
}
|
|
915
980
|
} catch (e) {
|
|
916
|
-
if (e.code ===
|
|
917
|
-
const rmCommand = process.platform ===
|
|
918
|
-
throw new Error(
|
|
981
|
+
if (e.code === "ELOCKED") {
|
|
982
|
+
const rmCommand = process.platform === "win32" ? "rm -R" : "rm -rf";
|
|
983
|
+
throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)([
|
|
984
|
+
`An active lockfile is found at:`,
|
|
985
|
+
``,
|
|
986
|
+
` ${lockfilePath}`,
|
|
987
|
+
``,
|
|
988
|
+
`Either:`,
|
|
989
|
+
`- wait a few minutes if other Playwright is installing browsers in parallel`,
|
|
990
|
+
`- remove lock manually with:`,
|
|
991
|
+
``,
|
|
992
|
+
` ${rmCommand} ${lockfilePath}`,
|
|
993
|
+
``,
|
|
994
|
+
`<3 Playwright Team`
|
|
995
|
+
].join("\n"), 1));
|
|
919
996
|
} else {
|
|
920
997
|
throw e;
|
|
921
998
|
}
|
|
922
999
|
} finally {
|
|
923
|
-
if (releaseLock)
|
|
1000
|
+
if (releaseLock)
|
|
1001
|
+
await releaseLock();
|
|
924
1002
|
}
|
|
925
1003
|
}
|
|
926
1004
|
async uninstall(all) {
|
|
927
|
-
const linksDir =
|
|
1005
|
+
const linksDir = import_path.default.join(registryDirectory, ".links");
|
|
928
1006
|
if (all) {
|
|
929
|
-
const links = await
|
|
930
|
-
for (const link of links)
|
|
1007
|
+
const links = await import_fs.default.promises.readdir(linksDir).catch(() => []);
|
|
1008
|
+
for (const link of links)
|
|
1009
|
+
await import_fs.default.promises.unlink(import_path.default.join(linksDir, link));
|
|
931
1010
|
} else {
|
|
932
|
-
await
|
|
1011
|
+
await import_fs.default.promises.unlink(import_path.default.join(linksDir, (0, import_utils.calculateSha1)(PACKAGE_PATH))).catch(() => {
|
|
1012
|
+
});
|
|
933
1013
|
}
|
|
934
|
-
|
|
935
|
-
// Remove stale browsers.
|
|
936
1014
|
await this._validateInstallationCache(linksDir);
|
|
937
1015
|
return {
|
|
938
|
-
numberOfBrowsersLeft: (await
|
|
1016
|
+
numberOfBrowsersLeft: (await import_fs.default.promises.readdir(registryDirectory).catch(() => [])).filter((browserDirectory) => isBrowserDirectory(browserDirectory)).length
|
|
939
1017
|
};
|
|
940
1018
|
}
|
|
941
1019
|
async validateHostRequirementsForExecutablesIfNeeded(executables, sdkLanguage) {
|
|
942
|
-
if ((0,
|
|
943
|
-
process.stderr.write(
|
|
1020
|
+
if ((0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS")) {
|
|
1021
|
+
process.stderr.write("Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.\n");
|
|
944
1022
|
return;
|
|
945
1023
|
}
|
|
946
|
-
for (const executable of executables)
|
|
1024
|
+
for (const executable of executables)
|
|
1025
|
+
await this._validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage);
|
|
947
1026
|
}
|
|
948
1027
|
async _validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage) {
|
|
949
|
-
const kMaximumReValidationPeriod = 30 * 24 * 60 * 60 *
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
const markerFile =
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
1028
|
+
const kMaximumReValidationPeriod = 30 * 24 * 60 * 60 * 1e3;
|
|
1029
|
+
if (!executable.directory)
|
|
1030
|
+
return;
|
|
1031
|
+
const markerFile = import_path.default.join(executable.directory, "DEPENDENCIES_VALIDATED");
|
|
1032
|
+
if (await import_fs.default.promises.stat(markerFile).then((stat) => Date.now() - stat.mtime.getTime() < kMaximumReValidationPeriod).catch(() => false))
|
|
1033
|
+
return;
|
|
1034
|
+
import_debugLogger.debugLogger.log("install", `validating host requirements for "${executable.name}"`);
|
|
956
1035
|
try {
|
|
957
1036
|
await executable._validateHostRequirements(sdkLanguage);
|
|
958
|
-
|
|
1037
|
+
import_debugLogger.debugLogger.log("install", `validation passed for ${executable.name}`);
|
|
959
1038
|
} catch (error) {
|
|
960
|
-
|
|
1039
|
+
import_debugLogger.debugLogger.log("install", `validation failed for ${executable.name}`);
|
|
961
1040
|
throw error;
|
|
962
1041
|
}
|
|
963
|
-
await
|
|
1042
|
+
await import_fs.default.promises.writeFile(markerFile, "").catch(() => {
|
|
1043
|
+
});
|
|
964
1044
|
}
|
|
965
1045
|
_downloadURLs(descriptor) {
|
|
966
1046
|
const paths = DOWNLOAD_PATHS[descriptor.name];
|
|
967
|
-
const downloadPathTemplate = paths[
|
|
968
|
-
if (!downloadPathTemplate)
|
|
1047
|
+
const downloadPathTemplate = paths[import_hostPlatform.hostPlatform] || paths["<unknown>"];
|
|
1048
|
+
if (!downloadPathTemplate)
|
|
1049
|
+
return [];
|
|
969
1050
|
const downloadPath = util.format(downloadPathTemplate, descriptor.revision);
|
|
970
|
-
let downloadURLs = PLAYWRIGHT_CDN_MIRRORS.map(mirror => `${mirror}/${downloadPath}`);
|
|
1051
|
+
let downloadURLs = PLAYWRIGHT_CDN_MIRRORS.map((mirror) => `${mirror}/${downloadPath}`);
|
|
971
1052
|
let downloadHostEnv;
|
|
972
|
-
if (descriptor.name.startsWith(
|
|
973
|
-
|
|
974
|
-
if (
|
|
1053
|
+
if (descriptor.name.startsWith("chromium"))
|
|
1054
|
+
downloadHostEnv = "PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST";
|
|
1055
|
+
else if (descriptor.name.startsWith("firefox"))
|
|
1056
|
+
downloadHostEnv = "PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST";
|
|
1057
|
+
else if (descriptor.name.startsWith("webkit"))
|
|
1058
|
+
downloadHostEnv = "PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST";
|
|
1059
|
+
const customHostOverride = downloadHostEnv && (0, import_utils.getFromENV)(downloadHostEnv) || (0, import_utils.getFromENV)("PLAYWRIGHT_DOWNLOAD_HOST");
|
|
1060
|
+
if (customHostOverride)
|
|
1061
|
+
downloadURLs = [`${customHostOverride}/${downloadPath}`];
|
|
975
1062
|
return downloadURLs;
|
|
976
1063
|
}
|
|
977
1064
|
async _downloadExecutable(descriptor, executablePath) {
|
|
978
1065
|
const downloadURLs = this._downloadURLs(descriptor);
|
|
979
|
-
if (!downloadURLs.length)
|
|
980
|
-
|
|
1066
|
+
if (!downloadURLs.length)
|
|
1067
|
+
throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${import_hostPlatform.hostPlatform}`);
|
|
1068
|
+
if (!import_hostPlatform.isOfficiallySupportedPlatform)
|
|
1069
|
+
(0, import_browserFetcher.logPolitely)(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${import_hostPlatform.hostPlatform}.`);
|
|
981
1070
|
if (descriptor.hasRevisionOverride) {
|
|
982
|
-
const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${
|
|
983
|
-
if (process.env.GITHUB_ACTIONS)
|
|
984
|
-
|
|
1071
|
+
const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${import_hostPlatform.hostPlatform}. Please update to the latest version of your operating system to test up-to-date browsers.`;
|
|
1072
|
+
if (process.env.GITHUB_ACTIONS)
|
|
1073
|
+
console.log(`::warning title=Playwright::${message}`);
|
|
1074
|
+
else
|
|
1075
|
+
(0, import_browserFetcher.logPolitely)(message);
|
|
985
1076
|
}
|
|
986
|
-
const displayName = descriptor.name.split(
|
|
987
|
-
return word ===
|
|
988
|
-
}).join(
|
|
1077
|
+
const displayName = descriptor.name.split("-").map((word) => {
|
|
1078
|
+
return word === "ffmpeg" ? "FFMPEG" : word.charAt(0).toUpperCase() + word.slice(1);
|
|
1079
|
+
}).join(" ");
|
|
989
1080
|
const title = descriptor.browserVersion ? `${displayName} ${descriptor.browserVersion} (playwright build v${descriptor.revision})` : `${displayName} playwright build v${descriptor.revision}`;
|
|
990
|
-
const downloadFileName = `playwright-download-${descriptor.name}-${
|
|
991
|
-
const
|
|
992
|
-
const
|
|
993
|
-
await (0,
|
|
994
|
-
throw new Error(`Failed to download ${title}, caused by
|
|
1081
|
+
const downloadFileName = `playwright-download-${descriptor.name}-${import_hostPlatform.hostPlatform}-${descriptor.revision}.zip`;
|
|
1082
|
+
const downloadSocketTimeoutEnv = (0, import_utils.getFromENV)("PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT");
|
|
1083
|
+
const downloadSocketTimeout = +(downloadSocketTimeoutEnv || "0") || import_network.NET_DEFAULT_TIMEOUT;
|
|
1084
|
+
await (0, import_browserFetcher.downloadBrowserWithProgressBar)(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadSocketTimeout).catch((e) => {
|
|
1085
|
+
throw new Error(`Failed to download ${title}, caused by
|
|
1086
|
+
${e.stack}`);
|
|
995
1087
|
});
|
|
996
1088
|
}
|
|
997
1089
|
async _installMSEdgeChannel(channel, scripts) {
|
|
998
1090
|
const scriptArgs = [];
|
|
999
|
-
if (process.platform !==
|
|
1000
|
-
const products = lowercaseAllKeys(JSON.parse(await (0,
|
|
1001
|
-
url: 'https://edgeupdates.microsoft.com/api/products'
|
|
1002
|
-
})));
|
|
1091
|
+
if (process.platform !== "linux") {
|
|
1092
|
+
const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)(void 0, { url: "https://edgeupdates.microsoft.com/api/products" })));
|
|
1003
1093
|
const productName = {
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1094
|
+
"msedge": "Stable",
|
|
1095
|
+
"msedge-beta": "Beta",
|
|
1096
|
+
"msedge-dev": "Dev"
|
|
1007
1097
|
}[channel];
|
|
1008
|
-
const product = products.find(
|
|
1098
|
+
const product = products.find((product2) => product2.product === productName);
|
|
1009
1099
|
const searchConfig = {
|
|
1010
|
-
darwin: {
|
|
1011
|
-
|
|
1012
|
-
arch: 'universal',
|
|
1013
|
-
artifact: 'pkg'
|
|
1014
|
-
},
|
|
1015
|
-
win32: {
|
|
1016
|
-
platform: 'Windows',
|
|
1017
|
-
arch: 'x64',
|
|
1018
|
-
artifact: 'msi'
|
|
1019
|
-
}
|
|
1100
|
+
darwin: { platform: "MacOS", arch: "universal", artifact: "pkg" },
|
|
1101
|
+
win32: { platform: "Windows", arch: "x64", artifact: "msi" }
|
|
1020
1102
|
}[process.platform];
|
|
1021
|
-
const release = searchConfig ? product.releases.find(
|
|
1022
|
-
const artifact = release ? release.artifacts.find(
|
|
1023
|
-
if (artifact)
|
|
1103
|
+
const release = searchConfig ? product.releases.find((release2) => release2.platform === searchConfig.platform && release2.architecture === searchConfig.arch && release2.artifacts.length > 0) : null;
|
|
1104
|
+
const artifact = release ? release.artifacts.find((artifact2) => artifact2.artifactname === searchConfig.artifact) : null;
|
|
1105
|
+
if (artifact)
|
|
1106
|
+
scriptArgs.push(
|
|
1107
|
+
artifact.location
|
|
1108
|
+
/* url */
|
|
1109
|
+
);
|
|
1110
|
+
else
|
|
1111
|
+
throw new Error(`Cannot install ${channel} on ${process.platform}`);
|
|
1024
1112
|
}
|
|
1025
1113
|
await this._installChromiumChannel(channel, scripts, scriptArgs);
|
|
1026
1114
|
}
|
|
1027
1115
|
async _installChromiumChannel(channel, scripts, scriptArgs = []) {
|
|
1028
1116
|
const scriptName = scripts[process.platform];
|
|
1029
|
-
if (!scriptName)
|
|
1117
|
+
if (!scriptName)
|
|
1118
|
+
throw new Error(`Cannot install ${channel} on ${process.platform}`);
|
|
1030
1119
|
const cwd = BIN_PATH;
|
|
1031
|
-
const isPowerShell = scriptName.endsWith(
|
|
1120
|
+
const isPowerShell = scriptName.endsWith(".ps1");
|
|
1032
1121
|
if (isPowerShell) {
|
|
1033
|
-
const args = [
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1122
|
+
const args = [
|
|
1123
|
+
"-ExecutionPolicy",
|
|
1124
|
+
"Bypass",
|
|
1125
|
+
"-File",
|
|
1126
|
+
import_path.default.join(BIN_PATH, scriptName),
|
|
1127
|
+
...scriptArgs
|
|
1128
|
+
];
|
|
1129
|
+
const { code } = await (0, import_spawnAsync.spawnAsync)("powershell.exe", args, { cwd, stdio: "inherit" });
|
|
1130
|
+
if (code !== 0)
|
|
1131
|
+
throw new Error(`Failed to install ${channel}`);
|
|
1041
1132
|
} else {
|
|
1042
|
-
const {
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
const {
|
|
1049
|
-
code
|
|
1050
|
-
} = await (0, _spawnAsync.spawnAsync)(command, args, {
|
|
1051
|
-
cwd,
|
|
1052
|
-
stdio: 'inherit'
|
|
1053
|
-
});
|
|
1054
|
-
if (code !== 0) throw new Error(`Failed to install ${channel}`);
|
|
1133
|
+
const { command, args, elevatedPermissions } = await (0, import_dependencies.transformCommandsForRoot)([`bash "${import_path.default.join(BIN_PATH, scriptName)}" ${scriptArgs.join("")}`]);
|
|
1134
|
+
if (elevatedPermissions)
|
|
1135
|
+
console.log("Switching to root user to install dependencies...");
|
|
1136
|
+
const { code } = await (0, import_spawnAsync.spawnAsync)(command, args, { cwd, stdio: "inherit" });
|
|
1137
|
+
if (code !== 0)
|
|
1138
|
+
throw new Error(`Failed to install ${channel}`);
|
|
1055
1139
|
}
|
|
1056
1140
|
}
|
|
1141
|
+
async listInstalledBrowsers() {
|
|
1142
|
+
const linksDir = import_path.default.join(registryDirectory, ".links");
|
|
1143
|
+
const { browsers } = await this._traverseBrowserInstallations(linksDir);
|
|
1144
|
+
return browsers.filter((browser) => import_fs.default.existsSync(browser.browserPath));
|
|
1145
|
+
}
|
|
1057
1146
|
async _validateInstallationCache(linksDir) {
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1147
|
+
const { browsers, brokenLinks } = await this._traverseBrowserInstallations(linksDir);
|
|
1148
|
+
await this._deleteStaleBrowsers(browsers);
|
|
1149
|
+
await this._deleteBrokenInstallations(brokenLinks);
|
|
1150
|
+
}
|
|
1151
|
+
async _traverseBrowserInstallations(linksDir) {
|
|
1152
|
+
const browserList = [];
|
|
1153
|
+
const brokenLinks = [];
|
|
1154
|
+
for (const fileName of await import_fs.default.promises.readdir(linksDir)) {
|
|
1155
|
+
const linkPath = import_path.default.join(linksDir, fileName);
|
|
1156
|
+
let linkTarget = "";
|
|
1063
1157
|
try {
|
|
1064
|
-
linkTarget = (await
|
|
1065
|
-
const browsersJSON = require(
|
|
1158
|
+
linkTarget = (await import_fs.default.promises.readFile(linkPath)).toString();
|
|
1159
|
+
const browsersJSON = require(import_path.default.join(linkTarget, "browsers.json"));
|
|
1066
1160
|
const descriptors = readDescriptors(browsersJSON);
|
|
1067
1161
|
for (const browserName of allDownloadable) {
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
const shouldHaveMarkerFile = browserName === 'chromium' && (browserRevision >= 786218 || browserRevision < 300000) || browserName === 'firefox' && browserRevision >= 1128 || browserName === 'webkit' && browserRevision >= 1307 ||
|
|
1080
|
-
// All new applications have a marker file right away.
|
|
1081
|
-
browserName !== 'firefox' && browserName !== 'chromium' && browserName !== 'webkit';
|
|
1082
|
-
if (!shouldHaveMarkerFile || (await (0, _fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(usedBrowserPath)))) usedBrowserPaths.add(usedBrowserPath);
|
|
1162
|
+
const descriptor = descriptors.find((d) => d.name === browserName);
|
|
1163
|
+
if (!descriptor)
|
|
1164
|
+
continue;
|
|
1165
|
+
const browserPath = descriptor.dir;
|
|
1166
|
+
const browserVersion = parseInt(descriptor.revision, 10);
|
|
1167
|
+
browserList.push({
|
|
1168
|
+
browserName,
|
|
1169
|
+
browserVersion,
|
|
1170
|
+
browserPath,
|
|
1171
|
+
referenceDir: linkTarget
|
|
1172
|
+
});
|
|
1083
1173
|
}
|
|
1084
1174
|
} catch (e) {
|
|
1085
|
-
|
|
1175
|
+
brokenLinks.push(linkPath);
|
|
1086
1176
|
}
|
|
1087
1177
|
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
const
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
await (0,
|
|
1178
|
+
return { browsers: browserList, brokenLinks };
|
|
1179
|
+
}
|
|
1180
|
+
async _deleteStaleBrowsers(browserList) {
|
|
1181
|
+
const usedBrowserPaths = /* @__PURE__ */ new Set();
|
|
1182
|
+
for (const browser of browserList) {
|
|
1183
|
+
const { browserName, browserVersion, browserPath } = browser;
|
|
1184
|
+
const shouldHaveMarkerFile = browserName === "chromium" && (browserVersion >= 786218 || browserVersion < 3e5) || browserName === "firefox" && browserVersion >= 1128 || browserName === "webkit" && browserVersion >= 1307 || // All new applications have a marker file right away.
|
|
1185
|
+
browserName !== "firefox" && browserName !== "chromium" && browserName !== "webkit";
|
|
1186
|
+
if (!shouldHaveMarkerFile || await (0, import_fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(browserPath)))
|
|
1187
|
+
usedBrowserPaths.add(browserPath);
|
|
1097
1188
|
}
|
|
1189
|
+
let downloadedBrowsers = (await import_fs.default.promises.readdir(registryDirectory)).map((file) => import_path.default.join(registryDirectory, file));
|
|
1190
|
+
downloadedBrowsers = downloadedBrowsers.filter((file) => isBrowserDirectory(file));
|
|
1191
|
+
const directories = new Set(downloadedBrowsers);
|
|
1192
|
+
for (const browserDirectory of usedBrowserPaths)
|
|
1193
|
+
directories.delete(browserDirectory);
|
|
1194
|
+
for (const directory of directories)
|
|
1195
|
+
(0, import_browserFetcher.logPolitely)("Removing unused browser at " + directory);
|
|
1196
|
+
await (0, import_fileUtils.removeFolders)([...directories]);
|
|
1197
|
+
}
|
|
1198
|
+
async _deleteBrokenInstallations(brokenLinks) {
|
|
1199
|
+
for (const linkPath of brokenLinks)
|
|
1200
|
+
await import_fs.default.promises.unlink(linkPath).catch((e) => {
|
|
1201
|
+
});
|
|
1098
1202
|
}
|
|
1099
1203
|
}
|
|
1100
|
-
exports.Registry = Registry;
|
|
1101
1204
|
function browserDirectoryToMarkerFilePath(browserDirectory) {
|
|
1102
|
-
return
|
|
1205
|
+
return import_path.default.join(browserDirectory, "INSTALLATION_COMPLETE");
|
|
1103
1206
|
}
|
|
1104
1207
|
function buildPlaywrightCLICommand(sdkLanguage, parameters) {
|
|
1105
1208
|
switch (sdkLanguage) {
|
|
1106
|
-
case
|
|
1209
|
+
case "python":
|
|
1107
1210
|
return `playwright ${parameters}`;
|
|
1108
|
-
case
|
|
1211
|
+
case "java":
|
|
1109
1212
|
return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="${parameters}"`;
|
|
1110
|
-
case
|
|
1213
|
+
case "csharp":
|
|
1111
1214
|
return `pwsh bin/Debug/netX/playwright.ps1 ${parameters}`;
|
|
1112
|
-
default:
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
}
|
|
1215
|
+
default: {
|
|
1216
|
+
const packageManagerCommand = (0, import_utils.getPackageManagerExecCommand)();
|
|
1217
|
+
return `${packageManagerCommand} playwright ${parameters}`;
|
|
1218
|
+
}
|
|
1117
1219
|
}
|
|
1118
1220
|
}
|
|
1119
1221
|
async function installBrowsersForNpmInstall(browsers) {
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
(0, _browserFetcher.logPolitely)('Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set');
|
|
1222
|
+
if ((0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD")) {
|
|
1223
|
+
(0, import_browserFetcher.logPolitely)("Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set");
|
|
1123
1224
|
return false;
|
|
1124
1225
|
}
|
|
1125
1226
|
const executables = [];
|
|
1126
|
-
if (process.platform ===
|
|
1227
|
+
if (process.platform === "win32")
|
|
1228
|
+
executables.push(registry.findExecutable("winldd"));
|
|
1127
1229
|
for (const browserName of browsers) {
|
|
1128
1230
|
const executable = registry.findExecutable(browserName);
|
|
1129
|
-
if (!executable || executable.installType ===
|
|
1231
|
+
if (!executable || executable.installType === "none")
|
|
1232
|
+
throw new Error(`Cannot install ${browserName}`);
|
|
1130
1233
|
executables.push(executable);
|
|
1131
1234
|
}
|
|
1132
|
-
await registry.install(
|
|
1235
|
+
await registry.install(
|
|
1236
|
+
executables,
|
|
1237
|
+
false
|
|
1238
|
+
/* forceReinstall */
|
|
1239
|
+
);
|
|
1133
1240
|
}
|
|
1134
|
-
function
|
|
1135
|
-
// Fall back to the stable channels of popular vendors to work out of the box.
|
|
1136
|
-
// Null means no installation and no channels found.
|
|
1241
|
+
function findChromiumChannelBestEffort(sdkLanguage) {
|
|
1137
1242
|
let channel = null;
|
|
1138
|
-
for (const name of [
|
|
1243
|
+
for (const name of ["chromium", "chrome", "msedge"]) {
|
|
1139
1244
|
try {
|
|
1140
1245
|
registry.findExecutable(name).executablePathOrDie(sdkLanguage);
|
|
1141
|
-
channel = name ===
|
|
1246
|
+
channel = name === "chromium" ? void 0 : name;
|
|
1142
1247
|
break;
|
|
1143
|
-
} catch (e) {
|
|
1248
|
+
} catch (e) {
|
|
1249
|
+
}
|
|
1144
1250
|
}
|
|
1145
1251
|
if (channel === null) {
|
|
1146
1252
|
const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install chromium`);
|
|
1147
|
-
const prettyMessage = [
|
|
1148
|
-
|
|
1253
|
+
const prettyMessage = [
|
|
1254
|
+
`No chromium-based browser found on the system.`,
|
|
1255
|
+
`Please run the following command to download one:`,
|
|
1256
|
+
``,
|
|
1257
|
+
` ${installCommand}`,
|
|
1258
|
+
``,
|
|
1259
|
+
`<3 Playwright Team`
|
|
1260
|
+
].join("\n");
|
|
1261
|
+
throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)(prettyMessage, 1));
|
|
1149
1262
|
}
|
|
1150
1263
|
return channel;
|
|
1151
1264
|
}
|
|
1152
1265
|
function lowercaseAllKeys(json) {
|
|
1153
|
-
if (typeof json !==
|
|
1154
|
-
|
|
1266
|
+
if (typeof json !== "object" || !json)
|
|
1267
|
+
return json;
|
|
1268
|
+
if (Array.isArray(json))
|
|
1269
|
+
return json.map(lowercaseAllKeys);
|
|
1155
1270
|
const result = {};
|
|
1156
|
-
for (const [key, value] of Object.entries(json))
|
|
1271
|
+
for (const [key, value] of Object.entries(json))
|
|
1272
|
+
result[key.toLowerCase()] = lowercaseAllKeys(value);
|
|
1157
1273
|
return result;
|
|
1158
1274
|
}
|
|
1159
|
-
const registry =
|
|
1275
|
+
const registry = new Registry(require("../../../browsers.json"));
|
|
1276
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1277
|
+
0 && (module.exports = {
|
|
1278
|
+
Registry,
|
|
1279
|
+
browserDirectoryToMarkerFilePath,
|
|
1280
|
+
buildPlaywrightCLICommand,
|
|
1281
|
+
findChromiumChannelBestEffort,
|
|
1282
|
+
installBrowsersForNpmInstall,
|
|
1283
|
+
registry,
|
|
1284
|
+
registryDirectory,
|
|
1285
|
+
writeDockerVersion
|
|
1286
|
+
});
|