rebrowser-playwright-core 1.49.1 → 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/ThirdPartyNotices.txt +381 -55
  2. package/bin/reinstall_msedge_beta_linux.sh +6 -0
  3. package/bin/reinstall_msedge_dev_linux.sh +6 -0
  4. package/bin/reinstall_msedge_stable_linux.sh +6 -0
  5. package/browsers.json +28 -13
  6. package/index.js +0 -1
  7. package/lib/androidServerImpl.js +42 -48
  8. package/lib/browserServerImpl.js +60 -64
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +314 -354
  11. package/lib/cli/programWithTestStub.js +51 -44
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +146 -254
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -39
  16. package/lib/client/browser.js +59 -68
  17. package/lib/client/browserContext.js +302 -322
  18. package/lib/client/browserType.js +95 -143
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +109 -139
  21. package/lib/client/clientHelper.js +49 -42
  22. package/lib/client/clientInstrumentation.js +40 -35
  23. package/lib/client/clientStackTrace.js +69 -0
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +203 -218
  26. package/lib/client/consoleMessage.js +33 -33
  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 +74 -76
  31. package/lib/client/elementHandle.js +126 -163
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +127 -127
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +154 -178
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +34 -0
  38. package/lib/client/frame.js +189 -307
  39. package/lib/client/harRouter.js +44 -56
  40. package/lib/client/input.js +40 -69
  41. package/lib/client/jsHandle.js +55 -71
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +53 -28
  44. package/lib/client/locator.js +144 -230
  45. package/lib/client/network.js +285 -301
  46. package/lib/client/page.js +273 -312
  47. package/lib/client/platform.js +74 -0
  48. package/lib/client/playwright.js +62 -57
  49. package/lib/client/selectors.js +51 -43
  50. package/lib/client/stream.js +30 -45
  51. package/lib/client/timeoutSettings.js +75 -0
  52. package/lib/client/tracing.js +49 -82
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +71 -91
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +111 -0
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +28 -43
  60. package/lib/generated/clockSource.js +26 -5
  61. package/lib/generated/consoleApiSource.js +26 -5
  62. package/lib/generated/injectedScriptSource.js +26 -5
  63. package/lib/generated/pollingRecorderSource.js +26 -5
  64. package/lib/generated/utilityScriptSource.js +26 -5
  65. package/lib/generated/webSocketMockSource.js +375 -4
  66. package/lib/inProcessFactory.js +53 -48
  67. package/lib/inprocess.js +2 -19
  68. package/lib/outofprocess.js +53 -42
  69. package/lib/protocol/debug.js +209 -25
  70. package/lib/protocol/serializers.js +153 -134
  71. package/lib/protocol/validator.js +2712 -2667
  72. package/lib/protocol/validatorPrimitives.js +115 -75
  73. package/lib/remote/playwrightConnection.js +144 -152
  74. package/lib/remote/playwrightServer.js +106 -77
  75. package/lib/server/accessibility.js +44 -37
  76. package/lib/server/android/android.js +216 -206
  77. package/lib/server/android/backendAdb.js +89 -82
  78. package/lib/server/artifact.js +78 -55
  79. package/lib/server/bidi/bidiBrowser.js +227 -158
  80. package/lib/server/bidi/bidiChromium.js +106 -78
  81. package/lib/server/bidi/bidiConnection.js +66 -83
  82. package/lib/server/bidi/bidiExecutionContext.js +161 -97
  83. package/lib/server/bidi/bidiFirefox.js +76 -68
  84. package/lib/server/bidi/bidiInput.js +90 -102
  85. package/lib/server/bidi/bidiNetworkManager.js +141 -159
  86. package/lib/server/bidi/bidiOverCdp.js +57 -58
  87. package/lib/server/bidi/bidiPage.js +262 -261
  88. package/lib/server/bidi/bidiPdf.js +52 -86
  89. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  90. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  91. package/lib/server/bidi/third_party/bidiKeyboard.js +241 -223
  92. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  93. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  94. package/lib/server/bidi/third_party/firefoxPrefs.js +149 -111
  95. package/lib/server/browser.js +76 -84
  96. package/lib/server/browserContext.js +343 -360
  97. package/lib/server/browserType.js +169 -181
  98. package/lib/server/callLog.js +82 -0
  99. package/lib/server/chromium/chromium.js +212 -190
  100. package/lib/server/chromium/chromiumSwitches.js +99 -44
  101. package/lib/server/chromium/crAccessibility.js +157 -131
  102. package/lib/server/chromium/crBrowser.js +262 -280
  103. package/lib/server/chromium/crConnection.js +121 -178
  104. package/lib/server/chromium/crCoverage.js +113 -127
  105. package/lib/server/chromium/crDevTools.js +64 -55
  106. package/lib/server/chromium/crDragDrop.js +62 -79
  107. package/lib/server/chromium/crExecutionContext.js +100 -91
  108. package/lib/server/chromium/crInput.js +101 -88
  109. package/lib/server/chromium/crNetworkManager.js +269 -370
  110. package/lib/server/chromium/crPage.js +509 -597
  111. package/lib/server/chromium/crPdf.js +54 -86
  112. package/lib/server/chromium/crProtocolHelper.js +92 -80
  113. package/lib/server/chromium/crServiceWorker.js +85 -69
  114. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  115. package/lib/server/chromium/protocol.d.js +16 -0
  116. package/lib/server/chromium/videoRecorder.js +65 -99
  117. package/lib/server/clock.js +58 -46
  118. package/lib/server/codegen/csharp.js +191 -156
  119. package/lib/server/codegen/java.js +163 -125
  120. package/lib/server/codegen/javascript.js +166 -143
  121. package/lib/server/codegen/jsonl.js +33 -29
  122. package/lib/server/codegen/language.js +75 -52
  123. package/lib/server/codegen/languages.js +65 -27
  124. package/lib/server/codegen/python.js +141 -125
  125. package/lib/server/codegen/types.js +15 -4
  126. package/lib/server/console.js +28 -32
  127. package/lib/server/cookieStore.js +105 -86
  128. package/lib/server/debugController.js +102 -154
  129. package/lib/server/debugger.js +82 -78
  130. package/lib/server/deviceDescriptors.js +37 -24
  131. package/lib/server/deviceDescriptorsSource.json +131 -131
  132. package/lib/server/dialog.js +36 -35
  133. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  134. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  135. package/lib/server/dispatchers/browserContextDispatcher.js +177 -217
  136. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  137. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  138. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  139. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -64
  140. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  141. package/lib/server/dispatchers/dispatcher.js +180 -229
  142. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  143. package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
  144. package/lib/server/dispatchers/frameDispatcher.js +93 -162
  145. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  146. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  147. package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
  148. package/lib/server/dispatchers/networkDispatchers.js +92 -109
  149. package/lib/server/dispatchers/pageDispatcher.js +130 -169
  150. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  151. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  152. package/lib/server/dispatchers/streamDispatcher.js +42 -44
  153. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  154. package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
  155. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
  156. package/lib/server/dom.js +424 -443
  157. package/lib/server/download.js +45 -35
  158. package/lib/server/electron/electron.js +156 -175
  159. package/lib/server/electron/loader.js +8 -36
  160. package/lib/server/errors.js +47 -46
  161. package/lib/server/fetch.js +302 -331
  162. package/lib/server/fileChooser.js +25 -24
  163. package/lib/server/fileUploadUtils.js +66 -57
  164. package/lib/server/firefox/ffAccessibility.js +153 -131
  165. package/lib/server/firefox/ffBrowser.js +218 -274
  166. package/lib/server/firefox/ffConnection.js +63 -84
  167. package/lib/server/firefox/ffExecutionContext.js +103 -77
  168. package/lib/server/firefox/ffInput.js +72 -63
  169. package/lib/server/firefox/ffNetworkManager.js +131 -110
  170. package/lib/server/firefox/ffPage.js +244 -302
  171. package/lib/server/firefox/firefox.js +76 -69
  172. package/lib/server/firefox/protocol.d.js +16 -0
  173. package/lib/server/formData.js +107 -35
  174. package/lib/server/frameSelectors.js +77 -111
  175. package/lib/server/frames.js +719 -855
  176. package/lib/server/har/harRecorder.js +85 -77
  177. package/lib/server/har/harTracer.js +288 -224
  178. package/lib/server/harBackend.js +157 -0
  179. package/lib/server/helper.js +56 -59
  180. package/lib/server/index.js +59 -106
  181. package/lib/server/input.js +136 -166
  182. package/lib/server/instrumentation.js +49 -44
  183. package/lib/server/javascript.js +157 -151
  184. package/lib/server/launchApp.js +92 -73
  185. package/lib/server/localUtils.js +211 -0
  186. package/lib/server/macEditingCommands.js +141 -137
  187. package/lib/server/network.js +263 -297
  188. package/lib/server/page.js +351 -434
  189. package/lib/server/pageBinding.js +88 -0
  190. package/lib/server/pipeTransport.js +49 -45
  191. package/lib/server/playwright.js +60 -67
  192. package/lib/server/progress.js +56 -51
  193. package/lib/server/protocolError.js +34 -31
  194. package/lib/server/recorder/chat.js +161 -0
  195. package/lib/server/recorder/contextRecorder.js +135 -148
  196. package/lib/server/recorder/recorderApp.js +129 -132
  197. package/lib/server/recorder/recorderCollection.js +57 -57
  198. package/lib/server/recorder/recorderFrontend.js +15 -4
  199. package/lib/server/recorder/recorderRunner.js +80 -100
  200. package/lib/server/recorder/recorderUtils.js +59 -72
  201. package/lib/server/recorder/throttledFile.js +42 -31
  202. package/lib/server/recorder.js +186 -190
  203. package/lib/server/registry/browserFetcher.js +107 -100
  204. package/lib/server/registry/dependencies.js +247 -198
  205. package/lib/server/registry/index.js +928 -709
  206. package/lib/server/registry/nativeDeps.js +1073 -461
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +166 -182
  209. package/lib/server/selectors.js +85 -46
  210. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  211. package/lib/server/socksInterceptor.js +62 -67
  212. package/lib/server/storageScript.js +154 -0
  213. package/lib/server/timeoutSettings.js +89 -0
  214. package/lib/server/trace/recorder/snapshotter.js +70 -88
  215. package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
  216. package/lib/server/trace/recorder/tracing.js +324 -327
  217. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  218. package/lib/server/trace/viewer/traceViewer.js +172 -137
  219. package/lib/server/transport.js +125 -133
  220. package/lib/server/types.js +26 -22
  221. package/lib/server/usKeyboardLayout.js +135 -545
  222. package/lib/server/utils/ascii.js +44 -0
  223. package/lib/server/utils/comparators.js +161 -0
  224. package/lib/server/utils/crypto.js +216 -0
  225. package/lib/server/utils/debug.js +47 -0
  226. package/lib/server/utils/debugLogger.js +114 -0
  227. package/lib/server/utils/env.js +68 -0
  228. package/lib/server/utils/eventsHelper.js +39 -0
  229. package/lib/server/utils/expectUtils.js +38 -0
  230. package/lib/server/utils/fileUtils.js +191 -0
  231. package/lib/server/utils/happyEyeballs.js +207 -0
  232. package/lib/server/utils/hostPlatform.js +109 -0
  233. package/lib/server/utils/httpServer.js +218 -0
  234. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  235. package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
  236. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  237. package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
  238. package/lib/server/utils/linuxUtils.js +71 -0
  239. package/lib/server/utils/network.js +217 -0
  240. package/lib/server/utils/nodePlatform.js +148 -0
  241. package/lib/server/utils/pipeTransport.js +84 -0
  242. package/lib/server/utils/processLauncher.js +238 -0
  243. package/lib/server/utils/profiler.js +65 -0
  244. package/lib/server/utils/socksProxy.js +511 -0
  245. package/lib/server/utils/spawnAsync.js +41 -0
  246. package/lib/server/utils/task.js +51 -0
  247. package/lib/server/utils/userAgent.js +98 -0
  248. package/lib/server/utils/wsServer.js +132 -0
  249. package/lib/server/utils/zipFile.js +74 -0
  250. package/lib/server/utils/zones.js +57 -0
  251. package/lib/server/webkit/protocol.d.js +16 -0
  252. package/lib/server/webkit/webkit.js +76 -63
  253. package/lib/server/webkit/wkAccessibility.js +161 -118
  254. package/lib/server/webkit/wkBrowser.js +163 -180
  255. package/lib/server/webkit/wkConnection.js +59 -83
  256. package/lib/server/webkit/wkExecutionContext.js +96 -73
  257. package/lib/server/webkit/wkInput.js +87 -75
  258. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  259. package/lib/server/webkit/wkPage.js +536 -647
  260. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  261. package/lib/server/webkit/wkWorkers.js +77 -77
  262. package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
  263. package/lib/utils/isomorphic/assert.js +31 -0
  264. package/lib/utils/isomorphic/builtins.js +90 -0
  265. package/lib/utils/isomorphic/colors.js +72 -0
  266. package/lib/utils/isomorphic/cssParser.js +123 -127
  267. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  268. package/lib/utils/isomorphic/headers.js +53 -0
  269. package/lib/utils/isomorphic/locatorGenerators.js +344 -349
  270. package/lib/utils/isomorphic/locatorParser.js +103 -106
  271. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  272. package/lib/utils/isomorphic/manualPromise.js +115 -0
  273. package/lib/utils/isomorphic/mimeType.js +453 -22
  274. package/lib/utils/isomorphic/multimap.js +81 -0
  275. package/lib/utils/isomorphic/rtti.js +43 -0
  276. package/lib/utils/isomorphic/selectorParser.js +183 -193
  277. package/lib/utils/isomorphic/semaphore.js +54 -0
  278. package/lib/utils/isomorphic/stackTrace.js +158 -0
  279. package/lib/utils/isomorphic/stringUtils.js +113 -106
  280. package/lib/utils/isomorphic/time.js +44 -0
  281. package/lib/utils/isomorphic/timeoutRunner.js +67 -0
  282. package/lib/utils/isomorphic/traceUtils.js +52 -32
  283. package/lib/utils/isomorphic/types.js +16 -0
  284. package/lib/utils/isomorphic/urlMatch.js +114 -71
  285. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  286. package/lib/utils.js +101 -0
  287. package/lib/utilsBundle.js +101 -76
  288. package/lib/utilsBundleImpl/index.js +114 -116
  289. package/lib/vite/htmlReport/index.html +26 -20
  290. package/lib/vite/recorder/assets/{codeMirrorModule-C5j27SYZ.js → codeMirrorModule-DVQi6prl.js} +13 -13
  291. package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
  292. package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
  293. package/lib/vite/recorder/index.html +2 -2
  294. package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
  295. package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
  296. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  297. package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
  298. package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
  299. package/lib/vite/traceViewer/index.html +4 -7
  300. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  301. package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
  302. package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
  303. package/lib/vite/traceViewer/uiMode.html +4 -7
  304. package/lib/zipBundle.js +32 -23
  305. package/lib/zipBundleImpl.js +4 -4
  306. package/package.json +7 -7
  307. package/types/protocol.d.ts +819 -127
  308. package/types/types.d.ts +181 -69
  309. package/bin/PrintDeps.exe +0 -0
  310. package/bin/README.md +0 -2
  311. package/lib/common/socksProxy.js +0 -569
  312. package/lib/common/timeoutSettings.js +0 -73
  313. package/lib/common/types.js +0 -5
  314. package/lib/image_tools/colorUtils.js +0 -98
  315. package/lib/image_tools/imageChannel.js +0 -70
  316. package/lib/protocol/transport.js +0 -82
  317. package/lib/server/ariaSnapshot.js +0 -33
  318. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
  319. package/lib/server/recorder/recorderInTraceViewer.js +0 -144
  320. package/lib/utils/ascii.js +0 -31
  321. package/lib/utils/comparators.js +0 -153
  322. package/lib/utils/crypto.js +0 -171
  323. package/lib/utils/debug.js +0 -46
  324. package/lib/utils/debugLogger.js +0 -91
  325. package/lib/utils/env.js +0 -49
  326. package/lib/utils/eventsHelper.js +0 -38
  327. package/lib/utils/expectUtils.js +0 -33
  328. package/lib/utils/fileUtils.js +0 -205
  329. package/lib/utils/happy-eyeballs.js +0 -194
  330. package/lib/utils/headers.js +0 -52
  331. package/lib/utils/hostPlatform.js +0 -139
  332. package/lib/utils/httpServer.js +0 -237
  333. package/lib/utils/index.js +0 -368
  334. package/lib/utils/isomorphic/recorderUtils.js +0 -227
  335. package/lib/utils/linuxUtils.js +0 -78
  336. package/lib/utils/manualPromise.js +0 -109
  337. package/lib/utils/multimap.js +0 -75
  338. package/lib/utils/network.js +0 -160
  339. package/lib/utils/processLauncher.js +0 -248
  340. package/lib/utils/profiler.js +0 -53
  341. package/lib/utils/rtti.js +0 -44
  342. package/lib/utils/semaphore.js +0 -51
  343. package/lib/utils/sequence.js +0 -64
  344. package/lib/utils/spawnAsync.js +0 -45
  345. package/lib/utils/stackTrace.js +0 -134
  346. package/lib/utils/task.js +0 -58
  347. package/lib/utils/time.js +0 -37
  348. package/lib/utils/timeoutRunner.js +0 -66
  349. package/lib/utils/traceUtils.js +0 -44
  350. package/lib/utils/userAgent.js +0 -105
  351. package/lib/utils/wsServer.js +0 -127
  352. package/lib/utils/zipFile.js +0 -75
  353. package/lib/utils/zones.js +0 -71
  354. package/lib/vite/recorder/assets/index-m0XdVJHe.js +0 -184
  355. package/lib/vite/traceViewer/assets/codeMirrorModule-BBCX0spr.js +0 -24
  356. package/lib/vite/traceViewer/assets/inspectorTab-B4Iw34Ow.js +0 -68
  357. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  358. package/lib/vite/traceViewer/assets/workbench-DFlGYqou.js +0 -9
  359. package/lib/vite/traceViewer/embedded.CmarehFk.js +0 -2
  360. package/lib/vite/traceViewer/embedded.html +0 -18
  361. package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
  362. package/lib/vite/traceViewer/index.FBucu_gE.js +0 -2
  363. package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
  364. package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  365. package/lib/vite/traceViewer/recorder.CW_rzcEp.js +0 -2
  366. package/lib/vite/traceViewer/recorder.html +0 -17
  367. package/lib/vite/traceViewer/uiMode.CDUVjusr.js +0 -5
  368. package/lib/vite/traceViewer/workbench.C-zR9ysA.css +0 -1
  369. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  370. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  371. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  372. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -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/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,50 @@ 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
