playwright-codegen-pro-core 1.0.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 (468) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +3552 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/install_webkit_wsl.ps1 +33 -0
  7. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  8. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  9. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  10. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  11. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  12. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  13. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  14. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  15. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  16. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  17. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  18. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  19. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  20. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  21. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  22. package/browsers.json +81 -0
  23. package/bundles/mcp/package-lock.json +1135 -0
  24. package/bundles/mcp/package.json +10 -0
  25. package/bundles/mcp/raw-body.ts +43 -0
  26. package/bundles/utils/package-lock.json +466 -0
  27. package/bundles/utils/package.json +40 -0
  28. package/bundles/zip/package-lock.json +257 -0
  29. package/bundles/zip/package.json +16 -0
  30. package/cli.js +18 -0
  31. package/index.d.ts +17 -0
  32. package/index.js +32 -0
  33. package/index.mjs +28 -0
  34. package/lib/androidServerImpl.js +65 -0
  35. package/lib/browserServerImpl.js +120 -0
  36. package/lib/cli/driver.js +98 -0
  37. package/lib/cli/program.js +599 -0
  38. package/lib/cli/programWithTestStub.js +74 -0
  39. package/lib/client/android.js +361 -0
  40. package/lib/client/api.js +137 -0
  41. package/lib/client/artifact.js +79 -0
  42. package/lib/client/browser.js +169 -0
  43. package/lib/client/browserContext.js +563 -0
  44. package/lib/client/browserType.js +153 -0
  45. package/lib/client/cdpSession.js +55 -0
  46. package/lib/client/channelOwner.js +194 -0
  47. package/lib/client/clientHelper.js +64 -0
  48. package/lib/client/clientInstrumentation.js +55 -0
  49. package/lib/client/clientStackTrace.js +69 -0
  50. package/lib/client/clock.js +68 -0
  51. package/lib/client/connect.js +143 -0
  52. package/lib/client/connection.js +322 -0
  53. package/lib/client/consoleMessage.js +61 -0
  54. package/lib/client/coverage.js +44 -0
  55. package/lib/client/debugger.js +57 -0
  56. package/lib/client/dialog.js +56 -0
  57. package/lib/client/disposable.js +76 -0
  58. package/lib/client/download.js +62 -0
  59. package/lib/client/electron.js +138 -0
  60. package/lib/client/elementHandle.js +281 -0
  61. package/lib/client/errors.js +77 -0
  62. package/lib/client/eventEmitter.js +314 -0
  63. package/lib/client/events.js +103 -0
  64. package/lib/client/fetch.js +367 -0
  65. package/lib/client/fileChooser.js +46 -0
  66. package/lib/client/fileUtils.js +34 -0
  67. package/lib/client/frame.js +404 -0
  68. package/lib/client/harRouter.js +99 -0
  69. package/lib/client/input.js +84 -0
  70. package/lib/client/jsHandle.js +105 -0
  71. package/lib/client/jsonPipe.js +39 -0
  72. package/lib/client/localUtils.js +60 -0
  73. package/lib/client/locator.js +367 -0
  74. package/lib/client/network.js +750 -0
  75. package/lib/client/page.js +729 -0
  76. package/lib/client/platform.js +77 -0
  77. package/lib/client/playwright.js +71 -0
  78. package/lib/client/screencast.js +48 -0
  79. package/lib/client/selectors.js +57 -0
  80. package/lib/client/stream.js +39 -0
  81. package/lib/client/timeoutSettings.js +79 -0
  82. package/lib/client/tracing.js +126 -0
  83. package/lib/client/types.js +28 -0
  84. package/lib/client/video.js +68 -0
  85. package/lib/client/waiter.js +142 -0
  86. package/lib/client/webError.js +39 -0
  87. package/lib/client/worker.js +85 -0
  88. package/lib/client/writableStream.js +39 -0
  89. package/lib/generated/bindingsControllerSource.js +28 -0
  90. package/lib/generated/clockSource.js +28 -0
  91. package/lib/generated/injectedScriptSource.js +28 -0
  92. package/lib/generated/pollingRecorderSource.js +28 -0
  93. package/lib/generated/storageScriptSource.js +28 -0
  94. package/lib/generated/utilityScriptSource.js +28 -0
  95. package/lib/generated/webSocketMockSource.js +336 -0
  96. package/lib/inProcessFactory.js +60 -0
  97. package/lib/inprocess.js +3 -0
  98. package/lib/mcpBundle.js +81 -0
  99. package/lib/mcpBundleImpl/index.js +91 -0
  100. package/lib/outofprocess.js +76 -0
  101. package/lib/protocol/serializers.js +197 -0
  102. package/lib/protocol/validator.js +3035 -0
  103. package/lib/protocol/validatorPrimitives.js +193 -0
  104. package/lib/remote/playwrightConnection.js +131 -0
  105. package/lib/remote/playwrightPipeServer.js +100 -0
  106. package/lib/remote/playwrightServer.js +339 -0
  107. package/lib/remote/playwrightWebSocketServer.js +73 -0
  108. package/lib/remote/serverTransport.js +96 -0
  109. package/lib/server/android/android.js +465 -0
  110. package/lib/server/android/backendAdb.js +177 -0
  111. package/lib/server/artifact.js +127 -0
  112. package/lib/server/bidi/bidiBrowser.js +571 -0
  113. package/lib/server/bidi/bidiChromium.js +162 -0
  114. package/lib/server/bidi/bidiConnection.js +213 -0
  115. package/lib/server/bidi/bidiDeserializer.js +116 -0
  116. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  117. package/lib/server/bidi/bidiFirefox.js +128 -0
  118. package/lib/server/bidi/bidiInput.js +146 -0
  119. package/lib/server/bidi/bidiNetworkManager.js +411 -0
  120. package/lib/server/bidi/bidiOverCdp.js +102 -0
  121. package/lib/server/bidi/bidiPage.js +599 -0
  122. package/lib/server/bidi/bidiPdf.js +106 -0
  123. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  124. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  125. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  126. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  127. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  128. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  129. package/lib/server/bidi/third_party/firefoxPrefs.js +261 -0
  130. package/lib/server/browser.js +223 -0
  131. package/lib/server/browserContext.js +703 -0
  132. package/lib/server/browserType.js +338 -0
  133. package/lib/server/callLog.js +82 -0
  134. package/lib/server/chromium/appIcon.png +0 -0
  135. package/lib/server/chromium/chromium.js +399 -0
  136. package/lib/server/chromium/chromiumSwitches.js +104 -0
  137. package/lib/server/chromium/crBrowser.js +532 -0
  138. package/lib/server/chromium/crConnection.js +197 -0
  139. package/lib/server/chromium/crCoverage.js +235 -0
  140. package/lib/server/chromium/crDevTools.js +111 -0
  141. package/lib/server/chromium/crDragDrop.js +131 -0
  142. package/lib/server/chromium/crExecutionContext.js +146 -0
  143. package/lib/server/chromium/crInput.js +187 -0
  144. package/lib/server/chromium/crNetworkManager.js +711 -0
  145. package/lib/server/chromium/crPage.js +1004 -0
  146. package/lib/server/chromium/crPdf.js +121 -0
  147. package/lib/server/chromium/crProtocolHelper.js +145 -0
  148. package/lib/server/chromium/crServiceWorker.js +137 -0
  149. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  150. package/lib/server/chromium/protocol.d.js +16 -0
  151. package/lib/server/clock.js +149 -0
  152. package/lib/server/codegen/csharp.js +327 -0
  153. package/lib/server/codegen/java.js +274 -0
  154. package/lib/server/codegen/javascript.js +247 -0
  155. package/lib/server/codegen/jsonl.js +52 -0
  156. package/lib/server/codegen/language.js +132 -0
  157. package/lib/server/codegen/languages.js +68 -0
  158. package/lib/server/codegen/python.js +279 -0
  159. package/lib/server/codegen/types.js +16 -0
  160. package/lib/server/console.js +61 -0
  161. package/lib/server/cookieStore.js +206 -0
  162. package/lib/server/debugController.js +197 -0
  163. package/lib/server/debugger.js +117 -0
  164. package/lib/server/deviceDescriptors.js +39 -0
  165. package/lib/server/deviceDescriptorsSource.json +1779 -0
  166. package/lib/server/dialog.js +116 -0
  167. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  168. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  169. package/lib/server/dispatchers/browserContextDispatcher.js +381 -0
  170. package/lib/server/dispatchers/browserDispatcher.js +124 -0
  171. package/lib/server/dispatchers/browserTypeDispatcher.js +71 -0
  172. package/lib/server/dispatchers/cdpSessionDispatcher.js +47 -0
  173. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  174. package/lib/server/dispatchers/debuggerDispatcher.js +80 -0
  175. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  176. package/lib/server/dispatchers/dispatcher.js +364 -0
  177. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  178. package/lib/server/dispatchers/electronDispatcher.js +90 -0
  179. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  180. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  181. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  182. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  183. package/lib/server/dispatchers/localUtilsDispatcher.js +185 -0
  184. package/lib/server/dispatchers/networkDispatchers.js +214 -0
  185. package/lib/server/dispatchers/pageDispatcher.js +430 -0
  186. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  187. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  188. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  189. package/lib/server/dispatchers/webSocketRouteDispatcher.js +164 -0
  190. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  191. package/lib/server/disposable.js +41 -0
  192. package/lib/server/dom.js +833 -0
  193. package/lib/server/download.js +71 -0
  194. package/lib/server/electron/electron.js +272 -0
  195. package/lib/server/electron/loader.js +29 -0
  196. package/lib/server/errors.js +69 -0
  197. package/lib/server/fetch.js +621 -0
  198. package/lib/server/fileChooser.js +43 -0
  199. package/lib/server/fileUploadUtils.js +84 -0
  200. package/lib/server/firefox/ffBrowser.js +415 -0
  201. package/lib/server/firefox/ffConnection.js +142 -0
  202. package/lib/server/firefox/ffExecutionContext.js +150 -0
  203. package/lib/server/firefox/ffInput.js +175 -0
  204. package/lib/server/firefox/ffNetworkManager.js +256 -0
  205. package/lib/server/firefox/ffPage.js +495 -0
  206. package/lib/server/firefox/firefox.js +114 -0
  207. package/lib/server/firefox/protocol.d.js +16 -0
  208. package/lib/server/formData.js +147 -0
  209. package/lib/server/frameSelectors.js +160 -0
  210. package/lib/server/frames.js +1495 -0
  211. package/lib/server/har/harRecorder.js +147 -0
  212. package/lib/server/har/harTracer.js +608 -0
  213. package/lib/server/harBackend.js +157 -0
  214. package/lib/server/helper.js +96 -0
  215. package/lib/server/index.js +58 -0
  216. package/lib/server/input.js +322 -0
  217. package/lib/server/instrumentation.js +72 -0
  218. package/lib/server/javascript.js +291 -0
  219. package/lib/server/launchApp.js +127 -0
  220. package/lib/server/localUtils.js +214 -0
  221. package/lib/server/macEditingCommands.js +143 -0
  222. package/lib/server/network.js +668 -0
  223. package/lib/server/page.js +884 -0
  224. package/lib/server/pipeTransport.js +89 -0
  225. package/lib/server/playwright.js +69 -0
  226. package/lib/server/progress.js +136 -0
  227. package/lib/server/protocolError.js +52 -0
  228. package/lib/server/recorder/chat.js +161 -0
  229. package/lib/server/recorder/networkCapture.js +282 -0
  230. package/lib/server/recorder/recorderApp.js +581 -0
  231. package/lib/server/recorder/recorderRunner.js +138 -0
  232. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  233. package/lib/server/recorder/recorderUtils.js +157 -0
  234. package/lib/server/recorder/sessionExporter.js +40 -0
  235. package/lib/server/recorder/sessionPromptBuilder.js +128 -0
  236. package/lib/server/recorder/sessionRedactor.js +74 -0
  237. package/lib/server/recorder/throttledFile.js +57 -0
  238. package/lib/server/recorder.js +538 -0
  239. package/lib/server/registry/browserFetcher.js +177 -0
  240. package/lib/server/registry/dependencies.js +371 -0
  241. package/lib/server/registry/index.js +1395 -0
  242. package/lib/server/registry/nativeDeps.js +1281 -0
  243. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  244. package/lib/server/screencast.js +238 -0
  245. package/lib/server/screenshotter.js +333 -0
  246. package/lib/server/selectors.js +112 -0
  247. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  248. package/lib/server/socksInterceptor.js +95 -0
  249. package/lib/server/trace/recorder/snapshotter.js +147 -0
  250. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  251. package/lib/server/trace/recorder/tracing.js +615 -0
  252. package/lib/server/trace/viewer/traceViewer.js +244 -0
  253. package/lib/server/transport.js +181 -0
  254. package/lib/server/types.js +28 -0
  255. package/lib/server/usKeyboardLayout.js +152 -0
  256. package/lib/server/utils/ascii.js +44 -0
  257. package/lib/server/utils/comparators.js +139 -0
  258. package/lib/server/utils/crypto.js +216 -0
  259. package/lib/server/utils/debug.js +42 -0
  260. package/lib/server/utils/debugLogger.js +122 -0
  261. package/lib/server/utils/disposable.js +32 -0
  262. package/lib/server/utils/env.js +73 -0
  263. package/lib/server/utils/eventsHelper.js +41 -0
  264. package/lib/server/utils/expectUtils.js +123 -0
  265. package/lib/server/utils/fileUtils.js +191 -0
  266. package/lib/server/utils/happyEyeballs.js +207 -0
  267. package/lib/server/utils/hostPlatform.js +123 -0
  268. package/lib/server/utils/httpServer.js +205 -0
  269. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  270. package/lib/server/utils/image_tools/compare.js +109 -0
  271. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  272. package/lib/server/utils/image_tools/stats.js +102 -0
  273. package/lib/server/utils/linuxUtils.js +71 -0
  274. package/lib/server/utils/network.js +243 -0
  275. package/lib/server/utils/nodePlatform.js +154 -0
  276. package/lib/server/utils/pipeTransport.js +84 -0
  277. package/lib/server/utils/processLauncher.js +243 -0
  278. package/lib/server/utils/profiler.js +65 -0
  279. package/lib/server/utils/socksProxy.js +511 -0
  280. package/lib/server/utils/spawnAsync.js +41 -0
  281. package/lib/server/utils/task.js +51 -0
  282. package/lib/server/utils/userAgent.js +98 -0
  283. package/lib/server/utils/wsServer.js +121 -0
  284. package/lib/server/utils/zipFile.js +74 -0
  285. package/lib/server/utils/zones.js +57 -0
  286. package/lib/server/videoRecorder.js +133 -0
  287. package/lib/server/webkit/protocol.d.js +16 -0
  288. package/lib/server/webkit/webkit.js +108 -0
  289. package/lib/server/webkit/wkBrowser.js +331 -0
  290. package/lib/server/webkit/wkConnection.js +144 -0
  291. package/lib/server/webkit/wkExecutionContext.js +154 -0
  292. package/lib/server/webkit/wkInput.js +181 -0
  293. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  294. package/lib/server/webkit/wkPage.js +1164 -0
  295. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  296. package/lib/server/webkit/wkWorkers.js +106 -0
  297. package/lib/serverRegistry.js +147 -0
  298. package/lib/third_party/pixelmatch.js +255 -0
  299. package/lib/tools/backend/browserBackend.js +79 -0
  300. package/lib/tools/backend/common.js +63 -0
  301. package/lib/tools/backend/config.js +41 -0
  302. package/lib/tools/backend/console.js +66 -0
  303. package/lib/tools/backend/context.js +290 -0
  304. package/lib/tools/backend/cookies.js +152 -0
  305. package/lib/tools/backend/devtools.js +69 -0
  306. package/lib/tools/backend/dialogs.js +59 -0
  307. package/lib/tools/backend/evaluate.js +64 -0
  308. package/lib/tools/backend/files.js +60 -0
  309. package/lib/tools/backend/form.js +64 -0
  310. package/lib/tools/backend/keyboard.js +155 -0
  311. package/lib/tools/backend/logFile.js +95 -0
  312. package/lib/tools/backend/mouse.js +168 -0
  313. package/lib/tools/backend/navigate.js +106 -0
  314. package/lib/tools/backend/network.js +135 -0
  315. package/lib/tools/backend/pdf.js +48 -0
  316. package/lib/tools/backend/recorder.js +74 -0
  317. package/lib/tools/backend/response.js +302 -0
  318. package/lib/tools/backend/route.js +140 -0
  319. package/lib/tools/backend/runCode.js +76 -0
  320. package/lib/tools/backend/screenshot.js +88 -0
  321. package/lib/tools/backend/sessionLog.js +74 -0
  322. package/lib/tools/backend/snapshot.js +208 -0
  323. package/lib/tools/backend/storage.js +67 -0
  324. package/lib/tools/backend/tab.js +445 -0
  325. package/lib/tools/backend/tabs.js +67 -0
  326. package/lib/tools/backend/tool.js +47 -0
  327. package/lib/tools/backend/tools.js +104 -0
  328. package/lib/tools/backend/tracing.js +75 -0
  329. package/lib/tools/backend/utils.js +83 -0
  330. package/lib/tools/backend/verify.js +151 -0
  331. package/lib/tools/backend/video.js +89 -0
  332. package/lib/tools/backend/wait.js +63 -0
  333. package/lib/tools/backend/webstorage.js +223 -0
  334. package/lib/tools/cli-client/cli.js +6 -0
  335. package/lib/tools/cli-client/help.json +101 -0
  336. package/lib/tools/cli-client/minimist.js +128 -0
  337. package/lib/tools/cli-client/program.js +382 -0
  338. package/lib/tools/cli-client/registry.js +176 -0
  339. package/lib/tools/cli-client/session.js +289 -0
  340. package/lib/tools/cli-client/skill/SKILL.md +326 -0
  341. package/lib/tools/cli-client/skill/references/element-attributes.md +23 -0
  342. package/lib/tools/cli-client/skill/references/playwright-tests.md +39 -0
  343. package/lib/tools/cli-client/skill/references/request-mocking.md +87 -0
  344. package/lib/tools/cli-client/skill/references/running-code.md +231 -0
  345. package/lib/tools/cli-client/skill/references/session-management.md +169 -0
  346. package/lib/tools/cli-client/skill/references/storage-state.md +275 -0
  347. package/lib/tools/cli-client/skill/references/test-generation.md +88 -0
  348. package/lib/tools/cli-client/skill/references/tracing.md +139 -0
  349. package/lib/tools/cli-client/skill/references/video-recording.md +46 -0
  350. package/lib/tools/cli-daemon/command.js +73 -0
  351. package/lib/tools/cli-daemon/commands.js +933 -0
  352. package/lib/tools/cli-daemon/daemon.js +178 -0
  353. package/lib/tools/cli-daemon/helpGenerator.js +173 -0
  354. package/lib/tools/cli-daemon/program.js +118 -0
  355. package/lib/tools/dashboard/appIcon.png +0 -0
  356. package/lib/tools/dashboard/dashboardApp.js +286 -0
  357. package/lib/tools/dashboard/dashboardController.js +296 -0
  358. package/lib/tools/exports.js +60 -0
  359. package/lib/tools/mcp/browserFactory.js +233 -0
  360. package/lib/tools/mcp/cdpRelay.js +353 -0
  361. package/lib/tools/mcp/cli-stub.js +7 -0
  362. package/lib/tools/mcp/config.d.js +16 -0
  363. package/lib/tools/mcp/config.js +401 -0
  364. package/lib/tools/mcp/configIni.js +189 -0
  365. package/lib/tools/mcp/extensionContextFactory.js +59 -0
  366. package/lib/tools/mcp/index.js +62 -0
  367. package/lib/tools/mcp/log.js +35 -0
  368. package/lib/tools/mcp/program.js +107 -0
  369. package/lib/tools/mcp/protocol.js +28 -0
  370. package/lib/tools/mcp/watchdog.js +44 -0
  371. package/lib/tools/trace/SKILL.md +163 -0
  372. package/lib/tools/trace/installSkill.js +48 -0
  373. package/lib/tools/trace/traceActions.js +142 -0
  374. package/lib/tools/trace/traceAttachments.js +69 -0
  375. package/lib/tools/trace/traceCli.js +80 -0
  376. package/lib/tools/trace/traceConsole.js +97 -0
  377. package/lib/tools/trace/traceErrors.js +55 -0
  378. package/lib/tools/trace/traceOpen.js +69 -0
  379. package/lib/tools/trace/traceParser.js +96 -0
  380. package/lib/tools/trace/traceRequests.js +158 -0
  381. package/lib/tools/trace/traceScreenshot.js +68 -0
  382. package/lib/tools/trace/traceSnapshot.js +149 -0
  383. package/lib/tools/trace/traceUtils.js +135 -0
  384. package/lib/tools/utils/connect.js +32 -0
  385. package/lib/tools/utils/mcp/http.js +152 -0
  386. package/lib/tools/utils/mcp/server.js +230 -0
  387. package/lib/tools/utils/mcp/tool.js +47 -0
  388. package/lib/tools/utils/socketConnection.js +108 -0
  389. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  390. package/lib/utils/isomorphic/assert.js +31 -0
  391. package/lib/utils/isomorphic/colors.js +72 -0
  392. package/lib/utils/isomorphic/cssParser.js +245 -0
  393. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  394. package/lib/utils/isomorphic/formatUtils.js +64 -0
  395. package/lib/utils/isomorphic/headers.js +53 -0
  396. package/lib/utils/isomorphic/imageUtils.js +141 -0
  397. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  398. package/lib/utils/isomorphic/locatorParser.js +176 -0
  399. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  400. package/lib/utils/isomorphic/lruCache.js +51 -0
  401. package/lib/utils/isomorphic/manualPromise.js +114 -0
  402. package/lib/utils/isomorphic/mimeType.js +464 -0
  403. package/lib/utils/isomorphic/multimap.js +80 -0
  404. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  405. package/lib/utils/isomorphic/protocolMetainfo.js +347 -0
  406. package/lib/utils/isomorphic/rtti.js +43 -0
  407. package/lib/utils/isomorphic/selectorParser.js +386 -0
  408. package/lib/utils/isomorphic/semaphore.js +54 -0
  409. package/lib/utils/isomorphic/stackTrace.js +158 -0
  410. package/lib/utils/isomorphic/stringUtils.js +204 -0
  411. package/lib/utils/isomorphic/time.js +49 -0
  412. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  413. package/lib/utils/isomorphic/trace/entries.js +16 -0
  414. package/lib/utils/isomorphic/trace/snapshotRenderer.js +492 -0
  415. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  416. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  417. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  418. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  419. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  420. package/lib/utils/isomorphic/trace/traceUtils.js +58 -0
  421. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  422. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  423. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  424. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  425. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  426. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  427. package/lib/utils/isomorphic/types.js +16 -0
  428. package/lib/utils/isomorphic/urlMatch.js +243 -0
  429. package/lib/utils/isomorphic/utilityScriptSerializers.js +262 -0
  430. package/lib/utils/isomorphic/yaml.js +84 -0
  431. package/lib/utils.js +113 -0
  432. package/lib/utilsBundle.js +91 -0
  433. package/lib/utilsBundleImpl/index.js +218 -0
  434. package/lib/utilsBundleImpl/xdg-open +1066 -0
  435. package/lib/vite/dashboard/assets/index-Bn2lDGZX.js +50 -0
  436. package/lib/vite/dashboard/assets/index-DDWrEWMc.css +1 -0
  437. package/lib/vite/dashboard/index.html +28 -0
  438. package/lib/vite/htmlReport/index.html +89 -0
  439. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  440. package/lib/vite/recorder/assets/codeMirrorModule-RoSmqW0t.js +32 -0
  441. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  442. package/lib/vite/recorder/assets/index-CLrDthbi.js +193 -0
  443. package/lib/vite/recorder/assets/index-OFPIkgDs.css +1 -0
  444. package/lib/vite/recorder/index.html +29 -0
  445. package/lib/vite/recorder/playwright-logo.svg +9 -0
  446. package/lib/vite/traceViewer/assets/codeMirrorModule-Cigrr2OM.js +32 -0
  447. package/lib/vite/traceViewer/assets/defaultSettingsView-ConrJv9G.js +262 -0
  448. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  449. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  450. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  451. package/lib/vite/traceViewer/defaultSettingsView.B4dS75f0.css +1 -0
  452. package/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
  453. package/lib/vite/traceViewer/index.EVGp-u_4.js +2 -0
  454. package/lib/vite/traceViewer/index.html +43 -0
  455. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  456. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  457. package/lib/vite/traceViewer/snapshot.html +21 -0
  458. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  459. package/lib/vite/traceViewer/uiMode.Bewj7-uD.js +6 -0
  460. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  461. package/lib/vite/traceViewer/uiMode.html +17 -0
  462. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  463. package/lib/zipBundle.js +34 -0
  464. package/lib/zipBundleImpl.js +5 -0
  465. package/package.json +46 -0
  466. package/types/protocol.d.ts +24365 -0
  467. package/types/structs.d.ts +45 -0
  468. package/types/types.d.ts +23498 -0
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ var import_program = require("./program");
3
+ (0, import_program.program)().catch((e) => {
4
+ console.error(e.message);
5
+ process.exit(1);
6
+ });
@@ -0,0 +1,101 @@
1
+ {
2
+ "global": "Usage: playwright-cli <command> [args] [options]\nUsage: playwright-cli -s=<session> <command> [args] [options]\n\nCore:\n open [url] open the browser\n attach <name> attach to a running playwright browser\n close close the browser\n goto <url> navigate to a url\n type <text> type text into editable element\n click <target> [button] perform click on a web page\n dblclick <target> [button] perform double click on a web page\n fill <target> <text> fill text into editable element\n drag <startElement> <endElement> perform drag and drop between two elements\n hover <target> hover over element on page\n select <target> <val> select an option in a dropdown\n upload <file> upload one or multiple files\n check <target> check a checkbox or radio button\n uncheck <target> uncheck a checkbox or radio button\n snapshot [element] capture page snapshot to obtain element ref\n eval <func> [element] evaluate javascript expression on page or element\n dialog-accept [prompt] accept a dialog\n dialog-dismiss dismiss a dialog\n resize <w> <h> resize the browser window\n delete-data delete session data\n\nNavigation:\n go-back go back to the previous page\n go-forward go forward to the next page\n reload reload the current page\n\nKeyboard:\n press <key> press a key on the keyboard, `a`, `arrowleft`\n keydown <key> press a key down on the keyboard\n keyup <key> press a key up on the keyboard\n\nMouse:\n mousemove <x> <y> move mouse to a given position\n mousedown [button] press mouse down\n mouseup [button] press mouse up\n mousewheel <dx> <dy> scroll mouse wheel\n\nSave as:\n screenshot [target] screenshot of the current page or element\n pdf save page as pdf\n\nTabs:\n tab-list list all tabs\n tab-new [url] create a new tab\n tab-close [index] close a browser tab\n tab-select <index> select a browser tab\n\nStorage:\n state-load <filename> loads browser storage (authentication) state from a file\n state-save [filename] saves the current storage (authentication) state to a file\n cookie-list list all cookies (optionally filtered by domain/path)\n cookie-get <name> get a specific cookie by name\n cookie-set <name> <value> set a cookie with optional flags\n cookie-delete <name> delete a specific cookie\n cookie-clear clear all cookies\n localstorage-list list all localstorage key-value pairs\n localstorage-get <key> get a localstorage item by key\n localstorage-set <key> <value> set a localstorage item\n localstorage-delete <key> delete a localstorage item\n localstorage-clear clear all localstorage\n sessionstorage-list list all sessionstorage key-value pairs\n sessionstorage-get <key> get a sessionstorage item by key\n sessionstorage-set <key> <value> set a sessionstorage item\n sessionstorage-delete <key> delete a sessionstorage item\n sessionstorage-clear clear all sessionstorage\n\nNetwork:\n route <pattern> mock network requests matching a url pattern\n route-list list all active network routes\n unroute [pattern] remove routes matching a pattern (or all routes)\n network-state-set <state> set the browser network state to online or offline\n\nDevTools:\n console [min-level] list console messages\n run-code <code> run playwright code snippet\n network list all network requests since loading the page\n tracing-start start trace recording\n tracing-stop stop trace recording\n video-start start video recording\n video-stop stop video recording\n show show browser devtools\n pause-at <location> run the test up to a specific location and pause there\n resume resume the test execution\n step-over step over the next call in the test\n\nInstall:\n install initialize workspace\n install-browser [browser] install browser\n\nBrowser sessions:\n list list browser sessions\n close-all close all browser sessions\n kill-all forcefully kill all browser sessions (for stale/zombie processes)\n\nGlobal options:\n --help [command] print help\n --version print version",
3
+ "commands": {
4
+ "open": "playwright-cli open [url]\n\nOpen the browser\n\nArguments:\n [url] the url to navigate to\nOptions:\n --browser browser or chrome channel to use, possible values: chrome, firefox, webkit, msedge.\n --config path to the configuration file, defaults to .playwright/cli.config.json\n --extension connect to browser extension\n --headed run browser in headed mode\n --persistent use persistent browser profile\n --profile use persistent browser profile, store profile in specified directory.",
5
+ "attach": "playwright-cli attach <name>\n\nAttach to a running Playwright browser\n\nArguments:\n <name> name or endpoint of the browser to attach to\nOptions:\n --config path to the configuration file, defaults to .playwright/cli.config.json\n --session session name alias (defaults to the attach target name)",
6
+ "close": "playwright-cli close \n\nClose the browser\n",
7
+ "goto": "playwright-cli goto <url>\n\nNavigate to a URL\n\nArguments:\n <url> the url to navigate to",
8
+ "type": "playwright-cli type <text>\n\nType text into editable element\n\nArguments:\n <text> text to type into the element\nOptions:\n --submit whether to submit entered text (press enter after)",
9
+ "click": "playwright-cli click <target> [button]\n\nPerform click on a web page\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector\n [button] button to click, defaults to left\nOptions:\n --modifiers modifier keys to press",
10
+ "dblclick": "playwright-cli dblclick <target> [button]\n\nPerform double click on a web page\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector\n [button] button to click, defaults to left\nOptions:\n --modifiers modifier keys to press",
11
+ "fill": "playwright-cli fill <target> <text>\n\nFill text into editable element\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector\n <text> text to fill into the element\nOptions:\n --submit whether to submit entered text (press enter after)",
12
+ "drag": "playwright-cli drag <startElement> <endElement>\n\nPerform drag and drop between two elements\n\nArguments:\n <startElement> exact source element reference from the page snapshot, or a unique element selector\n <endElement> exact target element reference from the page snapshot, or a unique element selector",
13
+ "hover": "playwright-cli hover <target>\n\nHover over element on page\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector",
14
+ "select": "playwright-cli select <target> <val>\n\nSelect an option in a dropdown\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector\n <val> value to select in the dropdown",
15
+ "upload": "playwright-cli upload <file>\n\nUpload one or multiple files\n\nArguments:\n <file> the absolute paths to the files to upload",
16
+ "check": "playwright-cli check <target>\n\nCheck a checkbox or radio button\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector",
17
+ "uncheck": "playwright-cli uncheck <target>\n\nUncheck a checkbox or radio button\n\nArguments:\n <target> exact target element reference from the page snapshot, or a unique element selector",
18
+ "snapshot": "playwright-cli snapshot [element]\n\nCapture page snapshot to obtain element ref\n\nArguments:\n [element] element selector of the root element to capture a partial snapshot instead of the whole page\nOptions:\n --filename save snapshot to markdown file instead of returning it in the response.\n --depth limit snapshot depth, unlimited by default.",
19
+ "eval": "playwright-cli eval <func> [element]\n\nEvaluate JavaScript expression on page or element\n\nArguments:\n <func> () => { /* code */ } or (element) => { /* code */ } when element is provided\n [element] exact target element reference from the page snapshot, or a unique element selector\nOptions:\n --filename save evaluation result to a file instead of returning it in the response.",
20
+ "console": "playwright-cli console [min-level]\n\nList console messages\n\nArguments:\n [min-level] level of the console messages to return. each level includes the messages of more severe levels. defaults to \"info\".\nOptions:\n --clear whether to clear the console list",
21
+ "dialog-accept": "playwright-cli dialog-accept [prompt]\n\nAccept a dialog\n\nArguments:\n [prompt] the text of the prompt in case of a prompt dialog.",
22
+ "dialog-dismiss": "playwright-cli dialog-dismiss \n\nDismiss a dialog\n",
23
+ "resize": "playwright-cli resize <w> <h>\n\nResize the browser window\n\nArguments:\n <w> width of the browser window\n <h> height of the browser window",
24
+ "run-code": "playwright-cli run-code <code>\n\nRun Playwright code snippet\n\nArguments:\n <code> a javascript function containing playwright code to execute. it will be invoked with a single argument, page, which you can use for any page interaction.",
25
+ "delete-data": "playwright-cli delete-data \n\nDelete session data\n",
26
+ "go-back": "playwright-cli go-back \n\nGo back to the previous page\n",
27
+ "go-forward": "playwright-cli go-forward \n\nGo forward to the next page\n",
28
+ "reload": "playwright-cli reload \n\nReload the current page\n",
29
+ "press": "playwright-cli press <key>\n\nPress a key on the keyboard, `a`, `ArrowLeft`\n\nArguments:\n <key> name of the key to press or a character to generate, such as `arrowleft` or `a`",
30
+ "keydown": "playwright-cli keydown <key>\n\nPress a key down on the keyboard\n\nArguments:\n <key> name of the key to press or a character to generate, such as `arrowleft` or `a`",
31
+ "keyup": "playwright-cli keyup <key>\n\nPress a key up on the keyboard\n\nArguments:\n <key> name of the key to press or a character to generate, such as `arrowleft` or `a`",
32
+ "mousemove": "playwright-cli mousemove <x> <y>\n\nMove mouse to a given position\n\nArguments:\n <x> x coordinate\n <y> y coordinate",
33
+ "mousedown": "playwright-cli mousedown [button]\n\nPress mouse down\n\nArguments:\n [button] button to press, defaults to left",
34
+ "mouseup": "playwright-cli mouseup [button]\n\nPress mouse up\n\nArguments:\n [button] button to press, defaults to left",
35
+ "mousewheel": "playwright-cli mousewheel <dx> <dy>\n\nScroll mouse wheel\n\nArguments:\n <dx> x delta\n <dy> y delta",
36
+ "screenshot": "playwright-cli screenshot [target]\n\nscreenshot of the current page or element\n\nArguments:\n [target] exact target element reference from the page snapshot, or a unique element selector.\nOptions:\n --filename file name to save the screenshot to. defaults to `page-{timestamp}.{png|jpeg}` if not specified.\n --full-page when true, takes a screenshot of the full scrollable page, instead of the currently visible viewport.",
37
+ "pdf": "playwright-cli pdf \n\nSave page as PDF\n\nOptions:\n --filename file name to save the pdf to. defaults to `page-{timestamp}.pdf` if not specified.",
38
+ "tab-list": "playwright-cli tab-list \n\nList all tabs\n",
39
+ "tab-new": "playwright-cli tab-new [url]\n\nCreate a new tab\n\nArguments:\n [url] the url to navigate to in the new tab. if omitted, the new tab will be blank.",
40
+ "tab-close": "playwright-cli tab-close [index]\n\nClose a browser tab\n\nArguments:\n [index] tab index. if omitted, current tab is closed.",
41
+ "tab-select": "playwright-cli tab-select <index>\n\nSelect a browser tab\n\nArguments:\n <index> tab index",
42
+ "state-load": "playwright-cli state-load <filename>\n\nLoads browser storage (authentication) state from a file\n\nArguments:\n <filename> file name to load the storage state from.",
43
+ "state-save": "playwright-cli state-save [filename]\n\nSaves the current storage (authentication) state to a file\n\nArguments:\n [filename] file name to save the storage state to.",
44
+ "cookie-list": "playwright-cli cookie-list \n\nList all cookies (optionally filtered by domain/path)\n\nOptions:\n --domain filter cookies by domain\n --path filter cookies by path",
45
+ "cookie-get": "playwright-cli cookie-get <name>\n\nGet a specific cookie by name\n\nArguments:\n <name> cookie name",
46
+ "cookie-set": "playwright-cli cookie-set <name> <value>\n\nSet a cookie with optional flags\n\nArguments:\n <name> cookie name\n <value> cookie value\nOptions:\n --domain cookie domain\n --path cookie path\n --expires cookie expiration as unix timestamp\n --httpOnly whether the cookie is http only\n --secure whether the cookie is secure\n --sameSite cookie samesite attribute",
47
+ "cookie-delete": "playwright-cli cookie-delete <name>\n\nDelete a specific cookie\n\nArguments:\n <name> cookie name",
48
+ "cookie-clear": "playwright-cli cookie-clear \n\nClear all cookies\n",
49
+ "localstorage-list": "playwright-cli localstorage-list \n\nList all localStorage key-value pairs\n",
50
+ "localstorage-get": "playwright-cli localstorage-get <key>\n\nGet a localStorage item by key\n\nArguments:\n <key> key to get",
51
+ "localstorage-set": "playwright-cli localstorage-set <key> <value>\n\nSet a localStorage item\n\nArguments:\n <key> key to set\n <value> value to set",
52
+ "localstorage-delete": "playwright-cli localstorage-delete <key>\n\nDelete a localStorage item\n\nArguments:\n <key> key to delete",
53
+ "localstorage-clear": "playwright-cli localstorage-clear \n\nClear all localStorage\n",
54
+ "sessionstorage-list": "playwright-cli sessionstorage-list \n\nList all sessionStorage key-value pairs\n",
55
+ "sessionstorage-get": "playwright-cli sessionstorage-get <key>\n\nGet a sessionStorage item by key\n\nArguments:\n <key> key to get",
56
+ "sessionstorage-set": "playwright-cli sessionstorage-set <key> <value>\n\nSet a sessionStorage item\n\nArguments:\n <key> key to set\n <value> value to set",
57
+ "sessionstorage-delete": "playwright-cli sessionstorage-delete <key>\n\nDelete a sessionStorage item\n\nArguments:\n <key> key to delete",
58
+ "sessionstorage-clear": "playwright-cli sessionstorage-clear \n\nClear all sessionStorage\n",
59
+ "route": "playwright-cli route <pattern>\n\nMock network requests matching a URL pattern\n\nArguments:\n <pattern> url pattern to match (e.g., \"**/api/users\")\nOptions:\n --status http status code (default: 200)\n --body response body (text or json string)\n --content-type content-type header\n --header header to add in \"name: value\" format (repeatable)\n --remove-header comma-separated header names to remove",
60
+ "route-list": "playwright-cli route-list \n\nList all active network routes\n",
61
+ "unroute": "playwright-cli unroute [pattern]\n\nRemove routes matching a pattern (or all routes)\n\nArguments:\n [pattern] url pattern to unroute (omit to remove all)",
62
+ "network-state-set": "playwright-cli network-state-set <state>\n\nSet the browser network state to online or offline\n\nArguments:\n <state> set to \"offline\" to simulate offline mode, \"online\" to restore network connectivity",
63
+ "config-print": "playwright-cli config-print \n\nPrint the final resolved config after merging CLI options, environment variables and config file.\n",
64
+ "install": "playwright-cli install \n\nInitialize workspace\n\nOptions:\n --skills install skills for claude / github copilot",
65
+ "install-browser": "playwright-cli install-browser [browser]\n\nInstall browser\n\nArguments:\n [browser] browser to install\nOptions:\n --with-deps install system dependencies for browsers\n --dry-run do not execute installation, only print information\n --list prints list of browsers from all playwright installations\n --force force reinstall of already installed browsers\n --only-shell only install headless shell when installing chromium\n --no-shell do not install chromium headless shell",
66
+ "network": "playwright-cli network \n\nList all network requests since loading the page\n\nOptions:\n --static whether to include successful static resources like images, fonts, scripts, etc. defaults to false.\n --request-body whether to include request body. defaults to false.\n --request-headers whether to include request headers. defaults to false.\n --filter only return requests whose url matches this regexp (e.g. \"/api/.*user\").\n --clear whether to clear the network list",
67
+ "tracing-start": "playwright-cli tracing-start \n\nStart trace recording\n",
68
+ "tracing-stop": "playwright-cli tracing-stop \n\nStop trace recording\n",
69
+ "video-start": "playwright-cli video-start \n\nStart video recording\n",
70
+ "video-stop": "playwright-cli video-stop \n\nStop video recording\n\nOptions:\n --filename filename to save the video.",
71
+ "show": "playwright-cli show \n\nShow browser DevTools\n",
72
+ "pause-at": "playwright-cli pause-at <location>\n\nRun the test up to a specific location and pause there\n\nArguments:\n <location> location to pause at. format is <file>:<line>, e.g. \"example.spec.ts:42\".",
73
+ "resume": "playwright-cli resume \n\nResume the test execution\n",
74
+ "step-over": "playwright-cli step-over \n\nStep over the next call in the test\n",
75
+ "list": "playwright-cli list \n\nList browser sessions\n\nOptions:\n --all list all browser sessions across all workspaces",
76
+ "close-all": "playwright-cli close-all \n\nClose all browser sessions\n",
77
+ "kill-all": "playwright-cli kill-all \n\nForcefully kill all browser sessions (for stale/zombie processes)\n",
78
+ "tray": "playwright-cli tray \n\nRun tray\n"
79
+ },
80
+ "booleanOptions": [
81
+ "extension",
82
+ "headed",
83
+ "persistent",
84
+ "submit",
85
+ "clear",
86
+ "full-page",
87
+ "httpOnly",
88
+ "secure",
89
+ "skills",
90
+ "with-deps",
91
+ "dry-run",
92
+ "list",
93
+ "force",
94
+ "only-shell",
95
+ "no-shell",
96
+ "static",
97
+ "request-body",
98
+ "request-headers",
99
+ "all"
100
+ ]
101
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var minimist_exports = {};
20
+ __export(minimist_exports, {
21
+ minimist: () => minimist
22
+ });
23
+ module.exports = __toCommonJS(minimist_exports);
24
+ function minimist(args, opts) {
25
+ if (!opts)
26
+ opts = {};
27
+ const bools = {};
28
+ const strings = {};
29
+ for (const key of toArray(opts.boolean))
30
+ bools[key] = true;
31
+ for (const key of toArray(opts.string))
32
+ strings[key] = true;
33
+ const argv = { _: [] };
34
+ function setArg(key, val) {
35
+ if (argv[key] === void 0 || bools[key] || typeof argv[key] === "boolean")
36
+ argv[key] = val;
37
+ else if (Array.isArray(argv[key]))
38
+ argv[key].push(val);
39
+ else
40
+ argv[key] = [argv[key], val];
41
+ }
42
+ let notFlags = [];
43
+ const doubleDashIndex = args.indexOf("--");
44
+ if (doubleDashIndex !== -1) {
45
+ notFlags = args.slice(doubleDashIndex + 1);
46
+ args = args.slice(0, doubleDashIndex);
47
+ }
48
+ for (let i = 0; i < args.length; i++) {
49
+ const arg = args[i];
50
+ let key;
51
+ let next;
52
+ if (/^--.+=/.test(arg)) {
53
+ const m = arg.match(/^--([^=]+)=([\s\S]*)$/);
54
+ key = m[1];
55
+ if (bools[key])
56
+ throw new Error(`boolean option '--${key}' should not be passed with '=value', use '--${key}' or '--no-${key}' instead`);
57
+ setArg(key, m[2]);
58
+ } else if (/^--no-.+/.test(arg)) {
59
+ key = arg.match(/^--no-(.+)/)[1];
60
+ setArg(key, false);
61
+ } else if (/^--.+/.test(arg)) {
62
+ key = arg.match(/^--(.+)/)[1];
63
+ next = args[i + 1];
64
+ if (next !== void 0 && !/^(-|--)[^-]/.test(next) && !bools[key]) {
65
+ setArg(key, next);
66
+ i += 1;
67
+ } else if (/^(true|false)$/.test(next)) {
68
+ setArg(key, next === "true");
69
+ i += 1;
70
+ } else {
71
+ setArg(key, strings[key] ? "" : true);
72
+ }
73
+ } else if (/^-[^-]+/.test(arg)) {
74
+ const letters = arg.slice(1, -1).split("");
75
+ let broken = false;
76
+ for (let j = 0; j < letters.length; j++) {
77
+ next = arg.slice(j + 2);
78
+ if (next === "-") {
79
+ setArg(letters[j], next);
80
+ continue;
81
+ }
82
+ if (/[A-Za-z]/.test(letters[j]) && next[0] === "=") {
83
+ setArg(letters[j], next.slice(1));
84
+ broken = true;
85
+ break;
86
+ }
87
+ if (/[A-Za-z]/.test(letters[j]) && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
88
+ setArg(letters[j], next);
89
+ broken = true;
90
+ break;
91
+ }
92
+ if (letters[j + 1] && letters[j + 1].match(/\W/)) {
93
+ setArg(letters[j], arg.slice(j + 2));
94
+ broken = true;
95
+ break;
96
+ } else {
97
+ setArg(letters[j], strings[letters[j]] ? "" : true);
98
+ }
99
+ }
100
+ key = arg.slice(-1)[0];
101
+ if (!broken && key !== "-") {
102
+ if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) && !bools[key]) {
103
+ setArg(key, args[i + 1]);
104
+ i += 1;
105
+ } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
106
+ setArg(key, args[i + 1] === "true");
107
+ i += 1;
108
+ } else {
109
+ setArg(key, strings[key] ? "" : true);
110
+ }
111
+ }
112
+ } else {
113
+ argv._.push(arg);
114
+ }
115
+ }
116
+ for (const k of notFlags)
117
+ argv._.push(k);
118
+ return argv;
119
+ }
120
+ function toArray(value) {
121
+ if (!value)
122
+ return [];
123
+ return Array.isArray(value) ? value : [value];
124
+ }
125
+ // Annotate the CommonJS export names for ESM import in node:
126
+ 0 && (module.exports = {
127
+ minimist
128
+ });
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var program_exports = {};
30
+ __export(program_exports, {
31
+ calculateSha1: () => calculateSha1,
32
+ program: () => program
33
+ });
34
+ module.exports = __toCommonJS(program_exports);
35
+ var import_child_process = require("child_process");
36
+ var import_crypto = __toESM(require("crypto"));
37
+ var import_fs = __toESM(require("fs"));
38
+ var import_os = __toESM(require("os"));
39
+ var import_path = __toESM(require("path"));
40
+ var import_registry = require("./registry");
41
+ var import_session = require("./session");
42
+ var import_serverRegistry = require("../../serverRegistry");
43
+ var import_minimist = require("./minimist");
44
+ const globalOptions = [
45
+ "attach",
46
+ "browser",
47
+ "config",
48
+ "extension",
49
+ "headed",
50
+ "help",
51
+ "persistent",
52
+ "profile",
53
+ "session",
54
+ "version"
55
+ ];
56
+ const booleanOptions = [
57
+ "all",
58
+ "help",
59
+ "version"
60
+ ];
61
+ async function program(options) {
62
+ const clientInfo = (0, import_registry.createClientInfo)();
63
+ const help = require("./help.json");
64
+ const argv = process.argv.slice(2);
65
+ const boolean = [...help.booleanOptions, ...booleanOptions];
66
+ const args = (0, import_minimist.minimist)(argv, { boolean, string: ["_"] });
67
+ if (args.s) {
68
+ args.session = args.s;
69
+ delete args.s;
70
+ }
71
+ const commandName = args._?.[0];
72
+ if (args.version || args.v) {
73
+ console.log(options?.embedderVersion ?? clientInfo.version);
74
+ process.exit(0);
75
+ }
76
+ const command = commandName && help.commands[commandName];
77
+ if (args.help || args.h) {
78
+ if (command) {
79
+ console.log(command);
80
+ } else {
81
+ console.log("playwright-cli - run playwright mcp commands from terminal\n");
82
+ console.log(help.global);
83
+ }
84
+ process.exit(0);
85
+ }
86
+ if (!command) {
87
+ console.error(`Unknown command: ${commandName}
88
+ `);
89
+ console.log(help.global);
90
+ process.exit(1);
91
+ }
92
+ const registry = await import_registry.Registry.load();
93
+ const sessionName = (0, import_registry.resolveSessionName)(args.session);
94
+ switch (commandName) {
95
+ case "list": {
96
+ await listSessions(registry, clientInfo, !!args.all);
97
+ return;
98
+ }
99
+ case "close-all": {
100
+ const entries = registry.entries(clientInfo);
101
+ for (const entry of entries)
102
+ await new import_session.Session(entry).stop(true);
103
+ return;
104
+ }
105
+ case "delete-data": {
106
+ const entry = registry.entry(clientInfo, sessionName);
107
+ if (!entry) {
108
+ console.log(`No user data found for browser '${sessionName}'.`);
109
+ return;
110
+ }
111
+ await new import_session.Session(entry).deleteData();
112
+ return;
113
+ }
114
+ case "kill-all": {
115
+ await killAllDaemons();
116
+ return;
117
+ }
118
+ case "open": {
119
+ await startSession(sessionName, registry, clientInfo, args);
120
+ return;
121
+ }
122
+ case "attach": {
123
+ const attachTarget = args._[1];
124
+ const attachSessionName = (0, import_registry.explicitSessionName)(args.session) ?? attachTarget;
125
+ args.attach = attachTarget;
126
+ args.session = attachSessionName;
127
+ await startSession(attachSessionName, registry, clientInfo, args);
128
+ return;
129
+ }
130
+ case "close":
131
+ const closeEntry = registry.entry(clientInfo, sessionName);
132
+ const session = closeEntry ? new import_session.Session(closeEntry) : void 0;
133
+ if (!session || !await session.canConnect()) {
134
+ console.log(`Browser '${sessionName}' is not open.`);
135
+ return;
136
+ }
137
+ await session.stop();
138
+ return;
139
+ case "install":
140
+ await install(args);
141
+ return;
142
+ case "install-browser":
143
+ await installBrowser();
144
+ return;
145
+ case "show": {
146
+ const daemonScript = require.resolve("../dashboard/dashboardApp.js");
147
+ const child = (0, import_child_process.spawn)(process.execPath, [daemonScript], {
148
+ detached: true,
149
+ stdio: "ignore"
150
+ });
151
+ child.unref();
152
+ return;
153
+ }
154
+ default: {
155
+ const entry = registry.entry(clientInfo, sessionName);
156
+ if (!entry) {
157
+ console.log(`The browser '${sessionName}' is not open, please run open first`);
158
+ console.log("");
159
+ console.log(` playwright-cli${sessionName !== "default" ? ` -s=${sessionName}` : ""} open [params]`);
160
+ process.exit(1);
161
+ }
162
+ await runInSession(entry, clientInfo, args);
163
+ }
164
+ }
165
+ }
166
+ async function startSession(sessionName, registry, clientInfo, args) {
167
+ const entry = registry.entry(clientInfo, sessionName);
168
+ if (entry)
169
+ await new import_session.Session(entry).stop(true);
170
+ await import_session.Session.startDaemon(clientInfo, args);
171
+ const newEntry = await registry.loadEntry(clientInfo, sessionName);
172
+ await runInSession(newEntry, clientInfo, args);
173
+ }
174
+ async function runInSession(entry, clientInfo, args) {
175
+ for (const globalOption of globalOptions)
176
+ delete args[globalOption];
177
+ const session = new import_session.Session(entry);
178
+ const result = await session.run(clientInfo, args);
179
+ console.log(result.text);
180
+ }
181
+ async function install(args) {
182
+ const cwd = process.cwd();
183
+ const playwrightDir = import_path.default.join(cwd, ".playwright");
184
+ await import_fs.default.promises.mkdir(playwrightDir, { recursive: true });
185
+ console.log(`\u2705 Workspace initialized at \`${cwd}\`.`);
186
+ if (args.skills) {
187
+ const skillSourceDir = import_path.default.join(__dirname, "skill");
188
+ const skillDestDir = import_path.default.join(cwd, ".claude", "skills", "playwright-cli");
189
+ if (!import_fs.default.existsSync(skillSourceDir)) {
190
+ console.error("\u274C Skills source directory not found:", skillSourceDir);
191
+ process.exit(1);
192
+ }
193
+ await import_fs.default.promises.cp(skillSourceDir, skillDestDir, { recursive: true });
194
+ console.log(`\u2705 Skills installed to \`${import_path.default.relative(cwd, skillDestDir)}\`.`);
195
+ }
196
+ await ensureConfiguredBrowserInstalled();
197
+ }
198
+ async function ensureConfiguredBrowserInstalled() {
199
+ if (import_fs.default.existsSync(defaultConfigFile())) {
200
+ const { registry } = await import("playwright-core/lib/server/registry/index");
201
+ const data = await import_fs.default.promises.readFile(defaultConfigFile(), "utf-8");
202
+ const config = JSON.parse(data.charCodeAt(0) === 65279 ? data.slice(1) : data);
203
+ const browserName = config.browser?.browserName ?? "chromium";
204
+ const channel = config.browser?.launchOptions?.channel;
205
+ if (!channel || channel.startsWith("chromium")) {
206
+ const executable = registry.findExecutable(channel ?? browserName);
207
+ if (executable && !import_fs.default.existsSync(executable?.executablePath()))
208
+ await registry.install([executable]);
209
+ }
210
+ } else {
211
+ const channel = await findOrInstallDefaultBrowser();
212
+ if (channel !== "chrome")
213
+ await createDefaultConfig(channel);
214
+ }
215
+ }
216
+ async function installBrowser() {
217
+ const { program: program2 } = require("../../cli/program");
218
+ const argv = process.argv.map((arg) => arg === "install-browser" ? "install" : arg);
219
+ program2.parse(argv);
220
+ }
221
+ async function createDefaultConfig(channel) {
222
+ const config = {
223
+ browser: {
224
+ browserName: "chromium",
225
+ launchOptions: {
226
+ channel
227
+ }
228
+ }
229
+ };
230
+ await import_fs.default.promises.writeFile(defaultConfigFile(), JSON.stringify(config, null, 2));
231
+ console.log(`\u2705 Created default config for ${channel} at ${import_path.default.relative(process.cwd(), defaultConfigFile())}.`);
232
+ }
233
+ async function findOrInstallDefaultBrowser() {
234
+ const { registry } = await import("playwright-core/lib/server/registry/index");
235
+ const channels = ["chrome", "msedge"];
236
+ for (const channel of channels) {
237
+ const executable = registry.findExecutable(channel);
238
+ if (!executable?.executablePath())
239
+ continue;
240
+ console.log(`\u2705 Found ${channel}, will use it as the default browser.`);
241
+ return channel;
242
+ }
243
+ const chromiumExecutable = registry.findExecutable("chromium");
244
+ if (!import_fs.default.existsSync(chromiumExecutable?.executablePath()))
245
+ await registry.install([chromiumExecutable]);
246
+ return "chromium";
247
+ }
248
+ function defaultConfigFile() {
249
+ return import_path.default.resolve(".playwright", "cli.config.json");
250
+ }
251
+ async function killAllDaemons() {
252
+ const platform = import_os.default.platform();
253
+ let killed = 0;
254
+ try {
255
+ if (platform === "win32") {
256
+ const result = (0, import_child_process.execSync)(
257
+ `powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like '*run-mcp-server*' -or $_.CommandLine -like '*run-cli-server*' -or $_.CommandLine -like '*cli-daemon*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue; $_.ProcessId }"`,
258
+ { encoding: "utf-8" }
259
+ );
260
+ const pids = result.split("\n").map((line) => line.trim()).filter((line) => /^\d+$/.test(line));
261
+ for (const pid of pids)
262
+ console.log(`Killed daemon process ${pid}`);
263
+ killed = pids.length;
264
+ } else {
265
+ const result = (0, import_child_process.execSync)("ps aux", { encoding: "utf-8" });
266
+ const lines = result.split("\n");
267
+ for (const line of lines) {
268
+ if (line.includes("run-mcp-server") || line.includes("run-cli-server") || line.includes("cli-daemon")) {
269
+ const parts = line.trim().split(/\s+/);
270
+ const pid = parts[1];
271
+ if (pid && /^\d+$/.test(pid)) {
272
+ try {
273
+ process.kill(parseInt(pid, 10), "SIGKILL");
274
+ console.log(`Killed daemon process ${pid}`);
275
+ killed++;
276
+ } catch {
277
+ }
278
+ }
279
+ }
280
+ }
281
+ }
282
+ } catch (e) {
283
+ }
284
+ if (killed === 0)
285
+ console.log("No daemon processes found.");
286
+ else if (killed > 0)
287
+ console.log(`Killed ${killed} daemon process${killed === 1 ? "" : "es"}.`);
288
+ }
289
+ async function listSessions(registry, clientInfo, all) {
290
+ if (all) {
291
+ const entries = registry.entryMap();
292
+ const serverEntries = await import_serverRegistry.serverRegistry.list();
293
+ if (entries.size === 0 && serverEntries.size === 0) {
294
+ console.log("No browsers found.");
295
+ return;
296
+ }
297
+ const runningSessions = /* @__PURE__ */ new Set();
298
+ if (entries.size)
299
+ console.log("### Browsers");
300
+ for (const [workspace, list] of entries)
301
+ await gcAndPrintSessions(clientInfo, list.map((entry) => new import_session.Session(entry)), `${import_path.default.relative(process.cwd(), workspace) || "/"}:`, runningSessions);
302
+ const filteredServerEntries = /* @__PURE__ */ new Map();
303
+ for (const [workspace, list] of serverEntries) {
304
+ const unattached = list.filter((d) => !runningSessions.has(d.title));
305
+ if (unattached.length)
306
+ filteredServerEntries.set(workspace, unattached);
307
+ }
308
+ if (filteredServerEntries.size) {
309
+ if (entries.size)
310
+ console.log("");
311
+ console.log("### Browser servers available for attach");
312
+ }
313
+ for (const [workspace, list] of filteredServerEntries)
314
+ await gcAndPrintBrowserSessions(workspace, list);
315
+ } else {
316
+ console.log("### Browsers");
317
+ const entries = registry.entries(clientInfo);
318
+ await gcAndPrintSessions(clientInfo, entries.map((entry) => new import_session.Session(entry)));
319
+ }
320
+ }
321
+ async function gcAndPrintSessions(clientInfo, sessions, header, runningSessions) {
322
+ const running = [];
323
+ const stopped = [];
324
+ for (const session of sessions) {
325
+ const canConnect = await session.canConnect();
326
+ if (canConnect) {
327
+ running.push(session);
328
+ runningSessions?.add(session.name);
329
+ } else {
330
+ if (session.config.cli.persistent)
331
+ stopped.push(session);
332
+ else
333
+ await session.deleteSessionConfig();
334
+ }
335
+ }
336
+ if (header && (running.length || stopped.length))
337
+ console.log(header);
338
+ for (const session of running)
339
+ console.log(await renderSessionStatus(clientInfo, session));
340
+ for (const session of stopped)
341
+ console.log(await renderSessionStatus(clientInfo, session));
342
+ if (running.length === 0 && stopped.length === 0)
343
+ console.log(" (no browsers)");
344
+ }
345
+ async function gcAndPrintBrowserSessions(workspace, list) {
346
+ if (!list.length)
347
+ return;
348
+ if (workspace)
349
+ console.log(`${import_path.default.relative(process.cwd(), workspace) || "/"}:`);
350
+ for (const descriptor of list) {
351
+ const text = [];
352
+ text.push(`- browser "${descriptor.title}":`);
353
+ text.push(` - browser: ${descriptor.browser.browserName}`);
354
+ text.push(` - version: v${descriptor.playwrightVersion}`);
355
+ text.push(` - run \`playwright-cli attach "${descriptor.title}"\` to attach`);
356
+ console.log(text.join("\n"));
357
+ }
358
+ if (!list.length)
359
+ console.log(" (no browsers)");
360
+ }
361
+ async function renderSessionStatus(clientInfo, session) {
362
+ const text = [];
363
+ const config = session.config;
364
+ const canConnect = await session.canConnect();
365
+ text.push(`- ${session.name}:`);
366
+ text.push(` - status: ${canConnect ? "open" : "closed"}`);
367
+ if (canConnect && !session.isCompatible(clientInfo))
368
+ text.push(` - version: v${config.version} [incompatible please re-open]`);
369
+ if (config.browser)
370
+ text.push(...(0, import_session.renderResolvedConfig)(config));
371
+ return text.join("\n");
372
+ }
373
+ function calculateSha1(buffer) {
374
+ const hash = import_crypto.default.createHash("sha1");
375
+ hash.update(buffer);
376
+ return hash.digest("hex");
377
+ }
378
+ // Annotate the CommonJS export names for ESM import in node:
379
+ 0 && (module.exports = {
380
+ calculateSha1,
381
+ program
382
+ });