patchright-core 1.57.0 → 1.59.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 (307) hide show
  1. package/ThirdPartyNotices.txt +2688 -297
  2. package/browsers.json +23 -22
  3. package/lib/bootstrap.js +77 -0
  4. package/lib/cli/browserActions.js +308 -0
  5. package/lib/cli/driver.js +3 -2
  6. package/lib/cli/installActions.js +171 -0
  7. package/lib/cli/program.js +48 -413
  8. package/lib/client/android.js +4 -4
  9. package/lib/client/api.js +3 -0
  10. package/lib/client/browser.js +11 -5
  11. package/lib/client/browserContext.js +20 -23
  12. package/lib/client/browserType.js +23 -54
  13. package/lib/client/cdpSession.js +6 -2
  14. package/lib/client/channelOwner.js +1 -1
  15. package/lib/client/clientHelper.js +2 -1
  16. package/lib/client/clock.js +0 -1
  17. package/lib/client/{webSocket.js → connect.js} +57 -7
  18. package/lib/client/connection.js +8 -0
  19. package/lib/client/consoleMessage.js +3 -0
  20. package/lib/client/debugger.js +57 -0
  21. package/lib/client/dialog.js +8 -1
  22. package/lib/client/disposable.js +76 -0
  23. package/lib/client/electron.js +1 -0
  24. package/lib/client/elementHandle.js +1 -1
  25. package/lib/client/events.js +3 -0
  26. package/lib/client/fetch.js +2 -4
  27. package/lib/client/frame.js +9 -13
  28. package/lib/client/harRouter.js +13 -1
  29. package/lib/client/jsHandle.js +4 -8
  30. package/lib/client/locator.js +13 -36
  31. package/lib/client/network.js +14 -11
  32. package/lib/client/page.js +44 -50
  33. package/lib/client/screencast.js +88 -0
  34. package/lib/client/selectors.js +3 -1
  35. package/lib/client/tracing.js +11 -5
  36. package/lib/client/video.js +13 -20
  37. package/lib/client/worker.js +6 -6
  38. package/lib/generated/bindingsControllerSource.js +1 -1
  39. package/lib/generated/clockSource.js +1 -1
  40. package/lib/generated/injectedScriptSource.js +1 -1
  41. package/lib/generated/pollingRecorderSource.js +1 -1
  42. package/lib/generated/storageScriptSource.js +1 -1
  43. package/lib/generated/utilityScriptSource.js +1 -1
  44. package/lib/mcpBundle.js +78 -0
  45. package/lib/mcpBundleImpl.js +91 -0
  46. package/lib/protocol/serializers.js +5 -0
  47. package/lib/protocol/validator.js +228 -58
  48. package/lib/protocol/validatorPrimitives.js +1 -1
  49. package/lib/remote/playwrightConnection.js +10 -8
  50. package/lib/remote/playwrightPipeServer.js +100 -0
  51. package/lib/remote/playwrightServer.js +14 -10
  52. package/lib/remote/playwrightWebSocketServer.js +73 -0
  53. package/lib/remote/serverTransport.js +96 -0
  54. package/lib/server/android/android.js +2 -2
  55. package/lib/server/artifact.js +1 -1
  56. package/lib/server/bidi/bidiBrowser.js +80 -14
  57. package/lib/server/bidi/bidiChromium.js +23 -14
  58. package/lib/server/bidi/bidiConnection.js +1 -0
  59. package/lib/server/bidi/bidiDeserializer.js +116 -0
  60. package/lib/server/bidi/bidiExecutionContext.js +75 -29
  61. package/lib/server/bidi/bidiFirefox.js +6 -8
  62. package/lib/server/bidi/bidiNetworkManager.js +40 -12
  63. package/lib/server/bidi/bidiPage.js +67 -40
  64. package/lib/server/bidi/third_party/bidiProtocolCore.js +1 -0
  65. package/lib/server/bidi/third_party/firefoxPrefs.js +3 -1
  66. package/lib/server/browser.js +84 -21
  67. package/lib/server/browserContext.js +137 -77
  68. package/lib/server/browserType.js +26 -16
  69. package/lib/server/chromium/chromium.js +28 -31
  70. package/lib/server/chromium/chromiumSwitches.js +16 -4
  71. package/lib/server/chromium/crBrowser.js +40 -27
  72. package/lib/server/chromium/crConnection.js +0 -5
  73. package/lib/server/chromium/crDevTools.js +1 -2
  74. package/lib/server/chromium/crNetworkManager.js +54 -229
  75. package/lib/server/chromium/crPage.js +74 -260
  76. package/lib/server/chromium/crServiceWorker.js +7 -14
  77. package/lib/server/clock.js +33 -41
  78. package/lib/server/codegen/javascript.js +6 -29
  79. package/lib/server/console.js +5 -1
  80. package/lib/server/debugController.js +12 -6
  81. package/lib/server/debugger.js +40 -47
  82. package/lib/server/deviceDescriptorsSource.json +137 -137
  83. package/lib/server/dispatchers/browserContextDispatcher.js +30 -30
  84. package/lib/server/dispatchers/browserDispatcher.js +11 -5
  85. package/lib/server/dispatchers/browserTypeDispatcher.js +7 -0
  86. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -1
  87. package/lib/server/dispatchers/debuggerDispatcher.js +84 -0
  88. package/lib/server/dispatchers/dispatcher.js +7 -14
  89. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  90. package/lib/server/dispatchers/electronDispatcher.js +2 -1
  91. package/lib/server/dispatchers/frameDispatcher.js +7 -7
  92. package/lib/server/dispatchers/localUtilsDispatcher.js +37 -1
  93. package/lib/server/dispatchers/networkDispatchers.js +6 -5
  94. package/lib/server/dispatchers/pageDispatcher.js +101 -34
  95. package/lib/server/dispatchers/webSocketRouteDispatcher.js +4 -5
  96. package/lib/server/disposable.js +41 -0
  97. package/lib/server/dom.js +56 -29
  98. package/lib/server/download.js +3 -2
  99. package/lib/server/electron/electron.js +17 -9
  100. package/lib/server/firefox/ffBrowser.js +9 -29
  101. package/lib/server/firefox/ffConnection.js +0 -5
  102. package/lib/server/firefox/ffInput.js +21 -5
  103. package/lib/server/firefox/ffNetworkManager.js +4 -4
  104. package/lib/server/firefox/ffPage.js +27 -33
  105. package/lib/server/firefox/firefox.js +6 -8
  106. package/lib/server/frameSelectors.js +14 -169
  107. package/lib/server/frames.js +263 -551
  108. package/lib/server/har/harRecorder.js +2 -2
  109. package/lib/server/har/harTracer.js +5 -4
  110. package/lib/server/input.js +49 -4
  111. package/lib/server/instrumentation.js +8 -0
  112. package/lib/server/javascript.js +6 -22
  113. package/lib/server/launchApp.js +0 -1
  114. package/lib/server/localUtils.js +6 -6
  115. package/lib/server/network.js +59 -20
  116. package/lib/server/overlay.js +138 -0
  117. package/lib/server/page.js +179 -157
  118. package/lib/server/progress.js +32 -6
  119. package/lib/server/recorder/recorderApp.js +84 -104
  120. package/lib/server/recorder.js +76 -40
  121. package/lib/server/registry/browserFetcher.js +6 -4
  122. package/lib/server/registry/index.js +222 -226
  123. package/lib/server/registry/nativeDeps.js +1 -0
  124. package/lib/server/registry/oopDownloadBrowserMain.js +3 -0
  125. package/lib/server/screencast.js +137 -0
  126. package/lib/server/trace/recorder/snapshotter.js +2 -2
  127. package/lib/server/trace/recorder/snapshotterInjected.js +21 -1
  128. package/lib/server/trace/recorder/tracing.js +98 -47
  129. package/lib/server/trace/viewer/traceViewer.js +24 -21
  130. package/lib/server/usKeyboardLayout.js +7 -0
  131. package/lib/server/utils/comparators.js +1 -1
  132. package/lib/server/utils/disposable.js +32 -0
  133. package/lib/server/utils/eventsHelper.js +3 -1
  134. package/lib/server/utils/expectUtils.js +87 -2
  135. package/lib/server/utils/fileUtils.js +16 -2
  136. package/lib/server/utils/happyEyeballs.js +15 -12
  137. package/lib/server/utils/httpServer.js +10 -23
  138. package/lib/server/utils/network.js +39 -29
  139. package/lib/server/utils/processLauncher.js +8 -6
  140. package/lib/server/utils/zipFile.js +2 -2
  141. package/lib/server/videoRecorder.js +194 -0
  142. package/lib/server/webkit/webkit.js +4 -6
  143. package/lib/server/webkit/wkBrowser.js +1 -10
  144. package/lib/server/webkit/wkConnection.js +1 -6
  145. package/lib/server/webkit/wkInterceptableRequest.js +29 -1
  146. package/lib/server/webkit/wkPage.js +88 -57
  147. package/lib/server/webkit/wkWorkers.js +2 -1
  148. package/lib/serverRegistry.js +156 -0
  149. package/lib/tools/backend/browserBackend.js +79 -0
  150. package/lib/tools/backend/common.js +63 -0
  151. package/lib/tools/backend/config.js +41 -0
  152. package/lib/tools/backend/console.js +66 -0
  153. package/lib/tools/backend/context.js +296 -0
  154. package/lib/tools/backend/cookies.js +152 -0
  155. package/lib/tools/backend/devtools.js +69 -0
  156. package/lib/tools/backend/dialogs.js +59 -0
  157. package/lib/tools/backend/evaluate.js +64 -0
  158. package/lib/tools/backend/files.js +60 -0
  159. package/lib/tools/backend/form.js +64 -0
  160. package/lib/tools/backend/keyboard.js +155 -0
  161. package/lib/tools/backend/logFile.js +95 -0
  162. package/lib/tools/backend/mouse.js +168 -0
  163. package/lib/tools/backend/navigate.js +106 -0
  164. package/lib/tools/backend/network.js +135 -0
  165. package/lib/tools/backend/pdf.js +48 -0
  166. package/lib/tools/backend/response.js +305 -0
  167. package/lib/tools/backend/route.js +140 -0
  168. package/lib/tools/backend/runCode.js +77 -0
  169. package/lib/tools/backend/screenshot.js +88 -0
  170. package/lib/tools/backend/sessionLog.js +74 -0
  171. package/lib/tools/backend/snapshot.js +208 -0
  172. package/lib/tools/backend/storage.js +68 -0
  173. package/lib/tools/backend/tab.js +445 -0
  174. package/lib/tools/backend/tabs.js +67 -0
  175. package/lib/tools/backend/tool.js +47 -0
  176. package/lib/tools/backend/tools.js +102 -0
  177. package/lib/tools/backend/tracing.js +78 -0
  178. package/lib/tools/backend/utils.js +83 -0
  179. package/lib/tools/backend/verify.js +151 -0
  180. package/lib/tools/backend/video.js +98 -0
  181. package/lib/tools/backend/wait.js +63 -0
  182. package/lib/tools/backend/webstorage.js +223 -0
  183. package/lib/tools/cli-client/cli.js +6 -0
  184. package/lib/tools/cli-client/help.json +399 -0
  185. package/lib/tools/cli-client/minimist.js +128 -0
  186. package/lib/tools/cli-client/program.js +350 -0
  187. package/lib/tools/cli-client/registry.js +176 -0
  188. package/lib/tools/cli-client/session.js +289 -0
  189. package/lib/tools/cli-client/skill/SKILL.md +328 -0
  190. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  191. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  192. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  193. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  194. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  195. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  196. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  197. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  198. package/lib/tools/cli-client/skill/references/video-recording.md +143 -0
  199. package/lib/tools/cli-daemon/command.js +73 -0
  200. package/lib/tools/cli-daemon/commands.js +956 -0
  201. package/lib/tools/cli-daemon/daemon.js +157 -0
  202. package/lib/tools/cli-daemon/helpGenerator.js +177 -0
  203. package/lib/tools/cli-daemon/program.js +129 -0
  204. package/lib/tools/dashboard/appIcon.png +0 -0
  205. package/lib/tools/dashboard/dashboardApp.js +284 -0
  206. package/lib/tools/dashboard/dashboardController.js +296 -0
  207. package/lib/tools/exports.js +60 -0
  208. package/lib/tools/mcp/browserFactory.js +233 -0
  209. package/lib/tools/mcp/cdpRelay.js +352 -0
  210. package/lib/tools/mcp/cli-stub.js +7 -0
  211. package/lib/tools/mcp/config.d.js +16 -0
  212. package/lib/tools/mcp/config.js +446 -0
  213. package/lib/tools/mcp/configIni.js +189 -0
  214. package/lib/tools/mcp/extensionContextFactory.js +55 -0
  215. package/lib/tools/mcp/index.js +62 -0
  216. package/lib/tools/mcp/log.js +35 -0
  217. package/lib/tools/mcp/program.js +107 -0
  218. package/lib/tools/mcp/protocol.js +28 -0
  219. package/lib/tools/mcp/watchdog.js +44 -0
  220. package/lib/tools/trace/SKILL.md +171 -0
  221. package/lib/tools/trace/installSkill.js +48 -0
  222. package/lib/tools/trace/traceActions.js +142 -0
  223. package/lib/tools/trace/traceAttachments.js +69 -0
  224. package/lib/tools/trace/traceCli.js +87 -0
  225. package/lib/tools/trace/traceConsole.js +97 -0
  226. package/lib/tools/trace/traceErrors.js +55 -0
  227. package/lib/tools/trace/traceOpen.js +69 -0
  228. package/lib/tools/trace/traceParser.js +96 -0
  229. package/lib/tools/trace/traceRequests.js +182 -0
  230. package/lib/tools/trace/traceScreenshot.js +68 -0
  231. package/lib/tools/trace/traceSnapshot.js +149 -0
  232. package/lib/tools/trace/traceUtils.js +153 -0
  233. package/lib/tools/utils/connect.js +32 -0
  234. package/lib/tools/utils/mcp/http.js +152 -0
  235. package/lib/tools/utils/mcp/server.js +230 -0
  236. package/lib/tools/utils/mcp/tool.js +47 -0
  237. package/lib/tools/utils/socketConnection.js +108 -0
  238. package/lib/utils/isomorphic/ariaSnapshot.js +60 -2
  239. package/lib/utils/isomorphic/formatUtils.js +64 -0
  240. package/lib/utils/isomorphic/jsonSchema.js +89 -0
  241. package/lib/utils/isomorphic/lruCache.js +51 -0
  242. package/lib/utils/isomorphic/mimeType.js +7 -2
  243. package/lib/utils/isomorphic/protocolFormatter.js +2 -2
  244. package/lib/utils/isomorphic/protocolMetainfo.js +127 -98
  245. package/lib/utils/isomorphic/stringUtils.js +49 -0
  246. package/lib/utils/isomorphic/timeoutRunner.js +3 -3
  247. package/lib/utils/isomorphic/trace/entries.js +16 -0
  248. package/lib/utils/isomorphic/trace/snapshotRenderer.js +492 -0
  249. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  250. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  251. package/lib/utils/isomorphic/trace/traceLoader.js +132 -0
  252. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  253. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  254. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  255. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  256. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  257. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  258. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  259. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  260. package/lib/utils/isomorphic/urlMatch.js +54 -1
  261. package/lib/utils/isomorphic/utilityScriptSerializers.js +11 -0
  262. package/lib/utils/isomorphic/yaml.js +84 -0
  263. package/lib/utils.js +8 -2
  264. package/lib/utilsBundle.js +5 -26
  265. package/lib/utilsBundleImpl/index.js +172 -173
  266. package/lib/vite/dashboard/assets/index-BAOybkp8.js +50 -0
  267. package/lib/vite/dashboard/assets/index-CZAYOG76.css +1 -0
  268. package/lib/vite/dashboard/index.html +28 -0
  269. package/lib/vite/htmlReport/index.html +2 -70
  270. package/lib/vite/htmlReport/report.css +1 -0
  271. package/lib/vite/htmlReport/report.js +72 -0
  272. package/lib/vite/recorder/assets/codeMirrorModule-C8KMvO9L.js +32 -0
  273. package/lib/vite/recorder/assets/{codeMirrorModule-C3UTv-Ge.css → codeMirrorModule-DYBRYzYX.css} +1 -1
  274. package/lib/vite/recorder/assets/{index-Ri0uHF7I.css → index-BSjZa4pk.css} +1 -1
  275. package/lib/vite/recorder/assets/index-CqAYX1I3.js +193 -0
  276. package/lib/vite/recorder/index.html +2 -2
  277. package/lib/vite/traceViewer/assets/codeMirrorModule-DS0FLvoc.js +32 -0
  278. package/lib/vite/traceViewer/assets/defaultSettingsView-GTWI-W_B.js +262 -0
  279. package/lib/vite/traceViewer/{codeMirrorModule.C3UTv-Ge.css → codeMirrorModule.DYBRYzYX.css} +1 -1
  280. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  281. package/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
  282. package/lib/vite/traceViewer/index.Dtstcb7U.js +2 -0
  283. package/lib/vite/traceViewer/index.html +4 -4
  284. package/lib/vite/traceViewer/sw.bundle.js +5 -3
  285. package/lib/vite/traceViewer/uiMode.Vipi55dB.js +6 -0
  286. package/lib/vite/traceViewer/uiMode.html +3 -3
  287. package/lib/zipBundleImpl.js +2 -2
  288. package/lib/zodBundle.js +39 -0
  289. package/lib/zodBundleImpl.js +40 -0
  290. package/package.json +7 -1
  291. package/types/protocol.d.ts +1696 -221
  292. package/types/types.d.ts +879 -112
  293. package/lib/server/bidi/third_party/bidiDeserializer.js +0 -98
  294. package/lib/server/chromium/videoRecorder.js +0 -115
  295. package/lib/server/pageBinding.js +0 -87
  296. package/lib/server/trace/test/inMemorySnapshotter.js +0 -87
  297. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +0 -248
  298. package/lib/vite/recorder/assets/codeMirrorModule-CBbSe-ZI.js +0 -25
  299. package/lib/vite/recorder/assets/index-CpZVd2nA.js +0 -193
  300. package/lib/vite/traceViewer/assets/codeMirrorModule-DHz0wP2C.js +0 -25
  301. package/lib/vite/traceViewer/assets/defaultSettingsView-WsZP88O6.js +0 -266
  302. package/lib/vite/traceViewer/defaultSettingsView.ConWv5KN.css +0 -1
  303. package/lib/vite/traceViewer/index.C4Y3Aw8n.css +0 -1
  304. package/lib/vite/traceViewer/index.C8xAeo93.js +0 -2
  305. package/lib/vite/traceViewer/uiMode.BltraIJB.js +0 -5
  306. /package/lib/{server/utils → utils/isomorphic}/imageUtils.js +0 -0
  307. /package/lib/utils/isomorphic/{traceUtils.js → trace/traceUtils.js} +0 -0
