patchright-core 1.51.2 → 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 +288 -403
  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 +741 -891
  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-DpJ-EmBQ.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-DTenqiGw.js +0 -259
  302. package/lib/vite/traceViewer/index.CUq7VgrV.js +0 -2
  303. package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +0 -5
@@ -1,140 +1,142 @@
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 javascript_exports = {};
20
+ __export(javascript_exports, {
21
+ JavaScriptFormatter: () => JavaScriptFormatter,
22
+ JavaScriptLanguageGenerator: () => JavaScriptLanguageGenerator,
23
+ quoteMultiline: () => quoteMultiline
5
24
  });
6
- exports.JavaScriptLanguageGenerator = exports.JavaScriptFormatter = void 0;
7
- exports.quoteMultiline = quoteMultiline;
8
- var _language = require("./language");
9
- var _utils = require("../../utils");
10
- var _deviceDescriptors = require("../deviceDescriptors");
11
- /**
12
- * Copyright (c) Microsoft Corporation.
13
- *
14
- * Licensed under the Apache License, Version 2.0 (the "License");
15
- * you may not use this file except in compliance with the License.
16
- * You may obtain a copy of the License at
17
- *
18
- * http://www.apache.org/licenses/LICENSE-2.0
19
- *
20
- * Unless required by applicable law or agreed to in writing, software
21
- * distributed under the License is distributed on an "AS IS" BASIS,
22
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
- * See the License for the specific language governing permissions and
24
- * limitations under the License.
25
- */
26
-
25
+ module.exports = __toCommonJS(javascript_exports);
26
+ var import_language = require("./language");
27
+ var import_utils = require("../../utils");
28
+ var import_deviceDescriptors = require("../deviceDescriptors");
27
29
  class JavaScriptLanguageGenerator {
28
30
  constructor(isTest) {
29
- this.id = void 0;
30
- this.groupName = 'Node.js';
31
- this.name = void 0;
32
- this.highlighter = 'javascript';
33
- this._isTest = void 0;
34
- this.id = isTest ? 'playwright-test' : 'javascript';
35
- this.name = isTest ? 'Test Runner' : 'Library';
31
+ this.groupName = "Node.js";
32
+ this.highlighter = "javascript";
33
+ this.id = isTest ? "playwright-test" : "javascript";
34
+ this.name = isTest ? "Test Runner" : "Library";
36
35
  this._isTest = isTest;
37
36
  }
38
37
  generateAction(actionInContext) {
39
38
  const action = actionInContext.action;
40
- if (this._isTest && (action.name === 'openPage' || action.name === 'closePage')) return '';
39
+ if (this._isTest && (action.name === "openPage" || action.name === "closePage"))
40
+ return "";
41
41
  const pageAlias = actionInContext.frame.pageAlias;
42
42
  const formatter = new JavaScriptFormatter(2);
43
- if (action.name === 'openPage') {
43
+ if (action.name === "openPage") {
44
44
  formatter.add(`const ${pageAlias} = await context.newPage();`);
45
- if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/') formatter.add(`await ${pageAlias}.goto(${quote(action.url)});`);
45
+ if (action.url && action.url !== "about:blank" && action.url !== "chrome://newtab/")
46
+ formatter.add(`await ${pageAlias}.goto(${quote(action.url)});`);
46
47
  return formatter.format();
47
48
  }
48
- const locators = actionInContext.frame.framePath.map(selector => `.${this._asLocator(selector)}.contentFrame()`);
49
- const subject = `${pageAlias}${locators.join('')}`;
50
- const signals = (0, _language.toSignalMap)(action);
49
+ const locators = actionInContext.frame.framePath.map((selector) => `.${this._asLocator(selector)}.contentFrame()`);
50
+ const subject = `${pageAlias}${locators.join("")}`;
51
+ const signals = (0, import_language.toSignalMap)(action);
51
52
  if (signals.dialog) {
52
53
  formatter.add(` ${pageAlias}.once('dialog', dialog => {
53
- console.log(\`Dialog message: $\{dialog.message()}\`);
54
+ console.log(\`Dialog message: \${dialog.message()}\`);
54
55
  dialog.dismiss().catch(() => {});
55
56
  });`);
56
57
  }
57
- if (signals.popup) formatter.add(`const ${signals.popup.popupAlias}Promise = ${pageAlias}.waitForEvent('popup');`);
58
- if (signals.download) formatter.add(`const download${signals.download.downloadAlias}Promise = ${pageAlias}.waitForEvent('download');`);
58
+ if (signals.popup)
59
+ formatter.add(`const ${signals.popup.popupAlias}Promise = ${pageAlias}.waitForEvent('popup');`);
60
+ if (signals.download)
61
+ formatter.add(`const download${signals.download.downloadAlias}Promise = ${pageAlias}.waitForEvent('download');`);
59
62
  formatter.add(wrapWithStep(actionInContext.description, this._generateActionCall(subject, actionInContext)));
60
- if (signals.popup) formatter.add(`const ${signals.popup.popupAlias} = await ${signals.popup.popupAlias}Promise;`);
61
- if (signals.download) formatter.add(`const download${signals.download.downloadAlias} = await download${signals.download.downloadAlias}Promise;`);
63
+ if (signals.popup)
64
+ formatter.add(`const ${signals.popup.popupAlias} = await ${signals.popup.popupAlias}Promise;`);
65
+ if (signals.download)
66
+ formatter.add(`const download${signals.download.downloadAlias} = await download${signals.download.downloadAlias}Promise;`);
62
67
  return formatter.format();
63
68
  }
64
69
  _generateActionCall(subject, actionInContext) {
65
70
  const action = actionInContext.action;
66
71
  switch (action.name) {
67
- case 'openPage':
68
- throw Error('Not reached');
69
- case 'closePage':
72
+ case "openPage":
73
+ throw Error("Not reached");
74
+ case "closePage":
70
75
  return `await ${subject}.close();`;
71
- case 'click':
72
- {
73
- let method = 'click';
74
- if (action.clickCount === 2) method = 'dblclick';
75
- const options = (0, _language.toClickOptionsForSourceCode)(action);
76
- const optionsString = formatOptions(options, false);
77
- return `await ${subject}.${this._asLocator(action.selector)}.${method}(${optionsString});`;
78
- }
79
- case 'check':
76
+ case "click": {
77
+ let method = "click";
78
+ if (action.clickCount === 2)
79
+ method = "dblclick";
80
+ const options = (0, import_language.toClickOptionsForSourceCode)(action);
81
+ const optionsString = formatOptions(options, false);
82
+ return `await ${subject}.${this._asLocator(action.selector)}.${method}(${optionsString});`;
83
+ }
84
+ case "check":
80
85
  return `await ${subject}.${this._asLocator(action.selector)}.check();`;
81
- case 'uncheck':
86
+ case "uncheck":
82
87
  return `await ${subject}.${this._asLocator(action.selector)}.uncheck();`;
83
- case 'fill':
88
+ case "fill":
84
89
  return `await ${subject}.${this._asLocator(action.selector)}.fill(${quote(action.text)});`;
85
- case 'setInputFiles':
90
+ case "setInputFiles":
86
91
  return `await ${subject}.${this._asLocator(action.selector)}.setInputFiles(${formatObject(action.files.length === 1 ? action.files[0] : action.files)});`;
87
- case 'press':
88
- {
89
- const modifiers = (0, _language.toKeyboardModifiers)(action.modifiers);
90
- const shortcut = [...modifiers, action.key].join('+');
91
- return `await ${subject}.${this._asLocator(action.selector)}.press(${quote(shortcut)});`;
92
- }
93
- case 'navigate':
92
+ case "press": {
93
+ const modifiers = (0, import_language.toKeyboardModifiers)(action.modifiers);
94
+ const shortcut = [...modifiers, action.key].join("+");
95
+ return `await ${subject}.${this._asLocator(action.selector)}.press(${quote(shortcut)});`;
96
+ }
97
+ case "navigate":
94
98
  return `await ${subject}.goto(${quote(action.url)});`;
95
- case 'select':
99
+ case "select":
96
100
  return `await ${subject}.${this._asLocator(action.selector)}.selectOption(${formatObject(action.options.length === 1 ? action.options[0] : action.options)});`;
97
- case 'assertText':
98
- return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? 'toContainText' : 'toHaveText'}(${quote(action.text)});`;
99
- case 'assertChecked':
100
- return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)})${action.checked ? '' : '.not'}.toBeChecked();`;
101
- case 'assertVisible':
102
- return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).toBeVisible();`;
103
- case 'assertValue':
104
- {
105
- const assertion = action.value ? `toHaveValue(${quote(action.value)})` : `toBeEmpty()`;
106
- return `${this._isTest ? '' : '// '}await expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
107
- }
108
- case 'assertSnapshot':
109
- {
110
- const commentIfNeeded = this._isTest ? '' : '// ';
111
- return `${commentIfNeeded}await expect(${subject}.${this._asLocator(action.selector)}).toMatchAriaSnapshot(${quoteMultiline(action.snapshot, `${commentIfNeeded} `)});`;
112
- }
101
+ case "assertText":
102
+ return `${this._isTest ? "" : "// "}await expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? "toContainText" : "toHaveText"}(${quote(action.text)});`;
103
+ case "assertChecked":
104
+ return `${this._isTest ? "" : "// "}await expect(${subject}.${this._asLocator(action.selector)})${action.checked ? "" : ".not"}.toBeChecked();`;
105
+ case "assertVisible":
106
+ return `${this._isTest ? "" : "// "}await expect(${subject}.${this._asLocator(action.selector)}).toBeVisible();`;
107
+ case "assertValue": {
108
+ const assertion = action.value ? `toHaveValue(${quote(action.value)})` : `toBeEmpty()`;
109
+ return `${this._isTest ? "" : "// "}await expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
110
+ }
111
+ case "assertSnapshot": {
112
+ const commentIfNeeded = this._isTest ? "" : "// ";
113
+ return `${commentIfNeeded}await expect(${subject}.${this._asLocator(action.selector)}).toMatchAriaSnapshot(${quoteMultiline(action.snapshot, `${commentIfNeeded} `)});`;
114
+ }
113
115
  }
114
116
  }
115
117
  _asLocator(selector) {
116
- return (0, _utils.asLocator)('javascript', selector);
118
+ return (0, import_utils.asLocator)("javascript", selector);
117
119
  }
118
120
  generateHeader(options) {
119
- if (this._isTest) return this.generateTestHeader(options);
121
+ if (this._isTest)
122
+ return this.generateTestHeader(options);
120
123
  return this.generateStandaloneHeader(options);
121
124
  }
122
125
  generateFooter(saveStorage) {
123
- if (this._isTest) return this.generateTestFooter(saveStorage);
126
+ if (this._isTest)
127
+ return this.generateTestFooter(saveStorage);
124
128
  return this.generateStandaloneFooter(saveStorage);
125
129
  }
126
130
  generateTestHeader(options) {
127
131
  const formatter = new JavaScriptFormatter();
128
132
  const useText = formatContextOptions(options.contextOptions, options.deviceName, this._isTest);
129
133
  formatter.add(`
130
- import { test, expect${options.deviceName ? ', devices' : ''} } from '@playwright/test';
131
- ${useText ? '\ntest.use(' + useText + ');\n' : ''}
134
+ import { test, expect${options.deviceName ? ", devices" : ""} } from '@playwright/test';
135
+ ${useText ? "\ntest.use(" + useText + ");\n" : ""}
132
136
  test('test', async ({ page }) => {`);
133
137
  if (options.contextOptions.recordHar) {
134
138
  const url = options.contextOptions.recordHar.urlFilter;
135
- formatter.add(` await page.routeFromHAR(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatOptions({
136
- url
137
- }, false)}` : ''});`);
139
+ formatter.add(` await page.routeFromHAR(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatOptions({ url }, false)}` : ""});`);
138
140
  }
139
141
  return formatter.format();
140
142
  }
@@ -144,110 +146,123 @@ ${useText ? '\ntest.use(' + useText + ');\n' : ''}
144
146
  generateStandaloneHeader(options) {
145
147
  const formatter = new JavaScriptFormatter();
146
148
  formatter.add(`
147
- const { ${options.browserName}${options.deviceName ? ', devices' : ''} } = require('playwright');
149
+ const { ${options.browserName}${options.deviceName ? ", devices" : ""} } = require('playwright');
148
150
 
149
151
  (async () => {
150
152
  const browser = await ${options.browserName}.launch(${formatObjectOrVoid(options.launchOptions)});
151
153
  const context = await browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName, false)});`);
152
- if (options.contextOptions.recordHar) formatter.add(` await context.routeFromHAR(${quote(options.contextOptions.recordHar.path)});`);
154
+ if (options.contextOptions.recordHar)
155
+ formatter.add(` await context.routeFromHAR(${quote(options.contextOptions.recordHar.path)});`);
153
156
  return formatter.format();
154
157
  }
155
158
  generateStandaloneFooter(saveStorage) {
156
- const storageStateLine = saveStorage ? `\n await context.storageState({ path: ${quote(saveStorage)} });` : '';
157
- return `\n // ---------------------${storageStateLine}
159
+ const storageStateLine = saveStorage ? `
160
+ await context.storageState({ path: ${quote(saveStorage)} });` : "";
161
+ return `
162
+ // ---------------------${storageStateLine}
158
163
  await context.close();
159
164
  await browser.close();
160
165
  })();`;
161
166
  }
