patchright-core 1.51.2 → 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 (303) hide show
  1. package/browsers.json +15 -13
  2. package/lib/androidServerImpl.js +42 -48
  3. package/lib/browserServerImpl.js +54 -67
  4. package/lib/cli/driver.js +71 -69
  5. package/lib/cli/program.js +312 -328
  6. package/lib/cli/programWithTestStub.js +51 -45
  7. package/lib/client/accessibility.js +31 -32
  8. package/lib/client/android.js +141 -228
  9. package/lib/client/api.js +135 -283
  10. package/lib/client/artifact.js +39 -36
  11. package/lib/client/browser.js +57 -61
  12. package/lib/client/browserContext.js +297 -326
  13. package/lib/client/browserType.js +92 -106
  14. package/lib/client/cdpSession.js +29 -31
  15. package/lib/client/channelOwner.js +82 -95
  16. package/lib/client/clientHelper.js +46 -38
  17. package/lib/client/clientInstrumentation.js +40 -37
  18. package/lib/client/clientStackTrace.js +41 -37
  19. package/lib/client/clock.js +36 -36
  20. package/lib/client/connection.js +190 -212
  21. package/lib/client/consoleMessage.js +31 -28
  22. package/lib/client/coverage.js +25 -22
  23. package/lib/client/dialog.js +30 -31
  24. package/lib/client/download.js +25 -25
  25. package/lib/client/electron.js +73 -75
  26. package/lib/client/elementHandle.js +111 -147
  27. package/lib/client/errors.js +53 -53
  28. package/lib/client/eventEmitter.js +124 -121
  29. package/lib/client/events.js +72 -68
  30. package/lib/client/fetch.js +135 -158
  31. package/lib/client/fileChooser.js +25 -24
  32. package/lib/client/fileUtils.js +31 -28
  33. package/lib/client/frame.js +187 -306
  34. package/lib/client/harRouter.js +42 -52
  35. package/lib/client/input.js +40 -69
  36. package/lib/client/jsHandle.js +54 -69
  37. package/lib/client/jsonPipe.js +27 -23
  38. package/lib/client/localUtils.js +29 -28
  39. package/lib/client/locator.js +161 -245
  40. package/lib/client/network.js +277 -295
  41. package/lib/client/page.js +270 -318
  42. package/lib/client/platform.js +46 -43
  43. package/lib/client/playwright.js +51 -66
  44. package/lib/client/selectors.js +48 -46
  45. package/lib/client/stream.js +29 -25
  46. package/lib/client/timeoutSettings.js +49 -39
  47. package/lib/client/tracing.js +48 -84
  48. package/lib/client/types.js +26 -22
  49. package/lib/client/video.js +35 -27
  50. package/lib/client/waiter.js +69 -88
  51. package/lib/client/webError.js +25 -23
  52. package/lib/client/webSocket.js +61 -56
  53. package/lib/client/worker.js +48 -58
  54. package/lib/client/writableStream.js +27 -23
  55. package/lib/generated/clockSource.js +26 -5
  56. package/lib/generated/consoleApiSource.js +26 -5
  57. package/lib/generated/injectedScriptSource.js +26 -5
  58. package/lib/generated/pollingRecorderSource.js +26 -5
  59. package/lib/generated/utilityScriptSource.js +26 -5
  60. package/lib/generated/webSocketMockSource.js +375 -4
  61. package/lib/inProcessFactory.js +53 -53
  62. package/lib/inprocess.js +2 -19
  63. package/lib/outofprocess.js +53 -46
  64. package/lib/protocol/debug.js +209 -25
  65. package/lib/protocol/serializers.js +153 -134
  66. package/lib/protocol/validator.js +2714 -2714
  67. package/lib/protocol/validatorPrimitives.js +114 -73
  68. package/lib/remote/playwrightConnection.js +140 -157
  69. package/lib/remote/playwrightServer.js +99 -84
  70. package/lib/server/accessibility.js +44 -37
  71. package/lib/server/android/android.js +216 -209
  72. package/lib/server/android/backendAdb.js +89 -82
  73. package/lib/server/artifact.js +78 -55
  74. package/lib/server/bidi/bidiBrowser.js +221 -155
  75. package/lib/server/bidi/bidiChromium.js +106 -79
  76. package/lib/server/bidi/bidiConnection.js +66 -83
  77. package/lib/server/bidi/bidiExecutionContext.js +128 -113
  78. package/lib/server/bidi/bidiFirefox.js +76 -69
  79. package/lib/server/bidi/bidiInput.js +86 -97
  80. package/lib/server/bidi/bidiNetworkManager.js +137 -154
  81. package/lib/server/bidi/bidiOverCdp.js +57 -58
  82. package/lib/server/bidi/bidiPage.js +247 -219
  83. package/lib/server/bidi/bidiPdf.js +52 -86
  84. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  85. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  86. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  87. package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
  88. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  89. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  90. package/lib/server/browser.js +76 -84
  91. package/lib/server/browserContext.js +321 -346
  92. package/lib/server/browserType.js +169 -182
  93. package/lib/server/callLog.js +47 -44
  94. package/lib/server/chromium/chromium.js +212 -190
  95. package/lib/server/chromium/chromiumSwitches.js +86 -64
  96. package/lib/server/chromium/crAccessibility.js +157 -131
  97. package/lib/server/chromium/crBrowser.js +253 -273
  98. package/lib/server/chromium/crConnection.js +91 -116
  99. package/lib/server/chromium/crCoverage.js +113 -127
  100. package/lib/server/chromium/crDevTools.js +59 -51
  101. package/lib/server/chromium/crDragDrop.js +62 -79
  102. package/lib/server/chromium/crExecutionContext.js +88 -83
  103. package/lib/server/chromium/crInput.js +97 -95
  104. package/lib/server/chromium/crNetworkManager.js +288 -403
  105. package/lib/server/chromium/crPage.js +522 -608
  106. package/lib/server/chromium/crPdf.js +54 -86
  107. package/lib/server/chromium/crProtocolHelper.js +92 -80
  108. package/lib/server/chromium/crServiceWorker.js +82 -67
  109. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  110. package/lib/server/chromium/protocol.d.js +16 -0
  111. package/lib/server/chromium/videoRecorder.js +65 -99
  112. package/lib/server/clock.js +62 -50
  113. package/lib/server/codegen/csharp.js +185 -160
  114. package/lib/server/codegen/java.js +155 -128
  115. package/lib/server/codegen/javascript.js +163 -148
  116. package/lib/server/codegen/jsonl.js +32 -28
  117. package/lib/server/codegen/language.js +75 -52
  118. package/lib/server/codegen/languages.js +65 -27
  119. package/lib/server/codegen/python.js +140 -125
  120. package/lib/server/codegen/types.js +15 -4
  121. package/lib/server/console.js +28 -32
  122. package/lib/server/cookieStore.js +105 -86
  123. package/lib/server/debugController.js +97 -124
  124. package/lib/server/debugger.js +82 -78
  125. package/lib/server/deviceDescriptors.js +37 -24
  126. package/lib/server/deviceDescriptorsSource.json +50 -50
  127. package/lib/server/dialog.js +36 -35
  128. package/lib/server/dispatchers/androidDispatcher.js +196 -107
  129. package/lib/server/dispatchers/artifactDispatcher.js +62 -62
  130. package/lib/server/dispatchers/browserContextDispatcher.js +176 -205
  131. package/lib/server/dispatchers/browserDispatcher.js +78 -97
  132. package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
  133. package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
  134. package/lib/server/dispatchers/debugControllerDispatcher.js +48 -66
  135. package/lib/server/dispatchers/dialogDispatcher.js +30 -27
  136. package/lib/server/dispatchers/dispatcher.js +169 -220
  137. package/lib/server/dispatchers/electronDispatcher.js +54 -57
  138. package/lib/server/dispatchers/elementHandlerDispatcher.js +77 -119
  139. package/lib/server/dispatchers/frameDispatcher.js +99 -163
  140. package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
  141. package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
  142. package/lib/server/dispatchers/localUtilsDispatcher.js +95 -80
  143. package/lib/server/dispatchers/networkDispatchers.js +90 -107
  144. package/lib/server/dispatchers/pageDispatcher.js +128 -169
  145. package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
  146. package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
  147. package/lib/server/dispatchers/streamDispatcher.js +42 -45
  148. package/lib/server/dispatchers/tracingDispatcher.js +36 -41
  149. package/lib/server/dispatchers/webSocketRouteDispatcher.js +96 -131
  150. package/lib/server/dispatchers/writableStreamDispatcher.js +54 -38
  151. package/lib/server/dom.js +413 -443
  152. package/lib/server/download.js +45 -35
  153. package/lib/server/electron/electron.js +156 -176
  154. package/lib/server/electron/loader.js +8 -36
  155. package/lib/server/errors.js +47 -46
  156. package/lib/server/fetch.js +289 -323
  157. package/lib/server/fileChooser.js +25 -24
  158. package/lib/server/fileUploadUtils.js +65 -59
  159. package/lib/server/firefox/ffAccessibility.js +153 -131
  160. package/lib/server/firefox/ffBrowser.js +213 -277
  161. package/lib/server/firefox/ffConnection.js +63 -84
  162. package/lib/server/firefox/ffExecutionContext.js +91 -73
  163. package/lib/server/firefox/ffInput.js +67 -69
  164. package/lib/server/firefox/ffNetworkManager.js +131 -110
  165. package/lib/server/firefox/ffPage.js +236 -273
  166. package/lib/server/firefox/firefox.js +76 -67
  167. package/lib/server/firefox/protocol.d.js +16 -0
  168. package/lib/server/formData.js +107 -35
  169. package/lib/server/frameSelectors.js +77 -111
  170. package/lib/server/frames.js +741 -891
  171. package/lib/server/har/harRecorder.js +85 -77
  172. package/lib/server/har/harTracer.js +287 -222
  173. package/lib/server/harBackend.js +80 -80
  174. package/lib/server/helper.js +56 -59
  175. package/lib/server/index.js +59 -99
  176. package/lib/server/input.js +134 -163
  177. package/lib/server/instrumentation.js +49 -44
  178. package/lib/server/javascript.js +143 -134
  179. package/lib/server/launchApp.js +92 -73
  180. package/lib/server/localUtils.js +130 -122
  181. package/lib/server/macEditingCommands.js +141 -137
  182. package/lib/server/network.js +262 -296
  183. package/lib/server/page.js +329 -426
  184. package/lib/server/pageBinding.js +88 -0
  185. package/lib/server/pipeTransport.js +49 -45
  186. package/lib/server/playwright.js +60 -67
  187. package/lib/server/progress.js +56 -51
  188. package/lib/server/protocolError.js +34 -31
  189. package/lib/server/recorder/chat.js +70 -86
  190. package/lib/server/recorder/contextRecorder.js +134 -138
  191. package/lib/server/recorder/recorderApp.js +127 -136
  192. package/lib/server/recorder/recorderCollection.js +56 -44
  193. package/lib/server/recorder/recorderFrontend.js +15 -4
  194. package/lib/server/recorder/recorderRunner.js +79 -103
  195. package/lib/server/recorder/recorderUtils.js +56 -45
  196. package/lib/server/recorder/throttledFile.js +42 -30
  197. package/lib/server/recorder.js +177 -186
  198. package/lib/server/registry/browserFetcher.js +106 -101
  199. package/lib/server/registry/dependencies.js +245 -196
  200. package/lib/server/registry/index.js +904 -792
  201. package/lib/server/registry/nativeDeps.js +1073 -464
  202. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  203. package/lib/server/screenshotter.js +166 -182
  204. package/lib/server/selectors.js +85 -46
  205. package/lib/server/socksClientCertificatesInterceptor.js +166 -185
  206. package/lib/server/socksInterceptor.js +62 -70
  207. package/lib/server/storageScript.js +94 -100
  208. package/lib/server/timeoutSettings.js +58 -43
  209. package/lib/server/trace/recorder/snapshotter.js +70 -89
  210. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  211. package/lib/server/trace/recorder/tracing.js +321 -333
  212. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  213. package/lib/server/trace/viewer/traceViewer.js +168 -146
  214. package/lib/server/transport.js +124 -133
  215. package/lib/server/types.js +26 -22
  216. package/lib/server/usKeyboardLayout.js +135 -545
  217. package/lib/server/utils/ascii.js +39 -26
  218. package/lib/server/utils/comparators.js +105 -103
  219. package/lib/server/utils/crypto.js +157 -112
  220. package/lib/server/utils/debug.js +37 -28
  221. package/lib/server/utils/debugLogger.js +69 -48
  222. package/lib/server/utils/env.js +52 -37
  223. package/lib/server/utils/eventsHelper.js +29 -28
  224. package/lib/server/utils/expectUtils.js +31 -26
  225. package/lib/server/utils/fileUtils.js +123 -136
  226. package/lib/server/utils/happyEyeballs.js +138 -123
  227. package/lib/server/utils/hostPlatform.js +84 -120
  228. package/lib/server/utils/httpServer.js +106 -121
  229. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  230. package/lib/server/utils/image_tools/compare.js +44 -43
  231. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  232. package/lib/server/utils/image_tools/stats.js +40 -40
  233. package/lib/server/utils/linuxUtils.js +50 -37
  234. package/lib/server/utils/network.js +143 -86
  235. package/lib/server/utils/nodePlatform.js +87 -79
  236. package/lib/server/utils/pipeTransport.js +44 -42
  237. package/lib/server/utils/processLauncher.js +111 -121
  238. package/lib/server/utils/profiler.js +52 -39
  239. package/lib/server/utils/socksProxy.js +280 -339
  240. package/lib/server/utils/spawnAsync.js +37 -41
  241. package/lib/server/utils/task.js +31 -38
  242. package/lib/server/utils/userAgent.js +73 -66
  243. package/lib/server/utils/wsServer.js +73 -69
  244. package/lib/server/utils/zipFile.js +36 -37
  245. package/lib/server/utils/zones.js +37 -34
  246. package/lib/server/webkit/protocol.d.js +16 -0
  247. package/lib/server/webkit/webkit.js +76 -63
  248. package/lib/server/webkit/wkAccessibility.js +161 -118
  249. package/lib/server/webkit/wkBrowser.js +159 -176
  250. package/lib/server/webkit/wkConnection.js +59 -83
  251. package/lib/server/webkit/wkExecutionContext.js +84 -70
  252. package/lib/server/webkit/wkInput.js +82 -80
  253. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  254. package/lib/server/webkit/wkPage.js +525 -619
  255. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  256. package/lib/server/webkit/wkWorkers.js +77 -77
  257. package/lib/utils/isomorphic/ariaSnapshot.js +144 -152
  258. package/lib/utils/isomorphic/assert.js +28 -22
  259. package/lib/utils/isomorphic/builtins.js +90 -0
  260. package/lib/utils/isomorphic/colors.js +66 -59
  261. package/lib/utils/isomorphic/cssParser.js +121 -125
  262. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  263. package/lib/utils/isomorphic/headers.js +38 -37
  264. package/lib/utils/isomorphic/locatorGenerators.js +340 -357
  265. package/lib/utils/isomorphic/locatorParser.js +96 -105
  266. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  267. package/lib/utils/isomorphic/manualPromise.js +47 -39
  268. package/lib/utils/isomorphic/mimeType.js +448 -25
  269. package/lib/utils/isomorphic/multimap.js +35 -27
  270. package/lib/utils/isomorphic/rtti.js +35 -33
  271. package/lib/utils/isomorphic/selectorParser.js +183 -193
  272. package/lib/utils/isomorphic/semaphore.js +27 -24
  273. package/lib/utils/isomorphic/stackTrace.js +87 -98
  274. package/lib/utils/isomorphic/stringUtils.js +113 -106
  275. package/lib/utils/isomorphic/time.js +41 -22
  276. package/lib/utils/isomorphic/timeoutRunner.js +55 -54
  277. package/lib/utils/isomorphic/traceUtils.js +38 -41
  278. package/lib/utils/isomorphic/types.js +15 -4
  279. package/lib/utils/isomorphic/urlMatch.js +112 -67
  280. package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
  281. package/lib/utils.js +97 -443
  282. package/lib/utilsBundle.js +101 -52
  283. package/lib/vite/htmlReport/index.html +21 -15
  284. package/lib/vite/recorder/assets/{codeMirrorModule-B9YMkrwa.js → codeMirrorModule-DVQi6prl.js} +1 -1
  285. package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
  286. package/lib/vite/recorder/index.html +1 -1
  287. package/lib/vite/traceViewer/assets/{codeMirrorModule-DpJ-EmBQ.js → codeMirrorModule-dvXVzLxY.js} +1 -1
  288. package/lib/vite/traceViewer/assets/defaultSettingsView-BjymbO6M.js +265 -0
  289. package/lib/vite/traceViewer/{defaultSettingsView.5fN5lw10.css → defaultSettingsView.QdHITyLI.css} +1 -1
  290. package/lib/vite/traceViewer/index.ChIUCJnj.js +2 -0
  291. package/lib/vite/traceViewer/index.html +3 -3
  292. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  293. package/lib/vite/traceViewer/uiMode.html +3 -3
  294. package/lib/vite/traceViewer/uiMode.jUCiCtdp.js +5 -0
  295. package/lib/zipBundle.js +32 -23
  296. package/package.json +1 -1
  297. package/types/protocol.d.ts +436 -17
  298. package/types/types.d.ts +35 -16
  299. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  300. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +0 -259
  302. package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
@@ -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,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
+ });