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,58 +1,57 @@
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 snapshotterInjected_exports = {};
20
+ __export(snapshotterInjected_exports, {
21
+ frameSnapshotStreamer: () => frameSnapshotStreamer
5
22
  });
6
- exports.frameSnapshotStreamer = frameSnapshotStreamer;
7
- /**
8
- * Copyright (c) Microsoft Corporation.
9
- *
10
- * Licensed under the Apache License, Version 2.0 (the "License");
11
- * you may not use this file except in compliance with the License.
12
- * You may obtain a copy of the License at
13
- *
14
- * http://www.apache.org/licenses/LICENSE-2.0
15
- *
16
- * Unless required by applicable law or agreed to in writing, software
17
- * distributed under the License is distributed on an "AS IS" BASIS,
18
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
- * See the License for the specific language governing permissions and
20
- * limitations under the License.
21
- */
22
-
23
+ module.exports = __toCommonJS(snapshotterInjected_exports);
23
24
  function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
24
- // Communication with Playwright.
25
- if (window[snapshotStreamer]) return;
26
-
27
- // Attributes present in the snapshot.
28
- const kShadowAttribute = '__playwright_shadow_root_';
29
- const kValueAttribute = '__playwright_value_';
30
- const kCheckedAttribute = '__playwright_checked_';
31
- const kSelectedAttribute = '__playwright_selected_';
32
- const kScrollTopAttribute = '__playwright_scroll_top_';
33
- const kScrollLeftAttribute = '__playwright_scroll_left_';
34
- const kStyleSheetAttribute = '__playwright_style_sheet_';
35
- const kTargetAttribute = '__playwright_target__';
36
- const kCustomElementsAttribute = '__playwright_custom_elements__';
37
- const kCurrentSrcAttribute = '__playwright_current_src__';
38
- const kBoundingRectAttribute = '__playwright_bounding_rect__';
39
- const kPopoverOpenAttribute = '__playwright_popover_open_';
40
-
41
- // Symbols for our own info on Nodes/StyleSheets.
42
- const kSnapshotFrameId = Symbol('__playwright_snapshot_frameid_');
43
- const kCachedData = Symbol('__playwright_snapshot_cache_');
44
- const kEndOfList = Symbol('__playwright_end_of_list_');
25
+ if (window[snapshotStreamer])
26
+ return;
27
+ const kShadowAttribute = "__playwright_shadow_root_";
28
+ const kValueAttribute = "__playwright_value_";
29
+ const kCheckedAttribute = "__playwright_checked_";
30
+ const kSelectedAttribute = "__playwright_selected_";
31
+ const kScrollTopAttribute = "__playwright_scroll_top_";
32
+ const kScrollLeftAttribute = "__playwright_scroll_left_";
33
+ const kStyleSheetAttribute = "__playwright_style_sheet_";
34
+ const kTargetAttribute = "__playwright_target__";
35
+ const kCustomElementsAttribute = "__playwright_custom_elements__";
36
+ const kCurrentSrcAttribute = "__playwright_current_src__";
37
+ const kBoundingRectAttribute = "__playwright_bounding_rect__";
38
+ const kPopoverOpenAttribute = "__playwright_popover_open_";
39
+ const kDialogOpenAttribute = "__playwright_dialog_open_";
40
+ const kSnapshotFrameId = Symbol("__playwright_snapshot_frameid_");
41
+ const kCachedData = Symbol("__playwright_snapshot_cache_");
42
+ const kEndOfList = Symbol("__playwright_end_of_list_");
45
43
  function resetCachedData(obj) {
46
44
  delete obj[kCachedData];
47
45
  }
48
46
  function ensureCachedData(obj) {
49
- if (!obj[kCachedData]) obj[kCachedData] = {};
47
+ if (!obj[kCachedData])
48
+ obj[kCachedData] = {};
50
49
  return obj[kCachedData];
51
50
  }