133
  const originalViewportSize = this._page.viewportSize();
136
134
  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
- };
135
+ if (!viewportSize)
136
+ viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ width: window.innerWidth, height: window.innerHeight }));
137
+ return { viewportSize, originalViewportSize };
145
138
  }
146
139
  async _fullPageSize(progress) {
147
140
  const fullPageSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => {
148
- if (!document.body || !document.documentElement) return null;
141
+ if (!document.body || !document.documentElement)
142
+ return null;
149
143
  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)
144
+ width: Math.max(
145
+ document.body.scrollWidth,
146
+ document.documentElement.scrollWidth,
147
+ document.body.offsetWidth,
148
+ document.documentElement.offsetWidth,
149
+ document.body.clientWidth,
150
+ document.documentElement.clientWidth
151
+ ),
152
+ height: Math.max(
153
+ document.body.scrollHeight,
154
+ document.documentElement.scrollHeight,
155
+ document.body.offsetHeight,
156
+ document.documentElement.offsetHeight,
157
+ document.body.clientHeight,
158
+ document.documentElement.clientHeight
159
+ )
152
160
  };
153
161
  });
154
162
  return fullPageSize;
@@ -156,35 +164,24 @@ class Screenshotter {
156
164
  async screenshotPage(progress, options) {
157
165
  const format = validateScreenshotOptions(options);
158
166
  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
-
167
+ progress.log("taking page screenshot");
168
+ const { viewportSize } = await this._originalViewportSize(progress);
169
+ await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== "initial", options.animations === "disabled");
170
+ progress.throwIfAborted();
166
171
  if (options.fullPage) {
167
172
  const fullPageSize = await this._fullPageSize(progress);
168
- let documentRect = {
169
- x: 0,
170
- y: 0,
171
- width: fullPageSize.width,
172
- height: fullPageSize.height
173
- };
173
+ let documentRect = { x: 0, y: 0, width: fullPageSize.width, height: fullPageSize.height };
174
174
  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.
175
+ if (options.clip)
176
+ documentRect = trimClipToSize(options.clip, documentRect);
177
+ const buffer2 = await this._screenshot(progress, format, documentRect, void 0, fitsViewport, options);
178
+ progress.throwIfAborted();
178
179
  await this._restorePageAfterScreenshot();
179
- return buffer;
180
+ return buffer2;
180
181
  }
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.
182
+ const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };
183
+ const buffer = await this._screenshot(progress, format, void 0, viewportRect, true, options);
184
+ progress.throwIfAborted();
188
185
  await this._restorePageAfterScreenshot();
