@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.
Files changed (376) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/browsers.json +16 -14
  3. package/index.js +1 -1
  4. package/lib/androidServerImpl.js +47 -50
  5. package/lib/browserServerImpl.js +89 -69
  6. package/lib/checkly/escapeRegExp.js +23 -27
  7. package/lib/checkly/fetch.js +64 -46
  8. package/lib/checkly/secretsFilter.js +49 -36
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +400 -359
  11. package/lib/cli/programWithTestStub.js +51 -45
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +151 -242
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -36
  16. package/lib/client/browser.js +96 -71
  17. package/lib/client/browserContext.js +314 -345
  18. package/lib/client/browserType.js +103 -127
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +90 -113
  21. package/lib/client/clientHelper.js +48 -39
  22. package/lib/client/clientInstrumentation.js +40 -37
  23. package/lib/client/clientStackTrace.js +41 -37
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +188 -214
  26. package/lib/client/consoleMessage.js +31 -28
  27. package/lib/client/coverage.js +25 -22
  28. package/lib/client/dialog.js +30 -31
  29. package/lib/client/download.js +25 -25
  30. package/lib/client/electron.js +80 -77
  31. package/lib/client/elementHandle.js +120 -159
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +124 -121
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +166 -190
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +31 -28
  38. package/lib/client/frame.js +207 -306
  39. package/lib/client/harRouter.js +42 -52
  40. package/lib/client/input.js +42 -69
  41. package/lib/client/jsHandle.js +54 -69
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +29 -29
  44. package/lib/client/locator.js +145 -237
  45. package/lib/client/network.js +282 -307
  46. package/lib/client/page.js +269 -318
  47. package/lib/client/platform.js +46 -43
  48. package/lib/client/playwright.js +51 -76
  49. package/lib/client/selectors.js +45 -63
  50. package/lib/client/stream.js +29 -25
  51. package/lib/client/timeoutSettings.js +55 -41
  52. package/lib/client/tracing.js +49 -96
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +69 -88
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +43 -56
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +27 -23
  60. package/lib/generated/bindingsControllerSource.js +28 -0
  61. package/lib/generated/clockSource.js +26 -6
  62. package/lib/generated/consoleApiSource.js +26 -6
  63. package/lib/generated/injectedScriptSource.js +26 -6
  64. package/lib/generated/pollingRecorderSource.js +26 -6
  65. package/lib/generated/storageScriptSource.js +28 -0
  66. package/lib/generated/utilityScriptSource.js +26 -6
  67. package/lib/generated/webSocketMockSource.js +333 -5
  68. package/lib/inProcessFactory.js +51 -53
  69. package/lib/inprocess.js +2 -19
  70. package/lib/outofprocess.js +51 -46
  71. package/lib/protocol/serializers.js +153 -134
  72. package/lib/protocol/validator.js +2807 -2739
  73. package/lib/protocol/validatorPrimitives.js +114 -73
  74. package/lib/remote/playwrightConnection.js +88 -242
  75. package/lib/remote/playwrightServer.js +305 -92
  76. package/lib/server/accessibility.js +44 -37
  77. package/lib/server/android/android.js +251 -241
  78. package/lib/server/android/backendAdb.js +87 -82
  79. package/lib/server/artifact.js +78 -55
  80. package/lib/server/bidi/bidiBrowser.js +297 -158
  81. package/lib/server/bidi/bidiChromium.js +119 -89
  82. package/lib/server/bidi/bidiConnection.js +66 -83
  83. package/lib/server/bidi/bidiExecutionContext.js +129 -113
  84. package/lib/server/bidi/bidiFirefox.js +86 -76
  85. package/lib/server/bidi/bidiInput.js +106 -117
  86. package/lib/server/bidi/bidiNetworkManager.js +142 -159
  87. package/lib/server/bidi/bidiOverCdp.js +57 -58
  88. package/lib/server/bidi/bidiPage.js +260 -260
  89. package/lib/server/bidi/bidiPdf.js +52 -86
  90. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  91. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  92. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  93. package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
  94. package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
  95. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  96. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  97. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  98. package/lib/server/browser.js +93 -95
  99. package/lib/server/browserContext.js +419 -429
  100. package/lib/server/browserType.js +186 -216
  101. package/lib/server/callLog.js +47 -44
  102. package/lib/server/chromium/chromium.js +235 -203
  103. package/lib/server/chromium/chromiumSwitches.js +100 -67
  104. package/lib/server/chromium/crAccessibility.js +157 -131
  105. package/lib/server/chromium/crBrowser.js +310 -292
  106. package/lib/server/chromium/crConnection.js +95 -121
  107. package/lib/server/chromium/crCoverage.js +121 -131
  108. package/lib/server/chromium/crDevTools.js +60 -51
  109. package/lib/server/chromium/crDragDrop.js +68 -84
  110. package/lib/server/chromium/crExecutionContext.js +89 -83
  111. package/lib/server/chromium/crInput.js +118 -113
  112. package/lib/server/chromium/crNetworkManager.js +274 -375
  113. package/lib/server/chromium/crPage.js +536 -593
  114. package/lib/server/chromium/crPdf.js +54 -86
  115. package/lib/server/chromium/crProtocolHelper.js +92 -80
  116. package/lib/server/chromium/crServiceWorker.js +84 -73
  117. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  118. package/lib/server/chromium/protocol.d.js +16 -0
  119. package/lib/server/chromium/videoRecorder.js +66 -99
  120. package/lib/server/clock.js +107 -83
  121. package/lib/server/codegen/csharp.js +192 -162
  122. package/lib/server/codegen/java.js +156 -129
  123. package/lib/server/codegen/javascript.js +163 -148
  124. package/lib/server/codegen/jsonl.js +32 -28
  125. package/lib/server/codegen/language.js +75 -52
  126. package/lib/server/codegen/languages.js +65 -27
  127. package/lib/server/codegen/python.js +141 -126
  128. package/lib/server/codegen/types.js +15 -4
  129. package/lib/server/console.js +28 -32
  130. package/lib/server/cookieStore.js +108 -86
  131. package/lib/server/debugController.js +147 -151
  132. package/lib/server/debugger.js +86 -78
  133. package/lib/server/deviceDescriptors.js +37 -24
  134. package/lib/server/deviceDescriptorsSource.json +238 -128
  135. package/lib/server/dialog.js +84 -39
  136. package/lib/server/dispatchers/androidDispatcher.js +257 -148
  137. package/lib/server/dispatchers/artifactDispatcher.js +79 -79
  138. package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
  139. package/lib/server/dispatchers/browserDispatcher.js +96 -148
  140. package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
  141. package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
  142. package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
  143. package/lib/server/dispatchers/dialogDispatcher.js +34 -31
  144. package/lib/server/dispatchers/dispatcher.js +208 -248
  145. package/lib/server/dispatchers/electronDispatcher.js +66 -70
  146. package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
  147. package/lib/server/dispatchers/frameDispatcher.js +211 -272
  148. package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
  149. package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
  150. package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
  151. package/lib/server/dispatchers/networkDispatchers.js +117 -128
  152. package/lib/server/dispatchers/pageDispatcher.js +256 -248
  153. package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
  154. package/lib/server/dispatchers/streamDispatcher.js +52 -48
  155. package/lib/server/dispatchers/tracingDispatcher.js +47 -52
  156. package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
  157. package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
  158. package/lib/server/dom.js +485 -582
  159. package/lib/server/download.js +47 -37
  160. package/lib/server/electron/electron.js +216 -243
  161. package/lib/server/electron/loader.js +9 -37
  162. package/lib/server/errors.js +47 -46
  163. package/lib/server/fetch.js +317 -360
  164. package/lib/server/fileChooser.js +25 -24
  165. package/lib/server/fileUploadUtils.js +66 -60
  166. package/lib/server/firefox/ffAccessibility.js +153 -131
  167. package/lib/server/firefox/ffBrowser.js +268 -305
  168. package/lib/server/firefox/ffConnection.js +63 -84
  169. package/lib/server/firefox/ffExecutionContext.js +92 -73
  170. package/lib/server/firefox/ffInput.js +82 -84
  171. package/lib/server/firefox/ffNetworkManager.js +137 -114
  172. package/lib/server/firefox/ffPage.js +261 -293
  173. package/lib/server/firefox/firefox.js +80 -72
  174. package/lib/server/firefox/protocol.d.js +16 -0
  175. package/lib/server/formData.js +107 -35
  176. package/lib/server/frameSelectors.js +98 -114
  177. package/lib/server/frames.js +845 -1055
  178. package/lib/server/har/harRecorder.js +85 -77
  179. package/lib/server/har/harTracer.js +290 -223
  180. package/lib/server/harBackend.js +80 -80
  181. package/lib/server/helper.js +55 -59
  182. package/lib/server/index.js +59 -99
  183. package/lib/server/input.js +151 -189
  184. package/lib/server/instrumentation.js +57 -44
  185. package/lib/server/javascript.js +133 -134
  186. package/lib/server/launchApp.js +113 -75
  187. package/lib/server/localUtils.js +150 -142
  188. package/lib/server/macEditingCommands.js +141 -137
  189. package/lib/server/network.js +299 -303
  190. package/lib/server/page.js +513 -544
  191. package/lib/server/pipeTransport.js +49 -45
  192. package/lib/server/playwright.js +58 -67
  193. package/lib/server/progress.js +137 -68
  194. package/lib/server/protocolError.js +34 -31
  195. package/lib/server/recorder/chat.js +70 -86
  196. package/lib/server/recorder/recorderApp.js +341 -176
  197. package/lib/server/recorder/recorderInTraceViewer.js +65 -94
  198. package/lib/server/recorder/recorderRunner.js +93 -116
  199. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  200. package/lib/server/recorder/recorderUtils.js +104 -47
  201. package/lib/server/recorder/throttledFile.js +42 -30
  202. package/lib/server/recorder.js +395 -275
  203. package/lib/server/registry/browserFetcher.js +106 -101
  204. package/lib/server/registry/dependencies.js +245 -196
  205. package/lib/server/registry/index.js +930 -803
  206. package/lib/server/registry/nativeDeps.js +1073 -464
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +160 -191
  209. package/lib/server/selectors.js +90 -51
  210. package/lib/server/socksClientCertificatesInterceptor.js +171 -186
  211. package/lib/server/socksInterceptor.js +62 -70
  212. package/lib/server/trace/recorder/snapshotter.js +76 -102
  213. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  214. package/lib/server/trace/recorder/tracing.js +354 -362
  215. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  216. package/lib/server/trace/viewer/traceViewer.js +160 -147
  217. package/lib/server/transport.js +119 -134
  218. package/lib/server/types.js +26 -22
  219. package/lib/server/usKeyboardLayout.js +135 -545
  220. package/lib/server/utils/ascii.js +39 -26
  221. package/lib/server/utils/comparators.js +105 -103
  222. package/lib/server/utils/crypto.js +157 -112
  223. package/lib/server/utils/debug.js +36 -32
  224. package/lib/server/utils/debugLogger.js +77 -48
  225. package/lib/server/utils/env.js +52 -37
  226. package/lib/server/utils/eventsHelper.js +29 -28
  227. package/lib/server/utils/expectUtils.js +31 -26
  228. package/lib/server/utils/fileUtils.js +123 -136
  229. package/lib/server/utils/happyEyeballs.js +141 -126
  230. package/lib/server/utils/hostPlatform.js +84 -120
  231. package/lib/server/utils/httpServer.js +106 -121
  232. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  233. package/lib/server/utils/image_tools/compare.js +44 -43
  234. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  235. package/lib/server/utils/image_tools/stats.js +40 -40
  236. package/lib/server/utils/linuxUtils.js +50 -37
  237. package/lib/server/utils/network.js +152 -96
  238. package/lib/server/utils/nodePlatform.js +87 -79
  239. package/lib/server/utils/pipeTransport.js +44 -42
  240. package/lib/server/utils/processLauncher.js +111 -121
  241. package/lib/server/utils/profiler.js +52 -39
  242. package/lib/server/utils/socksProxy.js +280 -339
  243. package/lib/server/utils/spawnAsync.js +37 -41
  244. package/lib/server/utils/task.js +31 -38
  245. package/lib/server/utils/userAgent.js +73 -66
  246. package/lib/server/utils/wsServer.js +68 -75
  247. package/lib/server/utils/zipFile.js +36 -37
  248. package/lib/server/utils/zones.js +37 -34
  249. package/lib/server/webkit/protocol.d.js +16 -0
  250. package/lib/server/webkit/webkit.js +77 -61
  251. package/lib/server/webkit/wkAccessibility.js +161 -118
  252. package/lib/server/webkit/wkBrowser.js +193 -184
  253. package/lib/server/webkit/wkConnection.js +59 -83
  254. package/lib/server/webkit/wkExecutionContext.js +85 -70
  255. package/lib/server/webkit/wkInput.js +97 -95
  256. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  257. package/lib/server/webkit/wkPage.js +568 -667
  258. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  259. package/lib/server/webkit/wkWorkers.js +79 -79
  260. package/lib/utils/expectUtils.js +31 -26
  261. package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
  262. package/lib/utils/isomorphic/assert.js +28 -22
  263. package/lib/utils/isomorphic/colors.js +66 -59
  264. package/lib/utils/isomorphic/cssParser.js +120 -125
  265. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  266. package/lib/utils/isomorphic/headers.js +38 -37
  267. package/lib/utils/isomorphic/locatorGenerators.js +358 -357
  268. package/lib/utils/isomorphic/locatorParser.js +96 -105
  269. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  270. package/lib/utils/isomorphic/manualPromise.js +46 -39
  271. package/lib/utils/isomorphic/mimeType.js +447 -25
  272. package/lib/utils/isomorphic/multimap.js +34 -27
  273. package/lib/utils/isomorphic/protocolFormatter.js +68 -0
  274. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  275. package/lib/utils/isomorphic/recorderUtils.js +140 -181
  276. package/lib/utils/isomorphic/rtti.js +35 -33
  277. package/lib/utils/isomorphic/selectorParser.js +182 -193
  278. package/lib/utils/isomorphic/semaphore.js +27 -24
  279. package/lib/utils/isomorphic/stackTrace.js +87 -98
  280. package/lib/utils/isomorphic/stringUtils.js +98 -112
  281. package/lib/utils/isomorphic/time.js +46 -22
  282. package/lib/utils/isomorphic/timeoutRunner.js +53 -53
  283. package/lib/utils/isomorphic/traceUtils.js +37 -41
  284. package/lib/utils/isomorphic/types.js +15 -4
  285. package/lib/utils/isomorphic/urlMatch.js +113 -67
  286. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  287. package/lib/utils.js +101 -443
  288. package/lib/utilsBundle.js +101 -52
  289. package/lib/utilsBundleImpl/index.js +160 -150
  290. package/lib/zipBundle.js +32 -23
  291. package/lib/zipBundleImpl.js +4 -4
  292. package/package.json +1 -1
  293. package/types/protocol.d.ts +1267 -1057
  294. package/types/types.d.ts +131 -29
  295. package/lib/common/socksProxy.js +0 -569
  296. package/lib/common/timeoutSettings.js +0 -73
  297. package/lib/common/types.js +0 -5
  298. package/lib/image_tools/colorUtils.js +0 -98
  299. package/lib/image_tools/compare.js +0 -108
  300. package/lib/image_tools/imageChannel.js +0 -70
  301. package/lib/image_tools/stats.js +0 -102
  302. package/lib/protocol/debug.js +0 -27
  303. package/lib/protocol/transport.js +0 -82
  304. package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
  305. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  306. package/lib/server/recorder/contextRecorder.js +0 -290
  307. package/lib/server/recorder/recorderCollection.js +0 -104
  308. package/lib/server/recorder/recorderFrontend.js +0 -5
  309. package/lib/server/storageScript.js +0 -160
  310. package/lib/server/timeoutSettings.js +0 -74
  311. package/lib/third_party/diff_match_patch.js +0 -2222
  312. package/lib/utils/ascii.js +0 -31
  313. package/lib/utils/comparators.js +0 -171
  314. package/lib/utils/crypto.js +0 -174
  315. package/lib/utils/debug.js +0 -46
  316. package/lib/utils/debugLogger.js +0 -91
  317. package/lib/utils/env.js +0 -49
  318. package/lib/utils/eventsHelper.js +0 -38
  319. package/lib/utils/fileUtils.js +0 -205
  320. package/lib/utils/happy-eyeballs.js +0 -210
  321. package/lib/utils/headers.js +0 -52
  322. package/lib/utils/hostPlatform.js +0 -133
  323. package/lib/utils/httpServer.js +0 -237
  324. package/lib/utils/index.js +0 -368
  325. package/lib/utils/linuxUtils.js +0 -78
  326. package/lib/utils/manualPromise.js +0 -109
  327. package/lib/utils/multimap.js +0 -75
  328. package/lib/utils/network.js +0 -160
  329. package/lib/utils/processLauncher.js +0 -248
  330. package/lib/utils/profiler.js +0 -53
  331. package/lib/utils/rtti.js +0 -44
  332. package/lib/utils/semaphore.js +0 -51
  333. package/lib/utils/spawnAsync.js +0 -45
  334. package/lib/utils/stackTrace.js +0 -121
  335. package/lib/utils/task.js +0 -58
  336. package/lib/utils/time.js +0 -37
  337. package/lib/utils/timeoutRunner.js +0 -66
  338. package/lib/utils/traceUtils.js +0 -44
  339. package/lib/utils/userAgent.js +0 -105
  340. package/lib/utils/wsServer.js +0 -127
  341. package/lib/utils/zipFile.js +0 -75
  342. package/lib/utils/zones.js +0 -62
  343. package/lib/vite/htmlReport/index.html +0 -69
  344. package/lib/vite/recorder/assets/codeMirrorModule-DrMbgOIo.js +0 -16684
  345. package/lib/vite/recorder/assets/codeMirrorModule-DuST8d_k.css +0 -344
  346. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  347. package/lib/vite/recorder/assets/index-5NM3V7eb.css +0 -2524
  348. package/lib/vite/recorder/assets/index-CT-scFHn.js +0 -16848
  349. package/lib/vite/recorder/index.html +0 -29
  350. package/lib/vite/recorder/playwright-logo.svg +0 -9
  351. package/lib/vite/traceViewer/assets/codeMirrorModule-CB-2okZ8.js +0 -16684
  352. package/lib/vite/traceViewer/assets/defaultSettingsView-CBiB4avC.js +0 -217
  353. package/lib/vite/traceViewer/assets/inspectorTab-CwgfffWb.js +0 -25143
  354. package/lib/vite/traceViewer/assets/workbench-CWZselvp.js +0 -2470
  355. package/lib/vite/traceViewer/assets/xtermModule-Es_gt_u7.js +0 -5994
  356. package/lib/vite/traceViewer/codeMirrorModule.DuST8d_k.css +0 -344
  357. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  358. package/lib/vite/traceViewer/defaultSettingsView.Dp3b_92q.css +0 -41
  359. package/lib/vite/traceViewer/embedded.BeldSa2G.css +0 -68
  360. package/lib/vite/traceViewer/embedded.gzudoghF.js +0 -106
  361. package/lib/vite/traceViewer/embedded.html +0 -18
  362. package/lib/vite/traceViewer/index.DilotR1h.js +0 -314
  363. package/lib/vite/traceViewer/index.QewjJ85u.css +0 -131
  364. package/lib/vite/traceViewer/index.html +0 -47
  365. package/lib/vite/traceViewer/inspectorTab.DnGm18kV.css +0 -3178
  366. package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  367. package/lib/vite/traceViewer/recorder.DLgqV9db.css +0 -15
  368. package/lib/vite/traceViewer/recorder.DVrkq3Um.js +0 -551
  369. package/lib/vite/traceViewer/recorder.html +0 -17
  370. package/lib/vite/traceViewer/snapshot.html +0 -21
  371. package/lib/vite/traceViewer/sw.bundle.js +0 -3
  372. package/lib/vite/traceViewer/uiMode.C9_OcpPU.js +0 -1756
  373. package/lib/vite/traceViewer/uiMode.c5ORgcrX.css +0 -1424
  374. package/lib/vite/traceViewer/uiMode.html +0 -21
  375. package/lib/vite/traceViewer/workbench.xUZSA8PY.css +0 -787
  376. package/lib/vite/traceViewer/xtermModule.EsaqrrTX.css +0 -209
