@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.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 (376) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/browsers.json +16 -14
  3. package/index.js +1 -1
  4. package/lib/androidServerImpl.js +47 -50
  5. package/lib/browserServerImpl.js +89 -69
  6. package/lib/checkly/escapeRegExp.js +23 -27
  7. package/lib/checkly/fetch.js +64 -46
  8. package/lib/checkly/secretsFilter.js +49 -35
  9. package/lib/cli/driver.js +71 -69
  10. package/lib/cli/program.js +400 -359
  11. package/lib/cli/programWithTestStub.js +51 -45
  12. package/lib/client/accessibility.js +31 -32
  13. package/lib/client/android.js +151 -242
  14. package/lib/client/api.js +135 -283
  15. package/lib/client/artifact.js +39 -36
  16. package/lib/client/browser.js +96 -71
  17. package/lib/client/browserContext.js +314 -345
  18. package/lib/client/browserType.js +103 -127
  19. package/lib/client/cdpSession.js +29 -31
  20. package/lib/client/channelOwner.js +90 -113
  21. package/lib/client/clientHelper.js +48 -39
  22. package/lib/client/clientInstrumentation.js +40 -37
  23. package/lib/client/clientStackTrace.js +41 -37
  24. package/lib/client/clock.js +36 -36
  25. package/lib/client/connection.js +188 -214
  26. package/lib/client/consoleMessage.js +31 -28
  27. package/lib/client/coverage.js +25 -22
  28. package/lib/client/dialog.js +30 -31
  29. package/lib/client/download.js +25 -25
  30. package/lib/client/electron.js +80 -77
  31. package/lib/client/elementHandle.js +120 -159
  32. package/lib/client/errors.js +53 -53
  33. package/lib/client/eventEmitter.js +124 -121
  34. package/lib/client/events.js +72 -68
  35. package/lib/client/fetch.js +166 -190
  36. package/lib/client/fileChooser.js +25 -24
  37. package/lib/client/fileUtils.js +31 -28
  38. package/lib/client/frame.js +207 -306
  39. package/lib/client/harRouter.js +42 -52
  40. package/lib/client/input.js +42 -69
  41. package/lib/client/jsHandle.js +54 -69
  42. package/lib/client/jsonPipe.js +27 -23
  43. package/lib/client/localUtils.js +29 -29
  44. package/lib/client/locator.js +145 -237
  45. package/lib/client/network.js +282 -307
  46. package/lib/client/page.js +269 -318
  47. package/lib/client/platform.js +46 -43
  48. package/lib/client/playwright.js +51 -76
  49. package/lib/client/selectors.js +45 -63
  50. package/lib/client/stream.js +29 -25
  51. package/lib/client/timeoutSettings.js +55 -41
  52. package/lib/client/tracing.js +49 -96
  53. package/lib/client/types.js +26 -22
  54. package/lib/client/video.js +35 -27
  55. package/lib/client/waiter.js +69 -88
  56. package/lib/client/webError.js +25 -23
  57. package/lib/client/webSocket.js +43 -56
  58. package/lib/client/worker.js +48 -56
  59. package/lib/client/writableStream.js +27 -23
  60. package/lib/generated/bindingsControllerSource.js +28 -0
  61. package/lib/generated/clockSource.js +26 -6
  62. package/lib/generated/consoleApiSource.js +26 -6
  63. package/lib/generated/injectedScriptSource.js +26 -6
  64. package/lib/generated/pollingRecorderSource.js +26 -6
  65. package/lib/generated/storageScriptSource.js +28 -0
  66. package/lib/generated/utilityScriptSource.js +26 -6
  67. package/lib/generated/webSocketMockSource.js +333 -5
  68. package/lib/inProcessFactory.js +51 -53
  69. package/lib/inprocess.js +2 -19
  70. package/lib/outofprocess.js +51 -46
  71. package/lib/protocol/serializers.js +153 -134
  72. package/lib/protocol/validator.js +2807 -2739
  73. package/lib/protocol/validatorPrimitives.js +114 -73
  74. package/lib/remote/playwrightConnection.js +88 -242
  75. package/lib/remote/playwrightServer.js +305 -92
  76. package/lib/server/accessibility.js +44 -37
  77. package/lib/server/android/android.js +251 -241
  78. package/lib/server/android/backendAdb.js +87 -82
  79. package/lib/server/artifact.js +78 -55
  80. package/lib/server/bidi/bidiBrowser.js +297 -158
  81. package/lib/server/bidi/bidiChromium.js +119 -89
  82. package/lib/server/bidi/bidiConnection.js +66 -83
  83. package/lib/server/bidi/bidiExecutionContext.js +129 -113
  84. package/lib/server/bidi/bidiFirefox.js +86 -76
  85. package/lib/server/bidi/bidiInput.js +106 -117
  86. package/lib/server/bidi/bidiNetworkManager.js +142 -159
  87. package/lib/server/bidi/bidiOverCdp.js +57 -58
  88. package/lib/server/bidi/bidiPage.js +260 -260
  89. package/lib/server/bidi/bidiPdf.js +52 -86
  90. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  91. package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
  92. package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
  93. package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
  94. package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
  95. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  96. package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
  97. package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
  98. package/lib/server/browser.js +93 -95
  99. package/lib/server/browserContext.js +419 -429
  100. package/lib/server/browserType.js +186 -216
  101. package/lib/server/callLog.js +47 -44
  102. package/lib/server/chromium/chromium.js +235 -203
  103. package/lib/server/chromium/chromiumSwitches.js +100 -67
  104. package/lib/server/chromium/crAccessibility.js +157 -131
  105. package/lib/server/chromium/crBrowser.js +310 -292
  106. package/lib/server/chromium/crConnection.js +95 -121
  107. package/lib/server/chromium/crCoverage.js +121 -131
  108. package/lib/server/chromium/crDevTools.js +60 -51
  109. package/lib/server/chromium/crDragDrop.js +68 -84
  110. package/lib/server/chromium/crExecutionContext.js +89 -83
  111. package/lib/server/chromium/crInput.js +118 -113
  112. package/lib/server/chromium/crNetworkManager.js +274 -375
  113. package/lib/server/chromium/crPage.js +536 -593
  114. package/lib/server/chromium/crPdf.js +54 -86
  115. package/lib/server/chromium/crProtocolHelper.js +92 -80
  116. package/lib/server/chromium/crServiceWorker.js +84 -73
  117. package/lib/server/chromium/defaultFontFamilies.js +152 -135
  118. package/lib/server/chromium/protocol.d.js +16 -0
  119. package/lib/server/chromium/videoRecorder.js +66 -99
  120. package/lib/server/clock.js +107 -83
  121. package/lib/server/codegen/csharp.js +192 -162
  122. package/lib/server/codegen/java.js +156 -129
  123. package/lib/server/codegen/javascript.js +163 -148
  124. package/lib/server/codegen/jsonl.js +32 -28
  125. package/lib/server/codegen/language.js +75 -52
  126. package/lib/server/codegen/languages.js +65 -27
  127. package/lib/server/codegen/python.js +141 -126
  128. package/lib/server/codegen/types.js +15 -4
  129. package/lib/server/console.js +28 -32
  130. package/lib/server/cookieStore.js +108 -86
  131. package/lib/server/debugController.js +147 -151
  132. package/lib/server/debugger.js +86 -78
  133. package/lib/server/deviceDescriptors.js +37 -24
  134. package/lib/server/deviceDescriptorsSource.json +238 -128
  135. package/lib/server/dialog.js +84 -39
  136. package/lib/server/dispatchers/androidDispatcher.js +257 -148
  137. package/lib/server/dispatchers/artifactDispatcher.js +79 -79
  138. package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
  139. package/lib/server/dispatchers/browserDispatcher.js +96 -148
  140. package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
  141. package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
  142. package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
  143. package/lib/server/dispatchers/dialogDispatcher.js +34 -31
  144. package/lib/server/dispatchers/dispatcher.js +208 -248
  145. package/lib/server/dispatchers/electronDispatcher.js +66 -70
  146. package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
  147. package/lib/server/dispatchers/frameDispatcher.js +211 -272
  148. package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
  149. package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
  150. package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
  151. package/lib/server/dispatchers/networkDispatchers.js +117 -128
  152. package/lib/server/dispatchers/pageDispatcher.js +256 -248
  153. package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
  154. package/lib/server/dispatchers/streamDispatcher.js +52 -48
  155. package/lib/server/dispatchers/tracingDispatcher.js +47 -52
  156. package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
  157. package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
  158. package/lib/server/dom.js +485 -582
  159. package/lib/server/download.js +47 -37
  160. package/lib/server/electron/electron.js +216 -243
  161. package/lib/server/electron/loader.js +9 -37
  162. package/lib/server/errors.js +47 -46
  163. package/lib/server/fetch.js +317 -360
  164. package/lib/server/fileChooser.js +25 -24
  165. package/lib/server/fileUploadUtils.js +66 -60
  166. package/lib/server/firefox/ffAccessibility.js +153 -131
  167. package/lib/server/firefox/ffBrowser.js +268 -305
  168. package/lib/server/firefox/ffConnection.js +63 -84
  169. package/lib/server/firefox/ffExecutionContext.js +92 -73
  170. package/lib/server/firefox/ffInput.js +82 -84
  171. package/lib/server/firefox/ffNetworkManager.js +137 -114
  172. package/lib/server/firefox/ffPage.js +261 -293
  173. package/lib/server/firefox/firefox.js +80 -72
  174. package/lib/server/firefox/protocol.d.js +16 -0
  175. package/lib/server/formData.js +107 -35
  176. package/lib/server/frameSelectors.js +98 -114
  177. package/lib/server/frames.js +845 -1055
  178. package/lib/server/har/harRecorder.js +85 -77
  179. package/lib/server/har/harTracer.js +290 -223
  180. package/lib/server/harBackend.js +80 -80
  181. package/lib/server/helper.js +55 -59
  182. package/lib/server/index.js +59 -99
  183. package/lib/server/input.js +151 -189
  184. package/lib/server/instrumentation.js +57 -44
  185. package/lib/server/javascript.js +133 -134
  186. package/lib/server/launchApp.js +113 -75
  187. package/lib/server/localUtils.js +150 -142
  188. package/lib/server/macEditingCommands.js +141 -137
  189. package/lib/server/network.js +299 -303
  190. package/lib/server/page.js +513 -544
  191. package/lib/server/pipeTransport.js +49 -45
  192. package/lib/server/playwright.js +58 -67
  193. package/lib/server/progress.js +137 -68
  194. package/lib/server/protocolError.js +34 -31
  195. package/lib/server/recorder/chat.js +70 -86
  196. package/lib/server/recorder/recorderApp.js +341 -176
  197. package/lib/server/recorder/recorderInTraceViewer.js +65 -94
  198. package/lib/server/recorder/recorderRunner.js +93 -116
  199. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  200. package/lib/server/recorder/recorderUtils.js +104 -47
  201. package/lib/server/recorder/throttledFile.js +42 -30
  202. package/lib/server/recorder.js +395 -275
  203. package/lib/server/registry/browserFetcher.js +106 -101
  204. package/lib/server/registry/dependencies.js +245 -196
  205. package/lib/server/registry/index.js +930 -803
  206. package/lib/server/registry/nativeDeps.js +1073 -464
  207. package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
  208. package/lib/server/screenshotter.js +160 -191
  209. package/lib/server/selectors.js +90 -51
  210. package/lib/server/socksClientCertificatesInterceptor.js +171 -186
  211. package/lib/server/socksInterceptor.js +62 -70
  212. package/lib/server/trace/recorder/snapshotter.js +76 -102
  213. package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
  214. package/lib/server/trace/recorder/tracing.js +354 -362
  215. package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
  216. package/lib/server/trace/viewer/traceViewer.js +160 -147
  217. package/lib/server/transport.js +119 -134
  218. package/lib/server/types.js +26 -22
  219. package/lib/server/usKeyboardLayout.js +135 -545
  220. package/lib/server/utils/ascii.js +39 -26
  221. package/lib/server/utils/comparators.js +105 -103
  222. package/lib/server/utils/crypto.js +157 -112
  223. package/lib/server/utils/debug.js +36 -32
  224. package/lib/server/utils/debugLogger.js +77 -48
  225. package/lib/server/utils/env.js +52 -37
  226. package/lib/server/utils/eventsHelper.js +29 -28
  227. package/lib/server/utils/expectUtils.js +31 -26
  228. package/lib/server/utils/fileUtils.js +123 -136
  229. package/lib/server/utils/happyEyeballs.js +141 -126
  230. package/lib/server/utils/hostPlatform.js +84 -120
  231. package/lib/server/utils/httpServer.js +106 -121
  232. package/lib/server/utils/image_tools/colorUtils.js +42 -51
  233. package/lib/server/utils/image_tools/compare.js +44 -43
  234. package/lib/server/utils/image_tools/imageChannel.js +38 -30
  235. package/lib/server/utils/image_tools/stats.js +40 -40
  236. package/lib/server/utils/linuxUtils.js +50 -37
  237. package/lib/server/utils/network.js +152 -96
  238. package/lib/server/utils/nodePlatform.js +87 -79
  239. package/lib/server/utils/pipeTransport.js +44 -42
  240. package/lib/server/utils/processLauncher.js +111 -121
  241. package/lib/server/utils/profiler.js +52 -39
  242. package/lib/server/utils/socksProxy.js +280 -339
  243. package/lib/server/utils/spawnAsync.js +37 -41
  244. package/lib/server/utils/task.js +31 -38
  245. package/lib/server/utils/userAgent.js +73 -66
  246. package/lib/server/utils/wsServer.js +68 -75
  247. package/lib/server/utils/zipFile.js +36 -37
  248. package/lib/server/utils/zones.js +37 -34
  249. package/lib/server/webkit/protocol.d.js +16 -0
  250. package/lib/server/webkit/webkit.js +77 -61
  251. package/lib/server/webkit/wkAccessibility.js +161 -118
  252. package/lib/server/webkit/wkBrowser.js +193 -184
  253. package/lib/server/webkit/wkConnection.js +59 -83
  254. package/lib/server/webkit/wkExecutionContext.js +85 -70
  255. package/lib/server/webkit/wkInput.js +97 -95
  256. package/lib/server/webkit/wkInterceptableRequest.js +102 -95
  257. package/lib/server/webkit/wkPage.js +568 -667
  258. package/lib/server/webkit/wkProvisionalPage.js +45 -56
  259. package/lib/server/webkit/wkWorkers.js +79 -79
  260. package/lib/utils/expectUtils.js +31 -26
  261. package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
  262. package/lib/utils/isomorphic/assert.js +28 -22
  263. package/lib/utils/isomorphic/colors.js +66 -59
  264. package/lib/utils/isomorphic/cssParser.js +120 -125
  265. package/lib/utils/isomorphic/cssTokenizer.js +436 -364
  266. package/lib/utils/isomorphic/headers.js +38 -37
  267. package/lib/utils/isomorphic/locatorGenerators.js +358 -357
  268. package/lib/utils/isomorphic/locatorParser.js +96 -105
  269. package/lib/utils/isomorphic/locatorUtils.js +63 -44
  270. package/lib/utils/isomorphic/manualPromise.js +46 -39
  271. package/lib/utils/isomorphic/mimeType.js +447 -25
  272. package/lib/utils/isomorphic/multimap.js +34 -27
  273. package/lib/utils/isomorphic/protocolFormatter.js +68 -0
  274. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  275. package/lib/utils/isomorphic/recorderUtils.js +140 -181
  276. package/lib/utils/isomorphic/rtti.js +35 -33
  277. package/lib/utils/isomorphic/selectorParser.js +182 -193
  278. package/lib/utils/isomorphic/semaphore.js +27 -24
  279. package/lib/utils/isomorphic/stackTrace.js +87 -98
  280. package/lib/utils/isomorphic/stringUtils.js +98 -112
  281. package/lib/utils/isomorphic/time.js +46 -22
  282. package/lib/utils/isomorphic/timeoutRunner.js +53 -53
  283. package/lib/utils/isomorphic/traceUtils.js +37 -41
  284. package/lib/utils/isomorphic/types.js +15 -4
  285. package/lib/utils/isomorphic/urlMatch.js +113 -67
  286. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  287. package/lib/utils.js +101 -443
  288. package/lib/utilsBundle.js +101 -52
  289. package/lib/utilsBundleImpl/index.js +160 -150
  290. package/lib/zipBundle.js +32 -23
  291. package/lib/zipBundleImpl.js +4 -4
  292. package/package.json +1 -1
  293. package/types/protocol.d.ts +1267 -1057
  294. package/types/types.d.ts +131 -29
  295. package/lib/common/socksProxy.js +0 -569
  296. package/lib/common/timeoutSettings.js +0 -73
  297. package/lib/common/types.js +0 -5
  298. package/lib/image_tools/colorUtils.js +0 -98
  299. package/lib/image_tools/compare.js +0 -108
  300. package/lib/image_tools/imageChannel.js +0 -70
  301. package/lib/image_tools/stats.js +0 -102
  302. package/lib/protocol/debug.js +0 -27
  303. package/lib/protocol/transport.js +0 -82
  304. package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
  305. package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
  306. package/lib/server/recorder/contextRecorder.js +0 -290
  307. package/lib/server/recorder/recorderCollection.js +0 -104
  308. package/lib/server/recorder/recorderFrontend.js +0 -5
  309. package/lib/server/storageScript.js +0 -160
  310. package/lib/server/timeoutSettings.js +0 -74
  311. package/lib/third_party/diff_match_patch.js +0 -2222
  312. package/lib/utils/ascii.js +0 -31
  313. package/lib/utils/comparators.js +0 -171
  314. package/lib/utils/crypto.js +0 -174
  315. package/lib/utils/debug.js +0 -46
  316. package/lib/utils/debugLogger.js +0 -91
  317. package/lib/utils/env.js +0 -49
  318. package/lib/utils/eventsHelper.js +0 -38
  319. package/lib/utils/fileUtils.js +0 -205
  320. package/lib/utils/happy-eyeballs.js +0 -210
  321. package/lib/utils/headers.js +0 -52
  322. package/lib/utils/hostPlatform.js +0 -133
  323. package/lib/utils/httpServer.js +0 -237
  324. package/lib/utils/index.js +0 -368
  325. package/lib/utils/linuxUtils.js +0 -78
  326. package/lib/utils/manualPromise.js +0 -109
  327. package/lib/utils/multimap.js +0 -75
  328. package/lib/utils/network.js +0 -160
  329. package/lib/utils/processLauncher.js +0 -248
  330. package/lib/utils/profiler.js +0 -53
  331. package/lib/utils/rtti.js +0 -44
  332. package/lib/utils/semaphore.js +0 -51
  333. package/lib/utils/spawnAsync.js +0 -45
  334. package/lib/utils/stackTrace.js +0 -121
  335. package/lib/utils/task.js +0 -58
  336. package/lib/utils/time.js +0 -37
  337. package/lib/utils/timeoutRunner.js +0 -66
  338. package/lib/utils/traceUtils.js +0 -44
  339. package/lib/utils/userAgent.js +0 -105
  340. package/lib/utils/wsServer.js +0 -127
  341. package/lib/utils/zipFile.js +0 -75
  342. package/lib/utils/zones.js +0 -62
  343. package/lib/vite/htmlReport/index.html +0 -69
  344. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
  345. package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
  346. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  347. package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
  348. package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
  349. package/lib/vite/recorder/index.html +0 -29
  350. package/lib/vite/recorder/playwright-logo.svg +0 -9
  351. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
  352. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
  353. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
  354. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
  355. package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
  356. package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
  357. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  358. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
  359. package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
  360. package/lib/vite/traceViewer/embedded.html +0 -18
  361. package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
  362. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  363. package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
  364. package/lib/vite/traceViewer/index.html +0 -47
  365. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
  366. package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  367. package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
  368. package/lib/vite/traceViewer/recorder.html +0 -17
  369. package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
  370. package/lib/vite/traceViewer/snapshot.html +0 -21
  371. package/lib/vite/traceViewer/sw.bundle.js +0 -3
  372. package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
  373. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
  374. package/lib/vite/traceViewer/uiMode.html +0 -21
  375. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
  376. package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
