@checkly/playwright-core 1.51.17-beta.1 → 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 -36
- 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-DrMbgOIo.js +0 -16684
- package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
- package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
- package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
- package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
- package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
- package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
- package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
- package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
- package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
- package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
- package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
- package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
- package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
|
@@ -1,99 +1,99 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var screenshotter_exports = {};
|
|
20
|
+
__export(screenshotter_exports, {
|
|
21
|
+
Screenshotter: () => Screenshotter,
|
|
22
|
+
validateScreenshotOptions: () => validateScreenshotOptions
|
|
5
23
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var _multimap = require("../utils/isomorphic/multimap");
|
|
11
|
-
/**
|
|
12
|
-
* Copyright 2019 Google Inc. All rights reserved.
|
|
13
|
-
* Modifications copyright (c) Microsoft Corporation.
|
|
14
|
-
*
|
|
15
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
16
|
-
* you may not use this file except in compliance with the License.
|
|
17
|
-
* You may obtain a copy of the License at
|
|
18
|
-
*
|
|
19
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
-
*
|
|
21
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
23
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
-
* See the License for the specific language governing permissions and
|
|
25
|
-
* limitations under the License.
|
|
26
|
-
*/
|
|
27
|
-
|
|
24
|
+
module.exports = __toCommonJS(screenshotter_exports);
|
|
25
|
+
var import_helper = require("./helper");
|
|
26
|
+
var import_utils = require("../utils");
|
|
27
|
+
var import_multimap = require("../utils/isomorphic/multimap");
|
|
28
28
|
function inPagePrepareForScreenshots(screenshotStyle, hideCaret, disableAnimations, syncAnimations) {
|
|
29
|
-
// In WebKit, sync the animations.
|
|
30
29
|
if (syncAnimations) {
|
|
31
|
-
const style = document.createElement(
|
|
32
|
-
style.textContent =
|
|
30
|
+
const style = document.createElement("style");
|
|
31
|
+
style.textContent = "body {}";
|
|
33
32
|
document.head.appendChild(style);
|
|
34
33
|
document.documentElement.getBoundingClientRect();
|
|
35
34
|
style.remove();
|
|
36
35
|
}
|
|
37
|
-
if (!screenshotStyle && !hideCaret && !disableAnimations)
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if (!screenshotStyle && !hideCaret && !disableAnimations)
|
|
37
|
+
return;
|
|
38
|
+
const collectRoots = (root, roots2 = []) => {
|
|
39
|
+
roots2.push(root);
|
|
40
40
|
const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
41
41
|
do {
|
|
42
42
|
const node = walker.currentNode;
|
|
43
43
|
const shadowRoot = node instanceof Element ? node.shadowRoot : null;
|
|
44
|
-
if (shadowRoot)
|
|
44
|
+
if (shadowRoot)
|
|
45
|
+
collectRoots(shadowRoot, roots2);
|
|
45
46
|
} while (walker.nextNode());
|
|
46
|
-
return
|
|
47
|
+
return roots2;
|
|
47
48
|
};
|
|
48
49
|
const roots = collectRoots(document);
|
|
49
50
|
const cleanupCallbacks = [];
|
|
50
51
|
if (screenshotStyle) {
|
|
51
52
|
for (const root of roots) {
|
|
52
|
-
const styleTag = document.createElement(
|
|
53
|
+
const styleTag = document.createElement("style");
|
|
53
54
|
styleTag.textContent = screenshotStyle;
|
|
54
|
-
if (root === document)
|
|
55
|
+
if (root === document)
|
|
56
|
+
document.documentElement.append(styleTag);
|
|
57
|
+
else
|
|
58
|
+
root.append(styleTag);
|
|
55
59
|
cleanupCallbacks.push(() => {
|
|
56
60
|
styleTag.remove();
|
|
57
61
|
});
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
if (hideCaret) {
|
|
61
|
-
const elements = new Map();
|
|
65
|
+
const elements = /* @__PURE__ */ new Map();
|
|
62
66
|
for (const root of roots) {
|
|
63
|
-
root.querySelectorAll(
|
|
67
|
+
root.querySelectorAll("input,textarea,[contenteditable]").forEach((element) => {
|
|
64
68
|
elements.set(element, {
|
|
65
|
-
value: element.style.getPropertyValue(
|
|
66
|
-
priority: element.style.getPropertyPriority(
|
|
69
|
+
value: element.style.getPropertyValue("caret-color"),
|
|
70
|
+
priority: element.style.getPropertyPriority("caret-color")
|
|
67
71
|
});
|
|
68
|
-
element.style.setProperty(
|
|
72
|
+
element.style.setProperty("caret-color", "transparent", "important");
|
|
69
73
|
});
|
|
70
74
|
}
|
|
71
75
|
cleanupCallbacks.push(() => {
|
|
72
|
-
for (const [element, value] of elements)
|
|
76
|
+
for (const [element, value] of elements)
|
|
77
|
+
element.style.setProperty("caret-color", value.value, value.priority);
|
|
73
78
|
});
|
|
74
79
|
}
|
|
75
80
|
if (disableAnimations) {
|
|
76
|
-
const infiniteAnimationsToResume = new Set();
|
|
77
|
-
const handleAnimations = root => {
|
|
81
|
+
const infiniteAnimationsToResume = /* @__PURE__ */ new Set();
|
|
82
|
+
const handleAnimations = (root) => {
|
|
78
83
|
for (const animation of root.getAnimations()) {
|
|
79
|
-
if (!animation.effect || animation.playbackRate === 0 || infiniteAnimationsToResume.has(animation))
|
|
84
|
+
if (!animation.effect || animation.playbackRate === 0 || infiniteAnimationsToResume.has(animation))
|
|
85
|
+
continue;
|
|
80
86
|
const endTime = animation.effect.getComputedTiming().endTime;
|
|
81
87
|
if (Number.isFinite(endTime)) {
|
|
82
88
|
try {
|
|
83
89
|
animation.finish();
|
|
84
90
|
} catch (e) {
|
|
85
|
-
// animation.finish() should not throw for
|
|
86
|
-
// finite animations, but we'd like to be on the
|
|
87
|
-
// safe side.
|
|
88
91
|
}
|
|
89
92
|
} else {
|
|
90
93
|
try {
|
|
91
94
|
animation.cancel();
|
|
92
95
|
infiniteAnimationsToResume.add(animation);
|
|
93
96
|
} catch (e) {
|
|
94
|
-
// animation.cancel() should not throw for
|
|
95
|
-
// infinite animations, but we'd like to be on the
|
|
96
|
-
// safe side.
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -101,11 +101,11 @@ function inPagePrepareForScreenshots(screenshotStyle, hideCaret, disableAnimatio
|
|
|
101
101
|
for (const root of roots) {
|
|
102
102
|
const handleRootAnimations = handleAnimations.bind(null, root);
|
|
103
103
|
handleRootAnimations();
|
|
104
|
-
root.addEventListener(
|
|
105
|
-
root.addEventListener(
|
|
104
|
+
root.addEventListener("transitionrun", handleRootAnimations);
|
|
105
|
+
root.addEventListener("animationstart", handleRootAnimations);
|
|
106
106
|
cleanupCallbacks.push(() => {
|
|
107
|
-
root.removeEventListener(
|
|
108
|
-
root.removeEventListener(
|
|
107
|
+
root.removeEventListener("transitionrun", handleRootAnimations);
|
|
108
|
+
root.removeEventListener("animationstart", handleRootAnimations);
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
cleanupCallbacks.push(() => {
|
|
@@ -113,42 +113,49 @@ function inPagePrepareForScreenshots(screenshotStyle, hideCaret, disableAnimatio
|
|
|
113
113
|
try {
|
|
114
114
|
animation.play();
|
|
115
115
|
} catch (e) {
|
|
116
|
-
// animation.play() should never throw, but
|
|
117
|
-
// we'd like to be on the safe side.
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
118
|
});
|
|
121
119
|
}
|
|
122
120
|
window.__pwCleanupScreenshot = () => {
|
|
123
|
-
for (const cleanupCallback of cleanupCallbacks)
|
|
121
|
+
for (const cleanupCallback of cleanupCallbacks)
|
|
122
|
+
cleanupCallback();
|
|
124
123
|
delete window.__pwCleanupScreenshot;
|
|
125
124
|
};
|
|
126
125
|
}
|
|
127
126
|
class Screenshotter {
|
|
128
127
|
constructor(page) {
|
|
129
128
|
this._queue = new TaskQueue();
|
|
130
|
-
this._page = void 0;
|
|
131
129
|
this._page = page;
|
|
132
130
|
this._queue = new TaskQueue();
|
|
133
131
|
}
|
|
134
132
|
async _originalViewportSize(progress) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
height: window.innerHeight
|
|
140
|
-
}));
|
|
141
|
-
return {
|
|
142
|
-
viewportSize,
|
|
143
|
-
originalViewportSize
|
|
144
|
-
};
|
|
133
|
+
let viewportSize = this._page.emulatedSize()?.viewport;
|
|
134
|
+
if (!viewportSize)
|
|
135
|
+
viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ width: window.innerWidth, height: window.innerHeight }));
|
|
136
|
+
return viewportSize;
|
|
145
137
|
}
|
|
146
138
|
async _fullPageSize(progress) {
|
|
147
139
|
const fullPageSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => {
|
|
148
|
-
if (!document.body || !document.documentElement)
|
|
140
|
+
if (!document.body || !document.documentElement)
|
|
141
|
+
return null;
|
|
149
142
|
return {
|
|
150
|
-
width: Math.max(
|
|
151
|
-
|
|
143
|
+
width: Math.max(
|
|
144
|
+
document.body.scrollWidth,
|
|
145
|
+
document.documentElement.scrollWidth,
|
|
146
|
+
document.body.offsetWidth,
|
|
147
|
+
document.documentElement.offsetWidth,
|
|
148
|
+
document.body.clientWidth,
|
|
149
|
+
document.documentElement.clientWidth
|
|
150
|
+
),
|
|
151
|
+
height: Math.max(
|
|
152
|
+
document.body.scrollHeight,
|
|
153
|
+
document.documentElement.scrollHeight,
|
|
154
|
+
document.body.offsetHeight,
|
|
155
|
+
document.documentElement.offsetHeight,
|
|
156
|
+
document.body.clientHeight,
|
|
157
|
+
document.documentElement.clientHeight
|
|
158
|
+
)
|
|
152
159
|
};
|
|
153
160
|
});
|
|
154
161
|
return fullPageSize;
|
|
@@ -156,35 +163,21 @@ class Screenshotter {
|
|
|
156
163
|
async screenshotPage(progress, options) {
|
|
157
164
|
const format = validateScreenshotOptions(options);
|
|
158
165
|
return this._queue.postTask(async () => {
|
|
159
|
-
progress.log(
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
} = await this._originalViewportSize(progress);
|
|
163
|
-
await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== 'initial', options.animations === 'disabled');
|
|
164
|
-
progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
|
|
165
|
-
|
|
166
|
+
progress.log("taking page screenshot");
|
|
167
|
+
const viewportSize = await this._originalViewportSize(progress);
|
|
168
|
+
await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== "initial", options.animations === "disabled");
|
|
166
169
|
if (options.fullPage) {
|
|
167
170
|
const fullPageSize = await this._fullPageSize(progress);
|
|
168
|
-
let documentRect = {
|
|
169
|
-
x: 0,
|
|
170
|
-
y: 0,
|
|
171
|
-
width: fullPageSize.width,
|
|
172
|
-
height: fullPageSize.height
|
|
173
|
-
};
|
|
171
|
+
let documentRect = { x: 0, y: 0, width: fullPageSize.width, height: fullPageSize.height };
|
|
174
172
|
const fitsViewport = fullPageSize.width <= viewportSize.width && fullPageSize.height <= viewportSize.height;
|
|
175
|
-
if (options.clip)
|
|
176
|
-
|
|
177
|
-
|
|
173
|
+
if (options.clip)
|
|
174
|
+
documentRect = trimClipToSize(options.clip, documentRect);
|
|
175
|
+
const buffer2 = await this._screenshot(progress, format, documentRect, void 0, fitsViewport, options);
|
|
178
176
|
await this._restorePageAfterScreenshot();
|
|
179
|
-
return
|
|
177
|
+
return buffer2;
|
|
180
178
|
}
|
|
181
|
-
const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : {
|
|
182
|
-
|
|
183
|
-
y: 0,
|
|
184
|
-
...viewportSize
|
|
185
|
-
};
|
|
186
|
-
const buffer = await this._screenshot(progress, format, undefined, viewportRect, true, options);
|
|
187
|
-
progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
|
|
179
|
+
const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };
|
|
180
|
+
const buffer = await this._screenshot(progress, format, void 0, viewportRect, true, options);
|
|
188
181
|
await this._restorePageAfterScreenshot();
|
|
189
182
|
return buffer;
|
|
190
183
|
});
|
|
@@ -192,114 +185,91 @@ class Screenshotter {
|
|
|
192
185
|
async screenshotElement(progress, handle, options) {
|
|
193
186
|
const format = validateScreenshotOptions(options);
|
|
194
187
|
return this._queue.postTask(async () => {
|
|
195
|
-
progress.log(
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
progress.
|
|
204
|
-
|
|
205
|
-
(0,
|
|
206
|
-
(0,
|
|
207
|
-
(0, _utils.assert)(boundingBox.height !== 0, 'Node has 0 height.');
|
|
188
|
+
progress.log("taking element screenshot");
|
|
189
|
+
const viewportSize = await this._originalViewportSize(progress);
|
|
190
|
+
await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== "initial", options.animations === "disabled");
|
|
191
|
+
await handle._waitAndScrollIntoViewIfNeeded(
|
|
192
|
+
progress,
|
|
193
|
+
true
|
|
194
|
+
/* waitForVisible */
|
|
195
|
+
);
|
|
196
|
+
const boundingBox = await progress.race(handle.boundingBox());
|
|
197
|
+
(0, import_utils.assert)(boundingBox, "Node is either not visible or not an HTMLElement");
|
|
198
|
+
(0, import_utils.assert)(boundingBox.width !== 0, "Node has 0 width.");
|
|
199
|
+
(0, import_utils.assert)(boundingBox.height !== 0, "Node has 0 height.");
|
|
208
200
|
const fitsViewport = boundingBox.width <= viewportSize.width && boundingBox.height <= viewportSize.height;
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
x: window.scrollX,
|
|
212
|
-
y: window.scrollY
|
|
213
|
-
}));
|
|
214
|
-
const documentRect = {
|
|
215
|
-
...boundingBox
|
|
216
|
-
};
|
|
201
|
+
const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));
|
|
202
|
+
const documentRect = { ...boundingBox };
|
|
217
203
|
documentRect.x += scrollOffset.x;
|
|
218
204
|
documentRect.y += scrollOffset.y;
|
|
219
|
-
const buffer = await this._screenshot(progress, format,
|
|
220
|
-
progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
|
|
205
|
+
const buffer = await this._screenshot(progress, format, import_helper.helper.enclosingIntRect(documentRect), void 0, fitsViewport, options);
|
|
221
206
|
await this._restorePageAfterScreenshot();
|
|
222
207
|
return buffer;
|
|
223
208
|
});
|
|
224
209
|
}
|
|
225
210
|
async _preparePageForScreenshot(progress, frame, screenshotStyle, hideCaret, disableAnimations) {
|
|
226
|
-
if (disableAnimations)
|
|
227
|
-
|
|
228
|
-
|
|
211
|
+
if (disableAnimations)
|
|
212
|
+
progress.log(" disabled all CSS animations");
|
|
213
|
+
const syncAnimations = this._page.delegate.shouldToggleStyleSheetToSyncAnimations();
|
|
214
|
+
progress.cleanupWhenAborted(() => this._restorePageAfterScreenshot());
|
|
215
|
+
await progress.race(this._page.safeNonStallingEvaluateInAllFrames("(" + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, "utility"));
|
|
229
216
|
if (!process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY) {
|
|
230
|
-
progress.log(
|
|
231
|
-
await frame.nonStallingEvaluateInExistingContext(
|
|
232
|
-
|
|
217
|
+
progress.log("waiting for fonts to load...");
|
|
218
|
+
await progress.race(frame.nonStallingEvaluateInExistingContext("document.fonts.ready", "utility").catch(() => {
|
|
219
|
+
}));
|
|
220
|
+
progress.log("fonts loaded");
|
|
233
221
|
}
|
|
234
|
-
progress.cleanupWhenAborted(() => this._restorePageAfterScreenshot());
|
|
235
222
|
}
|
|
236
223
|
async _restorePageAfterScreenshot() {
|
|
237
|
-
await this._page.safeNonStallingEvaluateInAllFrames(
|
|
224
|
+
await this._page.safeNonStallingEvaluateInAllFrames("window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()", "utility");
|
|
238
225
|
}
|
|
239
226
|
async _maskElements(progress, options) {
|
|
240
|
-
|
|
227
|
+
if (!options.mask || !options.mask.length)
|
|
228
|
+
return () => Promise.resolve();
|
|
229
|
+
const framesToParsedSelectors = new import_multimap.MultiMap();
|
|
241
230
|
const cleanup = async () => {
|
|
242
|
-
await Promise.all([...framesToParsedSelectors.keys()].map(async frame => {
|
|
231
|
+
await Promise.all([...framesToParsedSelectors.keys()].map(async (frame) => {
|
|
243
232
|
await frame.hideHighlight();
|
|
244
233
|
}));
|
|
245
234
|
};
|
|
246
|
-
if (!options.mask || !options.mask.length) return cleanup;
|
|
247
|
-
await Promise.all((options.mask || []).map(async ({
|
|
248
|
-
frame,
|
|
249
|
-
selector
|
|
250
|
-
}) => {
|
|
251
|
-
const pair = await frame.selectors.resolveFrameForSelector(selector);
|
|
252
|
-
if (pair) framesToParsedSelectors.set(pair.frame, pair.info.parsed);
|
|
253
|
-
}));
|
|
254
|
-
progress.throwIfAborted(); // Avoid extra work.
|
|
255
|
-
|
|
256
|
-
await Promise.all([...framesToParsedSelectors.keys()].map(async frame => {
|
|
257
|
-
await frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || '#F0F');
|
|
258
|
-
}));
|
|
259
235
|
progress.cleanupWhenAborted(cleanup);
|
|
236
|
+
await progress.race(Promise.all((options.mask || []).map(async ({ frame, selector }) => {
|
|
237
|
+
const pair = await frame.selectors.resolveFrameForSelector(selector);
|
|
238
|
+
if (pair)
|
|
239
|
+
framesToParsedSelectors.set(pair.frame, pair.info.parsed);
|
|
240
|
+
})));
|
|
241
|
+
await progress.race(Promise.all([...framesToParsedSelectors.keys()].map(async (frame) => {
|
|
242
|
+
await frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || "#F0F");
|
|
243
|
+
})));
|
|
260
244
|
return cleanup;
|
|
261
245
|
}
|
|
262
246
|
async _screenshot(progress, format, documentRect, viewportRect, fitsViewport, options) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const shouldSetDefaultBackground = options.omitBackground && format === 'png';
|
|
247
|
+
if (options.__testHookBeforeScreenshot)
|
|
248
|
+
await progress.race(options.__testHookBeforeScreenshot());
|
|
249
|
+
const shouldSetDefaultBackground = options.omitBackground && format === "png";
|
|
267
250
|
if (shouldSetDefaultBackground) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
g: 0,
|
|
271
|
-
b: 0,
|
|
272
|
-
a: 0
|
|
273
|
-
});
|
|
274
|
-
progress.cleanupWhenAborted(() => this._page._delegate.setBackgroundColor());
|
|
251
|
+
progress.cleanupWhenAborted(() => this._page.delegate.setBackgroundColor());
|
|
252
|
+
await progress.race(this._page.delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 }));
|
|
275
253
|
}
|
|
276
|
-
progress.throwIfAborted(); // Avoid extra work.
|
|
277
|
-
|
|
278
254
|
const cleanupHighlight = await this._maskElements(progress, options);
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const quality = format === 'jpeg' ? (_options$quality = options.quality) !== null && _options$quality !== void 0 ? _options$quality : 80 : undefined;
|
|
282
|
-
const buffer = await this._page._delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || 'device');
|
|
283
|
-
progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
|
|
284
|
-
|
|
255
|
+
const quality = format === "jpeg" ? options.quality ?? 80 : void 0;
|
|
256
|
+
const buffer = await this._page.delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || "device");
|
|
285
257
|
await cleanupHighlight();
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if (
|
|
289
|
-
|
|
290
|
-
if (options.__testHookAfterScreenshot) await options.__testHookAfterScreenshot();
|
|
258
|
+
if (shouldSetDefaultBackground)
|
|
259
|
+
await progress.race(this._page.delegate.setBackgroundColor());
|
|
260
|
+
if (options.__testHookAfterScreenshot)
|
|
261
|
+
await progress.race(options.__testHookAfterScreenshot());
|
|
291
262
|
return buffer;
|
|
292
263
|
}
|
|
293
264
|
}
|
|
294
|
-
exports.Screenshotter = Screenshotter;
|
|
295
265
|
class TaskQueue {
|
|
296
266
|
constructor() {
|
|
297
|
-
this._chain = void 0;
|
|
298
267
|
this._chain = Promise.resolve();
|
|
299
268
|
}
|
|
300
269
|
postTask(task) {
|
|
301
270
|
const result = this._chain.then(task);
|
|
302
|
-
this._chain = result.catch(() => {
|
|
271
|
+
this._chain = result.catch(() => {
|
|
272
|
+
});
|
|
303
273
|
return result;
|
|
304
274
|
}
|
|
305
275
|
}
|
|
@@ -312,37 +282,36 @@ function trimClipToSize(clip, size) {
|
|
|
312
282
|
x: Math.max(0, Math.min(clip.x + clip.width, size.width)),
|
|
313
283
|
y: Math.max(0, Math.min(clip.y + clip.height, size.height))
|
|
314
284
|
};
|
|
315
|
-
const result = {
|
|
316
|
-
|
|
317
|
-
y: p1.y,
|
|
318
|
-
width: p2.x - p1.x,
|
|
319
|
-
height: p2.y - p1.y
|
|
320
|
-
};
|
|
321
|
-
(0, _utils.assert)(result.width && result.height, 'Clipped area is either empty or outside the resulting image');
|
|
285
|
+
const result = { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };
|
|
286
|
+
(0, import_utils.assert)(result.width && result.height, "Clipped area is either empty or outside the resulting image");
|
|
322
287
|
return result;
|
|
323
288
|
}
|
|
324
289
|
function validateScreenshotOptions(options) {
|
|
325
290
|
let format = null;
|
|
326
|
-
// options.type takes precedence over inferring the type from options.path
|
|
327
|
-
// because it may be a 0-length file with no extension created beforehand (i.e. as a temp file).
|
|
328
291
|
if (options.type) {
|
|
329
|
-
(0,
|
|
292
|
+
(0, import_utils.assert)(options.type === "png" || options.type === "jpeg", "Unknown options.type value: " + options.type);
|
|
330
293
|
format = options.type;
|
|
331
294
|
}
|
|
332
|
-
if (!format)
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
(0,
|
|
336
|
-
(0,
|
|
337
|
-
(0,
|
|
295
|
+
if (!format)
|
|
296
|
+
format = "png";
|
|
297
|
+
if (options.quality !== void 0) {
|
|
298
|
+
(0, import_utils.assert)(format === "jpeg", "options.quality is unsupported for the " + format + " screenshots");
|
|
299
|
+
(0, import_utils.assert)(typeof options.quality === "number", "Expected options.quality to be a number but found " + typeof options.quality);
|
|
300
|
+
(0, import_utils.assert)(Number.isInteger(options.quality), "Expected options.quality to be an integer");
|
|
301
|
+
(0, import_utils.assert)(options.quality >= 0 && options.quality <= 100, "Expected options.quality to be between 0 and 100 (inclusive), got " + options.quality);
|
|
338
302
|
}
|
|
339
303
|
if (options.clip) {
|
|
340
|
-
(0,
|
|
341
|
-
(0,
|
|
342
|
-
(0,
|
|
343
|
-
(0,
|
|
344
|
-
(0,
|
|
345
|
-
(0,
|
|
304
|
+
(0, import_utils.assert)(typeof options.clip.x === "number", "Expected options.clip.x to be a number but found " + typeof options.clip.x);
|
|
305
|
+
(0, import_utils.assert)(typeof options.clip.y === "number", "Expected options.clip.y to be a number but found " + typeof options.clip.y);
|
|
306
|
+
(0, import_utils.assert)(typeof options.clip.width === "number", "Expected options.clip.width to be a number but found " + typeof options.clip.width);
|
|
307
|
+
(0, import_utils.assert)(typeof options.clip.height === "number", "Expected options.clip.height to be a number but found " + typeof options.clip.height);
|
|
308
|
+
(0, import_utils.assert)(options.clip.width !== 0, "Expected options.clip.width not to be 0.");
|
|
309
|
+
(0, import_utils.assert)(options.clip.height !== 0, "Expected options.clip.height not to be 0.");
|
|
346
310
|
}
|
|
347
311
|
return format;
|
|
348
|
-
}
|
|
312
|
+
}
|
|
313
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
314
|
+
0 && (module.exports = {
|
|
315
|
+
Screenshotter,
|
|
316
|
+
validateScreenshotOptions
|
|
317
|
+
});
|