@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/browsers.json +16 -14
  3. package/index.js +1 -1
  4. package/lib/androidServerImpl.js +47 -50
  5. package/lib/browserServerImpl.js +89 -69
  6. package/lib/checkly/escapeRegExp.js +23 -27
  7. package/lib/checkly/fetch.js +64 -46
  8. package/lib/checkly/secretsFilter.js +49 -35
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +400 -359
  11. package/lib/cli/programWithTestStub.js +51 -45
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +151 -242
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -36
  16. package/lib/client/browser.js +96 -71
  17. package/lib/client/browserContext.js +314 -345
  18. package/lib/client/browserType.js +103 -127
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +89 -112
  21. package/lib/client/clientHelper.js +48 -39
  22. package/lib/client/clientInstrumentation.js +40 -37
  23. package/lib/client/clientStackTrace.js +41 -37
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +188 -214
  26. package/lib/client/consoleMessage.js +31 -28
  27. package/lib/client/coverage.js +25 -22
  28. package/lib/client/dialog.js +30 -31
  29. package/lib/client/download.js +25 -25
  30. package/lib/client/electron.js +80 -77
  31. package/lib/client/elementHandle.js +120 -159
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +124 -121
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +166 -190
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +31 -28
  38. package/lib/client/frame.js +207 -306
  39. package/lib/client/harRouter.js +42 -52
  40. package/lib/client/input.js +42 -69
  41. package/lib/client/jsHandle.js +54 -69
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +29 -29
  44. package/lib/client/locator.js +145 -237
  45. package/lib/client/network.js +282 -307
  46. package/lib/client/page.js +269 -318
  47. package/lib/client/platform.js +46 -43
  48. package/lib/client/playwright.js +51 -76
  49. package/lib/client/selectors.js +45 -63
  50. package/lib/client/stream.js +29 -25
  51. package/lib/client/timeoutSettings.js +55 -41
  52. package/lib/client/tracing.js +49 -96
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +69 -88
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +43 -56
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +27 -23
  60. package/lib/generated/bindingsControllerSource.js +28 -0
  61. package/lib/generated/clockSource.js +26 -6
  62. package/lib/generated/consoleApiSource.js +26 -6
  63. package/lib/generated/injectedScriptSource.js +26 -6
  64. package/lib/generated/pollingRecorderSource.js +26 -6
  65. package/lib/generated/storageScriptSource.js +28 -0
  66. package/lib/generated/utilityScriptSource.js +26 -6
  67. package/lib/generated/webSocketMockSource.js +333 -5
  68. package/lib/inProcessFactory.js +51 -53
  69. package/lib/inprocess.js +2 -19
  70. package/lib/outofprocess.js +51 -46
  71. package/lib/protocol/serializers.js +153 -134
  72. package/lib/protocol/validator.js +2807 -2739
  73. package/lib/protocol/validatorPrimitives.js +114 -73
  74. package/lib/remote/playwrightConnection.js +88 -242
  75. package/lib/remote/playwrightServer.js +305 -92
  76. package/lib/server/accessibility.js +44 -37
  77. package/lib/server/android/android.js +251 -241
  78. package/lib/server/android/backendAdb.js +87 -82
  79. package/lib/server/artifact.js +78 -55
  80. package/lib/server/bidi/bidiBrowser.js +297 -158
  81. package/lib/server/bidi/bidiChromium.js +119 -89
  82. package/lib/server/bidi/bidiConnection.js +66 -83
  83. package/lib/server/bidi/bidiExecutionContext.js +129 -113
  84. package/lib/server/bidi/bidiFirefox.js +86 -76
  85. package/lib/server/bidi/bidiInput.js +106 -117
  86. package/lib/server/bidi/bidiNetworkManager.js +142 -159
  87. package/lib/server/bidi/bidiOverCdp.js +57 -58
  88. package/lib/server/bidi/bidiPage.js +260 -260
  89. package/lib/server/bidi/bidiPdf.js +52 -86
  90. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  91. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  92. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  93. package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
  94. package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
  95. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  96. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  97. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  98. package/lib/server/browser.js +93 -95
  99. package/lib/server/browserContext.js +419 -429
  100. package/lib/server/browserType.js +186 -216
  101. package/lib/server/callLog.js +47 -44
  102. package/lib/server/chromium/chromium.js +235 -203
  103. package/lib/server/chromium/chromiumSwitches.js +100 -67
  104. package/lib/server/chromium/crAccessibility.js +157 -131
  105. package/lib/server/chromium/crBrowser.js +310 -292
  106. package/lib/server/chromium/crConnection.js +95 -121
  107. package/lib/server/chromium/crCoverage.js +121 -131
  108. package/lib/server/chromium/crDevTools.js +60 -51
  109. package/lib/server/chromium/crDragDrop.js +68 -84
  110. package/lib/server/chromium/crExecutionContext.js +89 -83
  111. package/lib/server/chromium/crInput.js +118 -113
  112. package/lib/server/chromium/crNetworkManager.js +274 -375
  113. package/lib/server/chromium/crPage.js +536 -593
  114. package/lib/server/chromium/crPdf.js +54 -86
  115. package/lib/server/chromium/crProtocolHelper.js +92 -80
  116. package/lib/server/chromium/crServiceWorker.js +84 -73
  117. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  118. package/lib/server/chromium/protocol.d.js +16 -0
  119. package/lib/server/chromium/videoRecorder.js +66 -99
  120. package/lib/server/clock.js +107 -83
  121. package/lib/server/codegen/csharp.js +192 -162
  122. package/lib/server/codegen/java.js +156 -129
  123. package/lib/server/codegen/javascript.js +163 -148
  124. package/lib/server/codegen/jsonl.js +32 -28
  125. package/lib/server/codegen/language.js +75 -52
  126. package/lib/server/codegen/languages.js +65 -27
  127. package/lib/server/codegen/python.js +141 -126
  128. package/lib/server/codegen/types.js +15 -4
  129. package/lib/server/console.js +28 -32
  130. package/lib/server/cookieStore.js +108 -86
  131. package/lib/server/debugController.js +147 -151
  132. package/lib/server/debugger.js +86 -78
  133. package/lib/server/deviceDescriptors.js +37 -24
  134. package/lib/server/deviceDescriptorsSource.json +238 -128
  135. package/lib/server/dialog.js +84 -39
  136. package/lib/server/dispatchers/androidDispatcher.js +257 -148
  137. package/lib/server/dispatchers/artifactDispatcher.js +79 -79
  138. package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
  139. package/lib/server/dispatchers/browserDispatcher.js +96 -148
  140. package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
  141. package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
  142. package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
  143. package/lib/server/dispatchers/dialogDispatcher.js +34 -31
  144. package/lib/server/dispatchers/dispatcher.js +208 -248
  145. package/lib/server/dispatchers/electronDispatcher.js +66 -70
  146. package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
  147. package/lib/server/dispatchers/frameDispatcher.js +211 -272
  148. package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
  149. package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
  150. package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
  151. package/lib/server/dispatchers/networkDispatchers.js +117 -128
  152. package/lib/server/dispatchers/pageDispatcher.js +256 -248
  153. package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
  154. package/lib/server/dispatchers/streamDispatcher.js +52 -48
  155. package/lib/server/dispatchers/tracingDispatcher.js +47 -52
  156. package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
  157. package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
  158. package/lib/server/dom.js +485 -582
  159. package/lib/server/download.js +47 -37
  160. package/lib/server/electron/electron.js +216 -243
  161. package/lib/server/electron/loader.js +9 -37
  162. package/lib/server/errors.js +47 -46
  163. package/lib/server/fetch.js +317 -360
  164. package/lib/server/fileChooser.js +25 -24
  165. package/lib/server/fileUploadUtils.js +66 -60
  166. package/lib/server/firefox/ffAccessibility.js +153 -131
  167. package/lib/server/firefox/ffBrowser.js +268 -305
  168. package/lib/server/firefox/ffConnection.js +63 -84
  169. package/lib/server/firefox/ffExecutionContext.js +92 -73
  170. package/lib/server/firefox/ffInput.js +82 -84
  171. package/lib/server/firefox/ffNetworkManager.js +137 -114
  172. package/lib/server/firefox/ffPage.js +261 -293
  173. package/lib/server/firefox/firefox.js +80 -72
  174. package/lib/server/firefox/protocol.d.js +16 -0
  175. package/lib/server/formData.js +107 -35
  176. package/lib/server/frameSelectors.js +98 -114
  177. package/lib/server/frames.js +845 -1055
  178. package/lib/server/har/harRecorder.js +85 -77
  179. package/lib/server/har/harTracer.js +290 -223
  180. package/lib/server/harBackend.js +80 -80
  181. package/lib/server/helper.js +55 -59
  182. package/lib/server/index.js +59 -99
  183. package/lib/server/input.js +151 -189
  184. package/lib/server/instrumentation.js +57 -44
  185. package/lib/server/javascript.js +133 -134
  186. package/lib/server/launchApp.js +113 -75
  187. package/lib/server/localUtils.js +150 -142
  188. package/lib/server/macEditingCommands.js +141 -137
  189. package/lib/server/network.js +299 -303
  190. package/lib/server/page.js +513 -544
  191. package/lib/server/pipeTransport.js +49 -45
  192. package/lib/server/playwright.js +58 -67
  193. package/lib/server/progress.js +137 -68
  194. package/lib/server/protocolError.js +34 -31
  195. package/lib/server/recorder/chat.js +70 -86
  196. package/lib/server/recorder/recorderApp.js +341 -176
  197. package/lib/server/recorder/recorderInTraceViewer.js +65 -94
  198. package/lib/server/recorder/recorderRunner.js +93 -116
  199. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  200. package/lib/server/recorder/recorderUtils.js +104 -47
  201. package/lib/server/recorder/throttledFile.js +42 -30
  202. package/lib/server/recorder.js +395 -275
  203. package/lib/server/registry/browserFetcher.js +106 -101
  204. package/lib/server/registry/dependencies.js +245 -196
  205. package/lib/server/registry/index.js +930 -803
  206. package/lib/server/registry/nativeDeps.js +1073 -464
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +160 -191
  209. package/lib/server/selectors.js +90 -51
  210. package/lib/server/socksClientCertificatesInterceptor.js +171 -186
  211. package/lib/server/socksInterceptor.js +62 -70
  212. package/lib/server/trace/recorder/snapshotter.js +76 -102
  213. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  214. package/lib/server/trace/recorder/tracing.js +354 -362
  215. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  216. package/lib/server/trace/viewer/traceViewer.js +160 -147
  217. package/lib/server/transport.js +119 -134
  218. package/lib/server/types.js +26 -22
  219. package/lib/server/usKeyboardLayout.js +135 -545
  220. package/lib/server/utils/ascii.js +39 -26
  221. package/lib/server/utils/comparators.js +105 -103
  222. package/lib/server/utils/crypto.js +157 -112
  223. package/lib/server/utils/debug.js +36 -32
  224. package/lib/server/utils/debugLogger.js +77 -48
  225. package/lib/server/utils/env.js +52 -37
  226. package/lib/server/utils/eventsHelper.js +29 -28
  227. package/lib/server/utils/expectUtils.js +31 -26
  228. package/lib/server/utils/fileUtils.js +123 -136
  229. package/lib/server/utils/happyEyeballs.js +141 -126
  230. package/lib/server/utils/hostPlatform.js +84 -120
  231. package/lib/server/utils/httpServer.js +106 -121
  232. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  233. package/lib/server/utils/image_tools/compare.js +44 -43
  234. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  235. package/lib/server/utils/image_tools/stats.js +40 -40
  236. package/lib/server/utils/linuxUtils.js +50 -37
  237. package/lib/server/utils/network.js +152 -96
  238. package/lib/server/utils/nodePlatform.js +87 -79
  239. package/lib/server/utils/pipeTransport.js +44 -42
  240. package/lib/server/utils/processLauncher.js +111 -121
  241. package/lib/server/utils/profiler.js +52 -39
  242. package/lib/server/utils/socksProxy.js +280 -339
  243. package/lib/server/utils/spawnAsync.js +37 -41
  244. package/lib/server/utils/task.js +31 -38
  245. package/lib/server/utils/userAgent.js +73 -66
  246. package/lib/server/utils/wsServer.js +68 -75
  247. package/lib/server/utils/zipFile.js +36 -37
  248. package/lib/server/utils/zones.js +37 -34
  249. package/lib/server/webkit/protocol.d.js +16 -0
  250. package/lib/server/webkit/webkit.js +77 -61
  251. package/lib/server/webkit/wkAccessibility.js +161 -118
  252. package/lib/server/webkit/wkBrowser.js +193 -184
  253. package/lib/server/webkit/wkConnection.js +59 -83
  254. package/lib/server/webkit/wkExecutionContext.js +85 -70
  255. package/lib/server/webkit/wkInput.js +97 -95
  256. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  257. package/lib/server/webkit/wkPage.js +568 -667
  258. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  259. package/lib/server/webkit/wkWorkers.js +79 -79
  260. package/lib/utils/expectUtils.js +31 -26
  261. package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
  262. package/lib/utils/isomorphic/assert.js +28 -22
  263. package/lib/utils/isomorphic/colors.js +66 -59
  264. package/lib/utils/isomorphic/cssParser.js +120 -125
  265. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  266. package/lib/utils/isomorphic/headers.js +38 -37
  267. package/lib/utils/isomorphic/locatorGenerators.js +358 -357
  268. package/lib/utils/isomorphic/locatorParser.js +96 -105
  269. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  270. package/lib/utils/isomorphic/manualPromise.js +46 -39
  271. package/lib/utils/isomorphic/mimeType.js +447 -25
  272. package/lib/utils/isomorphic/multimap.js +34 -27
  273. package/lib/utils/isomorphic/protocolFormatter.js +68 -0
  274. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  275. package/lib/utils/isomorphic/recorderUtils.js +140 -181
  276. package/lib/utils/isomorphic/rtti.js +35 -33
  277. package/lib/utils/isomorphic/selectorParser.js +182 -193
  278. package/lib/utils/isomorphic/semaphore.js +27 -24
  279. package/lib/utils/isomorphic/stackTrace.js +87 -98
  280. package/lib/utils/isomorphic/stringUtils.js +98 -112
  281. package/lib/utils/isomorphic/time.js +46 -22
  282. package/lib/utils/isomorphic/timeoutRunner.js +53 -53
  283. package/lib/utils/isomorphic/traceUtils.js +37 -41
  284. package/lib/utils/isomorphic/types.js +15 -4
  285. package/lib/utils/isomorphic/urlMatch.js +113 -67
  286. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  287. package/lib/utils.js +101 -443
  288. package/lib/utilsBundle.js +101 -52
  289. package/lib/utilsBundleImpl/index.js +160 -150
  290. package/lib/zipBundle.js +32 -23
  291. package/lib/zipBundleImpl.js +4 -4
  292. package/package.json +1 -1
  293. package/types/protocol.d.ts +1267 -1057
  294. package/types/types.d.ts +131 -29
  295. package/lib/common/socksProxy.js +0 -569
  296. package/lib/common/timeoutSettings.js +0 -73
  297. package/lib/common/types.js +0 -5
  298. package/lib/image_tools/colorUtils.js +0 -98
  299. package/lib/image_tools/compare.js +0 -108
  300. package/lib/image_tools/imageChannel.js +0 -70
  301. package/lib/image_tools/stats.js +0 -102
  302. package/lib/protocol/debug.js +0 -27
  303. package/lib/protocol/transport.js +0 -82
  304. package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
  305. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  306. package/lib/server/recorder/contextRecorder.js +0 -290
  307. package/lib/server/recorder/recorderCollection.js +0 -104
  308. package/lib/server/recorder/recorderFrontend.js +0 -5
  309. package/lib/server/storageScript.js +0 -160
  310. package/lib/server/timeoutSettings.js +0 -74
  311. package/lib/third_party/diff_match_patch.js +0 -2222
  312. package/lib/utils/ascii.js +0 -31
  313. package/lib/utils/comparators.js +0 -171
  314. package/lib/utils/crypto.js +0 -174
  315. package/lib/utils/debug.js +0 -46
  316. package/lib/utils/debugLogger.js +0 -91
  317. package/lib/utils/env.js +0 -49
  318. package/lib/utils/eventsHelper.js +0 -38
  319. package/lib/utils/fileUtils.js +0 -205
  320. package/lib/utils/happy-eyeballs.js +0 -210
  321. package/lib/utils/headers.js +0 -52
  322. package/lib/utils/hostPlatform.js +0 -133
  323. package/lib/utils/httpServer.js +0 -237
  324. package/lib/utils/index.js +0 -368
  325. package/lib/utils/linuxUtils.js +0 -78
  326. package/lib/utils/manualPromise.js +0 -109
  327. package/lib/utils/multimap.js +0 -75
  328. package/lib/utils/network.js +0 -160
  329. package/lib/utils/processLauncher.js +0 -248
  330. package/lib/utils/profiler.js +0 -53
  331. package/lib/utils/rtti.js +0 -44
  332. package/lib/utils/semaphore.js +0 -51
  333. package/lib/utils/spawnAsync.js +0 -45
  334. package/lib/utils/stackTrace.js +0 -121
  335. package/lib/utils/task.js +0 -58
  336. package/lib/utils/time.js +0 -37
  337. package/lib/utils/timeoutRunner.js +0 -66
  338. package/lib/utils/traceUtils.js +0 -44
  339. package/lib/utils/userAgent.js +0 -105
  340. package/lib/utils/wsServer.js +0 -127
  341. package/lib/utils/zipFile.js +0 -75
  342. package/lib/utils/zones.js +0 -62
  343. package/lib/vite/htmlReport/index.html +0 -69
  344. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
  345. package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
  346. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  347. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  348. package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
  349. package/lib/vite/recorder/index.html +0 -29
  350. package/lib/vite/recorder/playwright-logo.svg +0 -9
  351. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
  352. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
  353. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
  354. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
  355. package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
  356. package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
  357. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  358. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
  359. package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
  360. package/lib/vite/traceViewer/embedded.html +0 -18
  361. package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
  362. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  363. package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
  364. package/lib/vite/traceViewer/index.html +0 -47
  365. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
  366. package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  367. package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
  368. package/lib/vite/traceViewer/recorder.html +0 -17
  369. package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
  370. package/lib/vite/traceViewer/snapshot.html +0 -21
  371. package/lib/vite/traceViewer/sw.bundle.js +0 -3
  372. package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
  373. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
  374. package/lib/vite/traceViewer/uiMode.html +0 -21
  375. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
  376. package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
