patchright-core 1.51.3 → 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 +284 -404
  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 +730 -894
  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-1DiydmYA.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-l0TyP_G8.js +0 -259
  302. package/lib/vite/traceViewer/index.BqUZLSro.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.C1d2m5sF.js +0 -5
@@ -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,64 @@ 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
+ );
73
88
  }
74
89
  }
75
90
  _shouldIncludeEntryWithUrl(urlString) {
76
- return !this._options.urlFilter || (0, _utils.urlMatches)(this._baseURL, urlString, this._options.urlFilter);
91
+ return !this._options.urlFilter || (0, import_utils2.urlMatches)(this._baseURL, urlString, this._options.urlFilter);
77
92
  }
78
93
  _entryForRequest(request) {
79
94
  return request[this._entrySymbol];
80
95
  }
81
96
  _createPageEntryIfNeeded(page) {
82
- if (!page) return;
83
- if (this._options.omitPages) return;
84
- if (this._page && page !== this._page) return;
97
+ if (!page)
98
+ return;
99
+ if (this._options.omitPages)
100
+ return;
101
+ if (this._page && page !== this._page)
102
+ return;
85
103
  let pageEntry = this._pageEntries.get(page);
86
104
  if (!pageEntry) {
87
- const date = new Date();
105
+ const date = /* @__PURE__ */ new Date();
88
106
  pageEntry = {
89
107
  startedDateTime: date.toISOString(),
90
108
  id: page.guid,
91
- title: '',
109
+ title: "",
92
110
  pageTimings: this._options.omitTiming ? {} : {
93
111
  onContentLoad: -1,
94
112
  onLoad: -1
95
113
  }
96
114
  };
97
115
  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);
116
+ page.mainFrame().on(import_frames.Frame.Events.AddLifecycle, (event) => {
117
+ if (event === "load")
118
+ this._onLoad(page, pageEntry);
119
+ if (event === "domcontentloaded")
120
+ this._onDOMContentLoaded(page, pageEntry);
101
121
  });
102
122
  this._pageEntries.set(page, pageEntry);
103
123
  }
@@ -109,13 +129,12 @@ class HarTracer {
109
129
  title: document.title,
110
130
  domContentLoaded: performance.timing.domContentLoadedEventStart
111
131
  };
112
- }), {
113
- isFunction: true,
114
- world: 'utility'
115
- }).then(result => {
132
+ }), { isFunction: true, world: "utility" }).then((result) => {
116
133
  pageEntry.title = result.title;
117
- if (!this._options.omitTiming) pageEntry.pageTimings.onContentLoad = result.domContentLoaded;
118
- }).catch(() => {});
134
+ if (!this._options.omitTiming)
135
+ pageEntry.pageTimings.onContentLoad = result.domContentLoaded;
136
+ }).catch(() => {
137
+ });
119
138
  this._addBarrier(page, promise);
120
139
  }
121
140
  _onLoad(page, pageEntry) {
@@ -124,45 +143,46 @@ class HarTracer {
124
143
  title: document.title,
125
144
  loaded: performance.timing.loadEventStart
126
145
  };
127
- }), {
128
- isFunction: true,
129
- world: 'utility'
130
- }).then(result => {
146
+ }), { isFunction: true, world: "utility" }).then((result) => {
131
147
  pageEntry.title = result.title;
132
- if (!this._options.omitTiming) pageEntry.pageTimings.onLoad = result.loaded;
133
- }).catch(() => {});
148
+ if (!this._options.omitTiming)
149
+ pageEntry.pageTimings.onLoad = result.loaded;
150
+ }).catch(() => {
151
+ });
134
152
  this._addBarrier(page, promise);
135
153
  }
136
154
  _addBarrier(target, promise) {
137
- if (!target) return null;
138
- if (!this._options.waitForContentOnStop) return;
155
+ if (!target)
156
+ return null;
157
+ if (!this._options.waitForContentOnStop)
158
+ return;
139
159
  const race = target.openScope.safeRace(promise);
140
160
  this._barrierPromises.add(race);
141
161
  race.then(() => this._barrierPromises.delete(race));
142
162
  }
143
163
  _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);