@@ -1,98 +0,0 @@
1
- "use strict";
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 bidiDeserializer_exports = {};
20
- __export(bidiDeserializer_exports, {
21
- BidiDeserializer: () => BidiDeserializer
22
- });
23
- module.exports = __toCommonJS(bidiDeserializer_exports);
24
- /**
25
- * @license
26
- * Copyright 2024 Google Inc.
27
- * Modifications copyright (c) Microsoft Corporation.
28
- * SPDX-License-Identifier: Apache-2.0
29
- */
30
- class BidiDeserializer {
31
- static deserialize(result) {
32
- if (!result)
33
- return void 0;
34
- switch (result.type) {
35
- case "array":
36
- return result.value?.map((value) => {
37
- return BidiDeserializer.deserialize(value);
38
- });
39
- case "set":
40
- return result.value?.reduce((acc, value) => {
41
- return acc.add(BidiDeserializer.deserialize(value));
42
- }, /* @__PURE__ */ new Set());
43
- case "object":
44
- return result.value?.reduce((acc, tuple) => {
45
- const { key, value } = BidiDeserializer._deserializeTuple(tuple);
46
- acc[key] = value;
47
- return acc;
48
- }, {});
49
- case "map":
50
- return result.value?.reduce((acc, tuple) => {
51
- const { key, value } = BidiDeserializer._deserializeTuple(tuple);
52
- return acc.set(key, value);
53
- }, /* @__PURE__ */ new Map());
54
- case "promise":
55
- return {};
56
- case "regexp":
57
- return new RegExp(result.value.pattern, result.value.flags);
58
- case "date":
59
- return new Date(result.value);
60
- case "undefined":
61
- return void 0;
62
- case "null":
63
- return null;
64
- case "number":
65
- return BidiDeserializer._deserializeNumber(result.value);
66
- case "bigint":
67
- return BigInt(result.value);
68
- case "boolean":
69
- return Boolean(result.value);
70
- case "string":
71
- return result.value;
72
- }
73
- throw new Error(`Deserialization of type ${result.type} not supported.`);
74
- }
75
- static _deserializeNumber(value) {
76
- switch (value) {
77
- case "-0":
78
- return -0;
79
- case "NaN":
80
- return NaN;
81
- case "Infinity":
82
- return Infinity;
83
- case "-Infinity":
84
- return -Infinity;
85
- default:
86
- return value;
87
- }
88
- }
89
- static _deserializeTuple([serializedKey, serializedValue]) {
90
- const key = typeof serializedKey === "string" ? serializedKey : BidiDeserializer.deserialize(serializedKey);
91
- const value = BidiDeserializer.deserialize(serializedValue);
92
- return { key, value };
93
- }
94
- }
95
- // Annotate the CommonJS export names for ESM import in node:
96
- 0 && (module.exports = {
97
- BidiDeserializer
98
- });
@@ -1,115 +0,0 @@
1
- "use strict";
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 videoRecorder_exports = {};
20
- __export(videoRecorder_exports, {
21
- VideoRecorder: () => VideoRecorder
22
- });
23
- module.exports = __toCommonJS(videoRecorder_exports);
24
- var import_utils = require("../../utils");
25
- var import_page = require("../page");
26
- var import_processLauncher = require("../utils/processLauncher");
27
- const fps = 25;
28
- class VideoRecorder {
29
- constructor(page, ffmpegPath) {
30
- this._process = null;
31
- this._gracefullyClose = null;
32
- this._lastWritePromise = Promise.resolve();
33
- this._firstFrameTimestamp = 0;
34
- this._lastFrame = null;
35
- this._lastWriteNodeTime = 0;
36
- this._frameQueue = [];
37
- this._isStopped = false;
38
- this._ffmpegPath = ffmpegPath;
39
- page.on(import_page.Page.Events.ScreencastFrame, (frame) => this.writeFrame(frame.buffer, frame.frameSwapWallTime / 1e3));
40
- }
41
- static async launch(page, ffmpegPath, options) {
42
- if (!options.outputFile.endsWith(".webm"))
43
- throw new Error("File must have .webm extension");
44
- const recorder = new VideoRecorder(page, ffmpegPath);
45
- await recorder._launch(options);
46
- return recorder;
47
- }
48
- async _launch(options) {
49
- const w = options.width;
50
- const h = options.height;
51
- const args = `-loglevel error -f image2pipe -avioflags direct -fpsprobesize 0 -probesize 32 -analyzeduration 0 -c:v mjpeg -i pipe:0 -y -an -r ${fps} -c:v vp8 -qmin 0 -qmax 50 -crf 8 -deadline realtime -speed 8 -b:v 1M -threads 1 -vf pad=${w}:${h}:0:0:gray,crop=${w}:${h}:0:0`.split(" ");
52
- args.push(options.outputFile);
53
- const { launchedProcess, gracefullyClose } = await (0, import_processLauncher.launchProcess)({
54
- command: this._ffmpegPath,
55
- args,
56
- stdio: "stdin",
57
- log: (message) => import_utils.debugLogger.log("browser", message),
58
- tempDirectories: [],
59
- attemptToGracefullyClose: async () => {
60
- import_utils.debugLogger.log("browser", "Closing stdin...");
61
- launchedProcess.stdin.end();
62
- },
63
- onExit: (exitCode, signal) => {
64
- import_utils.debugLogger.log("browser", `ffmpeg onkill exitCode=${exitCode} signal=${signal}`);
65
- }
66
- });
67
- launchedProcess.stdin.on("finish", () => {
68
- import_utils.debugLogger.log("browser", "ffmpeg finished input.");
69
- });
70
- launchedProcess.stdin.on("error", () => {
71
- import_utils.debugLogger.log("browser", "ffmpeg error.");
72
- });
73
- this._process = launchedProcess;
74
- this._gracefullyClose = gracefullyClose;
75
- }
76
- writeFrame(frame, timestamp) {
77
- (0, import_utils.assert)(this._process);
78
- if (this._isStopped)
79
- return;
80
- if (!this._firstFrameTimestamp)
81
- this._firstFrameTimestamp = timestamp;
82
- const frameNumber = Math.floor((timestamp - this._firstFrameTimestamp) * fps);
83
- if (this._lastFrame) {
84
- const repeatCount = frameNumber - this._lastFrame.frameNumber;
85
- for (let i = 0; i < repeatCount; ++i)
86
- this._frameQueue.push(this._lastFrame.buffer);
87
- this._lastWritePromise = this._lastWritePromise.then(() => this._sendFrames());
88
- }
89
- this._lastFrame = { buffer: frame, timestamp, frameNumber };
90
- this._lastWriteNodeTime = (0, import_utils.monotonicTime)();
91
- }
92
- async _sendFrames() {
93
- while (this._frameQueue.length)
94
- await this._sendFrame(this._frameQueue.shift());
95
- }
96
- async _sendFrame(frame) {
97
- return new Promise((f) => this._process.stdin.write(frame, f)).then((error) => {
98
- if (error)
99
- import_utils.debugLogger.log("browser", `ffmpeg failed to write: ${String(error)}`);
100
- });
101
- }
102
- async stop() {
103
- if (this._isStopped || !this._lastFrame)
104
- return;
105
- const addTime = Math.max(((0, import_utils.monotonicTime)() - this._lastWriteNodeTime) / 1e3, 1);
106
- this.writeFrame(Buffer.from([]), this._lastFrame.timestamp + addTime);
107
- this._isStopped = true;
108
- await this._lastWritePromise;
109
- await this._gracefullyClose();
110
- }
111
- }
112
- // Annotate the CommonJS export names for ESM import in node:
113
- 0 && (module.exports = {
114
- VideoRecorder
115
- });
@@ -1,87 +0,0 @@
1
- "use strict";
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 pageBinding_exports = {};
20
- __export(pageBinding_exports, {
21
- createPageBindingScript: () => createPageBindingScript,
22
- deliverBindingResult: () => deliverBindingResult,
23
- takeBindingHandle: () => takeBindingHandle
24
- });
25
- module.exports = __toCommonJS(pageBinding_exports);
26
- var import_oldUtilityScriptSerializers = require("../utils/isomorphic/oldUtilityScriptSerializers");
27
- function addPageBinding(bindingName, needsHandle, utilityScriptSerializersFactory) {
28
- const { serializeAsCallArgument } = utilityScriptSerializersFactory;
29
- const binding = globalThis[bindingName];
30
- if (!binding || binding.toString().startsWith("(...args) => {")) return;
31
- globalThis[bindingName] = (...args) => {
32
- const me = globalThis[bindingName];
33
- if (needsHandle && args.slice(1).some((arg) => arg !== void 0))
34
- throw new Error(`exposeBindingHandle supports a single argument, ${args.length} received`);
35
- let callbacks = me["callbacks"];
36
- if (!callbacks) {
37
- callbacks = /* @__PURE__ */ new Map();
38
- me["callbacks"] = callbacks;
39
- }
40
- const seq = (me["lastSeq"] || 0) + 1;
41
- me["lastSeq"] = seq;
42
- let handles = me["handles"];
43
- if (!handles) {
44
- handles = /* @__PURE__ */ new Map();
45
- me["handles"] = handles;
46
- }
47
- const promise = new Promise((resolve, reject) => callbacks.set(seq, { resolve, reject }));
48
- let payload;
49
- if (needsHandle) {
50
- handles.set(seq, args[0]);
51
- payload = { name: bindingName, seq };
52
- } else {
53
- const serializedArgs = [];
54
- for (let i = 0; i < args.length; i++) {
55
- serializedArgs[i] = serializeAsCallArgument(args[i], (v) => {
56
- return { fallThrough: v };
57
- });
58
- }
59
- payload = { name: bindingName, seq, serializedArgs };
60
- }
61
- binding(JSON.stringify(payload));
62
- return promise;
63
- };
64
- }
65
- function takeBindingHandle(arg) {
66
- const handles = globalThis[arg.name]["handles"];
67
- const handle = handles.get(arg.seq);
68
- handles.delete(arg.seq);
69
- return handle;
70
- }
71
- function deliverBindingResult(arg) {
72
- const callbacks = globalThis[arg.name]["callbacks"];
73
- if ("error" in arg)
74
- callbacks.get(arg.seq).reject(arg.error);
75
- else
76
- callbacks.get(arg.seq).resolve(arg.result);
77
- callbacks.delete(arg.seq);
78
- }
79
- function createPageBindingScript(name, needsHandle) {
80
- return `(${addPageBinding.toString()})(${JSON.stringify(name)}, ${needsHandle}, (${import_oldUtilityScriptSerializers.source})())`;
81
- }
82
- // Annotate the CommonJS export names for ESM import in node:
83
- 0 && (module.exports = {
84
- createPageBindingScript,
85
- deliverBindingResult,
86
- takeBindingHandle
87
- });
@@ -1,87 +0,0 @@
1
- "use strict";
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 inMemorySnapshotter_exports = {};
20
- __export(inMemorySnapshotter_exports, {
21
- InMemorySnapshotter: () => InMemorySnapshotter
22
- });
23
- module.exports = __toCommonJS(inMemorySnapshotter_exports);
24
- var import_snapshotStorage = require("../../../../../trace-viewer/src/sw/snapshotStorage");
25
- var import_utils = require("../../../utils");
26
- var import_harTracer = require("../../har/harTracer");
27
- var import_snapshotter = require("../recorder/snapshotter");
28
- class InMemorySnapshotter {
29
- constructor(context) {
30
- this._blobs = /* @__PURE__ */ new Map();
31
- this._snapshotReadyPromises = /* @__PURE__ */ new Map();
32
- this._snapshotCount = 0;
33
- this._snapshotter = new import_snapshotter.Snapshotter(context, this);
34
- this._harTracer = new import_harTracer.HarTracer(context, null, this, { content: "attach", includeTraceInfo: true, recordRequestOverrides: false, waitForContentOnStop: false });
35
- this._storage = new import_snapshotStorage.SnapshotStorage();
36
- }
37
- async initialize() {
38
- await this._snapshotter.start();
39
- this._harTracer.start({ omitScripts: true });
40
- }
41
- async reset() {
42
- await this._snapshotter.reset();
43
- await this._harTracer.flush();
44
- this._harTracer.stop();
45
- this._harTracer.start({ omitScripts: true });
46
- }
47
- async dispose() {
48
- this._snapshotter.dispose();
49
- await this._harTracer.flush();
50
- this._harTracer.stop();
51
- }
52
- async captureSnapshot(page, callId, snapshotName) {
53
- if (this._snapshotReadyPromises.has(snapshotName))
54
- throw new Error("Duplicate snapshot name: " + snapshotName);
55
- this._snapshotter.captureSnapshot(page, callId, snapshotName).catch(() => {
56
- });
57
- const promise = new import_utils.ManualPromise();
58
- this._snapshotReadyPromises.set(snapshotName, promise);
59
- return promise;
60
- }
61
- onEntryStarted(entry) {
62
- }
63
- onEntryFinished(entry) {
64
- this._storage.addResource("", entry);
65
- }
66
- onContentBlob(sha1, buffer) {
67
- this._blobs.set(sha1, buffer);
68
- }
69
- onSnapshotterBlob(blob) {
70
- this._blobs.set(blob.sha1, blob.buffer);
71
- }
72
- onFrameSnapshot(snapshot) {
73
- ++this._snapshotCount;
74
- const renderer = this._storage.addFrameSnapshot("", snapshot, []);
75
- this._snapshotReadyPromises.get(snapshot.snapshotName || "")?.resolve(renderer);
76
- }
77
- async resourceContentForTest(sha1) {
78
- return this._blobs.get(sha1);
79
- }
80
- snapshotCount() {
81
- return this._snapshotCount;
82
- }
83
- }
84
- // Annotate the CommonJS export names for ESM import in node:
85
- 0 && (module.exports = {
86
- InMemorySnapshotter
87
- });
@@ -1,248 +0,0 @@
1
- "use strict";
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 oldUtilityScriptSerializers_exports = {};
20
- __export(oldUtilityScriptSerializers_exports, {
21
- source: () => source
22
- });
23
- module.exports = __toCommonJS(oldUtilityScriptSerializers_exports);
24
- function source() {
25
- function isRegExp(obj) {
26
- try {
27
- return obj instanceof RegExp || Object.prototype.toString.call(obj) === "[object RegExp]";
28
- } catch (error) {
29
- return false;
30
- }
31
- }
32
- function isDate(obj) {
33
- try {
34
- return obj instanceof Date || Object.prototype.toString.call(obj) === "[object Date]";
35
- } catch (error) {
36
- return false;
37
- }
38
- }
39
- function isURL(obj) {
40
- try {
41
- return obj instanceof URL || Object.prototype.toString.call(obj) === "[object URL]";
42
- } catch (error) {
43
- return false;
44
- }
45
- }
46
- function isError(obj) {
47
- try {
48
- return obj instanceof Error || obj && Object.getPrototypeOf(obj)?.name === "Error";
49
- } catch (error) {
50
- return false;
51
- }
52
- }
53
- function isTypedArray(obj, constructor) {
54
- try {
55
- return obj instanceof constructor || Object.prototype.toString.call(obj) === `[object ${constructor.name}]`;
56
- } catch (error) {
57
- return false;
58
- }
59
- }
60
- const typedArrayConstructors = {
61
- i8: Int8Array,
62
- ui8: Uint8Array,
63
- ui8c: Uint8ClampedArray,
64
- i16: Int16Array,
65
- ui16: Uint16Array,
66
- i32: Int32Array,
67
- ui32: Uint32Array,
68
- // TODO: add Float16Array once it's in baseline
69
- f32: Float32Array,
70
- f64: Float64Array,
71
- bi64: BigInt64Array,
72
- bui64: BigUint64Array
73
- };
74
- function typedArrayToBase64(array) {
75
- if ("toBase64" in array)
76
- return array.toBase64();
77
- const binary = Array.from(new Uint8Array(array.buffer, array.byteOffset, array.byteLength)).map((b) => String.fromCharCode(b)).join("");
78
- return btoa(binary);
79
- }
80
- function base64ToTypedArray(base64, TypedArrayConstructor) {
81
- const binary = atob(base64);
82
- const bytes = new Uint8Array(binary.length);
83
- for (let i = 0; i < binary.length; i++)
84
- bytes[i] = binary.charCodeAt(i);
85
- return new TypedArrayConstructor(bytes.buffer);
86
- }
87
- function parseEvaluationResultValue(value, handles = [], refs = /* @__PURE__ */ new Map()) {
88
- if (Object.is(value, void 0))
89
- return void 0;
90
- if (typeof value === "object" && value) {
91
- if ("ref" in value)
92
- return refs.get(value.ref);
93
- if ("v" in value) {
94
- if (value.v === "undefined")
95
- return void 0;
96
- if (value.v === "null")
97
- return null;
98
- if (value.v === "NaN")
99
- return NaN;
100
- if (value.v === "Infinity")
101
- return Infinity;
102
- if (value.v === "-Infinity")
103
- return -Infinity;
104
- if (value.v === "-0")
105
- return -0;
106
- return void 0;
107
- }
108
- if ("d" in value)
109
- return new Date(value.d);
110
- if ("u" in value)
111
- return new URL(value.u);
112
- if ("bi" in value)
113
- return BigInt(value.bi);
114
- if ("e" in value) {
115
- const error = new Error(value.e.m);
116
- error.name = value.e.n;
117
- error.stack = value.e.s;
118
- return error;
119
- }
120
- if ("r" in value)
121
- return new RegExp(value.r.p, value.r.f);
122
- if ("a" in value) {
123
- const result = [];
124
- refs.set(value.id, result);
125
- for (const a of value.a)
126
- result.push(parseEvaluationResultValue(a, handles, refs));
127
- return result;
128
- }
129
- if ("o" in value) {
130
- const result = {};
131
- refs.set(value.id, result);
132
- for (const { k, v } of value.o)
133
- result[k] = parseEvaluationResultValue(v, handles, refs);
134
- return result;
135
- }
136
- if ("h" in value)
137
- return handles[value.h];
138
- if ("ta" in value)
139
- return base64ToTypedArray(value.ta.b, typedArrayConstructors[value.ta.k]);
140
- }
141
- return value;
142
- }
143
- function serializeAsCallArgument(value, handleSerializer) {
144
- return serialize(value, handleSerializer, { visited: /* @__PURE__ */ new Map(), lastId: 0 });
145
- }
146
- function serialize(value, handleSerializer, visitorInfo) {
147
- if (value && typeof value === "object") {
148
- if (typeof globalThis.Window === "function" && value instanceof globalThis.Window)
149
- return "ref: <Window>";
150
- if (typeof globalThis.Document === "function" && value instanceof globalThis.Document)
151
- return "ref: <Document>";
152
- if (typeof globalThis.Node === "function" && value instanceof globalThis.Node)
153
- return "ref: <Node>";
154
- }
155
- return innerSerialize(value, handleSerializer, visitorInfo);
156
- }
157
- function innerSerialize(value, handleSerializer, visitorInfo) {
158
- const result = handleSerializer(value);
159
- if ("fallThrough" in result)
160
- value = result.fallThrough;
161
- else
162
- return result;
163
- if (typeof value === "symbol")
164
- return { v: "undefined" };
165
- if (Object.is(value, void 0))
166
- return { v: "undefined" };
167
- if (Object.is(value, null))
168
- return { v: "null" };
169
- if (Object.is(value, NaN))
170
- return { v: "NaN" };
171
- if (Object.is(value, Infinity))
172
- return { v: "Infinity" };
173
- if (Object.is(value, -Infinity))
174
- return { v: "-Infinity" };
175
- if (Object.is(value, -0))
176
- return { v: "-0" };
177
- if (typeof value === "boolean")
178
- return value;
179
- if (typeof value === "number")
180
- return value;
181
- if (typeof value === "string")
182
- return value;
183
- if (typeof value === "bigint")
184
- return { bi: value.toString() };
185
- if (isError(value)) {
186
- let stack;
187
- if (value.stack?.startsWith(value.name + ": " + value.message)) {
188
- stack = value.stack;
189
- } else {
190
- stack = `${value.name}: ${value.message}
191
- ${value.stack}`;
192
- }
193
- return { e: { n: value.name, m: value.message, s: stack } };
194
- }
195
- if (isDate(value))
196
- return { d: value.toJSON() };
197
- if (isURL(value))
198
- return { u: value.toJSON() };
199
- if (isRegExp(value))
200
- return { r: { p: value.source, f: value.flags } };
201
- for (const [k, ctor] of Object.entries(typedArrayConstructors)) {
202
- if (isTypedArray(value, ctor))
203
- return { ta: { b: typedArrayToBase64(value), k } };
204
- }
205
- const id = visitorInfo.visited.get(value);
206
- if (id)
207
- return { ref: id };
208
- if (Array.isArray(value)) {
209
- const a = [];
210
- const id2 = ++visitorInfo.lastId;
211
- visitorInfo.visited.set(value, id2);
212
- for (let i = 0; i < value.length; ++i)
213
- a.push(serialize(value[i], handleSerializer, visitorInfo));
214
- return { a, id: id2 };
215
- }
216
- if (typeof value === "object") {
217
- const o = [];
218
- const id2 = ++visitorInfo.lastId;
219
- visitorInfo.visited.set(value, id2);
220
- for (const name of Object.keys(value)) {
221
- let item;
222
- try {
223
- item = value[name];
224
- } catch (e) {
225
- continue;
226
- }
227
- if (name === "toJSON" && typeof item === "function")
228
- o.push({ k: name, v: { o: [], id: 0 } });
229
- else
230
- o.push({ k: name, v: serialize(item, handleSerializer, visitorInfo) });
231
- }
232
- let jsonWrapper;
233
- try {
234
- if (o.length === 0 && value.toJSON && typeof value.toJSON === "function")
235
- jsonWrapper = { value: value.toJSON() };
236
- } catch (e) {
237
- }
238
- if (jsonWrapper)
239
- return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);
240
- return { o, id: id2 };
241
- }
242
- }
243
- return { parseEvaluationResultValue, serializeAsCallArgument };
244
- }
245
- // Annotate the CommonJS export names for ESM import in node:
246
- 0 && (module.exports = {
247
- source
248
- });