@@ -1,49 +1,53 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var harTracer_exports = {};
30
+ __export(harTracer_exports, {
31
+ HarTracer: () => HarTracer
5
32
  });
6
- exports.HarTracer = void 0;
7
- var _utils = require("../../utils");
8
- var _eventsHelper = require("../utils/eventsHelper");
9
- var _manualPromise = require("../../utils/isomorphic/manualPromise");
10
- var _utilsBundle = require("../../utilsBundle");
11
- var _browserContext = require("../browserContext");
12
- var _fetch = require("../fetch");
13
- var _frames = require("../frames");
14
- var _helper = require("../helper");
15
- var network = _interopRequireWildcard(require("../network"));
16
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
- /**
19
- * Copyright (c) Microsoft Corporation.
20
- *
21
- * Licensed under the Apache License, Version 2.0 (the "License");
22
- * you may not use this file except in compliance with the License.
23
- * You may obtain a copy of the License at
24
- *
25
- * http://www.apache.org/licenses/LICENSE-2.0
26
- *
27
- * Unless required by applicable law or agreed to in writing, software
28
- * distributed under the License is distributed on an "AS IS" BASIS,
29
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
- * See the License for the specific language governing permissions and
31
- * limitations under the License.
32
- */
33
-
34
- const FALLBACK_HTTP_VERSION = 'HTTP/1.1';
33
+ module.exports = __toCommonJS(harTracer_exports);
34
+ var import_utils = require("../../utils");
35
+ var import_utils2 = require("../../utils");
36
+ var import_eventsHelper = require("../utils/eventsHelper");
37
+ var import_manualPromise = require("../../utils/isomorphic/manualPromise");
38
+ var import_utilsBundle = require("../../utilsBundle");
39
+ var import_browserContext = require("../browserContext");
40
+ var import_fetch = require("../fetch");
41
+ var import_frames = require("../frames");
42
+ var import_helper = require("../helper");
43
+ var network = __toESM(require("../network"));
44
+ const FALLBACK_HTTP_VERSION = "HTTP/1.1";
35
45
  class HarTracer {
36
46
  constructor(context, page, delegate, options) {
37
- this._context = void 0;
38
- this._barrierPromises = new Set();
39
- this._delegate = void 0;
40
- this._options = void 0;
41
- this._pageEntries = new Map();
47
+ this._barrierPromises = /* @__PURE__ */ new Set();
48
+ this._pageEntries = /* @__PURE__ */ new Map();
42
49
  this._eventListeners = [];
43
50
  this._started = false;
44
- this._entrySymbol = void 0;
45
- this._baseURL = void 0;
46
- this._page = void 0;
47
51
  this._context = context;
48
52
  this._page = page;
49
53
  this._delegate = delegate;
@@ -56,48 +60,66 @@ class HarTracer {
56
60
  options.omitSizes = true;
57
61
  options.omitPages = true;
58
62
  }
59
- this._entrySymbol = Symbol('requestHarEntry');
60
- this._baseURL = context instanceof _fetch.APIRequestContext ? context._defaultOptions().baseURL : context._options.baseURL;
63
+ this._entrySymbol = Symbol("requestHarEntry");
64
+ this._baseURL = context instanceof import_fetch.APIRequestContext ? context._defaultOptions().baseURL : context._options.baseURL;
61
65
  }
62
66
  start(options) {
63
- if (this._started) return;
67
+ if (this._started)
68
+ return;
64
69
  this._options.omitScripts = options.omitScripts;
65
70
  this._started = true;
66
- const apiRequest = this._context instanceof _fetch.APIRequestContext ? this._context : this._context.fetchRequest;
67
- this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(apiRequest, _fetch.APIRequestContext.Events.Request, event => this._onAPIRequest(event)), _eventsHelper.eventsHelper.addEventListener(apiRequest, _fetch.APIRequestContext.Events.RequestFinished, event => this._onAPIRequestFinished(event))];
68
- if (this._context instanceof _browserContext.BrowserContext) {
69
- this._eventListeners.push(_eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.Page, page => this._createPageEntryIfNeeded(page)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.Request, request => this._onRequest(request)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.RequestFinished, ({
70
- request,
71
- response
72
- }) => this._onRequestFinished(request, response).catch(() => {})), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.RequestFailed, request => this._onRequestFailed(request)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.Response, response => this._onResponse(response)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.RequestAborted, request => this._onRequestAborted(request)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.RequestFulfilled, request => this._onRequestFulfilled(request)), _eventsHelper.eventsHelper.addEventListener(this._context, _browserContext.BrowserContext.Events.RequestContinued, request => this._onRequestContinued(request)));
71
+ const apiRequest = this._context instanceof import_fetch.APIRequestContext ? this._context : this._context.fetchRequest;
72
+ this._eventListeners = [
73
+ import_eventsHelper.eventsHelper.addEventListener(apiRequest, import_fetch.APIRequestContext.Events.Request, (event) => this._onAPIRequest(event)),
74
+ import_eventsHelper.eventsHelper.addEventListener(apiRequest, import_fetch.APIRequestContext.Events.RequestFinished, (event) => this._onAPIRequestFinished(event))
75
+ ];
76
+ if (this._context instanceof import_browserContext.BrowserContext) {
77
+ this._eventListeners.push(
78
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.Page, (page) => this._createPageEntryIfNeeded(page)),
79
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.Request, (request) => this._onRequest(request)),
80
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.RequestFinished, ({ request, response }) => this._onRequestFinished(request, response).catch(() => {
81
+ })),
82
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.RequestFailed, (request) => this._onRequestFailed(request)),
83
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.Response, (response) => this._onResponse(response)),
84
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.RequestAborted, (request) => this._onRequestAborted(request)),
85
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.RequestFulfilled, (request) => this._onRequestFulfilled(request)),
86
+ import_eventsHelper.eventsHelper.addEventListener(this._context, import_browserContext.BrowserContext.Events.RequestContinued, (request) => this._onRequestContinued(request))
87
+ );
88
+ for (const page of this._context.pages())
89
+ this._createPageEntryIfNeeded(page);
73
90
  }
