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,127 +1,128 @@
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 browserType_exports = {};
30
+ __export(browserType_exports, {
31
+ BrowserReadyState: () => BrowserReadyState,
32
+ BrowserType: () => BrowserType,
33
+ kNoXServerRunningError: () => kNoXServerRunningError
5
34
  });
6
- exports.kNoXServerRunningError = exports.BrowserType = exports.BrowserReadyState = void 0;
7
- var _fs = _interopRequireDefault(require("fs"));
8
- var _os = _interopRequireDefault(require("os"));
9
- var _path = _interopRequireDefault(require("path"));
10
- var _browserContext = require("./browserContext");
11
- var _timeoutSettings = require("./timeoutSettings");
12
- var _debug = require("./utils/debug");
13
- var _assert = require("../utils/isomorphic/assert");
14
- var _manualPromise = require("../utils/isomorphic/manualPromise");
15
- var _fileUtils = require("./utils/fileUtils");
16
- var _helper = require("./helper");
17
- var _instrumentation = require("./instrumentation");
18
- var _pipeTransport = require("./pipeTransport");
19
- var _processLauncher = require("./utils/processLauncher");
20
- var _progress = require("./progress");
21
- var _protocolError = require("./protocolError");
22
- var _registry = require("./registry");
23
- var _socksClientCertificatesInterceptor = require("./socksClientCertificatesInterceptor");
24
- var _transport = require("./transport");
25
- var _debugLogger = require("./utils/debugLogger");
26
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
- /**
28
- * Copyright (c) Microsoft Corporation.
29
- *
30
- * Licensed under the Apache License, Version 2.0 (the "License");
31
- * you may not use this file except in compliance with the License.
32
- * You may obtain a copy of the License at
33
- *
34
- * http://www.apache.org/licenses/LICENSE-2.0
35
- *
36
- * Unless required by applicable law or agreed to in writing, software
37
- * distributed under the License is distributed on an "AS IS" BASIS,
38
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39
- * See the License for the specific language governing permissions and
40
- * limitations under the License.
41
- */
42
-
43
- const kNoXServerRunningError = exports.kNoXServerRunningError = 'Looks like you launched a headed browser without having a XServer running.\n' + 'Set either \'headless: true\' or use \'xvfb-run <your-playwright-app>\' before running Playwright.\n\n<3 Playwright Team';
35
+ module.exports = __toCommonJS(browserType_exports);
36
+ var import_fs = __toESM(require("fs"));
37
+ var import_os = __toESM(require("os"));
38
+ var import_path = __toESM(require("path"));
39
+ var import_browserContext = require("./browserContext");
40
+ var import_timeoutSettings = require("./timeoutSettings");
41
+ var import_debug = require("./utils/debug");
42
+ var import_assert = require("../utils/isomorphic/assert");
43
+ var import_manualPromise = require("../utils/isomorphic/manualPromise");
44
+ var import_fileUtils = require("./utils/fileUtils");
45
+ var import_helper = require("./helper");
46
+ var import_instrumentation = require("./instrumentation");
47
+ var import_pipeTransport = require("./pipeTransport");
48
+ var import_processLauncher = require("./utils/processLauncher");
49
+ var import_progress = require("./progress");
50
+ var import_protocolError = require("./protocolError");
51
+ var import_registry = require("./registry");
52
+ var import_socksClientCertificatesInterceptor = require("./socksClientCertificatesInterceptor");
53
+ var import_transport = require("./transport");
54
+ var import_debugLogger = require("./utils/debugLogger");
55
+ const kNoXServerRunningError = "Looks like you launched a headed browser without having a XServer running.\nSet either 'headless: true' or use 'xvfb-run <your-playwright-app>' before running Playwright.\n\n<3 Playwright Team";
44
56
  class BrowserReadyState {
45
57
  constructor() {
46
- this._wsEndpoint = new _manualPromise.ManualPromise();
58
+ this._wsEndpoint = new import_manualPromise.ManualPromise();
47
59
  }
48
60
  onBrowserExit() {
49
- // Unblock launch when browser prematurely exits.
50
- this._wsEndpoint.resolve(undefined);
61
+ this._wsEndpoint.resolve(void 0);
51
62
  }
52
63
  async waitUntilReady() {
53
64
  const wsEndpoint = await this._wsEndpoint;
54
- return {
55
- wsEndpoint
56
- };
65
+ return { wsEndpoint };
57
66
  }
58
67
  }