189
186
  return buffer;
190
187
  });
@@ -192,114 +189,102 @@ class Screenshotter {
192
189
  async screenshotElement(progress, handle, options) {
193
190
  const format = validateScreenshotOptions(options);
194
191
  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.
192
+ progress.log("taking element screenshot");
193
+ const { viewportSize } = await this._originalViewportSize(progress);
194
+ await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== "initial", options.animations === "disabled");
195
+ progress.throwIfAborted();
196
+ await handle._waitAndScrollIntoViewIfNeeded(
197
+ progress,
198
+ true
199
+ /* waitForVisible */
200
+ );
201
+ progress.throwIfAborted();
204
202
  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.');
203
+ (0, import_utils.assert)(boundingBox, "Node is either not visible or not an HTMLElement");
204
+ (0, import_utils.assert)(boundingBox.width !== 0, "Node has 0 width.");
205
+ (0, import_utils.assert)(boundingBox.height !== 0, "Node has 0 height.");
208
206
  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
- };
207
+ progress.throwIfAborted();
208
+ const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));
209
+ const documentRect = { ...boundingBox };
217
210
  documentRect.x += scrollOffset.x;
218
211
  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.
212
+ const buffer = await this._screenshot(progress, format, import_helper.helper.enclosingIntRect(documentRect), void 0, fitsViewport, options);
213
+ progress.throwIfAborted();
221
214
  await this._restorePageAfterScreenshot();