74
91
  }
75
92
  _shouldIncludeEntryWithUrl(urlString) {
76
- return !this._options.urlFilter || (0, _utils.urlMatches)(this._baseURL, urlString, this._options.urlFilter);
93
+ return !this._options.urlFilter || (0, import_utils2.urlMatches)(this._baseURL, urlString, this._options.urlFilter);
77
94
  }
78
95
  _entryForRequest(request) {
79
96
  return request[this._entrySymbol];
80
97
  }
81
98
  _createPageEntryIfNeeded(page) {
82
- if (!page) return;
83
- if (this._options.omitPages) return;
84
- if (this._page && page !== this._page) return;
99
+ if (!page)
100
+ return;
101
+ if (this._options.omitPages)
102
+ return;
103
+ if (this._page && page !== this._page)
104
+ return;
85
105
  let pageEntry = this._pageEntries.get(page);
86
106
  if (!pageEntry) {
87
- const date = new Date();
107
+ const date = /* @__PURE__ */ new Date();
88
108
  pageEntry = {
89
109
  startedDateTime: date.toISOString(),
90
110
  id: page.guid,
91
- title: '',
111
+ title: "",
92
112
  pageTimings: this._options.omitTiming ? {} : {
93
113
  onContentLoad: -1,
94
114
  onLoad: -1
95
115
  }
96
116
  };
97
117
  pageEntry[startedDateSymbol] = date;
98
- page.mainFrame().on(_frames.Frame.Events.AddLifecycle, event => {
99
- if (event === 'load') this._onLoad(page, pageEntry);
100
- if (event === 'domcontentloaded') this._onDOMContentLoaded(page, pageEntry);
118
+ page.mainFrame().on(import_frames.Frame.Events.AddLifecycle, (event) => {
119
+ if (event === "load")
120
+ this._onLoad(page, pageEntry);
121
+ if (event === "domcontentloaded")
122
+ this._onDOMContentLoaded(page, pageEntry);
101
123
  });
102
124
  this._pageEntries.set(page, pageEntry);
103
125
  }
@@ -109,13 +131,12 @@ class HarTracer {
109
131
  title: document.title,
110
132
  domContentLoaded: performance.timing.domContentLoadedEventStart
111
133
  };
112
- }), {
113
- isFunction: true,
114
- world: 'utility'
115
- }).then(result => {
134
+ }), { isFunction: true, world: "utility" }).then((result) => {
116
135
  pageEntry.title = result.title;
117
- if (!this._options.omitTiming) pageEntry.pageTimings.onContentLoad = result.domContentLoaded;
118
- }).catch(() => {});
136
+ if (!this._options.omitTiming)
137
+ pageEntry.pageTimings.onContentLoad = result.domContentLoaded;
138
+ }).catch(() => {
139
+ });
119
140
  this._addBarrier(page, promise);
