patchright-core 1.52.5 → 1.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/bin/reinstall_chrome_beta_mac.sh +1 -1
  3. package/bin/reinstall_chrome_stable_mac.sh +1 -1
  4. package/bin/reinstall_msedge_beta_mac.sh +1 -1
  5. package/bin/reinstall_msedge_dev_mac.sh +1 -1
  6. package/bin/reinstall_msedge_stable_mac.sh +1 -1
  7. package/browsers.json +14 -14
  8. package/index.js +1 -1
  9. package/lib/androidServerImpl.js +4 -2
  10. package/lib/browserServerImpl.js +47 -12
  11. package/lib/cli/program.js +116 -50
  12. package/lib/cli/programWithTestStub.js +1 -1
  13. package/lib/client/android.js +30 -34
  14. package/lib/client/browser.js +54 -17
  15. package/lib/client/browserContext.js +67 -71
  16. package/lib/client/browserType.js +25 -34
  17. package/lib/client/channelOwner.js +20 -24
  18. package/lib/client/connection.js +6 -10
  19. package/lib/client/electron.js +8 -3
  20. package/lib/client/elementHandle.js +18 -21
  21. package/lib/client/fetch.js +5 -3
  22. package/lib/client/frame.js +54 -32
  23. package/lib/client/input.js +3 -1
  24. package/lib/client/jsHandle.js +4 -0
  25. package/lib/client/localUtils.js +0 -1
  26. package/lib/client/locator.js +30 -26
  27. package/lib/client/network.js +5 -12
  28. package/lib/client/page.js +32 -32
  29. package/lib/client/playwright.js +6 -16
  30. package/lib/client/selectors.js +18 -38
  31. package/lib/client/timeoutSettings.js +12 -8
  32. package/lib/client/tracing.js +24 -20
  33. package/lib/client/waiter.js +2 -2
  34. package/lib/client/webSocket.js +4 -22
  35. package/lib/generated/bindingsControllerSource.js +28 -0
  36. package/lib/generated/clockSource.js +1 -1
  37. package/lib/generated/injectedScriptSource.js +1 -1
  38. package/lib/generated/pollingRecorderSource.js +1 -1
  39. package/lib/generated/storageScriptSource.js +28 -0
  40. package/lib/generated/utilityScriptSource.js +1 -1
  41. package/lib/generated/webSocketMockSource.js +12 -50
  42. package/lib/inProcessFactory.js +9 -6
  43. package/lib/outofprocess.js +0 -2
  44. package/lib/protocol/validator.js +421 -345
  45. package/lib/protocol/validatorPrimitives.js +18 -4
  46. package/lib/remote/playwrightConnection.js +29 -166
  47. package/lib/remote/playwrightServer.js +233 -35
  48. package/lib/server/android/android.js +97 -83
  49. package/lib/server/android/backendAdb.js +0 -2
  50. package/lib/server/bidi/bidiBrowser.js +139 -73
  51. package/lib/server/bidi/bidiChromium.js +23 -22
  52. package/lib/server/bidi/bidiExecutionContext.js +2 -1
  53. package/lib/server/bidi/bidiFirefox.js +17 -14
  54. package/lib/server/bidi/bidiInput.js +22 -22
  55. package/lib/server/bidi/bidiNetworkManager.js +8 -11
  56. package/lib/server/bidi/bidiPage.js +42 -86
  57. package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
  58. package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  59. package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
  60. package/lib/server/browser.js +30 -21
  61. package/lib/server/browserContext.js +203 -165
  62. package/lib/server/browserType.js +109 -107
  63. package/lib/server/chromium/chromium.js +84 -69
  64. package/lib/server/chromium/chromiumSwitches.js +13 -20
  65. package/lib/server/chromium/crBrowser.js +74 -40
  66. package/lib/server/chromium/crConnection.js +8 -9
  67. package/lib/server/chromium/crCoverage.js +11 -8
  68. package/lib/server/chromium/crDragDrop.js +25 -20
  69. package/lib/server/chromium/crExecutionContext.js +2 -1
  70. package/lib/server/chromium/crInput.js +32 -29
  71. package/lib/server/chromium/crNetworkManager.js +43 -31
  72. package/lib/server/chromium/crPage.js +98 -72
  73. package/lib/server/chromium/crServiceWorker.js +13 -18
  74. package/lib/server/chromium/videoRecorder.js +10 -18
  75. package/lib/server/clock.js +51 -39
  76. package/lib/server/codegen/csharp.js +10 -5
  77. package/lib/server/codegen/java.js +1 -1
  78. package/lib/server/codegen/javascript.js +1 -1
  79. package/lib/server/codegen/jsonl.js +2 -1
  80. package/lib/server/codegen/language.js +22 -1
  81. package/lib/server/codegen/languages.js +4 -4
  82. package/lib/server/codegen/python.js +1 -1
  83. package/lib/server/cookieStore.js +3 -1
  84. package/lib/server/debugController.js +105 -71
  85. package/lib/server/debugger.js +6 -23
  86. package/lib/server/deviceDescriptorsSource.json +237 -127
  87. package/lib/server/dialog.js +50 -6
  88. package/lib/server/dispatchers/androidDispatcher.js +77 -62
  89. package/lib/server/dispatchers/artifactDispatcher.js +18 -18
  90. package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
  91. package/lib/server/dispatchers/browserDispatcher.js +55 -88
  92. package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
  93. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
  94. package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
  95. package/lib/server/dispatchers/dialogDispatcher.js +4 -4
  96. package/lib/server/dispatchers/dispatcher.js +78 -53
  97. package/lib/server/dispatchers/electronDispatcher.js +19 -20
  98. package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
  99. package/lib/server/dispatchers/frameDispatcher.js +98 -101
  100. package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
  101. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
  102. package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
  103. package/lib/server/dispatchers/networkDispatchers.js +41 -35
  104. package/lib/server/dispatchers/pageDispatcher.js +156 -107
  105. package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
  106. package/lib/server/dispatchers/streamDispatcher.js +15 -8
  107. package/lib/server/dispatchers/tracingDispatcher.js +22 -13
  108. package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
  109. package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
  110. package/lib/server/dom.js +198 -266
  111. package/lib/server/download.js +3 -3
  112. package/lib/server/electron/electron.js +96 -103
  113. package/lib/server/electron/loader.js +1 -1
  114. package/lib/server/fetch.js +22 -41
  115. package/lib/server/fileUploadUtils.js +1 -1
  116. package/lib/server/firefox/ffBrowser.js +79 -55
  117. package/lib/server/firefox/ffExecutionContext.js +2 -1
  118. package/lib/server/firefox/ffInput.js +23 -23
  119. package/lib/server/firefox/ffNetworkManager.js +8 -6
  120. package/lib/server/firefox/ffPage.js +39 -36
  121. package/lib/server/firefox/firefox.js +9 -10
  122. package/lib/server/frameSelectors.js +63 -20
  123. package/lib/server/frames.js +495 -555
  124. package/lib/server/har/harRecorder.js +1 -1
  125. package/lib/server/har/harTracer.js +4 -2
  126. package/lib/server/helper.js +3 -7
  127. package/lib/server/index.js +0 -3
  128. package/lib/server/input.js +47 -54
  129. package/lib/server/instrumentation.js +8 -14
  130. package/lib/server/javascript.js +8 -16
  131. package/lib/server/launchApp.js +48 -30
  132. package/lib/server/localUtils.js +45 -38
  133. package/lib/server/network.js +44 -10
  134. package/lib/server/page.js +232 -177
  135. package/lib/server/pageBinding.js +6 -7
  136. package/lib/server/playwright.js +4 -14
  137. package/lib/server/progress.js +57 -49
  138. package/lib/server/recorder/recorderApp.js +298 -95
  139. package/lib/server/recorder/recorderRunner.js +23 -24
  140. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  141. package/lib/server/recorder/recorderUtils.js +67 -10
  142. package/lib/server/recorder.js +284 -146
  143. package/lib/server/registry/index.js +83 -48
  144. package/lib/server/registry/nativeDeps.js +175 -0
  145. package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
  146. package/lib/server/screenshotter.js +84 -83
  147. package/lib/server/selectors.js +12 -12
  148. package/lib/server/socksClientCertificatesInterceptor.js +198 -136
  149. package/lib/server/trace/recorder/snapshotter.js +12 -19
  150. package/lib/server/trace/recorder/tracing.js +36 -27
  151. package/lib/server/trace/viewer/traceViewer.js +11 -20
  152. package/lib/server/transport.js +20 -22
  153. package/lib/server/utils/comparators.js +2 -2
  154. package/lib/server/utils/debug.js +3 -8
  155. package/lib/server/utils/debugLogger.js +8 -0
  156. package/lib/server/utils/hostPlatform.js +3 -1
  157. package/lib/server/utils/network.js +35 -25
  158. package/lib/server/utils/nodePlatform.js +1 -1
  159. package/lib/server/utils/processLauncher.js +4 -1
  160. package/lib/server/utils/wsServer.js +11 -17
  161. package/lib/server/webkit/webkit.js +5 -2
  162. package/lib/server/webkit/wkBrowser.js +51 -28
  163. package/lib/server/webkit/wkExecutionContext.js +2 -1
  164. package/lib/server/webkit/wkInput.js +25 -25
  165. package/lib/server/webkit/wkInterceptableRequest.js +1 -1
  166. package/lib/server/webkit/wkPage.js +80 -59
  167. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  168. package/lib/server/webkit/wkWorkers.js +7 -7
  169. package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
  170. package/lib/utils/isomorphic/cssParser.js +1 -2
  171. package/lib/utils/isomorphic/locatorGenerators.js +18 -0
  172. package/lib/utils/isomorphic/manualPromise.js +1 -2
  173. package/lib/utils/isomorphic/mimeType.js +1 -2
  174. package/lib/utils/isomorphic/multimap.js +1 -2
  175. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
  176. package/lib/utils/isomorphic/protocolFormatter.js +78 -0
  177. package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
  178. package/lib/utils/isomorphic/selectorParser.js +3 -4
  179. package/lib/utils/isomorphic/stringUtils.js +3 -24
  180. package/lib/utils/isomorphic/time.js +9 -4
  181. package/lib/utils/isomorphic/timeoutRunner.js +3 -4
  182. package/lib/utils/isomorphic/traceUtils.js +2 -3
  183. package/lib/utils/isomorphic/urlMatch.js +21 -7
  184. package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
  185. package/lib/utils.js +8 -2
  186. package/lib/utilsBundleImpl/index.js +160 -150
  187. package/lib/vite/htmlReport/index.html +17 -17
  188. package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
  189. package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
  190. package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
  191. package/lib/vite/recorder/index.html +3 -3
  192. package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
  193. package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
  194. package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
  195. package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
  196. package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
  197. package/lib/vite/traceViewer/index.html +6 -6
  198. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  199. package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
  200. package/lib/vite/traceViewer/uiMode.html +4 -4
  201. package/lib/zipBundleImpl.js +4 -4
  202. package/package.json +1 -1
  203. package/types/protocol.d.ts +712 -107
  204. package/types/types.d.ts +128 -17
  205. package/lib/generated/consoleApiSource.js +0 -28
  206. package/lib/protocol/debug.js +0 -211
  207. package/lib/server/recorder/contextRecorder.js +0 -286
  208. package/lib/server/recorder/recorderCollection.js +0 -116
  209. package/lib/server/recorder/recorderFrontend.js +0 -16
  210. package/lib/server/storageScript.js +0 -154
  211. package/lib/server/timeoutSettings.js +0 -89
  212. package/lib/utils/isomorphic/builtins.js +0 -86
  213. package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
  214. package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
  215. package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
  216. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  217. package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
  218. package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