59
- exports.BrowserReadyState = BrowserReadyState;
60
- class BrowserType extends _instrumentation.SdkObject {
68
+ class BrowserType extends import_instrumentation.SdkObject {
61
69
  constructor(parent, browserName) {
62
- super(parent, 'browser-type');
63
- this._name = void 0;
70
+ super(parent, "browser-type");
64
71
  this._useBidi = false;
65
72
  this.attribution.browserType = this;
66
73
  this._name = browserName;
67
74
  }
68
75
  executablePath() {
69
- return _registry.registry.findExecutable(this._name).executablePath(this.attribution.playwright.options.sdkLanguage) || '';
76
+ return import_registry.registry.findExecutable(this._name).executablePath(this.attribution.playwright.options.sdkLanguage) || "";
70
77
  }
71
78
  name() {
72
79
  return this._name;
73
80
  }
74
81
  async launch(metadata, options, protocolLogger) {
75
82
  options = this._validateLaunchOptions(options);
76
- if (this._useBidi) options.useWebSocket = true;
77
- const controller = new _progress.ProgressController(metadata, this);
78
- controller.setLogName('browser');
79
- const browser = await controller.run(progress => {
83
+ if (this._useBidi)
84
+ options.useWebSocket = true;
85
+ const controller = new import_progress.ProgressController(metadata, this);
86
+ controller.setLogName("browser");
87
+ const browser = await controller.run((progress) => {
80
88
  const seleniumHubUrl = options.__testHookSeleniumRemoteURL || process.env.SELENIUM_REMOTE_URL;
81
- if (seleniumHubUrl) return this._launchWithSeleniumHub(progress, seleniumHubUrl, options);
82
- return this._innerLaunchWithRetries(progress, options, undefined, _helper.helper.debugProtocolLogger(protocolLogger)).catch(e => {
89
+ if (seleniumHubUrl)
90
+ return this._launchWithSeleniumHub(progress, seleniumHubUrl, options);
91
+ return this._innerLaunchWithRetries(progress, options, void 0, import_helper.helper.debugProtocolLogger(protocolLogger)).catch((e) => {
83
92
  throw this._rewriteStartupLog(e);
84
93
  });
85
- }, _timeoutSettings.TimeoutSettings.launchTimeout(options));
94
+ }, import_timeoutSettings.TimeoutSettings.launchTimeout(options));
86
95
  return browser;
87
96
  }
88
97
  async launchPersistentContext(metadata, userDataDir, options) {
89
98
  const launchOptions = this._validateLaunchOptions(options);
90
- if (this._useBidi) launchOptions.useWebSocket = true;
91
- const controller = new _progress.ProgressController(metadata, this);
92
- controller.setLogName('browser');
93
- const browser = await controller.run(async progress => {
94
- var _options$clientCertif;
95
- // Note: Any initial TLS requests will fail since we rely on the Page/Frames initialize which sets ignoreHTTPSErrors.
99
+ if (this._useBidi)
100
+ launchOptions.useWebSocket = true;
101
+ const controller = new import_progress.ProgressController(metadata, this);
102
+ controller.setLogName("browser");
103
+ const browser = await controller.run(async (progress) => {
96
104
  let clientCertificatesProxy;
97
- if ((_options$clientCertif = options.clientCertificates) !== null && _options$clientCertif !== void 0 && _options$clientCertif.length) {
98
- var _clientCertificatesPr;
99
- clientCertificatesProxy = new _socksClientCertificatesInterceptor.ClientCertificatesProxy(options);
100
- launchOptions.proxyOverride = await ((_clientCertificatesPr = clientCertificatesProxy) === null || _clientCertificatesPr === void 0 ? void 0 : _clientCertificatesPr.listen());
101
- options = {
102
- ...options
103
- };
105
+ if (options.clientCertificates?.length) {
106
+ clientCertificatesProxy = new import_socksClientCertificatesInterceptor.ClientCertificatesProxy(options);
107
+ launchOptions.proxyOverride = await clientCertificatesProxy?.listen();
108
+ options = { ...options };
104
109
  options.internalIgnoreHTTPSErrors = true;
105
110
  }
106
- progress.cleanupWhenAborted(() => {
107
- var _clientCertificatesPr2;
108
- return (_clientCertificatesPr2 = clientCertificatesProxy) === null || _clientCertificatesPr2 === void 0 ? void 0 : _clientCertificatesPr2.close();
109
- });
110
- const browser = await this._innerLaunchWithRetries(progress, launchOptions, options, _helper.helper.debugProtocolLogger(), userDataDir).catch(e => {
111
+ progress.cleanupWhenAborted(() => clientCertificatesProxy?.close());
112
+ const browser2 = await this._innerLaunchWithRetries(progress, launchOptions, options, import_helper.helper.debugProtocolLogger(), userDataDir).catch((e) => {
111
113
  throw this._rewriteStartupLog(e);
112
114
  });
113
- browser._defaultContext._clientCertificatesProxy = clientCertificatesProxy;
114
- return browser;
115
- }, _timeoutSettings.TimeoutSettings.launchTimeout(launchOptions));
115
+ browser2._defaultContext._clientCertificatesProxy = clientCertificatesProxy;
116
+ return browser2;
117
+ }, import_timeoutSettings.TimeoutSettings.launchTimeout(launchOptions));
116
118
  return browser._defaultContext;
117
119
  }
118
120
  async _innerLaunchWithRetries(progress, options, persistent, protocolLogger, userDataDir) {
119
121
  try {
120
122
  return await this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);
121
123
  } catch (error) {
122
- // @see https://github.com/microsoft/playwright/issues/5214
123
- const errorMessage = typeof error === 'object' && typeof error.message === 'string' ? error.message : '';
124
- if (errorMessage.includes('Inconsistency detected by ld.so')) {
124
+ const errorMessage = typeof error === "object" && typeof error.message === "string" ? error.message : "";
125
+ if (errorMessage.includes("Inconsistency detected by ld.so")) {
125
126
  progress.log(`<restarting browser due to hitting race condition in glibc>`);
126
127
  return this._innerLaunch(progress, options, persistent, protocolLogger, userDataDir);
127
128
  }
@@ -129,18 +130,14 @@ class BrowserType extends _instrumentation.SdkObject {
129
130
  }
130
131
  }
131
132
  async _innerLaunch(progress, options, persistent, protocolLogger, maybeUserDataDir) {
132
- options.proxy = options.proxy ? (0, _browserContext.normalizeProxySettings)(options.proxy) : undefined;
133
- const browserLogsCollector = new _debugLogger.RecentLogsCollector();
134
- const {
135
- browserProcess,
136
- userDataDir,
137
- artifactsDir,
138
- transport
139
- } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, maybeUserDataDir);
140
- if (options.__testHookBeforeCreateBrowser) await options.__testHookBeforeCreateBrowser();
133
+ options.proxy = options.proxy ? (0, import_browserContext.normalizeProxySettings)(options.proxy) : void 0;
134
+ const browserLogsCollector = new import_debugLogger.RecentLogsCollector();
135
+ const { browserProcess, userDataDir, artifactsDir, transport } = await this._launchProcess(progress, options, !!persistent, browserLogsCollector, maybeUserDataDir);
136
+ if (options.__testHookBeforeCreateBrowser)
137
+ await options.__testHookBeforeCreateBrowser();
141
138
  const browserOptions = {
142
139
  name: this._name,
143
- isChromium: this._name === 'chromium',
140
+ isChromium: this._name === "chromium",
144
141
  channel: options.channel,
145
142
  slowMo: options.slowMo,
146
143
  persistent,
@@ -153,19 +150,19 @@ class BrowserType extends _instrumentation.SdkObject {
153
150
  proxy: options.proxy,
154
151
  protocolLogger,
155
152
  browserLogsCollector,
156
- wsEndpoint: options.useWebSocket ? transport.wsEndpoint : undefined,
153
+ wsEndpoint: options.useWebSocket ? transport.wsEndpoint : void 0,
157
154
  originalLaunchOptions: options
158
155
  };
159
- if (persistent) (0, _browserContext.validateBrowserContextOptions)(persistent, browserOptions);
156
+ if (persistent)
157
+ (0, import_browserContext.validateBrowserContextOptions)(persistent, browserOptions);
160
158
  copyTestHooks(options, browserOptions);
161
159
  const browser = await this.connectToTransport(transport, browserOptions);
162
160
  browser._userDataDirForTest = userDataDir;
163
- // We assume no control when using custom arguments, and do not prepare the default context in that case.
164
- if (persistent && !options.ignoreAllDefaultArgs) await browser._defaultContext._loadDefaultContext(progress);
161
+ if (persistent && !options.ignoreAllDefaultArgs)
162
+ await browser._defaultContext._loadDefaultContext(progress);
165
163
  return browser;
166
164
  }
167
165
  async _launchProcess(progress, options, isPersistent, browserLogsCollector, userDataDir) {
168
- var _await$readyState$wai;
169
166
  const {
170
167
  ignoreDefaultArgs,
171
168
  ignoreAllDefaultArgs,
@@ -175,165 +172,155 @@ class BrowserType extends _instrumentation.SdkObject {
175
172
  handleSIGTERM = true,
176
173
  handleSIGHUP = true
177
174
  } = options;
178
- const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env;
175
+ const env = options.env ? (0, import_processLauncher.envArrayToObject)(options.env) : process.env;
179
176
  await this._createArtifactDirs(options);
180
177
  const tempDirectories = [];
181
- const artifactsDir = await _fs.default.promises.mkdtemp(_path.default.join(_os.default.tmpdir(), 'playwright-artifacts-'));
178
+ const artifactsDir = await import_fs.default.promises.mkdtemp(import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-"));
182
179
  tempDirectories.push(artifactsDir);
183
180
  if (userDataDir) {
184
- (0, _assert.assert)(_path.default.isAbsolute(userDataDir), 'userDataDir must be an absolute path');
185
- // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here.
186
- if (!(await (0, _fileUtils.existsAsync)(userDataDir))) await _fs.default.promises.mkdir(userDataDir, {
187
- recursive: true,
188
- mode: 0o700
189
- });
181
+ (0, import_assert.assert)(import_path.default.isAbsolute(userDataDir), "userDataDir must be an absolute path");
182
+ if (!await (0, import_fileUtils.existsAsync)(userDataDir))
183
+ await import_fs.default.promises.mkdir(userDataDir, { recursive: true, mode: 448 });
190
184
  } else {
191
- userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(_os.default.tmpdir(), `playwright_${this._name}dev_profile-`));
185
+ userDataDir = await import_fs.default.promises.mkdtemp(import_path.default.join(import_os.default.tmpdir(), `playwright_${this._name}dev_profile-`));
192
186
  tempDirectories.push(userDataDir);
193
187
  }
194
188
  await this.prepareUserDataDir(options, userDataDir);
195
189
  const browserArguments = [];
196
- if (ignoreAllDefaultArgs) browserArguments.push(...args);else if (ignoreDefaultArgs) browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));else browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));
190
+ if (ignoreAllDefaultArgs)
191
+ browserArguments.push(...args);
192
+ else if (ignoreDefaultArgs)
193
+ browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter((arg) => ignoreDefaultArgs.indexOf(arg) === -1));
194
+ else
195
+ browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));
197
196
  let executable;
198
197
  if (executablePath) {
199
- if (!(await (0, _fileUtils.existsAsync)(executablePath))) throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);
198
+ if (!await (0, import_fileUtils.existsAsync)(executablePath))
199
+ throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);
200
200
  executable = executablePath;
201
201
  } else {
202
- const registryExecutable = _registry.registry.findExecutable(this.getExecutableName(options));
203
- if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
202
+ const registryExecutable = import_registry.registry.findExecutable(this.getExecutableName(options));
203
+ if (!registryExecutable || registryExecutable.browserName !== this._name)
204
+ throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
204
205
  executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);
205
- await _registry.registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
206
+ await import_registry.registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
206
207
  }