164
+ if (!this._shouldIncludeEntryWithUrl(event.url.toString()))
165
+ return;
166
+ const harEntry = createHarEntry(event.method, event.url, void 0, this._options);
147
167
  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;
168
+ if (!this._options.omitCookies)
169
+ harEntry.request.cookies = event.cookies;
170
+ harEntry.request.headers = Object.entries(event.headers).map(([name, value]) => ({ name, value }));
171
+ harEntry.request.postData = this._postDataForBuffer(event.postData || null, event.headers["content-type"], this._options.content);
172
+ if (!this._options.omitSizes)
173
+ harEntry.request.bodySize = event.postData?.length || 0;
155
174
  event[this._entrySymbol] = harEntry;
156
- if (this._started) this._delegate.onEntryStarted(harEntry);
175
+ if (this._started)
176
+ this._delegate.onEntryStarted(harEntry);
157
177
  }
158
178
  _onAPIRequestFinished(event) {
159
- var _event$body$length, _event$body;
160
179
  const harEntry = this._entryForRequest(event.requestEvent);
161
- if (!harEntry) return;
180
+ if (!harEntry)
181
+ return;
162
182
  harEntry.response.status = event.statusCode;
163
183
  harEntry.response.statusText = event.statusMessage;
164
184
  harEntry.response.httpVersion = event.httpVersion;
165
- harEntry.response.redirectURL = event.headers.location || '';
185
+ harEntry.response.redirectURL = event.headers.location || "";
166
186
  if (!this._options.omitServerIP) {
167
187
  harEntry.serverIPAddress = event.serverIPAddress;
168
188
  harEntry._serverPort = event.serverPort;
@@ -171,178 +191,199 @@ class HarTracer {
171
191
  harEntry.timings = event.timings;
172
192
  this._computeHarEntryTotalTime(harEntry);
173
193
  }
174
- if (!this._options.omitSecurityDetails) harEntry._securityDetails = event.securityDetails;
194
+ if (!this._options.omitSecurityDetails)
195
+ harEntry._securityDetails = event.securityDetails;
175
196
  for (let i = 0; i < event.rawHeaders.length; i += 2) {
176
197
  harEntry.response.headers.push({
177
198
  name: event.rawHeaders[i],
178
199
  value: event.rawHeaders[i + 1]
179
200
  });
180
201
  }
181
- harEntry.response.cookies = this._options.omitCookies ? [] : event.cookies.map(c => {
202
+ harEntry.response.cookies = this._options.omitCookies ? [] : event.cookies.map((c) => {
182
203
  return {
183
204
  ...c,
184
- expires: c.expires === -1 ? undefined : safeDateToISOString(c.expires)
205
+ expires: c.expires === -1 ? void 0 : safeDateToISOString(c.expires)
185
206
  };
186
207
  });
187
208
  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);
209
+ const contentType = event.headers["content-type"];
210
+ if (contentType)
211
+ content.mimeType = contentType;
212
+ this._storeResponseContent(event.body, content, "other");
213
+ if (!this._options.omitSizes)
214
+ harEntry.response.bodySize = event.body?.length ?? 0;
215
+ if (this._started)
216
+ this._delegate.onEntryFinished(harEntry);
193
217
  }
194
218
  _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;
219
+ if (!this._shouldIncludeEntryWithUrl(request.url()))
220
+ return;
221
+ const page = request.frame()?._page;
222
+ if (this._page && page !== this._page)
223
+ return;
199
224
  const url = network.parseURL(request.url());
200
- if (!url) return;
225
+ if (!url)
226
+ return;
201
227
  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;
228
+ const harEntry = createHarEntry(request.method(), url, request.frame()?.guid, this._options);
229
+ if (pageEntry)
230
+ harEntry.pageref = pageEntry.id;
204
231
  this._recordRequestHeadersAndCookies(harEntry, request.headers());
205
232
  harEntry.request.postData = this._postDataForRequest(request, this._options.content);
206
- if (!this._options.omitSizes) harEntry.request.bodySize = request.bodySize();
233
+ if (!this._options.omitSizes)
234
+ harEntry.request.bodySize = request.bodySize();
207
235
  if (request.redirectedFrom()) {
208
236
  const fromEntry = this._entryForRequest(request.redirectedFrom());
209
- if (fromEntry) fromEntry.response.redirectURL = request.url();
237
+ if (fromEntry)
238
+ fromEntry.response.redirectURL = request.url();
210
239
  }
211
240
  request[this._entrySymbol] = harEntry;
212
- (0, _utils.assert)(this._started);
241
+ (0, import_utils.assert)(this._started);
213
242
  this._delegate.onEntryStarted(harEntry);
214
243
  }
215
244
  _recordRequestHeadersAndCookies(harEntry, headers) {
216
245
  if (!this._options.omitCookies) {
217
246
  harEntry.request.cookies = [];
218
- for (const header of headers.filter(header => header.name.toLowerCase() === 'cookie')) harEntry.request.cookies.push(...header.value.split(';').map(parseCookie));
247
+ for (const header of headers.filter((header2) => header2.name.toLowerCase() === "cookie"))
248
+ harEntry.request.cookies.push(...header.value.split(";").map(parseCookie));
219
249
  }
220
250
  harEntry.request.headers = headers;
221
251
  }
222
252
  _recordRequestOverrides(harEntry, request) {
223
- if (!request._hasOverrides() || !this._options.recordRequestOverrides) return;
253
+ if (!request._hasOverrides() || !this._options.recordRequestOverrides)
254
+ return;
224
255
  harEntry.request.method = request.method();
225
256
  harEntry.request.url = request.url();
226
257
  harEntry.request.postData = this._postDataForRequest(request, this._options.content);
227
258
  this._recordRequestHeadersAndCookies(harEntry, request.headers());
228
259
  }
229
260
  async _onRequestFinished(request, response) {
230
- var _request$frame3;
231
- if (!response) return;
261
+ if (!response)
262
+ return;
232
263
  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.
264
+ if (!harEntry)
265
+ return;
266
+ const page = request.frame()?._page;
238
267
  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;
268
+ this._addBarrier(page || request.serviceWorker(), response.serverAddr().then((server) => {
269
+ if (server?.ipAddress)
270
+ harEntry.serverIPAddress = server.ipAddress;
271
+ if (server?.port)
272
+ harEntry._serverPort = server.port;
242
273
  }));
243
274
  }
244
275
  if (!this._options.omitSecurityDetails) {
245
- this._addBarrier(page || request.serviceWorker(), response.securityDetails().then(details => {
246
- if (details) harEntry._securityDetails = details;
276
+ this._addBarrier(page || request.serviceWorker(), response.securityDetails().then((details) => {
277
+ if (details)
278
+ harEntry._securityDetails = details;
247
279
  }));
248
280
  }
249
281
  const httpVersion = response.httpVersion();
250
282
  harEntry.request.httpVersion = httpVersion;
251
283
  harEntry.response.httpVersion = httpVersion;
252
- const compressionCalculationBarrier = this._options.omitSizes ? undefined : {
284
+ const compressionCalculationBarrier = this._options.omitSizes ? void 0 : {
253
285
  _encodedBodySize: -1,
254
286
  _decodedBodySize: -1,
255
- barrier: new _manualPromise.ManualPromise(),
256
- _check: function () {
287
+ barrier: new import_manualPromise.ManualPromise(),
288
+ _check: function() {
257
289
  if (this._encodedBodySize !== -1 && this._decodedBodySize !== -1) {
258
290
  harEntry.response.content.compression = Math.max(0, this._decodedBodySize - this._encodedBodySize);
259
291
  this.barrier.resolve();
260
292
  }
261
293
  },
262
- setEncodedBodySize: function (encodedBodySize) {
294
+ setEncodedBodySize: function(encodedBodySize) {
263
295
  this._encodedBodySize = encodedBodySize;
264
296
  this._check();
265
297
  },
266
- setDecodedBodySize: function (decodedBodySize) {
298
+ setDecodedBodySize: function(decodedBodySize) {
267
299
  this._decodedBodySize = decodedBodySize;
268
300
  this._check();
269
301
  }
270
302
  };
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);
303
+ if (compressionCalculationBarrier)
304
+ this._addBarrier(page || request.serviceWorker(), compressionCalculationBarrier.barrier);
305
+ const promise = response.body().then((buffer) => {
306
+ if (this._options.omitScripts && request.resourceType() === "script") {
307
+ compressionCalculationBarrier?.setDecodedBodySize(0);
275
308
  return;
276
309
  }
277
310
  const content = harEntry.response.content;
278
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setDecodedBodySize(buffer.length);
311
+ compressionCalculationBarrier?.setDecodedBodySize(buffer.length);
279
312
  this._storeResponseContent(buffer, content, request.resourceType());
280
313
  }).catch(() => {
281
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setDecodedBodySize(0);
314
+ compressionCalculationBarrier?.setDecodedBodySize(0);
282
315
  }).then(() => {
283
- if (this._started) this._delegate.onEntryFinished(harEntry);
316
+ if (this._started)
317
+ this._delegate.onEntryFinished(harEntry);
284
318
  });
285
319
  this._addBarrier(page || request.serviceWorker(), promise);
286
-
287
- // Response end timing is only available after the response event was received.
288
320
  const timing = response.timing();
289
- harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? _helper.helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;
321
+ harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? import_helper.helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;
290
322
  this._computeHarEntryTotalTime(harEntry);
291
323
  if (!this._options.omitSizes) {
292
- this._addBarrier(page || request.serviceWorker(), response.sizes().then(sizes => {
324
+ this._addBarrier(page || request.serviceWorker(), response.sizes().then((sizes) => {
293
325
  harEntry.response.bodySize = sizes.responseBodySize;
294
326
  harEntry.response.headersSize = sizes.responseHeadersSize;
295
327
  harEntry.response._transferSize = sizes.transferSize;
296
328
  harEntry.request.headersSize = sizes.requestHeadersSize;
297
- compressionCalculationBarrier === null || compressionCalculationBarrier === void 0 || compressionCalculationBarrier.setEncodedBodySize(sizes.responseBodySize);
329
+ compressionCalculationBarrier?.setEncodedBodySize(sizes.responseBodySize);
298
330
  }));
299
331
  }
300
332
  }
301
333
  async _onRequestFailed(request) {
302
334
  const harEntry = this._entryForRequest(request);
303
- if (!harEntry) return;
304
- if (request._failureText !== null) harEntry.response._failureText = request._failureText;
335
+ if (!harEntry)
336
+ return;
337
+ if (request._failureText !== null)
338
+ harEntry.response._failureText = request._failureText;
305
339
  this._recordRequestOverrides(harEntry, request);
306
- if (this._started) this._delegate.onEntryFinished(harEntry);
340
+ if (this._started)
341
+ this._delegate.onEntryFinished(harEntry);
307
342
  }
308
343
  _onRequestAborted(request) {
309
344
  const harEntry = this._entryForRequest(request);
310
- if (harEntry) harEntry._wasAborted = true;
345
+ if (harEntry)
346
+ harEntry._wasAborted = true;
311
347
  }
312
348
  _onRequestFulfilled(request) {
313
349
  const harEntry = this._entryForRequest(request);
314
- if (harEntry) harEntry._wasFulfilled = true;
350
+ if (harEntry)
351
+ harEntry._wasFulfilled = true;
315
352
  }
316
353
  _onRequestContinued(request) {
317
354
  const harEntry = this._entryForRequest(request);
318
- if (harEntry) harEntry._wasContinued = true;
355
+ if (harEntry)
356
+ harEntry._wasContinued = true;
319
357
  }
320
358
  _storeResponseContent(buffer, content, resourceType) {
321
359
  if (!buffer) {
322
360
  content.size = 0;
323
361
  return;
324
362
  }
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') {
363
+ if (!this._options.omitSizes)
364
+ content.size = buffer.length;
365
+ if (this._options.content === "embed") {
366
+ if ((0, import_utils2.isTextualMimeType)(content.mimeType) && resourceType !== "font") {
330
367
  content.text = buffer.toString();
331
368
  } else {
332
- content.text = buffer.toString('base64');
333
- content.encoding = 'base64';
369
+ content.text = buffer.toString("base64");
370
+ content.encoding = "base64";
334
371
  }
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);
372
+ } else if (this._options.content === "attach") {
373
+ const sha1 = (0, import_utils.calculateSha1)(buffer) + "." + (import_utilsBundle.mime.getExtension(content.mimeType) || "dat");
374
+ if (this._options.includeTraceInfo)
375
+ content._sha1 = sha1;
376
+ else
377
+ content._file = sha1;
378
+ if (this._started)
379
+ this._delegate.onContentBlob(sha1, buffer);
339
380
  }
340
381
  }
341
382
  _onResponse(response) {
342
- var _response$frame;
343
383
  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;
384
+ if (!harEntry)
385
+ return;
386
+ const page = response.frame()?._page;
346
387
  const pageEntry = this._createPageEntryIfNeeded(page);
347
388
  const request = response.request();
348
389
  harEntry.response = {
@@ -354,21 +395,22 @@ class HarTracer {
354
395
  headers: [],
355
396
  content: {
356
397
  size: -1,
357
- mimeType: 'x-unknown'
398
+ mimeType: "x-unknown"
358
399
  },
359
400
  headersSize: -1,
360
401
  bodySize: -1,
361
- redirectURL: '',
362
- _transferSize: this._options.omitSizes ? undefined : -1
402
+ redirectURL: "",
403
+ _transferSize: this._options.omitSizes ? void 0 : -1
363
404
  };
364
405
  if (!this._options.omitTiming) {
365
406
  const startDateTime = pageEntry ? pageEntry[startedDateSymbol].valueOf() : 0;
366
407
  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;
408
+ if (pageEntry && startDateTime > timing.startTime)
409
+ pageEntry.startedDateTime = new Date(timing.startTime).toISOString();
410
+ const dns = timing.domainLookupEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.domainLookupEnd - timing.domainLookupStart) : -1;
411
+ const connect = timing.connectEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.connectEnd - timing.connectStart) : -1;
412
+ const ssl = timing.connectEnd !== -1 ? import_helper.helper.millisToRoundishMillis(timing.connectEnd - timing.secureConnectionStart) : -1;
413
+ const wait = timing.responseStart !== -1 ? import_helper.helper.millisToRoundishMillis(timing.responseStart - timing.requestStart) : -1;
372
414
  const receive = -1;
373
415
  harEntry.timings = {
374
416
  dns,
@@ -381,53 +423,64 @@ class HarTracer {
381
423
  this._computeHarEntryTotalTime(harEntry);
382
424
  }
383
425
  this._recordRequestOverrides(harEntry, request);
384
- this._addBarrier(page || request.serviceWorker(), request.rawRequestHeaders().then(headers => {
426
+ this._addBarrier(page || request.serviceWorker(), request.rawRequestHeaders().then((headers) => {
385
427
  this._recordRequestHeadersAndCookies(harEntry, headers);
386
428
  }));
387
- // Record available headers including redirect location in case the tracing is stopped before
388
- // response extra info is received (in Chromium).
389
429
  this._recordResponseHeaders(harEntry, response.headers());
390
- this._addBarrier(page || request.serviceWorker(), response.rawResponseHeaders().then(headers => {
430
+ this._addBarrier(page || request.serviceWorker(), response.rawResponseHeaders().then((headers) => {
391
431
  this._recordResponseHeaders(harEntry, headers);
392
432
  }));
393
433
  }
394
434
  _recordResponseHeaders(harEntry, headers) {
395
435
  if (!this._options.omitCookies) {
396
- harEntry.response.cookies = headers.filter(header => header.name.toLowerCase() === 'set-cookie').map(header => parseCookie(header.value));
436
+ harEntry.response.cookies = headers.filter((header) => header.name.toLowerCase() === "set-cookie").map((header) => parseCookie(header.value));
397
437
  }
398
438
  harEntry.response.headers = headers;
399
- const contentType = headers.find(header => header.name.toLowerCase() === 'content-type');
400
- if (contentType) harEntry.response.content.mimeType = contentType.value;
439
+ const contentType = headers.find((header) => header.name.toLowerCase() === "content-type");
440
+ if (contentType)
441
+ harEntry.response.content.mimeType = contentType.value;
401
442
  }
402
443
  _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);
444
+ harEntry.time = [
445
+ harEntry.timings.dns,
446
+ harEntry.timings.connect,
447
+ harEntry.timings.ssl,
448
+ harEntry.timings.wait,
449
+ harEntry.timings.receive
450
+ ].reduce((pre, cur) => (cur || -1) > 0 ? cur + pre : pre, 0);
404
451
  }
405
452
  async flush() {
406
453
  await Promise.all(this._barrierPromises);
407
454
  }
408
455
  stop() {
409
456
  this._started = false;
410
- _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
457
+ import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
411
458
  this._barrierPromises.clear();
412
- const context = this._context instanceof _browserContext.BrowserContext ? this._context : undefined;
459
+ const context = this._context instanceof import_browserContext.BrowserContext ? this._context : void 0;
413
460
  const log = {
414
- version: '1.2',
461
+ version: "1.2",
415
462
  creator: {
416
- name: 'Playwright',
417
- version: (0, _utils.getPlaywrightVersion)()
463
+ name: "Playwright",
464
+ version: (0, import_utils2.getPlaywrightVersion)()
418
465
  },
419
466
  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()) || ''
467
+ name: context?._browser.options.name || "",
468
+ version: context?._browser.version() || ""
422
469
  },
423
- pages: this._pageEntries.size ? Array.from(this._pageEntries.values()) : undefined,
470
+ pages: this._pageEntries.size ? Array.from(this._pageEntries.values()) : void 0,
424
471
  entries: []
425
472
  };
426
473
  if (!this._options.omitTiming) {
427
474
  for (const pageEntry of log.pages || []) {
428
475
  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;
476
+ if (typeof pageEntry.pageTimings.onContentLoad === "number" && pageEntry.pageTimings.onContentLoad >= 0)
477
+ pageEntry.pageTimings.onContentLoad -= startDateTime;
478
+ else
479
+ pageEntry.pageTimings.onContentLoad = -1;
480
+ if (typeof pageEntry.pageTimings.onLoad === "number" && pageEntry.pageTimings.onLoad >= 0)
481
+ pageEntry.pageTimings.onLoad -= startDateTime;
482
+ else
483
+ pageEntry.pageTimings.onLoad = -1;
431
484
  }
432
485
  }
433
486
  this._pageEntries.clear();
@@ -435,68 +488,68 @@ class HarTracer {
435
488
  }
436
489
  _postDataForRequest(request, content) {
437
490
  const postData = request.postDataBuffer();
438
- if (!postData) return;
439
- const contentType = request.headerValue('content-type');
491
+ if (!postData)
492
+ return;
493
+ const contentType = request.headerValue("content-type");
440
494
  return this._postDataForBuffer(postData, contentType, content);
441
495
  }
442
496
  _postDataForBuffer(postData, contentType, content) {
443
- if (!postData) return;
444
- contentType !== null && contentType !== void 0 ? contentType : contentType = 'application/octet-stream';
497
+ if (!postData)
498
+ return;
499
+ contentType ??= "application/octet-stream";
445
500
  const result = {
446
501
  mimeType: contentType,
447
- text: '',
502
+ text: "",
448
503
  params: []
449
504
  };
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;
505
+ if (content === "embed" && contentType !== "application/octet-stream")
506
+ result.text = postData.toString();
507
+ if (content === "attach") {
508
+ const sha1 = (0, import_utils.calculateSha1)(postData) + "." + (import_utilsBundle.mime.getExtension(contentType) || "dat");
509
+ if (this._options.includeTraceInfo)
510
+ result._sha1 = sha1;
511
+ else
512
+ result._file = sha1;
454
513
  this._delegate.onContentBlob(sha1, postData);
455
514
  }
456
- if (contentType === 'application/x-www-form-urlencoded') {
515
+ if (contentType === "application/x-www-form-urlencoded") {
457
516
  const parsed = new URLSearchParams(postData.toString());
458
- for (const [name, value] of parsed.entries()) result.params.push({
459
- name,
460
- value
461
- });
517
+ for (const [name, value] of parsed.entries())
518
+ result.params.push({ name, value });
462
519
  }
463
520
  return result;
464
521
  }
465
522
  }
466
- exports.HarTracer = HarTracer;
467
523
  function createHarEntry(method, url, frameref, options) {
468
524
  const harEntry = {
469
- _frameref: options.includeTraceInfo ? frameref : undefined,
470
- _monotonicTime: options.includeTraceInfo ? (0, _utils.monotonicTime)() : undefined,
471
- startedDateTime: new Date().toISOString(),
525
+ _frameref: options.includeTraceInfo ? frameref : void 0,
526
+ _monotonicTime: options.includeTraceInfo ? (0, import_utils.monotonicTime)() : void 0,
527
+ startedDateTime: (/* @__PURE__ */ new Date()).toISOString(),
472
528
  time: -1,
473
529
  request: {
474
- method: method,
530
+ method,
475
531
  url: url.toString(),
476
532
  httpVersion: FALLBACK_HTTP_VERSION,
477
533
  cookies: [],
478
534
  headers: [],
479
- queryString: [...url.searchParams].map(e => ({
480
- name: e[0],
481
- value: e[1]
482
- })),
535
+ queryString: [...url.searchParams].map((e) => ({ name: e[0], value: e[1] })),
483
536
  headersSize: -1,
484
537
  bodySize: -1
485
538
  },
486
539
  response: {
487
540
  status: -1,
488
- statusText: '',
541
+ statusText: "",
489
542
  httpVersion: FALLBACK_HTTP_VERSION,
490
543
  cookies: [],
491
544
  headers: [],
492
545
  content: {
493
546
  size: -1,
494
- mimeType: 'x-unknown'
547
+ mimeType: "x-unknown"
495
548
  },
496
549
  headersSize: -1,
497
550
  bodySize: -1,
498
- redirectURL: '',
499
- _transferSize: options.omitSizes ? undefined : -1
551
+ redirectURL: "",
552
+ _transferSize: options.omitSizes ? void 0 : -1
500
553
  },
501
554
  cache: {},
502
555
  timings: {
@@ -509,33 +562,45 @@ function createHarEntry(method, url, frameref, options) {
509
562
  }
510
563
  function parseCookie(c) {
511
564
  const cookie = {
512
- name: '',
513
- value: ''
565
+ name: "",
566
+ value: ""
514
567
  };
515
568
  let first = true;
516
569
  for (const pair of c.split(/; */)) {
517
- const indexOfEquals = pair.indexOf('=');
570
+ const indexOfEquals = pair.indexOf("=");
518
571
  const name = indexOfEquals !== -1 ? pair.substr(0, indexOfEquals).trim() : pair.trim();
519
- const value = indexOfEquals !== -1 ? pair.substr(indexOfEquals + 1, pair.length).trim() : '';
572
+ const value = indexOfEquals !== -1 ? pair.substr(indexOfEquals + 1, pair.length).trim() : "";
520
573
  if (first) {
521
574
  first = false;
522
575
  cookie.name = name;
523
576
  cookie.value = value;
524
577
  continue;
525
578
  }
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;
579
+ if (name === "Domain")
580
+ cookie.domain = value;
581
+ if (name === "Expires")
582
+ cookie.expires = safeDateToISOString(value);
583
+ if (name === "HttpOnly")
584
+ cookie.httpOnly = true;
585
+ if (name === "Max-Age")
586
+ cookie.expires = safeDateToISOString(Date.now() + +value * 1e3);
587
+ if (name === "Path")
588
+ cookie.path = value;
589
+ if (name === "SameSite")
590
+ cookie.sameSite = value;
591
+ if (name === "Secure")
592
+ cookie.secure = true;
533
593
  }
534
594
  return cookie;
535
595
  }
536
596
  function safeDateToISOString(value) {
537
597
  try {
538
598
  return new Date(value).toISOString();
539
- } catch (e) {}
599
+ } catch (e) {
600
+ }
540
601
  }
541
- const startedDateSymbol = Symbol('startedDate');
602
+ const startedDateSymbol = Symbol("startedDate");
603
+ // Annotate the CommonJS export names for ESM import in node:
604
+ 0 && (module.exports = {
605
+ HarTracer
606
+ });