52
51
  function removeHash(url) {
53
52
  try {
54
53
  const u = new URL(url);
55
- u.hash = '';
54
+ u.hash = "";
56
55
  return u.toString();
57
56
  } catch (e) {
58
57
  return url;
@@ -61,74 +60,68 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
61
60
  class Streamer {
62
61
  constructor() {
63
62
  this._lastSnapshotNumber = 0;
64
- this._staleStyleSheets = new Set();
63
+ this._staleStyleSheets = /* @__PURE__ */ new Set();
65
64
  this._readingStyleSheet = false;
66
- // To avoid invalidating due to our own reads.
67
- this._fakeBase = void 0;
68
- this._observer = void 0;
69
- const invalidateCSSGroupingRule = rule => {
70
- if (rule.parentStyleSheet) this._invalidateStyleSheet(rule.parentStyleSheet);
71
- };
72
- this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'insertRule', sheet => this._invalidateStyleSheet(sheet));
73
- this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'deleteRule', sheet => this._invalidateStyleSheet(sheet));
74
- this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'addRule', sheet => this._invalidateStyleSheet(sheet));
75
- this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'removeRule', sheet => this._invalidateStyleSheet(sheet));
76
- this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'rules', sheet => this._invalidateStyleSheet(sheet));
77
- this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'cssRules', sheet => this._invalidateStyleSheet(sheet));
78
- this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'replaceSync', sheet => this._invalidateStyleSheet(sheet));
79
- this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'insertRule', invalidateCSSGroupingRule);
80
- this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'deleteRule', invalidateCSSGroupingRule);
81
- this._interceptNativeGetter(window.CSSGroupingRule.prototype, 'cssRules', invalidateCSSGroupingRule);
82
- this._interceptNativeAsyncMethod(window.CSSStyleSheet.prototype, 'replace', sheet => this._invalidateStyleSheet(sheet));
83
- this._fakeBase = document.createElement('base');
84
- this._observer = new MutationObserver(list => this._handleMutations(list));
85
- const observerConfig = {
86
- attributes: true,
87
- subtree: true
65
+ const invalidateCSSGroupingRule = (rule) => {
66
+ if (rule.parentStyleSheet)
67
+ this._invalidateStyleSheet(rule.parentStyleSheet);
88
68
  };
69
+ this._interceptNativeMethod(window.CSSStyleSheet.prototype, "insertRule", (sheet) => this._invalidateStyleSheet(sheet));
70
+ this._interceptNativeMethod(window.CSSStyleSheet.prototype, "deleteRule", (sheet) => this._invalidateStyleSheet(sheet));
71
+ this._interceptNativeMethod(window.CSSStyleSheet.prototype, "addRule", (sheet) => this._invalidateStyleSheet(sheet));
72
+ this._interceptNativeMethod(window.CSSStyleSheet.prototype, "removeRule", (sheet) => this._invalidateStyleSheet(sheet));
73
+ this._interceptNativeGetter(window.CSSStyleSheet.prototype, "rules", (sheet) => this._invalidateStyleSheet(sheet));
74
+ this._interceptNativeGetter(window.CSSStyleSheet.prototype, "cssRules", (sheet) => this._invalidateStyleSheet(sheet));
75
+ this._interceptNativeMethod(window.CSSStyleSheet.prototype, "replaceSync", (sheet) => this._invalidateStyleSheet(sheet));
76
+ this._interceptNativeMethod(window.CSSGroupingRule.prototype, "insertRule", invalidateCSSGroupingRule);
77
+ this._interceptNativeMethod(window.CSSGroupingRule.prototype, "deleteRule", invalidateCSSGroupingRule);
78
+ this._interceptNativeGetter(window.CSSGroupingRule.prototype, "cssRules", invalidateCSSGroupingRule);
79
+ this._interceptNativeAsyncMethod(window.CSSStyleSheet.prototype, "replace", (sheet) => this._invalidateStyleSheet(sheet));
80
+ this._fakeBase = document.createElement("base");
81
+ this._observer = new MutationObserver((list) => this._handleMutations(list));
82
+ const observerConfig = { attributes: true, subtree: true };
89
83
  this._observer.observe(document, observerConfig);
90
84
  this._refreshListenersWhenNeeded();
91
85
  }