222
215
  return buffer;
223
216
  });
224
217
  }
225
218
  async _preparePageForScreenshot(progress, frame, screenshotStyle, hideCaret, disableAnimations) {
226
- if (disableAnimations) progress.log(' disabled all CSS animations');
219
+ if (disableAnimations)
220
+ progress.log(" disabled all CSS animations");
227
221
  const syncAnimations = this._page._delegate.shouldToggleStyleSheetToSyncAnimations();
228
- await this._page.safeNonStallingEvaluateInAllFrames('(' + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, 'utility');
222
+ await this._page.safeNonStallingEvaluateInAllFrames("(" + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, "utility");
229
223
  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');
224
+ progress.log("waiting for fonts to load...");
225
+ await frame.nonStallingEvaluateInExistingContext("document.fonts.ready", "utility").catch(() => {
226
+ });
227
+ progress.log("fonts loaded");
233
228
  }
234
229
  progress.cleanupWhenAborted(() => this._restorePageAfterScreenshot());
235
230
  }
236
231
  async _restorePageAfterScreenshot() {
237
- await this._page.safeNonStallingEvaluateInAllFrames('window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()', 'utility');
232
+ await this._page.safeNonStallingEvaluateInAllFrames("window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()", "utility");
238
233
  }
239
234
  async _maskElements(progress, options) {
240
- const framesToParsedSelectors = new _multimap.MultiMap();
235
+ const framesToParsedSelectors = new import_multimap.MultiMap();
241
236
  const cleanup = async () => {
242
- await Promise.all([...framesToParsedSelectors.keys()].map(async frame => {
237
+ await Promise.all([...framesToParsedSelectors.keys()].map(async (frame) => {
243
238
  await frame.hideHighlight();
244
239
  }));
245
240
  };
246
- if (!options.mask || !options.mask.length) return cleanup;
247
- await Promise.all((options.mask || []).map(async ({
248
- frame,
249
- selector
250
- }) => {
241
+ if (!options.mask || !options.mask.length)
242
+ return cleanup;
243
+ await Promise.all((options.mask || []).map(async ({ frame, selector }) => {
251
244
  const pair = await frame.selectors.resolveFrameForSelector(selector);
252
- if (pair) framesToParsedSelectors.set(pair.frame, pair.info.parsed);
245
+ if (pair)
246
+ framesToParsedSelectors.set(pair.frame, pair.info.parsed);
253
247
  }));
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');
248
+ progress.throwIfAborted();
249
+ await Promise.all([...framesToParsedSelectors.keys()].map(async (frame) => {
250
+ await frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || "#F0F");
258
251
  }));
259
252
  progress.cleanupWhenAborted(cleanup);
260
253
  return cleanup;
261
254
  }
262
255
  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';
256
+ if (options.__testHookBeforeScreenshot)
257
+ await options.__testHookBeforeScreenshot();
258
+ progress.throwIfAborted();
259
+ const shouldSetDefaultBackground = options.omitBackground && format === "png";
267
260
  if (shouldSetDefaultBackground) {
268
- await this._page._delegate.setBackgroundColor({
269
- r: 0,
270
- g: 0,
271
- b: 0,
272
- a: 0
273
- });
261
+ await this._page._delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 });
274
262
  progress.cleanupWhenAborted(() => this._page._delegate.setBackgroundColor());
275
263
  }
276
- progress.throwIfAborted(); // Avoid extra work.
277
-
264
+ progress.throwIfAborted();
278
265
  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
-
266
+ progress.throwIfAborted();
267
+ const quality = format === "jpeg" ? options.quality ?? 80 : void 0;
268
+ const buffer = await this._page._delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || "device");
269
+ progress.throwIfAborted();
285
270
  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();
271
+ progress.throwIfAborted();
272
+ if (shouldSetDefaultBackground)
273
+ await this._page._delegate.setBackgroundColor();
274
+ progress.throwIfAborted();
275
+ if (options.__testHookAfterScreenshot)
276
+ await options.__testHookAfterScreenshot();
291
277
  return buffer;
292
278
  }
293
279
  }