@@ -1,211 +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 debug_exports = {};
20
- __export(debug_exports, {
21
- commandsWithTracingSnapshots: () => commandsWithTracingSnapshots,
22
- pausesBeforeInputActions: () => pausesBeforeInputActions,
23
- slowMoActions: () => slowMoActions
24
- });
25
- module.exports = __toCommonJS(debug_exports);
26
- const slowMoActions = /* @__PURE__ */ new Set([
27
- "Page.goBack",
28
- "Page.goForward",
29
- "Page.reload",
30
- "Page.keyboardDown",
31
- "Page.keyboardUp",
32
- "Page.keyboardInsertText",
33
- "Page.keyboardType",
34
- "Page.keyboardPress",
35
- "Page.mouseMove",
36
- "Page.mouseDown",
37
- "Page.mouseUp",
38
- "Page.mouseClick",
39
- "Page.mouseWheel",
40
- "Page.touchscreenTap",
41
- "Frame.blur",
42
- "Frame.check",
43
- "Frame.click",
44
- "Frame.dragAndDrop",
45
- "Frame.dblclick",
46
- "Frame.dispatchEvent",
47
- "Frame.fill",
48
- "Frame.focus",
49
- "Frame.goto",
50
- "Frame.hover",
51
- "Frame.press",
52
- "Frame.selectOption",
53
- "Frame.setInputFiles",
54
- "Frame.tap",
55
- "Frame.type",
56
- "Frame.uncheck",
57
- "ElementHandle.check",
58
- "ElementHandle.click",
59
- "ElementHandle.dblclick",
60
- "ElementHandle.dispatchEvent",
61
- "ElementHandle.fill",
62
- "ElementHandle.focus",
63
- "ElementHandle.hover",
64
- "ElementHandle.press",
65
- "ElementHandle.scrollIntoViewIfNeeded",
66
- "ElementHandle.selectOption",
67
- "ElementHandle.selectText",
68
- "ElementHandle.setInputFiles",
69
- "ElementHandle.tap",
70
- "ElementHandle.type",
71
- "ElementHandle.uncheck"
72
- ]);
73
- const commandsWithTracingSnapshots = /* @__PURE__ */ new Set([
74
- "EventTarget.waitForEventInfo",
75
- "BrowserContext.waitForEventInfo",
76
- "Page.waitForEventInfo",
77
- "WebSocket.waitForEventInfo",
78
- "ElectronApplication.waitForEventInfo",
79
- "AndroidDevice.waitForEventInfo",
80
- "Page.emulateMedia",
81
- "Page.goBack",
82
- "Page.goForward",
83
- "Page.reload",
84
- "Page.expectScreenshot",
85
- "Page.screenshot",
86
- "Page.setViewportSize",
87
- "Page.keyboardDown",
88
- "Page.keyboardUp",
89
- "Page.keyboardInsertText",
90
- "Page.keyboardType",
91
- "Page.keyboardPress",
92
- "Page.mouseMove",
93
- "Page.mouseDown",
94
- "Page.mouseUp",
95
- "Page.mouseClick",
96
- "Page.mouseWheel",
97
- "Page.touchscreenTap",
98
- "Page.accessibilitySnapshot",
99
- "Frame.evalOnSelector",
100
- "Frame.evalOnSelectorAll",
101
- "Frame.addScriptTag",
102
- "Frame.addStyleTag",
103
- "Frame.ariaSnapshot",
104
- "Frame.blur",
105
- "Frame.check",
106
- "Frame.click",
107
- "Frame.content",
108
- "Frame.dragAndDrop",
109
- "Frame.dblclick",
110
- "Frame.dispatchEvent",
111
- "Frame.evaluateExpression",
112
- "Frame.evaluateExpressionHandle",
113
- "Frame.fill",
114
- "Frame.focus",
115
- "Frame.getAttribute",
116
- "Frame.goto",
117
- "Frame.hover",
118
- "Frame.innerHTML",
119
- "Frame.innerText",
120
- "Frame.inputValue",
121
- "Frame.isChecked",
122
- "Frame.isDisabled",
123
- "Frame.isEnabled",
124
- "Frame.isHidden",
125
- "Frame.isVisible",
126
- "Frame.isEditable",
127
- "Frame.press",
128
- "Frame.querySelector",
129
- "Frame.querySelectorAll",
130
- "Frame.queryCount",
131
- "Frame.selectOption",
132
- "Frame.setContent",
133
- "Frame.setInputFiles",
134
- "Frame.tap",
135
- "Frame.textContent",
136
- "Frame.type",
137
- "Frame.uncheck",
138
- "Frame.waitForTimeout",
139
- "Frame.waitForFunction",
140
- "Frame.waitForSelector",
141
- "Frame.expect",
142
- "JSHandle.evaluateExpression",
143
- "ElementHandle.evaluateExpression",
144
- "JSHandle.evaluateExpressionHandle",
145
- "ElementHandle.evaluateExpressionHandle",
146
- "ElementHandle.evalOnSelector",
147
- "ElementHandle.evalOnSelectorAll",
148
- "ElementHandle.boundingBox",
149
- "ElementHandle.check",
150
- "ElementHandle.click",
151
- "ElementHandle.contentFrame",
152
- "ElementHandle.dblclick",
153
- "ElementHandle.dispatchEvent",
154
- "ElementHandle.fill",
155
- "ElementHandle.focus",
156
- "ElementHandle.hover",
157
- "ElementHandle.innerHTML",
158
- "ElementHandle.innerText",
159
- "ElementHandle.inputValue",
160
- "ElementHandle.isChecked",
161
- "ElementHandle.isDisabled",
162
- "ElementHandle.isEditable",
163
- "ElementHandle.isEnabled",
164
- "ElementHandle.isHidden",
165
- "ElementHandle.isVisible",
166
- "ElementHandle.press",
167
- "ElementHandle.querySelector",
168
- "ElementHandle.querySelectorAll",
169
- "ElementHandle.screenshot",
170
- "ElementHandle.scrollIntoViewIfNeeded",
171
- "ElementHandle.selectOption",
172
- "ElementHandle.selectText",
173
- "ElementHandle.setInputFiles",
174
- "ElementHandle.tap",
175
- "ElementHandle.textContent",
176
- "ElementHandle.type",
177
- "ElementHandle.uncheck",
178
- "ElementHandle.waitForElementState",
179
- "ElementHandle.waitForSelector"
180
- ]);
181
- const pausesBeforeInputActions = /* @__PURE__ */ new Set([
182
- "Frame.check",
183
- "Frame.click",
184
- "Frame.dragAndDrop",
185
- "Frame.dblclick",
186
- "Frame.fill",
187
- "Frame.hover",
188
- "Frame.press",
189
- "Frame.selectOption",
190
- "Frame.setInputFiles",
191
- "Frame.tap",
192
- "Frame.type",
193
- "Frame.uncheck",
194
- "ElementHandle.check",
195
- "ElementHandle.click",
196
- "ElementHandle.dblclick",
197
- "ElementHandle.fill",
198
- "ElementHandle.hover",
199
- "ElementHandle.press",
200
- "ElementHandle.selectOption",
201
- "ElementHandle.setInputFiles",
202
- "ElementHandle.tap",
203
- "ElementHandle.type",
204
- "ElementHandle.uncheck"
205
- ]);
206
- // Annotate the CommonJS export names for ESM import in node:
207
- 0 && (module.exports = {
208
- commandsWithTracingSnapshots,
209
- pausesBeforeInputActions,
210
- slowMoActions
211
- });
@@ -1,286 +0,0 @@
1
- "use strict";
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 contextRecorder_exports = {};
30
- __export(contextRecorder_exports, {
31
- ContextRecorder: () => ContextRecorder,
32
- generateFrameSelector: () => generateFrameSelector
33
- });
34
- module.exports = __toCommonJS(contextRecorder_exports);
35
- var import_events = require("events");
36
- var import_recorderCollection = require("./recorderCollection");
37
- var recorderSource = __toESM(require("../../generated/pollingRecorderSource"));
38
- var import_utils = require("../../utils");
39
- var import_timeoutRunner = require("../../utils/isomorphic/timeoutRunner");
40
- var import_browserContext = require("../browserContext");
41
- var import_languages = require("../codegen/languages");
42
- var import_frames = require("../frames");
43
- var import_page = require("../page");
44
- var import_throttledFile = require("./throttledFile");
45
- var import_language = require("../codegen/language");
46
- class ContextRecorder extends import_events.EventEmitter {
47
- constructor(context, params, delegate) {
48
- super();
49
- this._pageAliases = /* @__PURE__ */ new Map();
50
- this._lastPopupOrdinal = 0;
51
- this._lastDialogOrdinal = -1;
52
- this._lastDownloadOrdinal = -1;
53
- this._throttledOutputFile = null;
54
- this._orderedLanguages = [];
55
- this._listeners = [];
56
- this._context = context;
57
- this._params = params;
58
- this._delegate = delegate;
59
- this._recorderSources = [];
60
- const language = params.language || context.attribution.playwright.options.sdkLanguage;
61
- this.setOutput(language, params.outputFile);
62
- const languageGeneratorOptions = {
63
- browserName: context._browser.options.name,
64
- launchOptions: { headless: false, ...params.launchOptions, tracesDir: void 0 },
65
- contextOptions: { ...params.contextOptions },
66
- deviceName: params.device,
67
- saveStorage: params.saveStorage
68
- };
69
- this._collection = new import_recorderCollection.RecorderCollection(this._pageAliases);
70
- this._collection.on("change", (actions) => {
71
- this._recorderSources = [];
72
- for (const languageGenerator of this._orderedLanguages) {
73
- const { header, footer, actionTexts, text } = (0, import_language.generateCode)(actions, languageGenerator, languageGeneratorOptions);
74
- const source = {
75
- isRecorded: true,
76
- label: languageGenerator.name,
77
- group: languageGenerator.groupName,
78
- id: languageGenerator.id,
79
- text,
80
- header,
81
- footer,
82
- actions: actionTexts,
83
- language: languageGenerator.highlighter,
84
- highlight: []
85
- };
86
- source.revealLine = text.split("\n").length - 1;
87
- this._recorderSources.push(source);
88
- if (languageGenerator === this._orderedLanguages[0])
89
- this._throttledOutputFile?.setContent(source.text);
90
- }
91
- this.emit(ContextRecorder.Events.Change, {
92
- sources: this._recorderSources,
93
- actions
94
- });
95
- });
96
- context.on(import_browserContext.BrowserContext.Events.BeforeClose, () => {
97
- this._throttledOutputFile?.flush();
98
- });
99
- this._listeners.push(import_utils.eventsHelper.addEventListener(process, "exit", () => {
100
- this._throttledOutputFile?.flush();
101
- }));
102
- this.setEnabled(params.mode === "recording");
103
- }
104
- static {
105
- this.Events = {
106
- Change: "change"
107
- };
108
- }
109
- setOutput(codegenId, outputFile) {
110
- const languages = (0, import_languages.languageSet)();
111
- const primaryLanguage = [...languages].find((l) => l.id === codegenId);
112
- if (!primaryLanguage)
113
- throw new Error(`
114
- ===============================
115
- Unsupported language: '${codegenId}'
116
- ===============================
117
- `);
118
- languages.delete(primaryLanguage);
119
- this._orderedLanguages = [primaryLanguage, ...languages];
120
- this._throttledOutputFile = outputFile ? new import_throttledFile.ThrottledFile(outputFile) : null;
121
- this._collection?.restart();
122
- }
123
- languageName(id) {
124
- for (const lang of this._orderedLanguages) {
125
- if (!id || lang.id === id)
126
- return lang.highlighter;
127
- }
128
- return "javascript";
129
- }
130
- async install() {
131
- this._context.on(import_browserContext.BrowserContext.Events.Page, (page) => this._onPage(page));
132
- for (const page of this._context.pages())
133
- this._onPage(page);
134
- this._context.on(import_browserContext.BrowserContext.Events.Dialog, (dialog) => this._onDialog(dialog.page()));
135
- await this._context.exposeBinding(
136
- "__pw_recorderPerformAction",
137
- false,
138
- (source, action) => this._performAction(source.frame, action)
139
- );
140
- await this._context.exposeBinding(
141
- "__pw_recorderRecordAction",
142
- false,
143
- (source, action) => this._recordAction(source.frame, action)
144
- );
145
- await this._context.extendInjectedScript(recorderSource.source);
146
- }
147
- setEnabled(enabled) {
148
- this._collection.setEnabled(enabled);
149
- }
150
- dispose() {
151
- import_utils.eventsHelper.removeEventListeners(this._listeners);
152
- }
153
- async _onPage(page) {
154
- const frame = page.mainFrame();
155
- page.on("close", () => {
156
- this._collection.addRecordedAction({
157
- frame: this._describeMainFrame(page),
158
- action: {
159
- name: "closePage",
160
- signals: []
161
- },
162
- startTime: (0, import_utils.monotonicTime)()
163
- });
164
- this._pageAliases.delete(page);
165
- });
166
- frame.on(import_frames.Frame.Events.InternalNavigation, (event) => {
167
- if (event.isPublic)
168
- this._onFrameNavigated(frame, page);
169
- });
170
- page.on(import_page.Page.Events.Download, () => this._onDownload(page));
171
- const suffix = this._pageAliases.size ? String(++this._lastPopupOrdinal) : "";
172
- const pageAlias = "page" + suffix;
173
- this._pageAliases.set(page, pageAlias);
174
- if (page.opener()) {
175
- this._onPopup(page.opener(), page);
176
- } else {
177
- this._collection.addRecordedAction({
178
- frame: this._describeMainFrame(page),
179
- action: {
180
- name: "openPage",
181
- url: page.mainFrame().url(),
182
- signals: []
183
- },
184
- startTime: (0, import_utils.monotonicTime)()
185
- });
186
- }
187
- }
188
- clearScript() {
189
- this._collection.restart();
190
- if (this._params.mode === "recording") {
191
- for (const page of this._context.pages())
192
- this._onFrameNavigated(page.mainFrame(), page);
193
- }
194
- }
195
- runTask(task) {
196
- }
197
- _describeMainFrame(page) {
198
- return {
199
- pageAlias: this._pageAliases.get(page),
200
- framePath: []
201
- };
202
- }
203
- async _describeFrame(frame) {
204
- return {
205
- pageAlias: this._pageAliases.get(frame._page),
206
- framePath: await generateFrameSelector(frame)
207
- };
208
- }
209
- testIdAttributeName() {
210
- return this._params.testIdAttributeName || this._context.selectors().testIdAttributeName() || "data-testid";
211
- }
212
- async _createActionInContext(frame, action) {
213
- const frameDescription = await this._describeFrame(frame);
214
- const actionInContext = {
215
- frame: frameDescription,
216
- action,
217
- description: void 0,
218
- startTime: (0, import_utils.monotonicTime)()
219
- };
220
- await this._delegate.rewriteActionInContext?.(this._pageAliases, actionInContext);
221
- return actionInContext;
222
- }
223
- async _performAction(frame, action) {
224
- await this._collection.performAction(await this._createActionInContext(frame, action));
225
- }
226
- async _recordAction(frame, action) {
227
- this._collection.addRecordedAction(await this._createActionInContext(frame, action));
228
- }
229
- _onFrameNavigated(frame, page) {
230
- const pageAlias = this._pageAliases.get(page);
231
- this._collection.signal(pageAlias, frame, { name: "navigation", url: frame.url() });
232
- }
233
- _onPopup(page, popup) {
234
- const pageAlias = this._pageAliases.get(page);
235
- const popupAlias = this._pageAliases.get(popup);
236
- this._collection.signal(pageAlias, page.mainFrame(), { name: "popup", popupAlias });
237
- }
238
- _onDownload(page) {
239
- const pageAlias = this._pageAliases.get(page);
240
- ++this._lastDownloadOrdinal;
241
- this._collection.signal(pageAlias, page.mainFrame(), { name: "download", downloadAlias: this._lastDownloadOrdinal ? String(this._lastDownloadOrdinal) : "" });
242
- }
243
- _onDialog(page) {
244
- const pageAlias = this._pageAliases.get(page);
245
- ++this._lastDialogOrdinal;
246
- this._collection.signal(pageAlias, page.mainFrame(), { name: "dialog", dialogAlias: this._lastDialogOrdinal ? String(this._lastDialogOrdinal) : "" });
247
- }
248
- }
249
- async function generateFrameSelector(frame) {
250
- const selectorPromises = [];
251
- while (frame) {
252
- const parent = frame.parentFrame();
253
- if (!parent)
254
- break;
255
- selectorPromises.push(generateFrameSelectorInParent(parent, frame));
256
- frame = parent;
257
- }
258
- const result = await Promise.all(selectorPromises);
259
- return result.reverse();
260
- }
261
- async function generateFrameSelectorInParent(parent, frame) {
262
- const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
263
- try {
264
- const frameElement = await frame.frameElement();
265
- if (!frameElement || !parent)
266
- return;
267
- const utility = await parent._utilityContext();
268
- const injected = await utility.injectedScript();
269
- const selector = await injected.evaluate((injected2, element) => {
270
- return injected2.generateSelectorSimple(element);
271
- }, frameElement);
272
- return selector;
273
- } catch (e) {
274
- }
275
- }, (0, import_utils.monotonicTime)() + 2e3);
276
- if (!result.timedOut && result.result)
277
- return result.result;
278
- if (frame.name())
279
- return `iframe[name=${(0, import_utils.quoteCSSAttributeValue)(frame.name())}]`;
280
- return `iframe[src=${(0, import_utils.quoteCSSAttributeValue)(frame.url())}]`;
281
- }
282
- // Annotate the CommonJS export names for ESM import in node:
283
- 0 && (module.exports = {
284
- ContextRecorder,
285
- generateFrameSelector
286
- });
@@ -1,116 +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 recorderCollection_exports = {};
20
- __export(recorderCollection_exports, {
21
- RecorderCollection: () => RecorderCollection
22
- });
23
- module.exports = __toCommonJS(recorderCollection_exports);
24
- var import_events = require("events");
25
- var import_recorderRunner = require("./recorderRunner");
26
- var import_recorderUtils = require("./recorderUtils");
27
- var import_debug = require("../utils/debug");
28
- var import_time = require("../../utils/isomorphic/time");
29
- class RecorderCollection extends import_events.EventEmitter {
30
- constructor(pageAliases) {
31
- super();
32
- this._actions = [];
33
- this._enabled = false;
34
- this._pageAliases = pageAliases;
35
- }
36
- restart() {
37
- this._actions = [];
38
- this.emit("change", []);
39
- }
40
- setEnabled(enabled) {
41
- this._enabled = enabled;
42
- }
43
- async performAction(actionInContext) {
44
- await this._addAction(actionInContext, async () => {
45
- await (0, import_recorderRunner.performAction)(this._pageAliases, actionInContext);
46
- });
47
- }
48
- addRecordedAction(actionInContext) {
49
- if (["openPage", "closePage"].includes(actionInContext.action.name)) {
50
- this._actions.push(actionInContext);
51
- this._fireChange();
52
- return;
53
- }
54
- this._addAction(actionInContext).catch(() => {
55
- });
56
- }
57
- async _addAction(actionInContext, callback) {
58
- if (!this._enabled)
59
- return;
60
- if (actionInContext.action.name === "openPage" || actionInContext.action.name === "closePage") {
61
- this._actions.push(actionInContext);
62
- this._fireChange();
63
- return;
64
- }
65
- this._actions.push(actionInContext);
66
- this._fireChange();
67
- await callback?.().catch();
68
- actionInContext.endTime = (0, import_time.monotonicTime)();
69
- }
70
- signal(pageAlias, frame, signal) {
71
- if (!this._enabled)
72
- return;
73
- if (signal.name === "navigation" && frame._page.mainFrame() === frame) {
74
- const timestamp = (0, import_time.monotonicTime)();
75
- const lastAction = this._actions[this._actions.length - 1];
76
- const signalThreshold = (0, import_debug.isUnderTest)() ? 500 : 5e3;
77
- let generateGoto = false;
78
- if (!lastAction)
79
- generateGoto = true;
80
- else if (lastAction.action.name !== "click" && lastAction.action.name !== "press" && lastAction.action.name !== "fill")
81
- generateGoto = true;
82
- else if (timestamp - lastAction.startTime > signalThreshold)
83
- generateGoto = true;
84
- if (generateGoto) {
85
- this.addRecordedAction({
86
- frame: {
87
- pageAlias,
88
- framePath: []
89
- },
90
- action: {
91
- name: "navigate",
92
- url: frame.url(),
93
- signals: []
94
- },
95
- startTime: timestamp,
96
- endTime: timestamp
97
- });
98
- }
99
- return;
100
- }
101
- if (this._actions.length) {
102
- this._actions[this._actions.length - 1].action.signals.push(signal);
103
- this._fireChange();
104
- return;
105
- }
106
- }
107
- _fireChange() {
108
- if (!this._enabled)
109
- return;
110
- this.emit("change", (0, import_recorderUtils.collapseActions)(this._actions));
111
- }
112
- }
113
- // Annotate the CommonJS export names for ESM import in node:
114
- 0 && (module.exports = {
115
- RecorderCollection
116
- });
@@ -1,16 +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 __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
- var recorderFrontend_exports = {};
16
- module.exports = __toCommonJS(recorderFrontend_exports);