92
86
  _refreshListenersWhenNeeded() {
93
87
  this._refreshListeners();
94
- const customEventName = '__playwright_snapshotter_global_listeners_check__';
88
+ const customEventName = "__playwright_snapshotter_global_listeners_check__";
95
89
  let seenEvent = false;
96
90
  const handleCustomEvent = () => seenEvent = true;
97
91
  window.addEventListener(customEventName, handleCustomEvent);
98
- const observer = new MutationObserver(entries => {
99
- // Check for new documentElement in case we need to reinstall document listeners.
100
- const newDocumentElement = entries.some(entry => Array.from(entry.addedNodes).includes(document.documentElement));
92
+ const observer = new MutationObserver((entries) => {
93
+ const newDocumentElement = entries.some((entry) => Array.from(entry.addedNodes).includes(document.documentElement));
101
94
  if (newDocumentElement) {
102
- // New documentElement - let's check whether listeners are still here.
103
95
  seenEvent = false;
104
96
  window.dispatchEvent(new CustomEvent(customEventName));
105
97
  if (!seenEvent) {
106
- // Listener did not fire. Reattach the listener and notify.
107
98
  window.addEventListener(customEventName, handleCustomEvent);
108
99
  this._refreshListeners();
109
100
  }
110
101
  }
111
102
  });
112
- observer.observe(document, {
113
- childList: true
114
- });
103
+ observer.observe(document, { childList: true });
115
104
  }
116
105
  _refreshListeners() {
117
- document.addEventListener('__playwright_mark_target__', event => {
118
- if (!event.detail) return;
106
+ document.addEventListener("__playwright_mark_target__", (event) => {
107
+ if (!event.detail)
108
+ return;
119
109
  const callId = event.detail;
120
110
  event.composedPath()[0].__playwright_target__ = callId;
121
111
  });
122
- document.addEventListener('__playwright_unmark_target__', event => {
123
- if (!event.detail) return;
112
+ document.addEventListener("__playwright_unmark_target__", (event) => {
113
+ if (!event.detail)
114
+ return;
124
115
  const callId = event.detail;
125
- if (event.composedPath()[0].__playwright_target__ === callId) delete event.composedPath()[0].__playwright_target__;
116
+ if (event.composedPath()[0].__playwright_target__ === callId)
117
+ delete event.composedPath()[0].__playwright_target__;
126
118
  });
127
119
  }
128
120
  _interceptNativeMethod(obj, method, cb) {
129
121
  const native = obj[method];
130
- if (!native) return;
131
- obj[method] = function (...args) {
122
+ if (!native)
123
+ return;
124
+ obj[method] = function(...args) {
132
125
  const result = native.call(this, ...args);
133
126
  cb(this, result);
134
127
  return result;
@@ -136,8 +129,9 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
136
129
  }
137
130
  _interceptNativeAsyncMethod(obj, method, cb) {
138
131
  const native = obj[method];
139
- if (!native) return;
140
- obj[method] = async function (...args) {
132
+ if (!native)
133
+ return;
134
+ obj[method] = async function(...args) {
141
135
  const result = await native.call(this, ...args);
142
136
  cb(this, result);
143
137
  return result;
@@ -147,7 +141,7 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
147
141
  const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
148
142
  Object.defineProperty(obj, prop, {
149
143
  ...descriptor,
150
- get: function () {
144
+ get: function() {
151
145
  const result = descriptor.get.call(this);
152
146
  cb(this, result);
153
147
  return result;
@@ -155,26 +149,26 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
155
149
  });
156
150
  }
157
151
  _handleMutations(list) {
158
- for (const mutation of list) ensureCachedData(mutation.target).attributesCached = undefined;
152
+ for (const mutation of list)
153
+ ensureCachedData(mutation.target).attributesCached = void 0;
159
154
  }
160
155
  _invalidateStyleSheet(sheet) {
161
- if (this._readingStyleSheet) return;
156
+ if (this._readingStyleSheet)
157
+ return;
162
158
  this._staleStyleSheets.add(sheet);
163
159
  }
164
160
  _updateStyleElementStyleSheetTextIfNeeded(sheet, forceText) {
165
161
  const data = ensureCachedData(sheet);
166
- if (this._staleStyleSheets.has(sheet) || forceText && data.cssText === undefined) {
162
+ if (this._staleStyleSheets.has(sheet) || forceText && data.cssText === void 0) {
167
163
  this._staleStyleSheets.delete(sheet);
168
164
  try {
169
165
  data.cssText = this._getSheetText(sheet);
170
166
  } catch (e) {
171
- // Sometimes we cannot access cross-origin stylesheets.
172
- data.cssText = '';
167
+ data.cssText = "";
173
168
  }
174
169
  }
175
170
  return data.cssText;
176
171
  }
177
-
178
172
  // Returns either content, ref, or no override.
179
173
  _updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber) {
180
174
  const data = ensureCachedData(sheet);
@@ -185,50 +179,58 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
185
179
  data.cssRef = snapshotNumber;
186
180
  return data.cssText;
187
181
  } catch (e) {
188
- // Sometimes we cannot access cross-origin stylesheets.
189
182
  }
190
183
  }
191
- return data.cssRef === undefined ? undefined : snapshotNumber - data.cssRef;
184
+ return data.cssRef === void 0 ? void 0 : snapshotNumber - data.cssRef;
192
185
  }
193
186
  markIframe(iframeElement, frameId) {
194
187
  iframeElement[kSnapshotFrameId] = frameId;
195
188
  }
196
189
  reset() {
197
190
  this._staleStyleSheets.clear();
198
- const visitNode = node => {
191
+ const visitNode = (node) => {
199
192
  resetCachedData(node);
200
193
  if (node.nodeType === Node.ELEMENT_NODE) {
201
194
  const element = node;
202
- if (element.shadowRoot) visitNode(element.shadowRoot);
195
+ if (element.shadowRoot)
196
+ visitNode(element.shadowRoot);
203
197
  }
204
- for (let child = node.firstChild; child; child = child.nextSibling) visitNode(child);
198
+ for (let child = node.firstChild; child; child = child.nextSibling)
199
+ visitNode(child);
205
200
  };
206
201
  visitNode(document.documentElement);
207
202
  visitNode(this._fakeBase);
208
203
  }
209
204
  __sanitizeMetaAttribute(name, value, httpEquiv) {
210
- if (name === 'charset') return 'utf-8';
211
- if (httpEquiv.toLowerCase() !== 'content-type' || name !== 'content') return value;
212
- const [type, ...params] = value.split(';');
213
- if (type !== 'text/html' || params.length <= 0) return value;
214
- const charsetParamIdx = params.findIndex(param => param.trim().startsWith('charset='));
215
- if (charsetParamIdx > -1) params[charsetParamIdx] = 'charset=utf-8';
216
- return `${type}; ${params.join('; ')}`;
205
+ if (name === "charset")
206
+ return "utf-8";
207
+ if (httpEquiv.toLowerCase() !== "content-type" || name !== "content")
208
+ return value;
209
+ const [type, ...params] = value.split(";");
210
+ if (type !== "text/html" || params.length <= 0)
211
+ return value;
212
+ const charsetParamIdx = params.findIndex((param) => param.trim().startsWith("charset="));
213
+ if (charsetParamIdx > -1)
214
+ params[charsetParamIdx] = "charset=utf-8";
215
+ return `${type}; ${params.join("; ")}`;
217
216
  }
218
217
  _sanitizeUrl(url) {
219
- if (url.startsWith('javascript:') || url.startsWith('vbscript:')) return '';
218
+ if (url.startsWith("javascript:") || url.startsWith("vbscript:"))
219
+ return "";
220
220
  return url;
221
221
  }
222
222
  _sanitizeSrcSet(srcset) {
223
- return srcset.split(',').map(src => {
223
+ return srcset.split(",").map((src) => {
224
224
  src = src.trim();
225
- const spaceIndex = src.lastIndexOf(' ');
226
- if (spaceIndex === -1) return this._sanitizeUrl(src);
225
+ const spaceIndex = src.lastIndexOf(" ");
226
+ if (spaceIndex === -1)
227
+ return this._sanitizeUrl(src);
227
228
  return this._sanitizeUrl(src.substring(0, spaceIndex).trim()) + src.substring(spaceIndex);
228
- }).join(', ');
229
+ }).join(", ");
229
230
  }
230
231
  _resolveUrl(base, url) {
231
- if (url === '') return '';
232
+ if (url === "")
233
+ return "";
232
234
  try {
233
235
  return new URL(url, base).href;
234
236
  } catch (e) {
@@ -237,16 +239,19 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
237
239
  }
238
240
  _getSheetBase(sheet) {
239
241
  let rootSheet = sheet;
240
- while (rootSheet.parentStyleSheet) rootSheet = rootSheet.parentStyleSheet;
241
- if (rootSheet.ownerNode) return rootSheet.ownerNode.baseURI;
242
+ while (rootSheet.parentStyleSheet)
243
+ rootSheet = rootSheet.parentStyleSheet;
244
+ if (rootSheet.ownerNode)
245
+ return rootSheet.ownerNode.baseURI;
242
246
  return document.baseURI;
243
247
  }
244
248
  _getSheetText(sheet) {
245
249
  this._readingStyleSheet = true;
246
250
  try {
247
251
  const rules = [];
248
- for (const rule of sheet.cssRules) rules.push(rule.cssText);
249
- return rules.join('\n');
252
+ for (const rule of sheet.cssRules)
253
+ rules.push(rule.cssText);
254
+ return rules.join("\n");
250
255
  } finally {
251
256
  this._readingStyleSheet = false;
252
257
  }
@@ -257,105 +262,101 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
257
262
  let nodeCounter = 0;
258
263
  let shadowDomNesting = 0;
259
264
  let headNesting = 0;
260
-
261
- // Ensure we are up to date.
262
265
  this._handleMutations(this._observer.takeRecords());
263
- const definedCustomElements = new Set();
264
- const visitNode = node => {
266
+ const definedCustomElements = /* @__PURE__ */ new Set();
267
+ const visitNode = (node) => {
265
268
  const nodeType = node.nodeType;
266
- const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ? 'template' : node.nodeName;
267
- if (nodeType !== Node.ELEMENT_NODE && nodeType !== Node.DOCUMENT_FRAGMENT_NODE && nodeType !== Node.TEXT_NODE) return;
268
- if (nodeName === 'SCRIPT') return;
269
- // Don't preload resources.
270
- if (nodeName === 'LINK' && nodeType === Node.ELEMENT_NODE) {
271
- var _getAttribute;
272
- const rel = (_getAttribute = node.getAttribute('rel')) === null || _getAttribute === void 0 ? void 0 : _getAttribute.toLowerCase();
273
- if (rel === 'preload' || rel === 'prefetch') return;
269
+ const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ? "template" : node.nodeName;
270
+ if (nodeType !== Node.ELEMENT_NODE && nodeType !== Node.DOCUMENT_FRAGMENT_NODE && nodeType !== Node.TEXT_NODE)
271
+ return;
272
+ if (nodeName === "SCRIPT")
273
+ return;
274
+ if (nodeName === "LINK" && nodeType === Node.ELEMENT_NODE) {
275
+ const rel = node.getAttribute("rel")?.toLowerCase();
276
+ if (rel === "preload" || rel === "prefetch")
277
+ return;
274
278
  }
275
- if (removeNoScript && nodeName === 'NOSCRIPT') return;
276
- if (nodeName === 'META' && node.httpEquiv.toLowerCase() === 'content-security-policy') return;
277
- // Skip iframes which are inside document's head as they are not visible.
278
- // See https://github.com/microsoft/playwright/issues/12005.
279
- if ((nodeName === 'IFRAME' || nodeName === 'FRAME') && headNesting) return;
279
+ if (removeNoScript && nodeName === "NOSCRIPT")
280
+ return;
281
+ if (nodeName === "META" && node.httpEquiv.toLowerCase() === "content-security-policy")
282
+ return;
283
+ if ((nodeName === "IFRAME" || nodeName === "FRAME") && headNesting)
284
+ return;
280
285
  const data = ensureCachedData(node);
281
286
  const values = [];
282
287
  let equals = !!data.cached;
283
288
  let extraNodes = 0;
284
- const expectValue = value => {
289
+ const expectValue = (value) => {
285
290
  equals = equals && data.cached[values.length] === value;
286
291
  values.push(value);
287
292
  };
288
- const checkAndReturn = n => {
293
+ const checkAndReturn = (n) => {
289
294
  data.attributesCached = true;
290
- if (equals) return {
291
- equals: true,
292
- n: [[snapshotNumber - data.ref[0], data.ref[1]]]
293
- };
295
+ if (equals)
296
+ return { equals: true, n: [[snapshotNumber - data.ref[0], data.ref[1]]] };
294
297
  nodeCounter += extraNodes;
295
298
  data.ref = [snapshotNumber, nodeCounter++];
296
299
  data.cached = values;
297
- return {
298
- equals: false,
299
- n
300
- };
300
+ return { equals: false, n };
301
301
  };
302
302
  if (nodeType === Node.TEXT_NODE) {
303
- const value = node.nodeValue || '';
303
+ const value = node.nodeValue || "";
304
304
  expectValue(value);
305
305
  return checkAndReturn(value);
306
306
  }
307
- if (nodeName === 'STYLE') {
307
+ if (nodeName === "STYLE") {
308
308
  const sheet = node.sheet;
309
309
  let cssText;
310
- if (sheet) cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet);
311
- cssText = cssText || node.textContent || '';
310
+ if (sheet)
311
+ cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet);
312
+ cssText = cssText || node.textContent || "";
312
313
  expectValue(cssText);
313
- // Compensate for the extra 'cssText' text node.
314
314
  extraNodes++;
315
315
  return checkAndReturn([nodeName, {}, cssText]);
316
316
  }
317
317
  const attrs = {};
318
- const result = [nodeName, attrs];
319
- const visitChild = child => {
318
+ const result2 = [nodeName, attrs];
319
+ const visitChild = (child) => {
320
320
  const snapshot = visitNode(child);
321
321
  if (snapshot) {
322
- result.push(snapshot.n);
322
+ result2.push(snapshot.n);
323
323
  expectValue(child);
324
324
  equals = equals && snapshot.equals;
325
325
  }
326
326
  };
327
- const visitChildStyleSheet = child => {
327
+ const visitChildStyleSheet = (child) => {
328
328
  const snapshot = visitStyleSheet(child);
329
329
  if (snapshot) {
330
- result.push(snapshot.n);
330
+ result2.push(snapshot.n);
331
331
  expectValue(child);
332
332
  equals = equals && snapshot.equals;
333
333
  }
334
334
  };
335
- if (nodeType === Node.DOCUMENT_FRAGMENT_NODE) attrs[kShadowAttribute] = 'open';
335
+ if (nodeType === Node.DOCUMENT_FRAGMENT_NODE)
336
+ attrs[kShadowAttribute] = "open";
336
337
  if (nodeType === Node.ELEMENT_NODE) {
337
- var _window$customElement;
338
338
  const element = node;
339
- if (element.localName.includes('-') && (_window$customElement = window.customElements) !== null && _window$customElement !== void 0 && _window$customElement.get(element.localName)) definedCustomElements.add(element.localName);
340
- if (nodeName === 'INPUT' || nodeName === 'TEXTAREA') {
339
+ if (element.localName.includes("-") && window.customElements?.get(element.localName))
340
+ definedCustomElements.add(element.localName);
341
+ if (nodeName === "INPUT" || nodeName === "TEXTAREA") {
341
342
  const value = element.value;
342
343
  expectValue(kValueAttribute);
343
344
  expectValue(value);
344
345
  attrs[kValueAttribute] = value;
345
346
  }
346
- if (nodeName === 'INPUT' && ['checkbox', 'radio'].includes(element.type)) {
347
- const value = element.checked ? 'true' : 'false';
347
+ if (nodeName === "INPUT" && ["checkbox", "radio"].includes(element.type)) {
348
+ const value = element.checked ? "true" : "false";
348
349
  expectValue(kCheckedAttribute);
349
350
  expectValue(value);
350
351
  attrs[kCheckedAttribute] = value;
351
352
  }
352
- if (nodeName === 'OPTION') {
353
- const value = element.selected ? 'true' : 'false';
353
+ if (nodeName === "OPTION") {
354
+ const value = element.selected ? "true" : "false";
354
355
  expectValue(kSelectedAttribute);
355
356
  expectValue(value);
356
357
  attrs[kSelectedAttribute] = value;
357
358
  }
358
- if (nodeName === 'CANVAS' || nodeName === 'IFRAME' || nodeName === 'FRAME') {
359
+ if (nodeName === "CANVAS" || nodeName === "IFRAME" || nodeName === "FRAME") {
359
360
  const boundingRect = element.getBoundingClientRect();
360
361
  const value = JSON.stringify({
361
362
  left: boundingRect.left,
@@ -367,125 +368,145 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
367
368
  expectValue(value);
368
369
  attrs[kBoundingRectAttribute] = value;
369
370
  }
370
- if (element.popover && element.matches && element.matches(':popover-open')) {
371
- const value = 'true';
371
+ if (element.popover && element.matches && element.matches(":popover-open")) {
372
+ const value = "true";
372
373
  expectValue(kPopoverOpenAttribute);
373
374
  expectValue(value);
374
375
  attrs[kPopoverOpenAttribute] = value;
375
376
  }
377
+ if (nodeName === "DIALOG" && element.open) {
378
+ const value = element.matches(":modal") ? "modal" : "true";
379
+ expectValue(kDialogOpenAttribute);
380
+ expectValue(value);
381
+ attrs[kDialogOpenAttribute] = value;
382
+ }
376
383
  if (element.scrollTop) {
377
384
  expectValue(kScrollTopAttribute);
378
385
  expectValue(element.scrollTop);
379
- attrs[kScrollTopAttribute] = '' + element.scrollTop;
386
+ attrs[kScrollTopAttribute] = "" + element.scrollTop;
380
387
  }
381
388
  if (element.scrollLeft) {
382
389
  expectValue(kScrollLeftAttribute);
383
390
  expectValue(element.scrollLeft);
384
- attrs[kScrollLeftAttribute] = '' + element.scrollLeft;
391
+ attrs[kScrollLeftAttribute] = "" + element.scrollLeft;
385
392
  }
386
393
  if (element.shadowRoot) {
387
394
  ++shadowDomNesting;
388
395
  visitChild(element.shadowRoot);
389
396
  --shadowDomNesting;
390
397
  }
391
- if ('__playwright_target__' in element) {
398
+ if ("__playwright_target__" in element) {
392
399
  expectValue(kTargetAttribute);
393
- expectValue(element['__playwright_target__']);
394
- attrs[kTargetAttribute] = element['__playwright_target__'];
400
+ expectValue(element["__playwright_target__"]);
401
+ attrs[kTargetAttribute] = element["__playwright_target__"];
395
402
  }
396
403
  }
397
- if (nodeName === 'HEAD') {
404
+ if (nodeName === "HEAD") {
398
405
  ++headNesting;
399
- // Insert fake <base> first, to ensure all <link> elements use the proper base uri.
400
- this._fakeBase.setAttribute('href', document.baseURI);
406
+ this._fakeBase.setAttribute("href", document.baseURI);
401
407
  visitChild(this._fakeBase);
402
408
  }
403
- for (let child = node.firstChild; child; child = child.nextSibling) visitChild(child);
404
- if (nodeName === 'HEAD') --headNesting;
409
+ for (let child = node.firstChild; child; child = child.nextSibling)
410
+ visitChild(child);
411
+ if (nodeName === "HEAD")
412
+ --headNesting;
405
413
  expectValue(kEndOfList);
406
414
  let documentOrShadowRoot = null;
407
- if (node.ownerDocument.documentElement === node) documentOrShadowRoot = node.ownerDocument;else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) documentOrShadowRoot = node;
415
+ if (node.ownerDocument.documentElement === node)
416
+ documentOrShadowRoot = node.ownerDocument;
417
+ else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE)
418
+ documentOrShadowRoot = node;
408
419
  if (documentOrShadowRoot) {
409
- for (const sheet of documentOrShadowRoot.adoptedStyleSheets || []) visitChildStyleSheet(sheet);
420
+ for (const sheet of documentOrShadowRoot.adoptedStyleSheets || [])
421
+ visitChildStyleSheet(sheet);
410
422
  expectValue(kEndOfList);
411
423
  }
412
-
413
- // Process iframe src attribute before bailing out since it depends on a symbol, not the DOM.
414
- if (nodeName === 'IFRAME' || nodeName === 'FRAME') {
424
+ if (nodeName === "IFRAME" || nodeName === "FRAME") {
415
425
  const element = node;
416
426
  const frameId = element[kSnapshotFrameId];
417
- const name = 'src';
418
- const value = frameId ? `/snapshot/${frameId}` : '';
427
+ const name = "src";
428
+ const value = frameId ? `/snapshot/${frameId}` : "";
419
429
  expectValue(name);
420
430
  expectValue(value);
421
431
  attrs[name] = value;
422
432
  }
423
-
424
- // Process custom elements before bailing out since they depend on JS, not the DOM.
425
- if (nodeName === 'BODY' && definedCustomElements.size) {
426
- const value = [...definedCustomElements].join(',');
433
+ if (nodeName === "BODY" && definedCustomElements.size) {
434
+ const value = [...definedCustomElements].join(",");
427
435
  expectValue(kCustomElementsAttribute);
428
436
  expectValue(value);
429
437
  attrs[kCustomElementsAttribute] = value;
430
438
  }
431
-
432
- // Process currentSrc before bailing out since it depends on JS, not the DOM.
433
- if (nodeName === 'IMG' || nodeName === 'PICTURE') {
434
- const value = nodeName === 'PICTURE' ? '' : this._sanitizeUrl(node.currentSrc);
439
+ if (nodeName === "IMG" || nodeName === "PICTURE") {
440
+ const value = nodeName === "PICTURE" ? "" : this._sanitizeUrl(node.currentSrc);
435
441
  expectValue(kCurrentSrcAttribute);
436
442
  expectValue(value);
437
443
  attrs[kCurrentSrcAttribute] = value;
438
444
  }
439
-
440
- // We can skip attributes comparison because nothing else has changed,
441
- // and mutation observer didn't tell us about the attributes.
442
- if (equals && data.attributesCached && !shadowDomNesting) return checkAndReturn(result);
445
+ if (equals && data.attributesCached && !shadowDomNesting)
446
+ return checkAndReturn(result2);
443
447
  if (nodeType === Node.ELEMENT_NODE) {
444
448
  const element = node;
445
449
  for (let i = 0; i < element.attributes.length; i++) {
446
450
  const name = element.attributes[i].name;
447
- if (nodeName === 'LINK' && name === 'integrity') continue;
448
- if (nodeName === 'IFRAME' && (name === 'src' || name === 'srcdoc' || name === 'sandbox')) continue;
449
- if (nodeName === 'FRAME' && name === 'src') continue;
451
+ if (nodeName === "LINK" && name === "integrity")
452
+ continue;
453
+ if (nodeName === "IFRAME" && (name === "src" || name === "srcdoc" || name === "sandbox"))
454
+ continue;
455
+ if (nodeName === "FRAME" && name === "src")
456
+ continue;
457
+ if (nodeName === "DIALOG" && name === "open")
458
+ continue;
450
459
  let value = element.attributes[i].value;
451
- if (nodeName === 'META') value = this.__sanitizeMetaAttribute(name, value, node.httpEquiv);else if (name === 'src' && nodeName === 'IMG') value = this._sanitizeUrl(value);else if (name === 'srcset' && nodeName === 'IMG') value = this._sanitizeSrcSet(value);else if (name === 'srcset' && nodeName === 'SOURCE') value = this._sanitizeSrcSet(value);else if (name === 'href' && nodeName === 'LINK') value = this._sanitizeUrl(value);else if (name.startsWith('on')) value = '';
460
+ if (nodeName === "META")
461
+ value = this.__sanitizeMetaAttribute(name, value, node.httpEquiv);
462
+ else if (name === "src" && nodeName === "IMG")
463
+ value = this._sanitizeUrl(value);
464
+ else if (name === "srcset" && nodeName === "IMG")
465
+ value = this._sanitizeSrcSet(value);
466
+ else if (name === "srcset" && nodeName === "SOURCE")
467
+ value = this._sanitizeSrcSet(value);
468
+ else if (name === "href" && nodeName === "LINK")
469
+ value = this._sanitizeUrl(value);
470
+ else if (name.startsWith("on"))
471
+ value = "";
452
472
  expectValue(name);
453
473
  expectValue(value);
454
474
  attrs[name] = value;
455
475
  }
456
476
  expectValue(kEndOfList);
457
477
  }
458
- if (result.length === 2 && !Object.keys(attrs).length) result.pop(); // Remove empty attrs when there are no children.
459
- return checkAndReturn(result);
478
+ if (result2.length === 2 && !Object.keys(attrs).length)
479
+ result2.pop();
480
+ return checkAndReturn(result2);
460
481
  };
461
- const visitStyleSheet = sheet => {
482
+ const visitStyleSheet = (sheet) => {
462
483
  const data = ensureCachedData(sheet);
463
484
  const oldCSSText = data.cssText;
464
- const cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet, true /* forceText */);
465
- if (cssText === oldCSSText) return {
466
- equals: true,
467
- n: [[snapshotNumber - data.ref[0], data.ref[1]]]
468
- };
485
+ const cssText = this._updateStyleElementStyleSheetTextIfNeeded(
486
+ sheet,
487
+ true
488
+ /* forceText */
489
+ );
490
+ if (cssText === oldCSSText)
491
+ return { equals: true, n: [[snapshotNumber - data.ref[0], data.ref[1]]] };
469
492
  data.ref = [snapshotNumber, nodeCounter++];
470
493
  return {
471
494
  equals: false,
472
- n: ['template', {
495
+ n: ["template", {
473
496
  [kStyleSheetAttribute]: cssText
474
497
  }]
475
498
  };
476
499
  };
477
500
  let html;
478
501
  if (document.documentElement) {
479
- const {
480
- n
481
- } = visitNode(document.documentElement);
502
+ const { n } = visitNode(document.documentElement);
482
503
  html = n;
483
504
  } else {
484
- html = ['html'];
505
+ html = ["html"];
485
506
  }
486
507
  const result = {
487
508
  html,
488
- doctype: document.doctype ? document.doctype.name : undefined,
509
+ doctype: document.doctype ? document.doctype.name : void 0,
489
510
  resourceOverrides: [],
490
511
  viewport: {
491
512
  width: window.innerWidth,
@@ -496,23 +517,23 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
496
517
  collectionTime: 0
497
518
  };
498
519
  for (const sheet of this._staleStyleSheets) {
499
- if (sheet.href === null) continue;
520
+ if (sheet.href === null)
521
+ continue;
500
522
  const content = this._updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber);
501
- if (content === undefined) {
502
- // Unable to capture stylesheet contents.
523
+ if (content === void 0) {
503
524
  continue;
504
525
  }
505
526
  const base = this._getSheetBase(sheet);
506
527
  const url = removeHash(this._resolveUrl(base, sheet.href));
507
- result.resourceOverrides.push({
508
- url,
509
- content,
510
- contentType: 'text/css'
511
- });
528
+ result.resourceOverrides.push({ url, content, contentType: "text/css" });
512
529
  }
513
530
  result.collectionTime = performance.now() - timestamp;
514
531
  return result;
515
532
  }
516
533
  }
517
534
  window[snapshotStreamer] = new Streamer();
518
- }
535
+ }
536
+ // Annotate the CommonJS export names for ESM import in node:
537
+ 0 && (module.exports = {
538
+ frameSnapshotStreamer
539
+ });