120
141
  }
121
142
  _onLoad(page, pageEntry) {
@@ -124,45 +145,46 @@ class HarTracer {
124
145
  title: document.title,
125
146
  loaded: performance.timing.loadEventStart
126
147
  };
127
- }), {
128
- isFunction: true,
129
- world: 'utility'
130
- }).then(result => {
148
+ }), { isFunction: true, world: "utility" }).then((result) => {
131
149
  pageEntry.title = result.title;
132
- if (!this._options.omitTiming) pageEntry.pageTimings.onLoad = result.loaded;
133
- }).catch(() => {});
150
+ if (!this._options.omitTiming)
151
+ pageEntry.pageTimings.onLoad = result.loaded;
152
+ }).catch(() => {
153
+ });
134
154
  this._addBarrier(page, promise);
135
155
  }
136
156
  _addBarrier(target, promise) {
137
- if (!target) return null;
138
- if (!this._options.waitForContentOnStop) return;
157
+ if (!target)
158
+ return null;
159
+ if (!this._options.waitForContentOnStop)
160
+ return;
139
161
  const race = target.openScope.safeRace(promise);
140
162
  this._barrierPromises.add(race);
141
163
  race.then(() => this._barrierPromises.delete(race));
142
164
  }
143
165
  _onAPIRequest(event) {
144
- var _event$postData;
145
- if (!this._shouldIncludeEntryWithUrl(event.url.toString())) return;
146
- const harEntry = createHarEntry(event.method, event.url, undefined, this._options);
166
+ if (!this._shouldIncludeEntryWithUrl(event.url.toString()))
167
+ return;
168
+ const harEntry = createHarEntry(event.method, event.url, void 0, this._options);
147
169
  harEntry._apiRequest = true;
148
- if (!this._options.omitCookies) harEntry.request.cookies = event.cookies;
149
- harEntry.request.headers = Object.entries(event.headers).map(([name, value]) => ({
150
- name,
151
- value
152
- }));
153
- harEntry.request.postData = this._postDataForBuffer(event.postData || null, event.headers['content-type'], this._options.content);
154
- if (!this._options.omitSizes) harEntry.request.bodySize = ((_event$postData = event.postData) === null || _event$postData === void 0 ? void 0 : _event$postData.length) || 0;
170
+ if (!this._options.omitCookies)
171
+ harEntry.request.cookies = event.cookies;
172
+ harEntry.request.headers = Object.entries(event.headers).map(([name, value]) => ({ name, value }));
173
+ harEntry.request.postData = this._postDataForBuffer(event.postData || null, event.headers["content-type"], this._options.content);
174
+ if (!this._options.omitSizes)
175
+ harEntry.request.bodySize = event.postData?.length || 0;
155
176
  event[this._entrySymbol] = harEntry;
156
- if (this._started) this._delegate.onEntryStarted(harEntry);
177
+ if (this._started)
178
+ this._delegate.onEntryStarted(harEntry);
157
179
  }