207
208
  const readyState = this.readyState(options);
208
- // Note: it is important to define these variables before launchProcess, so that we don't get
209
- // "Cannot access 'browserServer' before initialization" if something went wrong.
210
- let transport = undefined;
211
- let browserProcess = undefined;
212
- const {
213
- launchedProcess,
214
- gracefullyClose,
215
- kill
216
- } = await (0, _processLauncher.launchProcess)({
209
+ let transport = void 0;
210
+ let browserProcess = void 0;
211
+ const { launchedProcess, gracefullyClose, kill } = await (0, import_processLauncher.launchProcess)({
217
212
  command: executable,
218
213
  args: browserArguments,
219
214
  env: this.amendEnvironment(env, userDataDir, executable, browserArguments),
220
215
  handleSIGINT,
221
216
  handleSIGTERM,
222
217
  handleSIGHUP,
223
- log: message => {
224
- readyState === null || readyState === void 0 || readyState.onBrowserOutput(message);
218
+ log: (message) => {
219
+ readyState?.onBrowserOutput(message);
225
220
  progress.log(message);
226
221
  browserLogsCollector.log(message);
227
222
  },
228
- stdio: 'pipe',
223
+ stdio: "pipe",
229
224
  tempDirectories,
230
225
  attemptToGracefullyClose: async () => {
231
- if (options.__testHookGracefullyClose) await options.__testHookGracefullyClose();
232
- // We try to gracefully close to prevent crash reporting and core dumps.
233
- // Note that it's fine to reuse the pipe transport, since
234
- // our connection ignores kBrowserCloseMessageId.
226
+ if (options.__testHookGracefullyClose)
227
+ await options.__testHookGracefullyClose();
235
228
  this.attemptToGracefullyCloseBrowser(transport);
236
229
  },
237
230
  onExit: (exitCode, signal) => {
238
- // Unblock launch when browser prematurely exits.
239
- readyState === null || readyState === void 0 || readyState.onBrowserExit();
240
- if (browserProcess && browserProcess.onclose) browserProcess.onclose(exitCode, signal);
231
+ readyState?.onBrowserExit();
232
+ if (browserProcess && browserProcess.onclose)
233
+ browserProcess.onclose(exitCode, signal);
241
234
  }
242
235
  });
243
236
  async function closeOrKill(timeout) {
244
237
  let timer;
245
238
  try {
246
- await Promise.race([gracefullyClose(), new Promise((resolve, reject) => timer = setTimeout(reject, timeout))]);
239
+ await Promise.race([
240
+ gracefullyClose(),
241
+ new Promise((resolve, reject) => timer = setTimeout(reject, timeout))
242
+ ]);
247
243
  } catch (ignored) {
248
- await kill().catch(ignored => {}); // Make sure to await actual process exit.
244
+ await kill().catch((ignored2) => {
245
+ });
249
246
  } finally {
250
247
  clearTimeout(timer);
251
248
  }
252
249
  }
253
250
  browserProcess = {
254
- onclose: undefined,
251
+ onclose: void 0,
255
252
  process: launchedProcess,
256
- close: () => closeOrKill(options.__testHookBrowserCloseTimeout || _timeoutSettings.DEFAULT_TIMEOUT),
253
+ close: () => closeOrKill(options.__testHookBrowserCloseTimeout || import_timeoutSettings.DEFAULT_TIMEOUT),
257
254
  kill
258
255
  };
259
256
  progress.cleanupWhenAborted(() => closeOrKill(progress.timeUntilDeadline()));
260
- const wsEndpoint = (_await$readyState$wai = await (readyState === null || readyState === void 0 ? void 0 : readyState.waitUntilReady())) === null || _await$readyState$wai === void 0 ? void 0 : _await$readyState$wai.wsEndpoint;
257
+ const wsEndpoint = (await readyState?.waitUntilReady())?.wsEndpoint;
261
258
  if (options.useWebSocket) {
262
- transport = await _transport.WebSocketTransport.connect(progress, wsEndpoint);
259
+ transport = await import_transport.WebSocketTransport.connect(progress, wsEndpoint);
263
260
  } else {
264
261
  const stdio = launchedProcess.stdio;
265
- transport = new _pipeTransport.PipeTransport(stdio[3], stdio[4]);
262
+ transport = new import_pipeTransport.PipeTransport(stdio[3], stdio[4]);
266
263
  }
267
- return {
268
- browserProcess,
269
- artifactsDir,
270
- userDataDir,
271
- transport
272
- };
264
+ return { browserProcess, artifactsDir, userDataDir, transport };
273
265
  }
274
266
  async _createArtifactDirs(options) {
275
- if (options.downloadsPath) await _fs.default.promises.mkdir(options.downloadsPath, {
276
- recursive: true
277
- });
278
- if (options.tracesDir) await _fs.default.promises.mkdir(options.tracesDir, {
279
- recursive: true
280
- });
267
+ if (options.downloadsPath)
268
+ await import_fs.default.promises.mkdir(options.downloadsPath, { recursive: true });
269
+ if (options.tracesDir)
270
+ await import_fs.default.promises.mkdir(options.tracesDir, { recursive: true });
281
271
  }
282
- async connectOverCDP(metadata, endpointURL, options, timeout) {
283
- throw new Error('CDP connections are only supported by Chromium');
272
+ async connectOverCDP(metadata, endpointURL, options) {
273
+ throw new Error("CDP connections are only supported by Chromium");
284
274
  }
285
275
  async _launchWithSeleniumHub(progress, hubUrl, options) {
286
- throw new Error('Connecting to SELENIUM_REMOTE_URL is only supported by Chromium');
276
+ throw new Error("Connecting to SELENIUM_REMOTE_URL is only supported by Chromium");
287
277
  }
288
278
  _validateLaunchOptions(options) {
289
- const {
290
- devtools = false
291
- } = options;
292
- let {
293
- headless = !devtools,
294
- downloadsPath,
295
- proxy
296
- } = options;
297
- if ((0, _debug.debugMode)()) headless = false;
298
- if (downloadsPath && !_path.default.isAbsolute(downloadsPath)) downloadsPath = _path.default.join(process.cwd(), downloadsPath);
299
- if (this.attribution.playwright.options.socksProxyPort) proxy = {
300
- server: `socks5://127.0.0.1:${this.attribution.playwright.options.socksProxyPort}`
301
- };
302
- return {
303
- ...options,
304
- devtools,
305
- headless,
306
- downloadsPath,
307
- proxy
308
- };
279
+ const { devtools = false } = options;
280
+ let { headless = !devtools, downloadsPath, proxy } = options;
281
+ if ((0, import_debug.debugMode)())
282
+ headless = false;
283
+ if (downloadsPath && !import_path.default.isAbsolute(downloadsPath))
284
+ downloadsPath = import_path.default.join(process.cwd(), downloadsPath);
285
+ if (this.attribution.playwright.options.socksProxyPort)
286
+ proxy = { server: `socks5://127.0.0.1:${this.attribution.playwright.options.socksProxyPort}` };
287
+ return { ...options, devtools, headless, downloadsPath, proxy };
309
288
  }
310
289
  _createUserDataDirArgMisuseError(userDataDirArg) {
311
290
  switch (this.attribution.playwright.options.sdkLanguage) {
312
- case 'java':
291
+ case "java":
313
292
  return new Error(`Pass userDataDir parameter to 'BrowserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
314
- case 'python':
293
+ case "python":
315
294
  return new Error(`Pass user_data_dir parameter to 'browser_type.launch_persistent_context(user_data_dir, **kwargs)' instead of specifying '${userDataDirArg}' argument`);
316
- case 'csharp':
295
+ case "csharp":
317
296
  return new Error(`Pass userDataDir parameter to 'BrowserType.LaunchPersistentContextAsync(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
318
297
  default:
319
298
  return new Error(`Pass userDataDir parameter to 'browserType.launchPersistentContext(userDataDir, options)' instead of specifying '${userDataDirArg}' argument`);
320
299
  }
321
300
  }
322
301
  _rewriteStartupLog(error) {
323
- if (!(0, _protocolError.isProtocolError)(error)) return error;
302
+ if (!(0, import_protocolError.isProtocolError)(error))
303
+ return error;
324
304
  return this.doRewriteStartupLog(error);
325
305
  }
326
306
  readyState(options) {
327
- return undefined;
307
+ return void 0;
308
+ }
309
+ async prepareUserDataDir(options, userDataDir) {
328
310
  }
329
- async prepareUserDataDir(options, userDataDir) {}
330
311
  getExecutableName(options) {
331
312
  return options.channel || this._name;
332
313
  }
333
314
  }
334
- exports.BrowserType = BrowserType;
335
315
  function copyTestHooks(from, to) {
336
316
  for (const [key, value] of Object.entries(from)) {
337
- if (key.startsWith('__testHook')) to[key] = value;
317
+ if (key.startsWith("__testHook"))
318
+ to[key] = value;
338
319
  }
339
- }
320
+ }
321
+ // Annotate the CommonJS export names for ESM import in node:
322
+ 0 && (module.exports = {
323
+ BrowserReadyState,
324
+ BrowserType,
325
+ kNoXServerRunningError
326
+ });
@@ -1,35 +1,41 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var callLog_exports = {};
20
+ __export(callLog_exports, {
21
+ compressCallLog: () => compressCallLog,
22
+ findRepeatedSubsequencesForTest: () => findRepeatedSubsequencesForTest
5
23
  });
6
- exports.compressCallLog = compressCallLog;
7
- exports.findRepeatedSubsequencesForTest = void 0;
8
- /**
9
- * Copyright (c) Microsoft Corporation.
10
- *
11
- * Licensed under the Apache License, Version 2.0 (the 'License");
12
- * you may not use this file except in compliance with the License.
13
- * You may obtain a copy of the License at
14
- *
15
- * http://www.apache.org/licenses/LICENSE-2.0
16
- *
17
- * Unless required by applicable law or agreed to in writing, software
18
- * distributed under the License is distributed on an "AS IS" BASIS,
19
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
- * See the License for the specific language governing permissions and
21
- * limitations under the License.
22
- */
23
-
24
+ module.exports = __toCommonJS(callLog_exports);
24
25
  function compressCallLog(log) {
25
26
  const lines = [];
26
27
  for (const block of findRepeatedSubsequences(log)) {
27
28
  for (let i = 0; i < block.sequence.length; i++) {
28
29
  const line = block.sequence[i];
29
30
  const leadingWhitespace = line.match(/^\s*/);
30
- const whitespacePrefix = ' ' + (leadingWhitespace === null || leadingWhitespace === void 0 ? void 0 : leadingWhitespace[0]) || '';
31
- const countPrefix = `${block.count} × `;
32
- if (block.count > 1 && i === 0) lines.push(whitespacePrefix + countPrefix + line.trim());else if (block.count > 1) lines.push(whitespacePrefix + ' '.repeat(countPrefix.length - 2) + '- ' + line.trim());else lines.push(whitespacePrefix + '- ' + line.trim());
31
+ const whitespacePrefix = " " + leadingWhitespace?.[0] || "";
32
+ const countPrefix = `${block.count} \xD7 `;
33
+ if (block.count > 1 && i === 0)
34
+ lines.push(whitespacePrefix + countPrefix + line.trim());
35
+ else if (block.count > 1)
36
+ lines.push(whitespacePrefix + " ".repeat(countPrefix.length - 2) + "- " + line.trim());
37
+ else
38
+ lines.push(whitespacePrefix + "- " + line.trim());
33
39
  }
34
40
  }
35
41
  return lines;
@@ -39,41 +45,38 @@ function findRepeatedSubsequences(s) {
39
45
  const result = [];
40
46
  let i = 0;
41
47
  const arraysEqual = (a1, a2) => {
42
- if (a1.length !== a2.length) return false;
48
+ if (a1.length !== a2.length)
49
+ return false;
43
50
  for (let j = 0; j < a1.length; j++) {
44
- if (a1[j] !== a2[j]) return false;
51
+ if (a1[j] !== a2[j])
52
+ return false;
45
53
  }
46
54
  return true;
47
55
  };
48
56
  while (i < n) {
49
57
  let maxRepeatCount = 1;
50
- let maxRepeatSubstr = [s[i]]; // Initialize with the element at index i
58
+ let maxRepeatSubstr = [s[i]];
51
59
  let maxRepeatLength = 1;
52
-
53
- // Try substrings of length from 1 to the remaining length of the array
54
60
  for (let p = 1; p <= n - i; p++) {
55
- const substr = s.slice(i, i + p); // Extract substring as array
61
+ const substr = s.slice(i, i + p);
56
62
  let k = 1;
57
-
58
- // Count how many times the substring repeats consecutively
59
- while (i + p * k <= n && arraysEqual(s.slice(i + p * (k - 1), i + p * k), substr)) k += 1;
60
- k -= 1; // Adjust k since it increments one extra time in the loop
61
-
62
- // Update the maximal repeating substring if necessary
63
+ while (i + p * k <= n && arraysEqual(s.slice(i + p * (k - 1), i + p * k), substr))
64
+ k += 1;
65
+ k -= 1;
63
66
  if (k > 1 && k * p > maxRepeatCount * maxRepeatLength) {
64
67
  maxRepeatCount = k;
65
68
  maxRepeatSubstr = substr;
66
69
  maxRepeatLength = p;
67
70
  }
68
71
  }
69
-
70
- // Record the substring and its count
71
- result.push({
72
- sequence: maxRepeatSubstr,
73
- count: maxRepeatCount
74
- });
75
- i += maxRepeatLength * maxRepeatCount; // Move index forward
72
+ result.push({ sequence: maxRepeatSubstr, count: maxRepeatCount });
73
+ i += maxRepeatLength * maxRepeatCount;
76
74
  }
77
75
  return result;
78
76
  }
79
- const findRepeatedSubsequencesForTest = exports.findRepeatedSubsequencesForTest = findRepeatedSubsequences;
77
+ const findRepeatedSubsequencesForTest = findRepeatedSubsequences;
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ compressCallLog,
81
+ findRepeatedSubsequencesForTest
82
+ });