162
167
  }
163
- exports.JavaScriptLanguageGenerator = JavaScriptLanguageGenerator;
164
168
  function formatOptions(value, hasArguments) {
165
169
  const keys = Object.keys(value);
166
- if (!keys.length) return '';
167
- return (hasArguments ? ', ' : '') + formatObject(value);
170
+ if (!keys.length)
171
+ return "";
172
+ return (hasArguments ? ", " : "") + formatObject(value);
168
173
  }
169
- function formatObject(value, indent = ' ') {
170
- if (typeof value === 'string') return quote(value);
171
- if (Array.isArray(value)) return `[${value.map(o => formatObject(o)).join(', ')}]`;
172
- if (typeof value === 'object') {
173
- const keys = Object.keys(value).filter(key => value[key] !== undefined).sort();
174
- if (!keys.length) return '{}';
174
+ function formatObject(value, indent = " ") {
175
+ if (typeof value === "string")
176
+ return quote(value);
177
+ if (Array.isArray(value))
178
+ return `[${value.map((o) => formatObject(o)).join(", ")}]`;
179
+ if (typeof value === "object") {
180
+ const keys = Object.keys(value).filter((key) => value[key] !== void 0).sort();
181
+ if (!keys.length)
182
+ return "{}";
175
183
  const tokens = [];
176
- for (const key of keys) tokens.push(`${key}: ${formatObject(value[key])}`);
177
- return `{\n${indent}${tokens.join(`,\n${indent}`)}\n}`;
184
+ for (const key of keys)
185
+ tokens.push(`${key}: ${formatObject(value[key])}`);
186
+ return `{
187
+ ${indent}${tokens.join(`,
188
+ ${indent}`)}
189
+ }`;
178
190
  }
179
191
  return String(value);
180
192
  }
181
- function formatObjectOrVoid(value, indent = ' ') {
193
+ function formatObjectOrVoid(value, indent = " ") {
182
194
  const result = formatObject(value, indent);
183
- return result === '{}' ? '' : result;
195
+ return result === "{}" ? "" : result;
184
196
  }
185
197
  function formatContextOptions(options, deviceName, isTest) {
186
- const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
187
- // recordHAR is replaced with routeFromHAR in the generated code.
188
- options = {
189
- ...options,
190
- recordHar: undefined
191
- };
192
- if (!device) return formatObjectOrVoid(options);
193
- // Filter out all the properties from the device descriptor.
194
- let serializedObject = formatObjectOrVoid((0, _language.sanitizeDeviceOptions)(device, options));
195
- // When there are no additional context options, we still want to spread the device inside.
196
- if (!serializedObject) serializedObject = '{\n}';
197
- const lines = serializedObject.split('\n');
198
+ const device = deviceName && import_deviceDescriptors.deviceDescriptors[deviceName];
199
+ options = { ...options, recordHar: void 0 };
200
+ if (!device)
201
+ return formatObjectOrVoid(options);
202
+ let serializedObject = formatObjectOrVoid((0, import_language.sanitizeDeviceOptions)(device, options));
203
+ if (!serializedObject)
204
+ serializedObject = "{\n}";
205
+ const lines = serializedObject.split("\n");
198
206
  lines.splice(1, 0, `...devices[${quote(deviceName)}],`);
199
- return lines.join('\n');
207
+ return lines.join("\n");
200
208
  }
201
209
  class JavaScriptFormatter {
202
210
  constructor(offset = 0) {
203
- this._baseIndent = void 0;
204
- this._baseOffset = void 0;
205
211
  this._lines = [];
206
- this._baseIndent = ' '.repeat(2);
207
- this._baseOffset = ' '.repeat(offset);
212
+ this._baseIndent = " ".repeat(2);
213
+ this._baseOffset = " ".repeat(offset);
208
214
  }
209
215
  prepend(text) {
210
- const trim = isMultilineString(text) ? line => line : line => line.trim();
211
- this._lines = text.trim().split('\n').map(trim).concat(this._lines);
216
+ const trim = isMultilineString(text) ? (line) => line : (line) => line.trim();
217
+ this._lines = text.trim().split("\n").map(trim).concat(this._lines);
212
218
  }
213
219
  add(text) {
214
- const trim = isMultilineString(text) ? line => line : line => line.trim();
215
- this._lines.push(...text.trim().split('\n').map(trim));
220
+ const trim = isMultilineString(text) ? (line) => line : (line) => line.trim();
221
+ this._lines.push(...text.trim().split("\n").map(trim));
216
222
  }
217
223
  newLine() {
218
- this._lines.push('');
224
+ this._lines.push("");
219
225
  }
220
226
  format() {
221
- let spaces = '';
222
- let previousLine = '';
223
- return this._lines.map(line => {
224
- if (line === '') return line;
225
- if (line.startsWith('}') || line.startsWith(']')) spaces = spaces.substring(this._baseIndent.length);
226
- const extraSpaces = /^(for|while|if|try).*\(.*\)$/.test(previousLine) ? this._baseIndent : '';
227
+ let spaces = "";
228
+ let previousLine = "";
229
+ return this._lines.map((line) => {
230
+ if (line === "")
231
+ return line;
232
+ if (line.startsWith("}") || line.startsWith("]"))
233
+ spaces = spaces.substring(this._baseIndent.length);
234
+ const extraSpaces = /^(for|while|if|try).*\(.*\)$/.test(previousLine) ? this._baseIndent : "";
227
235
  previousLine = line;
228
- const callCarryOver = line.startsWith('.set');
229
- line = spaces + extraSpaces + (callCarryOver ? this._baseIndent : '') + line;
230
- if (line.endsWith('{') || line.endsWith('[')) spaces += this._baseIndent;
236
+ const callCarryOver = line.startsWith(".set");
237
+ line = spaces + extraSpaces + (callCarryOver ? this._baseIndent : "") + line;
238
+ if (line.endsWith("{") || line.endsWith("["))
239
+ spaces += this._baseIndent;
231
240
  return this._baseOffset + line;
232
- }).join('\n');
241
+ }).join("\n");
233
242
  }
234
243
  }
235
- exports.JavaScriptFormatter = JavaScriptFormatter;
236
244
  function quote(text) {
237
- return (0, _utils.escapeWithQuotes)(text, '\'');
245
+ return (0, import_utils.escapeWithQuotes)(text, "'");
238
246
  }
239
247
  function wrapWithStep(description, body) {
240
248
  return description ? `await test.step(\`${description}\`, async () => {
241
249
  ${body}
242
250
  });` : body;
243
251
  }
244
- function quoteMultiline(text, indent = ' ') {
245
- const escape = text => text.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
246
- const lines = text.split('\n');
247
- if (lines.length === 1) return '`' + escape(text) + '`';
248
- return '`\n' + lines.map(line => indent + escape(line).replace(/\${/g, '\\${')).join('\n') + `\n${indent}\``;
252
+ function quoteMultiline(text, indent = " ") {
253
+ const escape = (text2) => text2.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
254
+ const lines = text.split("\n");
255
+ if (lines.length === 1)
256
+ return "`" + escape(text) + "`";
257
+ return "`\n" + lines.map((line) => indent + escape(line).replace(/\${/g, "\\${")).join("\n") + `
258
+ ${indent}\``;
249
259
  }
250
260
  function isMultilineString(text) {
251
- var _text$match;
252
- return (_text$match = text.match(/`[\S\s]*`/)) === null || _text$match === void 0 ? void 0 : _text$match[0].includes('\n');
253
- }
261
+ return text.match(/`[\S\s]*`/)?.[0].includes("\n");
262
+ }
263
+ // Annotate the CommonJS export names for ESM import in node:
264
+ 0 && (module.exports = {
265
+ JavaScriptFormatter,
266
+ JavaScriptLanguageGenerator,
267
+ quoteMultiline
268
+ });
@@ -1,35 +1,36 @@
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 jsonl_exports = {};
20
+ __export(jsonl_exports, {
21
+ JsonlLanguageGenerator: () => JsonlLanguageGenerator
5
22
  });
6
- exports.JsonlLanguageGenerator = void 0;
7
- var _utils = require("../../utils");
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
-
23
+ module.exports = __toCommonJS(jsonl_exports);
24
+ var import_utils = require("../../utils");
24
25
  class JsonlLanguageGenerator {
25
26
  constructor() {
26
- this.id = 'jsonl';
27
- this.groupName = '';
28
- this.name = 'JSONL';
29
- this.highlighter = 'javascript';
27
+ this.id = "jsonl";
28
+ this.groupName = "";
29
+ this.name = "JSONL";
30
+ this.highlighter = "javascript";
30
31
  }
31
32
  generateAction(actionInContext) {
32
- const locator = actionInContext.action.selector ? JSON.parse((0, _utils.asLocator)('jsonl', actionInContext.action.selector)) : undefined;
33
+ const locator = actionInContext.action.selector ? JSON.parse((0, import_utils.asLocator)("jsonl", actionInContext.action.selector)) : void 0;
33
34
  const entry = {
34
35
  ...actionInContext.action,
35
36
  ...actionInContext.frame,
@@ -41,7 +42,10 @@ class JsonlLanguageGenerator {
41
42
  return JSON.stringify(options);
42
43
  }
43
44
  generateFooter(saveStorage) {
44
- return '';
45
+ return "";
45
46
  }
46
47
  }
47
- exports.JsonlLanguageGenerator = JsonlLanguageGenerator;
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ JsonlLanguageGenerator
51
+ });