294
- exports.Screenshotter = Screenshotter;
295
280
  class TaskQueue {
296
281
  constructor() {
297
- this._chain = void 0;
298
282
  this._chain = Promise.resolve();
299
283
  }
300
284
  postTask(task) {
301
285
  const result = this._chain.then(task);
302
- this._chain = result.catch(() => {});
286
+ this._chain = result.catch(() => {
287
+ });
303
288
  return result;
304
289
  }
305
290
  }
@@ -312,37 +297,36 @@ function trimClipToSize(clip, size) {
312
297
  x: Math.max(0, Math.min(clip.x + clip.width, size.width)),
313
298
  y: Math.max(0, Math.min(clip.y + clip.height, size.height))
314
299
  };
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');
300
+ const result = { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };
301
+ (0, import_utils.assert)(result.width && result.height, "Clipped area is either empty or outside the resulting image");
322
302
  return result;
323
303
  }
324
304
  function validateScreenshotOptions(options) {
325
305
  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
306
  if (options.type) {
329
- (0, _utils.assert)(options.type === 'png' || options.type === 'jpeg', 'Unknown options.type value: ' + options.type);
307
+ (0, import_utils.assert)(options.type === "png" || options.type === "jpeg", "Unknown options.type value: " + options.type);
330
308
  format = options.type;
331
309
  }
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);
310
+ if (!format)
311
+ format = "png";
312
+ if (options.quality !== void 0) {
313
+ (0, import_utils.assert)(format === "jpeg", "options.quality is unsupported for the " + format + " screenshots");
314
+ (0, import_utils.assert)(typeof options.quality === "number", "Expected options.quality to be a number but found " + typeof options.quality);
315
+ (0, import_utils.assert)(Number.isInteger(options.quality), "Expected options.quality to be an integer");
316
+ (0, import_utils.assert)(options.quality >= 0 && options.quality <= 100, "Expected options.quality to be between 0 and 100 (inclusive), got " + options.quality);
338
317
  }
339
318
  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.');
319
+ (0, import_utils.assert)(typeof options.clip.x === "number", "Expected options.clip.x to be a number but found " + typeof options.clip.x);
320
+ (0, import_utils.assert)(typeof options.clip.y === "number", "Expected options.clip.y to be a number but found " + typeof options.clip.y);
321
+ (0, import_utils.assert)(typeof options.clip.width === "number", "Expected options.clip.width to be a number but found " + typeof options.clip.width);
322
+ (0, import_utils.assert)(typeof options.clip.height === "number", "Expected options.clip.height to be a number but found " + typeof options.clip.height);
323
+ (0, import_utils.assert)(options.clip.width !== 0, "Expected options.clip.width not to be 0.");
324
+ (0, import_utils.assert)(options.clip.height !== 0, "Expected options.clip.height not to be 0.");
346
325
  }
347
326
  return format;
348
- }
327
+ }
328
+ // Annotate the CommonJS export names for ESM import in node:
329
+ 0 && (module.exports = {
330
+ Screenshotter,
331
+ validateScreenshotOptions
332
+ });