@@ -1,99 +1,99 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
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.Screenshotter = void 0;
7
- exports.validateScreenshotOptions = validateScreenshotOptions;
8
- var _helper = require("./helper");
9
- var _utils = require("../utils");
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('style');
32
- style.textContent = 'body {}';
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) return;
38
- const collectRoots = (root, roots = []) => {
39
- roots.push(root);
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) collectRoots(shadowRoot, roots);
44
+ if (shadowRoot)
45
+ collectRoots(shadowRoot, roots2);
45
46
  } while (walker.nextNode());
46
- return roots;
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('style');
53
+ const styleTag = document.createElement("style");
53
54
  styleTag.textContent = screenshotStyle;
54
- if (root === document) document.documentElement.append(styleTag);else root.append(styleTag);
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('input,textarea,[contenteditable]').forEach(element => {
67
+ root.querySelectorAll("input,textarea,[contenteditable]").forEach((element) => {
64
68
  elements.set(element, {
65
- value: element.style.getPropertyValue('caret-color'),
66
- priority: element.style.getPropertyPriority('caret-color')
69
+ value: element.style.getPropertyValue("caret-color"),
70
+ priority: element.style.getPropertyPriority("caret-color")
67
71
  });
68
- element.style.setProperty('caret-color', 'transparent', 'important');
72
+ element.style.setProperty("caret-color", "transparent", "important");
69
73
  });
70
74
  }
71
75
  cleanupCallbacks.push(() => {
72
- for (const [element, value] of elements) element.style.setProperty('caret-color', value.value, value.priority);
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)) continue;
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('transitionrun', handleRootAnimations);
105
- root.addEventListener('animationstart', handleRootAnimations);
104
+ root.addEventListener("transitionrun", handleRootAnimations);
105
+ root.addEventListener("animationstart", handleRootAnimations);
106
106
  cleanupCallbacks.push(() => {
107
- root.removeEventListener('transitionrun', handleRootAnimations);
108
- root.removeEventListener('animationstart', handleRootAnimations);
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) cleanupCallback();
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
- const originalViewportSize = this._page.viewportSize();
136
- let viewportSize = originalViewportSize;
137
- if (!viewportSize) viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({
138
- width: window.innerWidth,
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) return null;
140
+ if (!document.body || !document.documentElement)
141
+ return null;
149
142
  return {
150
- width: Math.max(document.body.scrollWidth, document.documentElement.scrollWidth, document.body.offsetWidth, document.documentElement.offsetWidth, document.body.clientWidth, document.documentElement.clientWidth),
151
- height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight)
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('taking page screenshot');
160
- const {
161
- viewportSize
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) documentRect = trimClipToSize(options.clip, documentRect);
176
- const buffer = await this._screenshot(progress, format, documentRect, undefined, fitsViewport, options);
177
- progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
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 buffer;
177
+ return buffer2;
180
178
  }
181
- const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : {
182
- x: 0,
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('taking element screenshot');
196
- const {
197
- viewportSize
198
- } = await this._originalViewportSize(progress);
199
- await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== 'initial', options.animations === 'disabled');
200
- progress.throwIfAborted(); // Do not do extra work.
201
-
202
- await handle._waitAndScrollIntoViewIfNeeded(progress, true /* waitForVisible */);
203
- progress.throwIfAborted(); // Do not do extra work.
204
- const boundingBox = await handle.boundingBox();
205
- (0, _utils.assert)(boundingBox, 'Node is either not visible or not an HTMLElement');
206
- (0, _utils.assert)(boundingBox.width !== 0, 'Node has 0 width.');
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
- progress.throwIfAborted(); // Avoid extra work.
210
- const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({
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, _helper.helper.enclosingIntRect(documentRect), undefined, fitsViewport, options);
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) progress.log(' disabled all CSS animations');
227
- const syncAnimations = this._page._delegate.shouldToggleStyleSheetToSyncAnimations();
228
- await this._page.safeNonStallingEvaluateInAllFrames('(' + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, 'utility');
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('waiting for fonts to load...');
231
- await frame.nonStallingEvaluateInExistingContext('document.fonts.ready', 'utility').catch(() => {});
232
- progress.log('fonts loaded');
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('window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()', 'utility');
224
+ await this._page.safeNonStallingEvaluateInAllFrames("window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()", "utility");
238
225
  }
239
226
  async _maskElements(progress, options) {
240
- const framesToParsedSelectors = new _multimap.MultiMap();
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
- var _options$quality;
264
- if (options.__testHookBeforeScreenshot) await options.__testHookBeforeScreenshot();
265
- progress.throwIfAborted(); // Screenshotting is expensive - avoid extra work.
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
- await this._page._delegate.setBackgroundColor({
269
- r: 0,
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
- progress.throwIfAborted(); // Avoid extra work.
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
- progress.throwIfAborted(); // Avoid restoring after failure - should be done by cleanup.
287
-
288
- if (shouldSetDefaultBackground) await this._page._delegate.setBackgroundColor();
289
- progress.throwIfAborted(); // Avoid side effects.
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
- x: p1.x,
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, _utils.assert)(options.type === 'png' || options.type === 'jpeg', 'Unknown options.type value: ' + options.type);
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) format = 'png';
333
- if (options.quality !== undefined) {
334
- (0, _utils.assert)(format === 'jpeg', 'options.quality is unsupported for the ' + format + ' screenshots');
335
- (0, _utils.assert)(typeof options.quality === 'number', 'Expected options.quality to be a number but found ' + typeof options.quality);
336
- (0, _utils.assert)(Number.isInteger(options.quality), 'Expected options.quality to be an integer');
337
- (0, _utils.assert)(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' + options.quality);
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, _utils.assert)(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' + typeof options.clip.x);
341
- (0, _utils.assert)(typeof options.clip.y === 'number', 'Expected options.clip.y to be a number but found ' + typeof options.clip.y);
342
- (0, _utils.assert)(typeof options.clip.width === 'number', 'Expected options.clip.width to be a number but found ' + typeof options.clip.width);
343
- (0, _utils.assert)(typeof options.clip.height === 'number', 'Expected options.clip.height to be a number but found ' + typeof options.clip.height);
344
- (0, _utils.assert)(options.clip.width !== 0, 'Expected options.clip.width not to be 0.');
345
- (0, _utils.assert)(options.clip.height !== 0, 'Expected options.clip.height not to be 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
+ });