@@ -1,134 +1,235 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "program", {
7
- enumerable: true,
8
- get: function () {
9
- return _utilsBundle.program;
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 });
10
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 program_exports = {};
30
+ __export(program_exports, {
31
+ program: () => import_utilsBundle2.program
11
32
  });
12
- var _fs = _interopRequireDefault(require("fs"));
13
- var _os = _interopRequireDefault(require("os"));
14
- var _path = _interopRequireDefault(require("path"));
15
- var playwright = _interopRequireWildcard(require("../.."));
16
- var _driver = require("./driver");
17
- var _server = require("../server");
18
- var _utils = require("../utils");
19
- var _traceViewer = require("../server/trace/viewer/traceViewer");
20
- var _ascii = require("../server/utils/ascii");
21
- var _utilsBundle = require("../utilsBundle");
22
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
24
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
- /**
26
- * Copyright (c) Microsoft Corporation.
27
- *
28
- * Licensed under the Apache License, Version 2.0 (the "License");
29
- * you may not use this file except in compliance with the License.
30
- * You may obtain a copy of the License at
31
- *
32
- * http://www.apache.org/licenses/LICENSE-2.0
33
- *
34
- * Unless required by applicable law or agreed to in writing, software
35
- * distributed under the License is distributed on an "AS IS" BASIS,
36
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
37
- * See the License for the specific language governing permissions and
38
- * limitations under the License.
39
- */
40
-
41
- /* eslint-disable no-console */
42
-
43
- const packageJSON = require('../../package.json');
44
- _utilsBundle.program.version('Version ' + (process.env.PW_CLI_DISPLAY_VERSION || packageJSON.version)).name(buildBasePlaywrightCLICommand(process.env.PW_LANG_NAME));
45
- _utilsBundle.program.command('mark-docker-image [dockerImageNameTemplate]', {
46
- hidden: true
47
- }).description('mark docker image').allowUnknownOption(true).action(function (dockerImageNameTemplate) {
48
- (0, _utils.assert)(dockerImageNameTemplate, 'dockerImageNameTemplate is required');
49
- (0, _server.writeDockerVersion)(dockerImageNameTemplate).catch(logErrorAndExit);
33
+ module.exports = __toCommonJS(program_exports);
34
+ var import_fs = __toESM(require("fs"));
35
+ var import_os = __toESM(require("os"));
36
+ var import_path = __toESM(require("path"));
37
+ var playwright = __toESM(require("../.."));
38
+ var import_driver = require("./driver");
39
+ var import_server = require("../server");
40
+ var import_utils = require("../utils");
41
+ var import_traceViewer = require("../server/trace/viewer/traceViewer");
42
+ var import_utils2 = require("../utils");
43
+ var import_ascii = require("../server/utils/ascii");
44
+ var import_utilsBundle = require("../utilsBundle");
45
+ var import_utilsBundle2 = require("../utilsBundle");
46
+ const packageJSON = require("../../package.json");
47
+ import_utilsBundle.program.version("Version " + (process.env.PW_CLI_DISPLAY_VERSION || packageJSON.version)).name(buildBasePlaywrightCLICommand(process.env.PW_LANG_NAME));
48
+ import_utilsBundle.program.command("mark-docker-image [dockerImageNameTemplate]", { hidden: true }).description("mark docker image").allowUnknownOption(true).action(function(dockerImageNameTemplate) {
49
+ (0, import_utils2.assert)(dockerImageNameTemplate, "dockerImageNameTemplate is required");
50
+ (0, import_server.writeDockerVersion)(dockerImageNameTemplate).catch(logErrorAndExit);
50
51
  });
51
- commandWithOpenOptions('open [url]', 'open page in browser specified via -b, --browser', []).action(function (url, options) {
52
- open(options, url, codegenId()).catch(logErrorAndExit);
53
- }).addHelpText('afterAll', `
52
+ commandWithOpenOptions("open [url]", "open page in browser specified via -b, --browser", []).action(function(url, options) {
53
+ open(options, url).catch(logErrorAndExit);
54
+ }).addHelpText("afterAll", `
54
55
  Examples:
55
56
 
56
57
  $ open
57
58
  $ open -b webkit https://example.com`);
58
- commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output <file name>', 'saves the generated script to a file'], ['--target <language>', `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()], ['--test-id-attribute <attributeName>', 'use the specified attribute to generate data test ID selectors']]).action(function (url, options) {
59
- codegen(options, url).catch(logErrorAndExit);
60
- }).addHelpText('afterAll', `
59
+ commandWithOpenOptions(
60
+ "codegen [url]",
61
+ "open page and generate code for user actions",
62
+ [
63
+ ["-o, --output <file name>", "saves the generated script to a file"],
64
+ ["--target <language>", `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()],
65
+ ["--test-id-attribute <attributeName>", "use the specified attribute to generate data test ID selectors"]
66
+ ]
67
+ ).action(function(url, options) {
68
+ codegen(options, url).catch((error) => {
69
+ if (process.env.PWTEST_CLI_AUTO_EXIT_WHEN) {
70
+ } else {
71
+ throw error;
72
+ }
73
+ });
74
+ }).addHelpText("afterAll", `
61
75
  Examples:
62
76
 
63
77
  $ codegen
64
78
  $ codegen --target=python
65
79
  $ codegen -b webkit https://example.com`);