158
180
  _onAPIRequestFinished(event) {
159
- var _event$body$length, _event$body;
160
181
  const harEntry = this._entryForRequest(event.requestEvent);
161
- if (!harEntry) return;
182
+ if (!harEntry)
183
+ return;
162
184
  harEntry.response.status = event.statusCode;
163
185
  harEntry.response.statusText = event.statusMessage;
164
186
  harEntry.response.httpVersion = event.httpVersion;
165
- harEntry.response.redirectURL = event.headers.location || '';
187
+ harEntry.response.redirectURL = event.headers.location || "";
166
188
  if (!this._options.omitServerIP) {
167
189
  harEntry.serverIPAddress = event.serverIPAddress;
168
190
  harEntry._serverPort = event.serverPort;
@@ -171,204 +193,226 @@ class HarTracer {
171
193
  harEntry.timings = event.timings;
172
194
  this._computeHarEntryTotalTime(harEntry);
173
195
  }
174
- if (!this._options.omitSecurityDetails) harEntry._securityDetails = event.securityDetails;
196
+ if (!this._options.omitSecurityDetails)
197
+ harEntry._securityDetails = event.securityDetails;
175
198
  for (let i = 0; i < event.rawHeaders.length; i += 2) {
176
199
  harEntry.response.headers.push({
177
200
  name: event.rawHeaders[i],
178
201
  value: event.rawHeaders[i + 1]
179
202
  });
180
203
  }
181
- harEntry.response.cookies = this._options.omitCookies ? [] : event.cookies.map(c => {
204
+ harEntry.response.cookies = this._options.omitCookies ? [] : event.cookies.map((c) => {
182
205
  return {
183
206
  ...c,
184
- expires: c.expires === -1 ? undefined : safeDateToISOString(c.expires)
207
+ expires: c.expires === -1 ? void 0 : safeDateToISOString(c.expires)
185
208
  };
186
209
  });
187
210
  const content = harEntry.response.content;
188
- const contentType = event.headers['content-type'];
189
- if (contentType) content.mimeType = contentType;
190
- this._storeResponseContent(event.body, content, 'other');
191
- if (!this._options.omitSizes) harEntry.response.bodySize = (_event$body$length = (_event$body = event.body) === null || _event$body === void 0 ? void 0 : _event$body.length) !== null && _event$body$length !== void 0 ? _event$body$length : 0;
192
- if (this._started) this._delegate.onEntryFinished(harEntry);
211
+ const contentType = event.headers["content-type"];
212
+ if (contentType)
213
+ content.mimeType = contentType;
214
+ this._storeResponseContent(event.body, content, "other");
215
+ if (!this._options.omitSizes)
216
+ harEntry.response.bodySize = event.body?.length ?? 0;
217
+ if (this._started)
218
+ this._delegate.onEntryFinished(harEntry);
193
219
  }
194
220
  _onRequest(request) {
195
- var _request$frame, _request$frame2;
196
- if (!this._shouldIncludeEntryWithUrl(request.url())) return;
197
- const page = (_request$frame = request.frame()) === null || _request$frame === void 0 ? void 0 : _request$frame._page;
198
- if (this._page && page !== this._page) return;
221
+ if (!this._shouldIncludeEntryWithUrl(request.url()))
222
+ return;
223
+ const page = request.frame()?._page;
224
+ if (this._page && page !== this._page)
225
+ return;
199
226
  const url = network.parseURL(request.url());
200
- if (!url) return;
227
+ if (!url)
228
+ return;
201
229
  const pageEntry = this._createPageEntryIfNeeded(page);
202
- const harEntry = createHarEntry(request.method(), url, (_request$frame2 = request.frame()) === null || _request$frame2 === void 0 ? void 0 : _request$frame2.guid, this._options);
203
- if (pageEntry) harEntry.pageref = pageEntry.id;
230
+ const harEntry = createHarEntry(request.method(), url, request.frame()?.guid, this._options);
231
+ if (pageEntry)
232
+ harEntry.pageref = pageEntry.id;
204
233
  this._recordRequestHeadersAndCookies(harEntry, request.headers());
205
234
  harEntry.request.postData = this._postDataForRequest(request, this._options.content);
206
- if (!this._options.omitSizes) harEntry.request.bodySize = request.bodySize();
235
+ if (!this._options.omitSizes)
236
+ harEntry.request.bodySize = request.bodySize();
207
237
  if (request.redirectedFrom()) {
208
238
  const fromEntry = this._entryForRequest(request.redirectedFrom());
209
- if (fromEntry) fromEntry.response.redirectURL = request.url();
239
+ if (fromEntry)
240
+ fromEntry.response.redirectURL = request.url();
210
241
  }
211
242
  request[this._entrySymbol] = harEntry;
212
- (0, _utils.assert)(this._started);
243
+ (0, import_utils.assert)(this._started);
213
244
  this._delegate.onEntryStarted(harEntry);
214
245
  }
215
246
  _recordRequestHeadersAndCookies(harEntry, headers) {
216
247
  if (!this._options.omitCookies) {
217
248
  harEntry.request.cookies = [];
218
- for (const header of headers.filter(header => header.name.toLowerCase() === 'cookie')) harEntry.request.cookies.push(...header.value.split(';').map(parseCookie));
249
+ for (const header of headers.filter((header2) => header2.name.toLowerCase() === "cookie"))
250
+ harEntry.request.cookies.push(...header.value.split(";").map(parseCookie));
219
251
  }
220
252
  harEntry.request.headers = headers;
221
253
  }
222
254
  _recordRequestOverrides(harEntry, request) {
223
- if (!request._hasOverrides() || !this._options.recordRequestOverrides) return;
255
+ if (!request.overrides() || !this._options.recordRequestOverrides)
256
+ return;
224
257
  harEntry.request.method = request.method();
225
258
  harEntry.request.url = request.url();
226
259
  harEntry.request.postData = this._postDataForRequest(request, this._options.content);
227
260
  this._recordRequestHeadersAndCookies(harEntry, request.headers());
228
261
  }
229
262
  async _onRequestFinished(request, response) {
230
- var _request$frame3;
231
- if (!response) return;
263
+ if (!response)
264
+ return;
232
265
  const harEntry = this._entryForRequest(request);
233
- if (!harEntry) return;
234
- const page = (_request$frame3 = request.frame()) === null || _request$frame3 === void 0 ? void 0 : _request$frame3._page;
235
-
236
- // In WebKit security details and server ip are reported in Network.loadingFinished, so we populate
237
- // it here to not hang in case of long chunked responses, see https://github.com/microsoft/playwright/issues/21182.
266
+ if (!harEntry)
267
+ return;
268
+ const page = request.frame()?._page;
238
269
  if (!this._options.omitServerIP) {
239
- this._addBarrier(page || request.serviceWorker(), response.serverAddr().then(server => {
240
- if (server !== null && server !== void 0 && server.ipAddress) harEntry.serverIPAddress = server.ipAddress;
241
- if (server !== null && server !== void 0 && server.port) harEntry._serverPort = server.port;
270
+ this._addBarrier(page || request.serviceWorker(), response.serverAddr().then((server) => {
271
+ if (server?.ipAddress)
272
+ harEntry.serverIPAddress = server.ipAddress;
273
+ if (server?.port)
274
+ harEntry._serverPort = server.port;
242
275
  }));
243
276
  }
244
277
  if (!this._options.omitSecurityDetails) {
245
- this._addBarrier(page || request.serviceWorker(), response.securityDetails().then(details => {
246
- if (details) harEntry._securityDetails = details;
278
+ this._addBarrier(page || request.serviceWorker(), response.securityDetails().then((details) => {
279
+ if (details)
280
+ harEntry._securityDetails = details;
247
281
  }));
248
282
  }
249
283
  const httpVersion = response.httpVersion();
250
284
  harEntry.request.httpVersion = httpVersion;
251
285
  harEntry.response.httpVersion = httpVersion;
252
- const compressionCalculationBarrier = this._options.omitSizes ? undefined : {
286
+ const compressionCalculationBarrier = this._options.omitSizes ? void 0 : {
253
287
  _encodedBodySize: -1,
254
288
  _decodedBodySize: -1,
255
- barrier: new _manualPromise.ManualPromise(),
256
- _check: function () {
289
+ barrier: new import_manualPromise.ManualPromise(),
290
+ _check: function() {
257
291
  if (this._encodedBodySize !== -1 && this._decodedBodySize !== -1) {
258
292
  harEntry.response.content.compression = Math.max(0, this._decodedBodySize - this._encodedBodySize);
259
293
  this.barrier.resolve();
260
294
  }
261
295
  },
262
- setEncodedBodySize: function (encodedBodySize) {
296
+ setEncodedBodySize: function(encodedBodySize) {
263
297
  this._encodedBodySize = encodedBodySize;
264
298
  this._check();
265
299
  },
266
- setDecodedBodySize: function (decodedBodySize) {
300
+ setDecodedBodySize: function(decodedBodySize) {
267
301
  this._decodedBodySize = decodedBodySize;
268
302
  this._check();
269
303
  }
270
304
  };
271
- if (compressionCalculationBarrier) this._addBarrier(page || request.serviceWorker(), compressionCalculationBarrier.barrier);
272
- const promise = response.body().then(buffer => {
273
- if (this._options.omitScripts && request.resourceType() === 'script') {
274
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setDecodedBodySize(0);
305
+ if (compressionCalculationBarrier)
306
+ this._addBarrier(page || request.serviceWorker(), compressionCalculationBarrier.barrier);
307
+ const promise = response.body().then((buffer) => {
308
+ if (this._options.omitScripts && request.resourceType() === "script") {
309
+ compressionCalculationBarrier?.setDecodedBodySize(0);
275
310
  return;
276
311
  }
277
312
  const content = harEntry.response.content;
278
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setDecodedBodySize(buffer.length);
313
+ compressionCalculationBarrier?.setDecodedBodySize(buffer.length);
279
314
  this._storeResponseContent(buffer, content, request.resourceType());
280
315
  }).catch(() => {
281
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setDecodedBodySize(0);
316
+ compressionCalculationBarrier?.setDecodedBodySize(0);
282
317
  }).then(() => {
283
- if (this._started) this._delegate.onEntryFinished(harEntry);
318
+ if (this._started)
319
+ this._delegate.onEntryFinished(harEntry);
284
320
  });
285
321
  this._addBarrier(page || request.serviceWorker(), promise);
286
-
287
- // Response end timing is only available after the response event was received.
288
322
  const timing = response.timing();
289
- harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? _helper.helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;
323
+ harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? import_helper.helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;
290
324
  this._computeHarEntryTotalTime(harEntry);
291
325
  if (!this._options.omitSizes) {
292
- this._addBarrier(page || request.serviceWorker(), response.sizes().then(sizes => {
326
+ this._addBarrier(page || request.serviceWorker(), response.sizes().then((sizes) => {
293
327
  harEntry.response.bodySize = sizes.responseBodySize;
294
328
  harEntry.response.headersSize = sizes.responseHeadersSize;
295
329
  harEntry.response._transferSize = sizes.transferSize;
296
330
  harEntry.request.headersSize = sizes.requestHeadersSize;
297
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setEncodedBodySize(sizes.responseBodySize);
331
+ compressionCalculationBarrier?.setEncodedBodySize(sizes.responseBodySize);
298
332
  }));
299
333
  }
300
334
  }
301
335
  async _onRequestFailed(request) {
302
336
  const harEntry = this._entryForRequest(request);
303
- if (!harEntry) return;
304
- if (request._failureText !== null) harEntry.response._failureText = request._failureText;
337
+ if (!harEntry)
338
+ return;
339
+ if (request._failureText !== null)
340
+ harEntry.response._failureText = request._failureText;
305
341
  this._recordRequestOverrides(harEntry, request);
306
- if (this._started) this._delegate.onEntryFinished(harEntry);
342
+ if (this._started)
343
+ this._delegate.onEntryFinished(harEntry);
307
344
  }
308
345
  _onRequestAborted(request) {
309
346
  const harEntry = this._entryForRequest(request);
310
- if (harEntry) harEntry._wasAborted = true;
347
+ if (harEntry)
348
+ harEntry._wasAborted = true;
311
349
  }
312
350
  _onRequestFulfilled(request) {
313
351
  const harEntry = this._entryForRequest(request);
314
- if (harEntry) harEntry._wasFulfilled = true;
352
+ if (harEntry)
353
+ harEntry._wasFulfilled = true;
315
354
  }
316
355
  _onRequestContinued(request) {
317
356
  const harEntry = this._entryForRequest(request);
318
- if (harEntry) harEntry._wasContinued = true;
357
+ if (harEntry)
358
+ harEntry._wasContinued = true;
319
359
  }
320
360
  _storeResponseContent(buffer, content, resourceType) {
321
361
  if (!buffer) {
322
362
  content.size = 0;
323
363
  return;
324
364
  }
325
- if (!this._options.omitSizes) content.size = buffer.length;
326
- if (this._options.content === 'embed') {
327
- // Sometimes, we can receive a font/media file with textual mime type. Browser
328
- // still interprets them correctly, but the 'content-type' header is obviously wrong.
329
- if ((0, _utils.isTextualMimeType)(content.mimeType) && resourceType !== 'font') {
365
+ if (!this._options.omitSizes)
366
+ content.size = buffer.length;
367
+ if (this._options.content === "embed") {
368
+ if ((0, import_utils2.isTextualMimeType)(content.mimeType) && resourceType !== "font") {
330
369
  content.text = buffer.toString();
331
370
  } else {
332
- content.text = buffer.toString('base64');
333
- content.encoding = 'base64';
371
+ content.text = buffer.toString("base64");
372
+ content.encoding = "base64";
334
373
  }
335
- } else if (this._options.content === 'attach') {
336
- const sha1 = (0, _utils.calculateSha1)(buffer) + '.' + (_utilsBundle.mime.getExtension(content.mimeType) || 'dat');
337
- if (this._options.includeTraceInfo) content._sha1 = sha1;else content._file = sha1;
338
- if (this._started) this._delegate.onContentBlob(sha1, buffer);
374
+ } else if (this._options.content === "attach") {
375
+ const sha1 = (0, import_utils.calculateSha1)(buffer) + "." + (import_utilsBundle.mime.getExtension(content.mimeType) || "dat");
376
+ if (this._options.includeTraceInfo)
377
+ content._sha1 = sha1;
378
+ else
379
+ content._file = sha1;
380
+ if (this._started)
381
+ this._delegate.onContentBlob(sha1, buffer);
339
382
  }
340
383
  }
341
384
  _onResponse(response) {
342
- var _response$frame;
343
385
  const harEntry = this._entryForRequest(response.request());
344
- if (!harEntry) return;
345
- const page = (_response$frame = response.frame()) === null || _response$frame === void 0 ? void 0 : _response$frame._page;
386
+ if (!harEntry)
387
+ return;
388
+ const page = response.frame()?._page;
346
389
  const pageEntry = this._createPageEntryIfNeeded(page);
347
390
  const request = response.request();
348
391
  harEntry.response = {
349
392
  status: response.status(),
350
393
  statusText: response.statusText(),
351
394
  httpVersion: response.httpVersion(),
352
- // These are bad values that will be overwritten bellow.
395
+ // These are bad values that will be overwritten below.
353
396
  cookies: [],
354
397
  headers: [],
355
398
  content: {
356
399
  size: -1,
357
- mimeType: 'x-unknown'
400
+ mimeType: "x-unknown"
358
401
  },
359
402
  headersSize: -1,
360
403
  bodySize: -1,
361
- redirectURL: '',
362
- _transferSize: this._options.omitSizes ? undefined : -1
404
+ redirectURL: "",
405
+ _transferSize: this._options.omitSizes ? void 0 : -1
363
406
  };
364
407
  if (!this._options.omitTiming) {
365
408
  const startDateTime = pageEntry ? pageEntry[startedDateSymbol].valueOf() : 0;
366
409
  const timing = response.timing();
367
- if (pageEntry && startDateTime > timing.startTime) pageEntry.startedDateTime = new Date(timing.startTime).toISOString();
368
- const dns = timing.domainLookupEnd !== -1 ? _helper.helper.millisToRoundishMillis(timing.domainLookupEnd - timing.domainLookupStart) : -1;
369
- const connect = timing.connectEnd !== -1 ? _helper.helper.millisToRoundishMillis(timing.connectEnd - timing.connectStart) : -1;
370
- const ssl = timing.connectEnd !== -1 ? _helper.helper.millisToRoundishMillis(timing.connectEnd - timing.secureConnectionStart) : -1;
371
- const wait = timing.responseStart !== -1 ? _helper.helper.millisToRoundishMillis(timing.responseStart - timing.requestStart) : -1;
410
+ if (pageEntry && startDateTime > timing.startTime)
411
+ pageEntry.startedDateTime = new Date(timing.startTime).toISOString();
412
+ const dns = timing.domainLookupEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.domainLookupEnd - timing.domainLookupStart) : -1;
413
+ const connect = timing.connectEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.connectEnd - timing.connectStart) : -1;
414
+ const ssl = timing.connectEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.connectEnd - timing.secureConnectionStart) : -1;
415
+ const wait = timing.responseStart !== -1 ? import_helper.helper.millisToRoundishMillis(timing.responseStart - timing.requestStart) : -1;
372
416
  const receive = -1;
373
417
  harEntry.timings = {
374
418
  dns,
@@ -381,53 +425,64 @@ class HarTracer {
381
425
  this._computeHarEntryTotalTime(harEntry);
382
426
  }
383
427
  this._recordRequestOverrides(harEntry, request);
384
- this._addBarrier(page || request.serviceWorker(), request.rawRequestHeaders().then(headers => {
428
+ this._addBarrier(page || request.serviceWorker(), request.rawRequestHeaders().then((headers) => {
385
429
  this._recordRequestHeadersAndCookies(harEntry, headers);
386
430
  }));
387
- // Record available headers including redirect location in case the tracing is stopped before
388
- // response extra info is received (in Chromium).
389
431
  this._recordResponseHeaders(harEntry, response.headers());
390
- this._addBarrier(page || request.serviceWorker(), response.rawResponseHeaders().then(headers => {
432
+ this._addBarrier(page || request.serviceWorker(), response.rawResponseHeaders().then((headers) => {
391
433
  this._recordResponseHeaders(harEntry, headers);
392
434
  }));
393
435
  }
394
436
  _recordResponseHeaders(harEntry, headers) {
395
437
  if (!this._options.omitCookies) {
396
- harEntry.response.cookies = headers.filter(header => header.name.toLowerCase() === 'set-cookie').map(header => parseCookie(header.value));
438
+ harEntry.response.cookies = headers.filter((header) => header.name.toLowerCase() === "set-cookie").map((header) => parseCookie(header.value));
397
439
  }
398
440
  harEntry.response.headers = headers;
399
- const contentType = headers.find(header => header.name.toLowerCase() === 'content-type');
400
- if (contentType) harEntry.response.content.mimeType = contentType.value;
441
+ const contentType = headers.find((header) => header.name.toLowerCase() === "content-type");
442
+ if (contentType)
443
+ harEntry.response.content.mimeType = contentType.value;
401
444
  }
402
445
  _computeHarEntryTotalTime(harEntry) {
403
- harEntry.time = [harEntry.timings.dns, harEntry.timings.connect, harEntry.timings.ssl, harEntry.timings.wait, harEntry.timings.receive].reduce((pre, cur) => (cur || -1) > 0 ? cur + pre : pre, 0);
446
+ harEntry.time = [
447
+ harEntry.timings.dns,
448
+ harEntry.timings.connect,
449
+ harEntry.timings.ssl,
450
+ harEntry.timings.wait,
451
+ harEntry.timings.receive
452
+ ].reduce((pre, cur) => (cur || -1) > 0 ? cur + pre : pre, 0);
404
453
  }
405
454
  async flush() {
406
455
  await Promise.all(this._barrierPromises);
407
456
  }
408
457
  stop() {
409
458
  this._started = false;
410
- _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
459
+ import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
411
460
  this._barrierPromises.clear();
412
- const context = this._context instanceof _browserContext.BrowserContext ? this._context : undefined;
461
+ const context = this._context instanceof import_browserContext.BrowserContext ? this._context : void 0;
413
462
  const log = {
414
- version: '1.2',
463
+ version: "1.2",
415
464
  creator: {
416
- name: 'Playwright',
417
- version: (0, _utils.getPlaywrightVersion)()
465
+ name: "Playwright",
466
+ version: (0, import_utils2.getPlaywrightVersion)()
418
467
  },
419
468
  browser: {
420
- name: (context === null || context === void 0 ? void 0 : context._browser.options.name) || '',
421
- version: (context === null || context === void 0 ? void 0 : context._browser.version()) || ''
469
+ name: context?._browser.options.name || "",
470
+ version: context?._browser.version() || ""
422
471
  },
423
- pages: this._pageEntries.size ? Array.from(this._pageEntries.values()) : undefined,
472
+ pages: this._pageEntries.size ? Array.from(this._pageEntries.values()) : void 0,
424
473
  entries: []
425
474
  };
426
475
  if (!this._options.omitTiming) {
427
476
  for (const pageEntry of log.pages || []) {
428
477
  const startDateTime = pageEntry[startedDateSymbol].valueOf();
429
- if (typeof pageEntry.pageTimings.onContentLoad === 'number' && pageEntry.pageTimings.onContentLoad >= 0) pageEntry.pageTimings.onContentLoad -= startDateTime;else pageEntry.pageTimings.onContentLoad = -1;
430
- if (typeof pageEntry.pageTimings.onLoad === 'number' && pageEntry.pageTimings.onLoad >= 0) pageEntry.pageTimings.onLoad -= startDateTime;else pageEntry.pageTimings.onLoad = -1;
478
+ if (typeof pageEntry.pageTimings.onContentLoad === "number" && pageEntry.pageTimings.onContentLoad >= 0)
479
+ pageEntry.pageTimings.onContentLoad -= startDateTime;
480
+ else
481
+ pageEntry.pageTimings.onContentLoad = -1;
482
+ if (typeof pageEntry.pageTimings.onLoad === "number" && pageEntry.pageTimings.onLoad >= 0)
483
+ pageEntry.pageTimings.onLoad -= startDateTime;
484
+ else
485
+ pageEntry.pageTimings.onLoad = -1;
431
486
  }
432
487
  }
433
488
  this._pageEntries.clear();
@@ -435,68 +490,68 @@ class HarTracer {
435
490
  }
436
491
  _postDataForRequest(request, content) {
437
492
  const postData = request.postDataBuffer();
438
- if (!postData) return;
439
- const contentType = request.headerValue('content-type');
493
+ if (!postData)
494
+ return;
495
+ const contentType = request.headerValue("content-type");
440
496
  return this._postDataForBuffer(postData, contentType, content);
441
497
  }
442
498
  _postDataForBuffer(postData, contentType, content) {
443
- if (!postData) return;
444
- contentType !== null && contentType !== void 0 ? contentType : contentType = 'application/octet-stream';
499
+ if (!postData)
500
+ return;
501
+ contentType ??= "application/octet-stream";
445
502
  const result = {
446
503
  mimeType: contentType,
447
- text: '',
504
+ text: "",
448
505
  params: []
449
506
  };
450
- if (content === 'embed' && contentType !== 'application/octet-stream') result.text = postData.toString();
451
- if (content === 'attach') {
452
- const sha1 = (0, _utils.calculateSha1)(postData) + '.' + (_utilsBundle.mime.getExtension(contentType) || 'dat');
453
- if (this._options.includeTraceInfo) result._sha1 = sha1;else result._file = sha1;
507
+ if (content === "embed" && contentType !== "application/octet-stream")
508
+ result.text = postData.toString();
509
+ if (content === "attach") {
510
+ const sha1 = (0, import_utils.calculateSha1)(postData) + "." + (import_utilsBundle.mime.getExtension(contentType) || "dat");
511
+ if (this._options.includeTraceInfo)
512
+ result._sha1 = sha1;
513
+ else
514
+ result._file = sha1;
454
515
  this._delegate.onContentBlob(sha1, postData);
455
516
  }
456
- if (contentType === 'application/x-www-form-urlencoded') {
517
+ if (contentType === "application/x-www-form-urlencoded") {
457
518
  const parsed = new URLSearchParams(postData.toString());
458
- for (const [name, value] of parsed.entries()) result.params.push({
459
- name,
460
- value
461
- });
519
+ for (const [name, value] of parsed.entries())
520
+ result.params.push({ name, value });
462
521
  }
463
522
  return result;
464
523
  }
465
524
  }
466
- exports.HarTracer = HarTracer;
467
525
  function createHarEntry(method, url, frameref, options) {
468
526
  const harEntry = {
469
- _frameref: options.includeTraceInfo ? frameref : undefined,
470
- _monotonicTime: options.includeTraceInfo ? (0, _utils.monotonicTime)() : undefined,
471
- startedDateTime: new Date().toISOString(),
527
+ _frameref: options.includeTraceInfo ? frameref : void 0,
528
+ _monotonicTime: options.includeTraceInfo ? (0, import_utils.monotonicTime)() : void 0,
529
+ startedDateTime: (/* @__PURE__ */ new Date()).toISOString(),
472
530
  time: -1,
473
531
  request: {
474
- method: method,
532
+ method,
475
533
  url: url.toString(),
476
534
  httpVersion: FALLBACK_HTTP_VERSION,
477
535
  cookies: [],
478
536
  headers: [],
479
- queryString: [...url.searchParams].map(e => ({
480
- name: e[0],
481
- value: e[1]
482
- })),
537
+ queryString: [...url.searchParams].map((e) => ({ name: e[0], value: e[1] })),
483
538
  headersSize: -1,
484
539
  bodySize: -1
485
540
  },
486
541
  response: {
487
542
  status: -1,
488
- statusText: '',
543
+ statusText: "",
489
544
  httpVersion: FALLBACK_HTTP_VERSION,
490
545
  cookies: [],
491
546
  headers: [],
492
547
  content: {
493
548
  size: -1,
494
- mimeType: 'x-unknown'
549
+ mimeType: "x-unknown"
495
550
  },
496
551
  headersSize: -1,
497
552
  bodySize: -1,
498
- redirectURL: '',
499
- _transferSize: options.omitSizes ? undefined : -1
553
+ redirectURL: "",
554
+ _transferSize: options.omitSizes ? void 0 : -1
500
555
  },
501
556
  cache: {},
502
557
  timings: {
@@ -509,33 +564,45 @@ function createHarEntry(method, url, frameref, options) {
509
564
  }
510
565
  function parseCookie(c) {
511
566
  const cookie = {
512
- name: '',
513
- value: ''
567
+ name: "",
568
+ value: ""
514
569
  };
515
570
  let first = true;
516
571
  for (const pair of c.split(/; */)) {
517
- const indexOfEquals = pair.indexOf('=');
572
+ const indexOfEquals = pair.indexOf("=");
518
573
  const name = indexOfEquals !== -1 ? pair.substr(0, indexOfEquals).trim() : pair.trim();
519
- const value = indexOfEquals !== -1 ? pair.substr(indexOfEquals + 1, pair.length).trim() : '';
574
+ const value = indexOfEquals !== -1 ? pair.substr(indexOfEquals + 1, pair.length).trim() : "";
520
575
  if (first) {
521
576
  first = false;
522
577
  cookie.name = name;
523
578
  cookie.value = value;
524
579
  continue;
525
580
  }
526
- if (name === 'Domain') cookie.domain = value;
527
- if (name === 'Expires') cookie.expires = safeDateToISOString(value);
528
- if (name === 'HttpOnly') cookie.httpOnly = true;
529
- if (name === 'Max-Age') cookie.expires = safeDateToISOString(Date.now() + +value * 1000);
530
- if (name === 'Path') cookie.path = value;
531
- if (name === 'SameSite') cookie.sameSite = value;
532
- if (name === 'Secure') cookie.secure = true;
581
+ if (name === "Domain")
582
+ cookie.domain = value;
583
+ if (name === "Expires")
584
+ cookie.expires = safeDateToISOString(value);
585
+ if (name === "HttpOnly")
586
+ cookie.httpOnly = true;
587
+ if (name === "Max-Age")
588
+ cookie.expires = safeDateToISOString(Date.now() + +value * 1e3);
589
+ if (name === "Path")
590
+ cookie.path = value;
591
+ if (name === "SameSite")
592
+ cookie.sameSite = value;
593
+ if (name === "Secure")
594
+ cookie.secure = true;
533
595
  }
534
596
  return cookie;
535
597
  }
536
598
  function safeDateToISOString(value) {
537
599
  try {
538
600
  return new Date(value).toISOString();
539
- } catch (e) {}
601
+ } catch (e) {
602
+ }
540
603
  }
541
- const startedDateSymbol = Symbol('startedDate');
604
+ const startedDateSymbol = Symbol("startedDate");
605
+ // Annotate the CommonJS export names for ESM import in node:
606
+ 0 && (module.exports = {
607
+ HarTracer
608
+ });