66
80
  function suggestedBrowsersToInstall() {
67
- return _server.registry.executables().filter(e => e.installType !== 'none' && e.type !== 'tool').map(e => e.name).join(', ');
81
+ return import_server.registry.executables().filter((e) => e.installType !== "none" && e.type !== "tool").map((e) => e.name).join(", ");
68
82
  }
69
83
  function defaultBrowsersToInstall(options) {
70
- let executables = _server.registry.defaultExecutables();
71
- if (options.noShell) executables = executables.filter(e => e.name !== 'chromium-headless-shell');
72
- if (options.onlyShell) executables = executables.filter(e => e.name !== 'chromium');
84
+ let executables = import_server.registry.defaultExecutables();
85
+ if (options.noShell)
86
+ executables = executables.filter((e) => e.name !== "chromium-headless-shell");
87
+ if (options.onlyShell)
88
+ executables = executables.filter((e) => e.name !== "chromium");
73
89
  return executables;
74
90
  }
75
91
  function checkBrowsersToInstall(args, options) {
76
- if (options.noShell && options.onlyShell) throw new Error(`Only one of --no-shell and --only-shell can be specified`);
92
+ if (options.noShell && options.onlyShell)
93
+ throw new Error(`Only one of --no-shell and --only-shell can be specified`);
77
94
  const faultyArguments = [];
78
95
  const executables = [];
79
- const handleArgument = arg => {
80
- const executable = _server.registry.findExecutable(arg);
81
- if (!executable || executable.installType === 'none') faultyArguments.push(arg);else executables.push(executable);
82
- if ((executable === null || executable === void 0 ? void 0 : executable.browserName) === 'chromium') executables.push(_server.registry.findExecutable('ffmpeg'));
96
+ const handleArgument = (arg) => {
97
+ const executable = import_server.registry.findExecutable(arg);
98
+ if (!executable || executable.installType === "none")
99
+ faultyArguments.push(arg);
100
+ else
101
+ executables.push(executable);
102
+ if (executable?.browserName === "chromium")
103
+ executables.push(import_server.registry.findExecutable("ffmpeg"));
83
104
  };
84
105
  for (const arg of args) {
85
- if (arg === 'chromium') {
86
- if (!options.onlyShell) handleArgument('chromium');
87
- if (!options.noShell) handleArgument('chromium-headless-shell');
106
+ if (arg === "chromium") {
107
+ if (!options.onlyShell)
108
+ handleArgument("chromium");
109
+ if (!options.noShell)
110
+ handleArgument("chromium-headless-shell");
88
111
  } else {
89
112
  handleArgument(arg);
90
113
  }
91
114
  }
92
- if (process.platform === 'win32') executables.push(_server.registry.findExecutable('winldd'));
93
- if (faultyArguments.length) throw new Error(`Invalid installation targets: ${faultyArguments.map(name => `'${name}'`).join(', ')}. Expecting one of: ${suggestedBrowsersToInstall()}`);
115
+ if (process.platform === "win32")
116
+ executables.push(import_server.registry.findExecutable("winldd"));
117
+ if (faultyArguments.length)
118
+ throw new Error(`Invalid installation targets: ${faultyArguments.map((name) => `'${name}'`).join(", ")}. Expecting one of: ${suggestedBrowsersToInstall()}`);
94
119
  return executables;
95
120
  }
96
- _utilsBundle.program.command('install [browser...]').description('ensure browsers necessary for this version of Playwright are installed').option('--with-deps', 'install system dependencies for browsers').option('--dry-run', 'do not execute installation, only print information').option('--force', 'force reinstall of stable browser channels').option('--only-shell', 'only install headless shell when installing chromium').option('--no-shell', 'do not install chromium headless shell').action(async function (args, options) {
97
- // For '--no-shell' option, commander sets `shell: false` instead.
98
- if (options.shell === false) options.noShell = true;
99
- if ((0, _utils.isLikelyNpxGlobal)()) {
100
- console.error((0, _ascii.wrapInASCIIBox)([`WARNING: It looks like you are running 'npx playwright install' without first`, `installing your project's dependencies.`, ``, `To avoid unexpected behavior, please install your dependencies first, and`, `then run Playwright's install command:`, ``, ` npm install`, ` npx playwright install`, ``, `If your project does not yet depend on Playwright, first install the`, `applicable npm package (most commonly @playwright/test), and`, `then run Playwright's install command to download the browsers:`, ``, ` npm install @playwright/test`, ` npx playwright install`, ``].join('\n'), 1));
121
+ function printInstalledBrowsers(browsers2) {
122
+ const browserPaths = /* @__PURE__ */ new Set();
123
+ for (const browser of browsers2)
124
+ browserPaths.add(browser.browserPath);
125
+ console.log(` Browsers:`);
126
+ for (const browserPath of [...browserPaths].sort())
127
+ console.log(` ${browserPath}`);
128
+ console.log(` References:`);
129
+ const references = /* @__PURE__ */ new Set();
130
+ for (const browser of browsers2)
131
+ references.add(browser.referenceDir);
132
+ for (const reference of [...references].sort())
133
+ console.log(` ${reference}`);
134
+ }
135
+ function printGroupedByPlaywrightVersion(browsers2) {
136
+ const dirToVersion = /* @__PURE__ */ new Map();
137
+ for (const browser of browsers2) {
138
+ if (dirToVersion.has(browser.referenceDir))
139
+ continue;
140
+ const packageJSON2 = require(import_path.default.join(browser.referenceDir, "package.json"));
141
+ const version = packageJSON2.version;
142
+ dirToVersion.set(browser.referenceDir, version);
143
+ }
144
+ const groupedByPlaywrightMinorVersion = /* @__PURE__ */ new Map();
145
+ for (const browser of browsers2) {
146
+ const version = dirToVersion.get(browser.referenceDir);
147
+ let entries = groupedByPlaywrightMinorVersion.get(version);
148
+ if (!entries) {
149
+ entries = [];
150
+ groupedByPlaywrightMinorVersion.set(version, entries);
151
+ }
152
+ entries.push(browser);
153
+ }
154
+ const sortedVersions = [...groupedByPlaywrightMinorVersion.keys()].sort((a, b) => {
155
+ const aComponents = a.split(".");
156
+ const bComponents = b.split(".");
157
+ const aMajor = parseInt(aComponents[0], 10);
158
+ const bMajor = parseInt(bComponents[0], 10);
159
+ if (aMajor !== bMajor)
160
+ return aMajor - bMajor;
161
+ const aMinor = parseInt(aComponents[1], 10);
162
+ const bMinor = parseInt(bComponents[1], 10);
163
+ if (aMinor !== bMinor)
164
+ return aMinor - bMinor;
165
+ return aComponents.slice(2).join(".").localeCompare(bComponents.slice(2).join("."));
166
+ });
167
+ for (const version of sortedVersions) {
168
+ console.log(`
169
+ Playwright version: ${version}`);
170
+ printInstalledBrowsers(groupedByPlaywrightMinorVersion.get(version));
171
+ }
172
+ }
173
+ import_utilsBundle.program.command("install [browser...]").description("ensure browsers necessary for this version of Playwright are installed").option("--with-deps", "install system dependencies for browsers").option("--dry-run", "do not execute installation, only print information").option("--list", "prints list of browsers from all playwright installations").option("--force", "force reinstall of stable browser channels").option("--only-shell", "only install headless shell when installing chromium").option("--no-shell", "do not install chromium headless shell").action(async function(args, options) {
174
+ if (options.shell === false)
175
+ options.noShell = true;
176
+ if ((0, import_utils.isLikelyNpxGlobal)()) {
177
+ console.error((0, import_ascii.wrapInASCIIBox)([
178
+ `WARNING: It looks like you are running 'npx playwright install' without first`,
179
+ `installing your project's dependencies.`,
180
+ ``,
181
+ `To avoid unexpected behavior, please install your dependencies first, and`,
182
+ `then run Playwright's install command:`,
183
+ ``,
184
+ ` npm install`,
185
+ ` npx playwright install`,
186
+ ``,
187
+ `If your project does not yet depend on Playwright, first install the`,
188
+ `applicable npm package (most commonly @playwright/test), and`,
189
+ `then run Playwright's install command to download the browsers:`,
190
+ ``,
191
+ ` npm install @playwright/test`,
192
+ ` npx playwright install`,
193
+ ``
194
+ ].join("\n"), 1));
101
195
  }
102
196
  try {
103
197
  const hasNoArguments = !args.length;
104
198
  const executables = hasNoArguments ? defaultBrowsersToInstall(options) : checkBrowsersToInstall(args, options);
105
- if (options.withDeps) await _server.registry.installDeps(executables, !!options.dryRun);
199
+ if (options.withDeps)
200
+ await import_server.registry.installDeps(executables, !!options.dryRun);
201
+ if (options.dryRun && options.list)
202
+ throw new Error(`Only one of --dry-run and --list can be specified`);
106
203
  if (options.dryRun) {
107
204
  for (const executable of executables) {
108
- var _executable$directory, _executable$downloadU;
109
- const version = executable.browserVersion ? `version ` + executable.browserVersion : '';
110
- console.log(`browser: ${executable.name}${version ? ' ' + version : ''}`);
111
- console.log(` Install location: ${(_executable$directory = executable.directory) !== null && _executable$directory !== void 0 ? _executable$directory : '<system>'}`);
112
- if ((_executable$downloadU = executable.downloadURLs) !== null && _executable$downloadU !== void 0 && _executable$downloadU.length) {
205
+ const version = executable.browserVersion ? `version ` + executable.browserVersion : "";
206
+ console.log(`browser: ${executable.name}${version ? " " + version : ""}`);
207
+ console.log(` Install location: ${executable.directory ?? "<system>"}`);
208
+ if (executable.downloadURLs?.length) {
113
209
  const [url, ...fallbacks] = executable.downloadURLs;
114
210
  console.log(` Download url: ${url}`);
115
- for (let i = 0; i < fallbacks.length; ++i) console.log(` Download fallback ${i + 1}: ${fallbacks[i]}`);
211
+ for (let i = 0; i < fallbacks.length; ++i)
212
+ console.log(` Download fallback ${i + 1}: ${fallbacks[i]}`);
116
213
  }
117
214
  console.log(``);
118
215
  }
216
+ } else if (options.list) {
217
+ const browsers2 = await import_server.registry.listInstalledBrowsers();
218
+ printGroupedByPlaywrightVersion(browsers2);
119
219
  } else {
120
220
  const forceReinstall = hasNoArguments ? false : !!options.force;
121
- await _server.registry.install(executables, forceReinstall);
122
- await _server.registry.validateHostRequirementsForExecutablesIfNeeded(executables, process.env.PW_LANG_NAME || 'javascript').catch(e => {
123
- e.name = 'Playwright Host validation warning';
221
+ await import_server.registry.install(executables, forceReinstall);
222
+ await import_server.registry.validateHostRequirementsForExecutablesIfNeeded(executables, process.env.PW_LANG_NAME || "javascript").catch((e) => {
223
+ e.name = "Playwright Host validation warning";
124
224
  console.error(e);
125
225
  });
126
226
  }
127
227
  } catch (e) {
128
- console.log(`Failed to install browsers\n${e}`);
129
- (0, _utils.gracefullyProcessExitDoNotHang)(1);
228
+ console.log(`Failed to install browsers
229
+ ${e}`);
230
+ (0, import_utils.gracefullyProcessExitDoNotHang)(1);
130
231
  }
131
- }).addHelpText('afterAll', `
232
+ }).addHelpText("afterAll", `
132
233
 
133
234
  Examples:
134
235
  - $ install
@@ -136,106 +237,110 @@ Examples:
136
237
 
137
238
  - $ install chrome firefox
138
239
  Install custom browsers, supports ${suggestedBrowsersToInstall()}.`);
139
- _utilsBundle.program.command('uninstall').description('Removes browsers used by this installation of Playwright from the system (chromium, firefox, webkit, ffmpeg). This does not include branded channels.').option('--all', 'Removes all browsers used by any Playwright installation from the system.').action(async options => {
240
+ import_utilsBundle.program.command("uninstall").description("Removes browsers used by this installation of Playwright from the system (chromium, firefox, webkit, ffmpeg). This does not include branded channels.").option("--all", "Removes all browsers used by any Playwright installation from the system.").action(async (options) => {
140
241
  delete process.env.PLAYWRIGHT_SKIP_BROWSER_GC;
141
- await _server.registry.uninstall(!!options.all).then(({
142
- numberOfBrowsersLeft
143
- }) => {
242
+ await import_server.registry.uninstall(!!options.all).then(({ numberOfBrowsersLeft }) => {
144
243
  if (!options.all && numberOfBrowsersLeft > 0) {
145
- console.log('Successfully uninstalled Playwright browsers for the current Playwright installation.');
146
- console.log(`There are still ${numberOfBrowsersLeft} browsers left, used by other Playwright installations.\nTo uninstall Playwright browsers for all installations, re-run with --all flag.`);
244
+ console.log("Successfully uninstalled Playwright browsers for the current Playwright installation.");
245
+ console.log(`There are still ${numberOfBrowsersLeft} browsers left, used by other Playwright installations.
246
+ To uninstall Playwright browsers for all installations, re-run with --all flag.`);
147
247
  }
148
248
  }).catch(logErrorAndExit);
149
249
  });
150
- _utilsBundle.program.command('install-deps [browser...]').description('install dependencies necessary to run browsers (will ask for sudo permissions)').option('--dry-run', 'Do not execute installation commands, only print them').action(async function (args, options) {
250
+ import_utilsBundle.program.command("install-deps [browser...]").description("install dependencies necessary to run browsers (will ask for sudo permissions)").option("--dry-run", "Do not execute installation commands, only print them").action(async function(args, options) {
151
251
  try {
152
- if (!args.length) await _server.registry.installDeps(defaultBrowsersToInstall({}), !!options.dryRun);else await _server.registry.installDeps(checkBrowsersToInstall(args, {}), !!options.dryRun);
252
+ if (!args.length)
253
+ await import_server.registry.installDeps(defaultBrowsersToInstall({}), !!options.dryRun);
254
+ else
255
+ await import_server.registry.installDeps(checkBrowsersToInstall(args, {}), !!options.dryRun);
153
256
  } catch (e) {
154
- console.log(`Failed to install browser dependencies\n${e}`);
155
- (0, _utils.gracefullyProcessExitDoNotHang)(1);
257
+ console.log(`Failed to install browser dependencies
258
+ ${e}`);
259
+ (0, import_utils.gracefullyProcessExitDoNotHang)(1);
156
260
  }
157
- }).addHelpText('afterAll', `
261
+ }).addHelpText("afterAll", `
158
262
  Examples:
159
263
  - $ install-deps
160
264
  Install dependencies for default browsers.
161
265
 
162
266
  - $ install-deps chrome firefox
163
267
  Install dependencies for specific browsers, supports ${suggestedBrowsersToInstall()}.`);
164
- const browsers = [{
165
- alias: 'cr',
166
- name: 'Chromium',
167
- type: 'chromium'
168
- }, {
169
- alias: 'ff',
170
- name: 'Firefox',
171
- type: 'firefox'
172
- }, {
173
- alias: 'wk',
174
- name: 'WebKit',
175
- type: 'webkit'
176
- }];
177
- for (const {
178
- alias,
179
- name,
180
- type
181
- } of browsers) {
182
- commandWithOpenOptions(`${alias} [url]`, `open page in ${name}`, []).action(function (url, options) {
183
- open({
184
- ...options,
185
- browser: type
186
- }, url, options.target).catch(logErrorAndExit);
187
- }).addHelpText('afterAll', `
268
+ const browsers = [
269
+ { alias: "cr", name: "Chromium", type: "chromium" },
270
+ { alias: "ff", name: "Firefox", type: "firefox" },
271
+ { alias: "wk", name: "WebKit", type: "webkit" }
272
+ ];
273
+ for (const { alias, name, type } of browsers) {
274
+ commandWithOpenOptions(`${alias} [url]`, `open page in ${name}`, []).action(function(url, options) {
275
+ open({ ...options, browser: type }, url).catch(logErrorAndExit);
276
+ }).addHelpText("afterAll", `
188
277
  Examples:
189
278
 
190
279
  $ ${alias} https://example.com`);
191
280
  }
192
- commandWithOpenOptions('screenshot <url> <filename>', 'capture a page screenshot', [['--wait-for-selector <selector>', 'wait for selector before taking a screenshot'], ['--wait-for-timeout <timeout>', 'wait for timeout in milliseconds before taking a screenshot'], ['--full-page', 'whether to take a full page screenshot (entire scrollable area)']]).action(function (url, filename, command) {
281
+ commandWithOpenOptions(
282
+ "screenshot <url> <filename>",
283
+ "capture a page screenshot",
284
+ [
285
+ ["--wait-for-selector <selector>", "wait for selector before taking a screenshot"],
286
+ ["--wait-for-timeout <timeout>", "wait for timeout in milliseconds before taking a screenshot"],
287
+ ["--full-page", "whether to take a full page screenshot (entire scrollable area)"]
288
+ ]
289
+ ).action(function(url, filename, command) {
193
290
  screenshot(command, command, url, filename).catch(logErrorAndExit);
194
- }).addHelpText('afterAll', `
291
+ }).addHelpText("afterAll", `
195
292
  Examples:
196
293
 
197
294
  $ screenshot -b webkit https://example.com example.png`);
198
- commandWithOpenOptions('pdf <url> <filename>', 'save page as pdf', [['--wait-for-selector <selector>', 'wait for given selector before saving as pdf'], ['--wait-for-timeout <timeout>', 'wait for given timeout in milliseconds before saving as pdf']]).action(function (url, filename, options) {
295
+ commandWithOpenOptions(
296
+ "pdf <url> <filename>",
297
+ "save page as pdf",
298
+ [
299
+ ["--paper-format <format>", "paper format: Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6"],
300
+ ["--wait-for-selector <selector>", "wait for given selector before saving as pdf"],
301
+ ["--wait-for-timeout <timeout>", "wait for given timeout in milliseconds before saving as pdf"]
302
+ ]
303
+ ).action(function(url, filename, options) {
199
304
  pdf(options, options, url, filename).catch(logErrorAndExit);
200
- }).addHelpText('afterAll', `
305
+ }).addHelpText("afterAll", `
201
306
  Examples:
202
307
 
203
308
  $ pdf https://example.com example.pdf`);
204
- _utilsBundle.program.command('run-driver', {
205
- hidden: true
206
- }).action(function (options) {
207
- (0, _driver.runDriver)();
309
+ import_utilsBundle.program.command("run-driver", { hidden: true }).action(function(options) {
310
+ (0, import_driver.runDriver)();
208
311
  });
209
- _utilsBundle.program.command('run-server').option('--port <port>', 'Server port').option('--host <host>', 'Server host').option('--path <path>', 'Endpoint Path', '/').option('--max-clients <maxClients>', 'Maximum clients').option('--mode <mode>', 'Server mode, either "default" or "extension"').action(function (options) {
210
- (0, _driver.runServer)({
211
- port: options.port ? +options.port : undefined,
312
+ import_utilsBundle.program.command("run-server").option("--port <port>", "Server port").option("--host <host>", "Server host").option("--path <path>", "Endpoint Path", "/").option("--max-clients <maxClients>", "Maximum clients").option("--mode <mode>", 'Server mode, either "default" or "extension"').action(function(options) {
313
+ (0, import_driver.runServer)({
314
+ port: options.port ? +options.port : void 0,
212
315
  host: options.host,
213
316
  path: options.path,
214
317
  maxConnections: options.maxClients ? +options.maxClients : Infinity,
215
- extension: options.mode === 'extension' || !!process.env.PW_EXTENSION_MODE
318
+ extension: options.mode === "extension" || !!process.env.PW_EXTENSION_MODE
216
319
  }).catch(logErrorAndExit);
217
320
  });
218
- _utilsBundle.program.command('print-api-json', {
219
- hidden: true
220
- }).action(function (options) {
221
- (0, _driver.printApiJson)();
321
+ import_utilsBundle.program.command("print-api-json", { hidden: true }).action(function(options) {
322
+ (0, import_driver.printApiJson)();
222
323
  });
223
- _utilsBundle.program.command('launch-server', {
224
- hidden: true
225
- }).requiredOption('--browser <browserName>', 'Browser name, one of "chromium", "firefox" or "webkit"').option('--config <path-to-config-file>', 'JSON file with launchServer options').action(function (options) {
226
- (0, _driver.launchBrowserServer)(options.browser, options.config);
324
+ import_utilsBundle.program.command("launch-server", { hidden: true }).requiredOption("--browser <browserName>", 'Browser name, one of "chromium", "firefox" or "webkit"').option("--config <path-to-config-file>", "JSON file with launchServer options").action(function(options) {
325
+ (0, import_driver.launchBrowserServer)(options.browser, options.config);
227
326
  });
228
- _utilsBundle.program.command('show-trace [trace...]').option('-b, --browser <browserType>', 'browser to use, one of cr, chromium, ff, firefox, wk, webkit', 'chromium').option('-h, --host <host>', 'Host to serve trace on; specifying this option opens trace in a browser tab').option('-p, --port <port>', 'Port to serve trace on, 0 for any free port; specifying this option opens trace in a browser tab').option('--stdin', 'Accept trace URLs over stdin to update the viewer').description('show trace viewer').action(function (traces, options) {
229
- if (options.browser === 'cr') options.browser = 'chromium';
230
- if (options.browser === 'ff') options.browser = 'firefox';
231
- if (options.browser === 'wk') options.browser = 'webkit';
327
+ import_utilsBundle.program.command("show-trace [trace...]").option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("-h, --host <host>", "Host to serve trace on; specifying this option opens trace in a browser tab").option("-p, --port <port>", "Port to serve trace on, 0 for any free port; specifying this option opens trace in a browser tab").option("--stdin", "Accept trace URLs over stdin to update the viewer").description("show trace viewer").action(function(traces, options) {
328
+ if (options.browser === "cr")
329
+ options.browser = "chromium";
330
+ if (options.browser === "ff")
331
+ options.browser = "firefox";
332
+ if (options.browser === "wk")
333
+ options.browser = "webkit";
232
334
  const openOptions = {
233
335
  host: options.host,
234
336
  port: +options.port,
235
337
  isServer: !!options.stdin
236
338
  };
237
- if (options.port !== undefined || options.host !== undefined) (0, _traceViewer.runTraceInBrowser)(traces, openOptions).catch(logErrorAndExit);else (0, _traceViewer.runTraceViewerApp)(traces, options.browser, openOptions, true).catch(logErrorAndExit);
238
- }).addHelpText('afterAll', `
339
+ if (options.port !== void 0 || options.host !== void 0)
340
+ (0, import_traceViewer.runTraceInBrowser)(traces, openOptions).catch(logErrorAndExit);
341
+ else
342
+ (0, import_traceViewer.runTraceViewerApp)(traces, options.browser, openOptions, true).catch(logErrorAndExit);
343
+ }).addHelpText("afterAll", `
239
344
  Examples:
240
345
 
241
346
  $ show-trace https://example.com/trace.zip`);
@@ -243,79 +348,43 @@ async function launchContext(options, extraOptions) {
243
348
  validateOptions(options);
244
349
  const browserType = lookupBrowserType(options);
245
350
  const launchOptions = extraOptions;
246
- if (options.channel) launchOptions.channel = options.channel;
351
+ if (options.channel)
352
+ launchOptions.channel = options.channel;
247
353
  launchOptions.handleSIGINT = false;
248
- const contextOptions =
249
- // Copy the device descriptor since we have to compare and modify the options.
250
- options.device ? {
251
- ...playwright.devices[options.device]
252
- } : {};
253
-
254
- // In headful mode, use host device scale factor for things to look nice.
255
- // In headless, keep things the way it works in Playwright by default.
256
- // Assume high-dpi on MacOS. TODO: this is not perfect.
257
- if (!extraOptions.headless) contextOptions.deviceScaleFactor = _os.default.platform() === 'darwin' ? 2 : 1;
258
-
259
- // Work around the WebKit GTK scrolling issue.
260
- if (browserType.name() === 'webkit' && process.platform === 'linux') {
354
+ const contextOptions = (
355
+ // Copy the device descriptor since we have to compare and modify the options.
356
+ options.device ? { ...playwright.devices[options.device] } : {}
357
+ );
358
+ if (!extraOptions.headless)
359
+ contextOptions.deviceScaleFactor = import_os.default.platform() === "darwin" ? 2 : 1;
360
+ if (browserType.name() === "webkit" && process.platform === "linux") {
261
361
  delete contextOptions.hasTouch;
262
362
  delete contextOptions.isMobile;
263
363
  }
264
- if (contextOptions.isMobile && browserType.name() === 'firefox') contextOptions.isMobile = undefined;
265
- if (options.blockServiceWorkers) contextOptions.serviceWorkers = 'block';
266
-
267
- // Proxy
268
-
364
+ if (contextOptions.isMobile && browserType.name() === "firefox")
365
+ contextOptions.isMobile = void 0;
366
+ if (options.blockServiceWorkers)
367
+ contextOptions.serviceWorkers = "block";
269
368
  if (options.proxyServer) {
270
369
  launchOptions.proxy = {
271
370
  server: options.proxyServer
272
371
  };
273
- if (options.proxyBypass) launchOptions.proxy.bypass = options.proxyBypass;
274
- }
275
- const browser = await browserType.launch(launchOptions);
276
- if (process.env.PWTEST_CLI_IS_UNDER_TEST) {
277
- process._didSetSourcesForTest = text => {
278
- process.stdout.write('\n-------------8<-------------\n');
279
- process.stdout.write(text);
280
- process.stdout.write('\n-------------8<-------------\n');
281
- const autoExitCondition = process.env.PWTEST_CLI_AUTO_EXIT_WHEN;
282
- if (autoExitCondition && text.includes(autoExitCondition)) closeBrowser();
283
- };
284
- // Make sure we exit abnormally when browser crashes.
285
- const logs = [];
286
- require('playwright-core/lib/utilsBundle').debug.log = (...args) => {
287
- const line = require('util').format(...args) + '\n';
288
- logs.push(line);
289
- process.stderr.write(line);
290
- };
291
- browser.on('disconnected', () => {
292
- const hasCrashLine = logs.some(line => line.includes('process did exit:') && !line.includes('process did exit: exitCode=0, signal=null'));
293
- if (hasCrashLine) {
294
- process.stderr.write('Detected browser crash.\n');
295
- (0, _utils.gracefullyProcessExitDoNotHang)(1);
296
- }
297
- });
372
+ if (options.proxyBypass)
373
+ launchOptions.proxy.bypass = options.proxyBypass;
298
374
  }
299
-
300
- // Viewport size
301
375
  if (options.viewportSize) {
302
376
  try {
303
- const [width, height] = options.viewportSize.split(',').map(n => +n);
304
- if (isNaN(width) || isNaN(height)) throw new Error('bad values');
305
- contextOptions.viewport = {
306
- width,
307
- height
308
- };
377
+ const [width, height] = options.viewportSize.split(",").map((n) => +n);
378
+ if (isNaN(width) || isNaN(height))
379
+ throw new Error("bad values");
380
+ contextOptions.viewport = { width, height };
309
381
  } catch (e) {
310
382
  throw new Error('Invalid viewport size format: use "width,height", for example --viewport-size="800,600"');
311
383
  }
312
384
  }
313
-
314
- // Geolocation
315
-
316
385
  if (options.geolocation) {
317
386
  try {
318
- const [latitude, longitude] = options.geolocation.split(',').map(n => parseFloat(n.trim()));
387
+ const [latitude, longitude] = options.geolocation.split(",").map((n) => parseFloat(n.trim()));
319
388
  contextOptions.geolocation = {
320
389
  latitude,
321
390
  longitude
@@ -323,149 +392,128 @@ async function launchContext(options, extraOptions) {
323
392
  } catch (e) {
324
393
  throw new Error('Invalid geolocation format, should be "lat,long". For example --geolocation="37.819722,-122.478611"');
325
394
  }
326
- contextOptions.permissions = ['geolocation'];
395
+ contextOptions.permissions = ["geolocation"];
327
396
  }
328
-
329
- // User agent
330
-
331
- if (options.userAgent) contextOptions.userAgent = options.userAgent;
332
-
333
- // Lang
334
-
335
- if (options.lang) contextOptions.locale = options.lang;
336
-
337
- // Color scheme
338
-
339
- if (options.colorScheme) contextOptions.colorScheme = options.colorScheme;
340
-
341
- // Timezone
342
-
343
- if (options.timezone) contextOptions.timezoneId = options.timezone;
344
-
345
- // Storage
346
-
347
- if (options.loadStorage) contextOptions.storageState = options.loadStorage;
348
- if (options.ignoreHttpsErrors) contextOptions.ignoreHTTPSErrors = true;
349
-
350
- // HAR
351
-
397
+ if (options.userAgent)
398
+ contextOptions.userAgent = options.userAgent;
399
+ if (options.lang)
400
+ contextOptions.locale = options.lang;
401
+ if (options.colorScheme)
402
+ contextOptions.colorScheme = options.colorScheme;
403
+ if (options.timezone)
404
+ contextOptions.timezoneId = options.timezone;
405
+ if (options.loadStorage)
406
+ contextOptions.storageState = options.loadStorage;
407
+ if (options.ignoreHttpsErrors)
408
+ contextOptions.ignoreHTTPSErrors = true;
352
409
  if (options.saveHar) {
353
- contextOptions.recordHar = {
354
- path: _path.default.resolve(process.cwd(), options.saveHar),
355
- mode: 'minimal'
410
+ contextOptions.recordHar = { path: import_path.default.resolve(process.cwd(), options.saveHar), mode: "minimal" };
411
+ if (options.saveHarGlob)
412
+ contextOptions.recordHar.urlFilter = options.saveHarGlob;
413
+ contextOptions.serviceWorkers = "block";
414
+ }
415
+ let browser;
416
+ let context;
417
+ if (options.userDataDir) {
418
+ context = await browserType.launchPersistentContext(options.userDataDir, { ...launchOptions, ...contextOptions });
419
+ browser = context.browser();
420
+ } else {
421
+ browser = await browserType.launch(launchOptions);
422
+ context = await browser.newContext(contextOptions);
423
+ }
424
+ if (process.env.PWTEST_CLI_IS_UNDER_TEST) {
425
+ process._didSetSourcesForTest = (text) => {
426
+ process.stdout.write("\n-------------8<-------------\n");
427
+ process.stdout.write(text);
428
+ process.stdout.write("\n-------------8<-------------\n");
429
+ const autoExitCondition = process.env.PWTEST_CLI_AUTO_EXIT_WHEN;
430
+ if (autoExitCondition && text.includes(autoExitCondition))
431
+ closeBrowser();
432
+ };
433
+ const logs = [];
434
+ require("playwright-core/lib/utilsBundle").debug.log = (...args) => {
435
+ const line = require("util").format(...args) + "\n";
436
+ logs.push(line);
437
+ process.stderr.write(line);
356
438
  };
357
- if (options.saveHarGlob) contextOptions.recordHar.urlFilter = options.saveHarGlob;
358
- contextOptions.serviceWorkers = 'block';
439
+ browser.on("disconnected", () => {
440
+ const hasCrashLine = logs.some((line) => line.includes("process did exit:") && !line.includes("process did exit: exitCode=0, signal=null"));
441
+ if (hasCrashLine) {
442
+ process.stderr.write("Detected browser crash.\n");
443
+ (0, import_utils.gracefullyProcessExitDoNotHang)(1);
444
+ }
445
+ });
359
446
  }
360
-
361
- // Close app when the last window closes.
362
-
363
- const context = await browser.newContext(contextOptions);
364
447
  let closingBrowser = false;
365
448
  async function closeBrowser() {
366
- // We can come here multiple times. For example, saving storage creates
367
- // a temporary page and we call closeBrowser again when that page closes.
368
- if (closingBrowser) return;
449
+ if (closingBrowser)
450
+ return;
369
451
  closingBrowser = true;
370
- if (options.saveStorage) await context.storageState({
371
- path: options.saveStorage
372
- }).catch(e => null);
373
- if (options.saveHar) await context.close();
452
+ if (options.saveStorage)
453
+ await context.storageState({ path: options.saveStorage }).catch((e) => null);
454
+ if (options.saveHar)
455
+ await context.close();
374
456
  await browser.close();
375
457
  }
376
- context.on('page', page => {
377
- page.on('dialog', () => {}); // Prevent dialogs from being automatically dismissed.
378
- page.on('close', () => {
379
- const hasPage = browser.contexts().some(context => context.pages().length > 0);
380
- if (hasPage) return;
381
- // Avoid the error when the last page is closed because the browser has been closed.
382
- closeBrowser().catch(() => {});
458
+ context.on("page", (page) => {
459
+ page.on("dialog", () => {
460
+ });
461
+ page.on("close", () => {
462
+ const hasPage = browser.contexts().some((context2) => context2.pages().length > 0);
463
+ if (hasPage)
464
+ return;
465
+ closeBrowser().catch(() => {
466
+ });
383
467
  });
384
468
  });
385
- process.on('SIGINT', async () => {
469
+ process.on("SIGINT", async () => {
386
470
  await closeBrowser();
387
- (0, _utils.gracefullyProcessExitDoNotHang)(130);
471
+ (0, import_utils.gracefullyProcessExitDoNotHang)(130);
388
472
  });
389
473
  const timeout = options.timeout ? parseInt(options.timeout, 10) : 0;
390
474
  context.setDefaultTimeout(timeout);
391
475
  context.setDefaultNavigationTimeout(timeout);
392
-
393
- // Omit options that we add automatically for presentation purpose.
394
476
  delete launchOptions.headless;
395
477
  delete launchOptions.executablePath;
396
478
  delete launchOptions.handleSIGINT;
397
479
  delete contextOptions.deviceScaleFactor;
398
- return {
399
- browser,
400
- browserName: browserType.name(),
401
- context,
402
- contextOptions,
403
- launchOptions
404
- };
480
+ return { browser, browserName: browserType.name(), context, contextOptions, launchOptions };
405
481
  }
406
482
  async function openPage(context, url) {
407
- const page = await context.newPage();
483
+ let page = context.pages()[0];
484
+ if (!page)
485
+ page = await context.newPage();
408
486
  if (url) {
409
- if (_fs.default.existsSync(url)) url = 'file://' + _path.default.resolve(url);else if (!url.startsWith('http') && !url.startsWith('file://') && !url.startsWith('about:') && !url.startsWith('data:')) url = 'http://' + url;
410
- await page.goto(url).catch(error => {
411
- if (process.env.PWTEST_CLI_AUTO_EXIT_WHEN) {
412
- // Tests with PWTEST_CLI_AUTO_EXIT_WHEN might close page too fast, resulting
413
- // in a stray navigation aborted error. We should ignore it.
414
- } else {
415
- throw error;
416
- }
417
- });
487
+ if (import_fs.default.existsSync(url))
488
+ url = "file://" + import_path.default.resolve(url);
489
+ else if (!url.startsWith("http") && !url.startsWith("file://") && !url.startsWith("about:") && !url.startsWith("data:"))
490
+ url = "http://" + url;
491
+ await page.goto(url);
418
492
  }
419
493
  return page;
420
494
  }
421
- async function open(options, url, language) {
422
- const {
423
- context,
424
- launchOptions,
425
- contextOptions
426
- } = await launchContext(options, {
427
- headless: !!process.env.PWTEST_CLI_HEADLESS,
428
- executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH
429
- });
430
- await context._enableRecorder({
431
- language,
432
- launchOptions,
433
- contextOptions,
434
- device: options.device,
435
- saveStorage: options.saveStorage,
436
- handleSIGINT: false
437
- });
495
+ async function open(options, url) {
496
+ const { context } = await launchContext(options, { headless: !!process.env.PWTEST_CLI_HEADLESS, executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH });
438
497
  await openPage(context, url);
439
498
  }
440
499
  async function codegen(options, url) {
441
- const {
442
- target: language,
443
- output: outputFile,
444
- testIdAttribute: testIdAttributeName
445
- } = options;
446
- const tracesDir = _path.default.join(_os.default.tmpdir(), `playwright-recorder-trace-${Date.now()}`);
447
- const {
448
- context,
449
- launchOptions,
450
- contextOptions
451
- } = await launchContext(options, {
500
+ const { target: language, output: outputFile, testIdAttribute: testIdAttributeName } = options;
501
+ const tracesDir = import_path.default.join(import_os.default.tmpdir(), `playwright-recorder-trace-${Date.now()}`);
502
+ const { context, launchOptions, contextOptions } = await launchContext(options, {
452
503
  headless: !!process.env.PWTEST_CLI_HEADLESS,
453
504
  executablePath: process.env.PWTEST_CLI_EXECUTABLE_PATH,
454
505
  tracesDir
455
506
  });
456
- _utilsBundle.dotenv.config({
457
- path: 'playwright.env'
458
- });
507
+ import_utilsBundle.dotenv.config({ path: "playwright.env" });
459
508
  await context._enableRecorder({
460
509
  language,
461
510
  launchOptions,
462
511
  contextOptions,
463
512
  device: options.device,
464
513
  saveStorage: options.saveStorage,
465
- mode: 'recording',
466
- codegenMode: process.env.PW_RECORDER_IS_TRACE_VIEWER ? 'trace-events' : 'actions',
514
+ mode: "recording",
467
515
  testIdAttributeName,
468
- outputFile: outputFile ? _path.default.resolve(outputFile) : undefined,
516
+ outputFile: outputFile ? import_path.default.resolve(outputFile) : void 0,
469
517
  handleSIGINT: false
470
518
  });
471
519
  await openPage(context, url);
@@ -480,41 +528,24 @@ async function waitForPage(page, captureOptions) {
480
528
  await page.waitForTimeout(parseInt(captureOptions.waitForTimeout, 10));
481
529
  }
482
530
  }
483
- async function screenshot(options, captureOptions, url, path) {
484
- const {
485
- context
486
- } = await launchContext(options, {
487
- headless: true
488
- });
489
- console.log('Navigating to ' + url);
531
+ async function screenshot(options, captureOptions, url, path2) {
532
+ const { context } = await launchContext(options, { headless: true });
533
+ console.log("Navigating to " + url);
490
534
  const page = await openPage(context, url);
491
535
  await waitForPage(page, captureOptions);
492
- console.log('Capturing screenshot into ' + path);
493
- await page.screenshot({
494
- path,
495
- fullPage: !!captureOptions.fullPage
496
- });
497
- // launchContext takes care of closing the browser.
536
+ console.log("Capturing screenshot into " + path2);
537
+ await page.screenshot({ path: path2, fullPage: !!captureOptions.fullPage });
498
538
  await page.close();
499
539
  }
500
- async function pdf(options, captureOptions, url, path) {
501
- if (options.browser !== 'chromium') throw new Error('PDF creation is only working with Chromium');
502
- const {
503
- context
504
- } = await launchContext({
505
- ...options,
506
- browser: 'chromium'
507
- }, {
508
- headless: true
509
- });
510
- console.log('Navigating to ' + url);
540
+ async function pdf(options, captureOptions, url, path2) {
541
+ if (options.browser !== "chromium")
542
+ throw new Error("PDF creation is only working with Chromium");
543
+ const { context } = await launchContext({ ...options, browser: "chromium" }, { headless: true });
544
+ console.log("Navigating to " + url);
511
545
  const page = await openPage(context, url);
512
546
  await waitForPage(page, captureOptions);
513
- console.log('Saving as pdf into ' + path);
514
- await page.pdf({
515
- path
516
- });
517
- // launchContext takes care of closing the browser.
547
+ console.log("Saving as pdf into " + path2);
548
+ await page.pdf({ path: path2, format: captureOptions.paperFormat });
518
549
  await page.close();
519
550
  }
520
551
  function lookupBrowserType(options) {
@@ -525,60 +556,70 @@ function lookupBrowserType(options) {
525
556
  }
526
557
  let browserType;
527
558
  switch (name) {
528
- case 'chromium':
559
+ case "chromium":
529
560
  browserType = playwright.chromium;
530
561
  break;
531
- case 'webkit':
562
+ case "webkit":
532
563
  browserType = playwright.webkit;
533
564
  break;
534
- case 'firefox':
565
+ case "firefox":
535
566
  browserType = playwright.firefox;
536
567
  break;
537
- case 'cr':
568
+ case "cr":
538
569
  browserType = playwright.chromium;
539
570
  break;
540
- case 'wk':
571
+ case "wk":
541
572
  browserType = playwright.webkit;
542
573
  break;
543
- case 'ff':
574
+ case "ff":
544
575
  browserType = playwright.firefox;
545
576
  break;
546
577
  }
547
- if (browserType) return browserType;
548
- _utilsBundle.program.help();
578
+ if (browserType)
579
+ return browserType;
580
+ import_utilsBundle.program.help();
549
581
  }
550
582
  function validateOptions(options) {
551
583
  if (options.device && !(options.device in playwright.devices)) {
552
584
  const lines = [`Device descriptor not found: '${options.device}', available devices are:`];
553
- for (const name in playwright.devices) lines.push(` "${name}"`);
554
- throw new Error(lines.join('\n'));
585
+ for (const name in playwright.devices)
586
+ lines.push(` "${name}"`);
587
+ throw new Error(lines.join("\n"));
555
588
  }
556
- if (options.colorScheme && !['light', 'dark'].includes(options.colorScheme)) throw new Error('Invalid color scheme, should be one of "light", "dark"');
589
+ if (options.colorScheme && !["light", "dark"].includes(options.colorScheme))
590
+ throw new Error('Invalid color scheme, should be one of "light", "dark"');
557
591
  }
558
592
  function logErrorAndExit(e) {
559
- if (process.env.PWDEBUGIMPL) console.error(e);else console.error(e.name + ': ' + e.message);
560
- (0, _utils.gracefullyProcessExitDoNotHang)(1);
593
+ if (process.env.PWDEBUGIMPL)
594
+ console.error(e);
595
+ else
596
+ console.error(e.name + ": " + e.message);
597
+ (0, import_utils.gracefullyProcessExitDoNotHang)(1);
561
598
  }
562
599
  function codegenId() {
563
- return process.env.PW_LANG_NAME || 'playwright-test';
600
+ return process.env.PW_LANG_NAME || "playwright-test";
564
601
  }
565
602
  function commandWithOpenOptions(command, description, options) {
566
- let result = _utilsBundle.program.command(command).description(description);
567
- for (const option of options) result = result.option(option[0], ...option.slice(1));
568
- return result.option('-b, --browser <browserType>', 'browser to use, one of cr, chromium, ff, firefox, wk, webkit', 'chromium').option('--block-service-workers', 'block service workers').option('--channel <channel>', 'Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc').option('--color-scheme <scheme>', 'emulate preferred color scheme, "light" or "dark"').option('--device <deviceName>', 'emulate device, for example "iPhone 11"').option('--geolocation <coordinates>', 'specify geolocation coordinates, for example "37.819722,-122.478611"').option('--ignore-https-errors', 'ignore https errors').option('--load-storage <filename>', 'load context storage state from the file, previously saved with --save-storage').option('--lang <language>', 'specify language / locale, for example "en-GB"').option('--proxy-server <proxy>', 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"').option('--proxy-bypass <bypass>', 'comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"').option('--save-har <filename>', 'save HAR file with all network activity at the end').option('--save-har-glob <glob pattern>', 'filter entries in the HAR by matching url against this glob pattern').option('--save-storage <filename>', 'save context storage state at the end, for later use with --load-storage').option('--timezone <time zone>', 'time zone to emulate, for example "Europe/Rome"').option('--timeout <timeout>', 'timeout for Playwright actions in milliseconds, no timeout by default').option('--user-agent <ua string>', 'specify user agent string').option('--viewport-size <size>', 'specify browser viewport size in pixels, for example "1280, 720"');
603
+ let result = import_utilsBundle.program.command(command).description(description);
604
+ for (const option of options)
605
+ result = result.option(option[0], ...option.slice(1));
606
+ return result.option("-b, --browser <browserType>", "browser to use, one of cr, chromium, ff, firefox, wk, webkit", "chromium").option("--block-service-workers", "block service workers").option("--channel <channel>", 'Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc').option("--color-scheme <scheme>", 'emulate preferred color scheme, "light" or "dark"').option("--device <deviceName>", 'emulate device, for example "iPhone 11"').option("--geolocation <coordinates>", 'specify geolocation coordinates, for example "37.819722,-122.478611"').option("--ignore-https-errors", "ignore https errors").option("--load-storage <filename>", "load context storage state from the file, previously saved with --save-storage").option("--lang <language>", 'specify language / locale, for example "en-GB"').option("--proxy-server <proxy>", 'specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"').option("--proxy-bypass <bypass>", 'comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"').option("--save-har <filename>", "save HAR file with all network activity at the end").option("--save-har-glob <glob pattern>", "filter entries in the HAR by matching url against this glob pattern").option("--save-storage <filename>", "save context storage state at the end, for later use with --load-storage").option("--timezone <time zone>", 'time zone to emulate, for example "Europe/Rome"').option("--timeout <timeout>", "timeout for Playwright actions in milliseconds, no timeout by default").option("--user-agent <ua string>", "specify user agent string").option("--user-data-dir <directory>", "use the specified user data directory instead of a new context").option("--viewport-size <size>", 'specify browser viewport size in pixels, for example "1280, 720"');
569
607
  }
570
608
  function buildBasePlaywrightCLICommand(cliTargetLang) {
571
609
  switch (cliTargetLang) {
572
- case 'python':
610
+ case "python":
573
611
  return `playwright`;
574
- case 'java':
612
+ case "java":
575
613
  return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="...options.."`;
576
- case 'csharp':
614
+ case "csharp":
577
615
  return `pwsh bin/Debug/netX/playwright.ps1`;
578
- default:
579
- {
580
- const packageManagerCommand = (0, _utils.getPackageManagerExecCommand)();
581
- return `${packageManagerCommand} playwright`;
582
- }
616
+ default: {
617
+ const packageManagerCommand = (0, import_utils2.getPackageManagerExecCommand)();
618
+ return `${packageManagerCommand} playwright`;
619
+ }
583
620
  }
584
- }
621
+ }
622
+ // Annotate the CommonJS export names for ESM import in node:
623
+ 0 && (module.exports = {
624
+ program
625
+ });