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,138 @@
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 recorderRunner_exports = {};
20
+ __export(recorderRunner_exports, {
21
+ performAction: () => performAction,
22
+ toClickOptions: () => toClickOptions
23
+ });
24
+ module.exports = __toCommonJS(recorderRunner_exports);
25
+ var import_utils = require("../../utils");
26
+ var import_language = require("../codegen/language");
27
+ var import_recorderUtils = require("./recorderUtils");
28
+ var import_progress = require("../progress");
29
+ async function performAction(pageAliases, actionInContext) {
30
+ const mainFrame = (0, import_recorderUtils.mainFrameForAction)(pageAliases, actionInContext);
31
+ const controller = new import_progress.ProgressController();
32
+ const kActionTimeout = 5e3;
33
+ return await controller.run((progress) => performActionImpl(progress, mainFrame, actionInContext), kActionTimeout);
34
+ }
35
+ async function performActionImpl(progress, mainFrame, actionInContext) {
36
+ const { action } = actionInContext;
37
+ if (action.name === "navigate") {
38
+ await mainFrame.goto(progress, action.url);
39
+ return;
40
+ }
41
+ if (action.name === "openPage")
42
+ throw Error("Not reached");
43
+ if (action.name === "closePage") {
44
+ await mainFrame._page.close();
45
+ return;
46
+ }
47
+ const selector = (0, import_recorderUtils.buildFullSelector)(actionInContext.frame.framePath, action.selector);
48
+ if (action.name === "click") {
49
+ const options = toClickOptions(action);
50
+ await mainFrame.click(progress, selector, { ...options, strict: true });
51
+ return;
52
+ }
53
+ if (action.name === "hover") {
54
+ await mainFrame.hover(progress, selector, { position: action.position, strict: true });
55
+ return;
56
+ }
57
+ if (action.name === "press") {
58
+ const modifiers = (0, import_language.toKeyboardModifiers)(action.modifiers);
59
+ const shortcut = [...modifiers, action.key].join("+");
60
+ await mainFrame.press(progress, selector, shortcut, { strict: true });
61
+ return;
62
+ }
63
+ if (action.name === "fill") {
64
+ await mainFrame.fill(progress, selector, action.text, { strict: true });
65
+ return;
66
+ }
67
+ if (action.name === "setInputFiles") {
68
+ await mainFrame.setInputFiles(progress, selector, { selector, payloads: [], strict: true });
69
+ return;
70
+ }
71
+ if (action.name === "check") {
72
+ await mainFrame.check(progress, selector, { strict: true });
73
+ return;
74
+ }
75
+ if (action.name === "uncheck") {
76
+ await mainFrame.uncheck(progress, selector, { strict: true });
77
+ return;
78
+ }
79
+ if (action.name === "select") {
80
+ const values = action.options.map((value) => ({ value }));
81
+ await mainFrame.selectOption(progress, selector, [], values, { strict: true });
82
+ return;
83
+ }
84
+ if (action.name === "assertChecked") {
85
+ await mainFrame.expect(progress, selector, {
86
+ selector,
87
+ expression: "to.be.checked",
88
+ expectedValue: { checked: action.checked },
89
+ isNot: !action.checked
90
+ });
91
+ return;
92
+ }
93
+ if (action.name === "assertText") {
94
+ await mainFrame.expect(progress, selector, {
95
+ selector,
96
+ expression: "to.have.text",
97
+ expectedText: (0, import_utils.serializeExpectedTextValues)([action.text], { matchSubstring: true, normalizeWhiteSpace: true }),
98
+ isNot: false
99
+ });
100
+ return;
101
+ }
102
+ if (action.name === "assertValue") {
103
+ await mainFrame.expect(progress, selector, {
104
+ selector,
105
+ expression: "to.have.value",
106
+ expectedValue: action.value,
107
+ isNot: false
108
+ });
109
+ return;
110
+ }
111
+ if (action.name === "assertVisible") {
112
+ await mainFrame.expect(progress, selector, {
113
+ selector,
114
+ expression: "to.be.visible",
115
+ isNot: false
116
+ });
117
+ return;
118
+ }
119
+ throw new Error("Internal error: unexpected action " + action.name);
120
+ }
121
+ function toClickOptions(action) {
122
+ const modifiers = (0, import_language.toKeyboardModifiers)(action.modifiers);
123
+ const options = {};
124
+ if (action.button !== "left")
125
+ options.button = action.button;
126
+ if (modifiers.length)
127
+ options.modifiers = modifiers;
128
+ if (action.clickCount > 1)
129
+ options.clickCount = action.clickCount;
130
+ if (action.position)
131
+ options.position = action.position;
132
+ return options;
133
+ }
134
+ // Annotate the CommonJS export names for ESM import in node:
135
+ 0 && (module.exports = {
136
+ performAction,
137
+ toClickOptions
138
+ });
@@ -0,0 +1,83 @@
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 recorderSignalProcessor_exports = {};
20
+ __export(recorderSignalProcessor_exports, {
21
+ RecorderSignalProcessor: () => RecorderSignalProcessor
22
+ });
23
+ module.exports = __toCommonJS(recorderSignalProcessor_exports);
24
+ var import_debug = require("../utils/debug");
25
+ var import_time = require("../../utils/isomorphic/time");
26
+ var import_recorderUtils = require("./recorderUtils");
27
+ class RecorderSignalProcessor {
28
+ constructor(actionSink) {
29
+ this._lastAction = null;
30
+ this._delegate = actionSink;
31
+ }
32
+ addAction(actionInContext) {
33
+ this._lastAction = actionInContext;
34
+ this._delegate.addAction(actionInContext);
35
+ }
36
+ signal(pageAlias, frame, signal) {
37
+ const timestamp = (0, import_time.monotonicTime)();
38
+ if (signal.name === "navigation" && frame._page.mainFrame() === frame) {
39
+ const lastAction = this._lastAction;
40
+ const signalThreshold = (0, import_debug.isUnderTest)() ? 500 : 5e3;
41
+ let generateGoto = false;
42
+ if (!lastAction)
43
+ generateGoto = true;
44
+ else if (lastAction.action.name !== "click" && lastAction.action.name !== "press" && lastAction.action.name !== "fill")
45
+ generateGoto = true;
46
+ else if (timestamp - lastAction.startTime > signalThreshold)
47
+ generateGoto = true;
48
+ if (generateGoto) {
49
+ this.addAction({
50
+ frame: {
51
+ pageGuid: frame._page.guid,
52
+ pageAlias,
53
+ framePath: []
54
+ },
55
+ action: {
56
+ name: "navigate",
57
+ url: frame.url(),
58
+ signals: []
59
+ },
60
+ startTime: timestamp,
61
+ endTime: timestamp
62
+ });
63
+ }
64
+ return;
65
+ }
66
+ (0, import_recorderUtils.generateFrameSelector)(frame).then((framePath) => {
67
+ const signalInContext = {
68
+ frame: {
69
+ pageGuid: frame._page.guid,
70
+ pageAlias,
71
+ framePath
72
+ },
73
+ signal,
74
+ timestamp
75
+ };
76
+ this._delegate.addSignal(signalInContext);
77
+ });
78
+ }
79
+ }
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ RecorderSignalProcessor
83
+ });
@@ -0,0 +1,157 @@
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 recorderUtils_exports = {};
20
+ __export(recorderUtils_exports, {
21
+ buildFullSelector: () => buildFullSelector,
22
+ collapseActions: () => collapseActions,
23
+ frameForAction: () => frameForAction,
24
+ generateFrameSelector: () => generateFrameSelector,
25
+ mainFrameForAction: () => mainFrameForAction,
26
+ metadataToCallLog: () => metadataToCallLog,
27
+ shouldMergeAction: () => shouldMergeAction
28
+ });
29
+ module.exports = __toCommonJS(recorderUtils_exports);
30
+ var import_protocolFormatter = require("../../utils/isomorphic/protocolFormatter");
31
+ var import_utils = require("../../utils");
32
+ var import_timeoutRunner = require("../../utils/isomorphic/timeoutRunner");
33
+ function buildFullSelector(framePath, selector) {
34
+ return [...framePath, selector].join(" >> internal:control=enter-frame >> ");
35
+ }
36
+ function metadataToCallLog(metadata, status) {
37
+ const title = (0, import_protocolFormatter.renderTitleForCall)(metadata);
38
+ if (metadata.error)
39
+ status = "error";
40
+ const params = {
41
+ url: metadata.params?.url,
42
+ selector: metadata.params?.selector
43
+ };
44
+ let duration = metadata.endTime ? metadata.endTime - metadata.startTime : void 0;
45
+ if (typeof duration === "number" && metadata.pauseStartTime && metadata.pauseEndTime) {
46
+ duration -= metadata.pauseEndTime - metadata.pauseStartTime;
47
+ duration = Math.max(duration, 0);
48
+ }
49
+ const callLog = {
50
+ id: metadata.id,
51
+ messages: metadata.log,
52
+ title: title ?? "",
53
+ status,
54
+ error: metadata.error?.error?.message,
55
+ params,
56
+ duration
57
+ };
58
+ return callLog;
59
+ }
60
+ function mainFrameForAction(pageAliases, actionInContext) {
61
+ const pageAlias = actionInContext.frame.pageAlias;
62
+ const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];
63
+ if (!page)
64
+ throw new Error(`Internal error: page ${pageAlias} not found in [${[...pageAliases.values()]}]`);
65
+ return page.mainFrame();
66
+ }
67
+ async function frameForAction(pageAliases, actionInContext, action) {
68
+ const pageAlias = actionInContext.frame.pageAlias;
69
+ const page = [...pageAliases.entries()].find(([, alias]) => pageAlias === alias)?.[0];
70
+ if (!page)
71
+ throw new Error("Internal error: page not found");
72
+ const fullSelector = buildFullSelector(actionInContext.frame.framePath, action.selector);
73
+ const result = await page.mainFrame().selectors.resolveFrameForSelector(fullSelector);
74
+ if (!result)
75
+ throw new Error("Internal error: frame not found");
76
+ return result.frame;
77
+ }
78
+ function isSameAction(a, b) {
79
+ return a.action.name === b.action.name && a.frame.pageAlias === b.frame.pageAlias && a.frame.framePath.join("|") === b.frame.framePath.join("|");
80
+ }
81
+ function isSameSelector(action, lastAction) {
82
+ return "selector" in action.action && "selector" in lastAction.action && action.action.selector === lastAction.action.selector;
83
+ }
84
+ function isShortlyAfter(action, lastAction) {
85
+ return action.startTime - lastAction.startTime < 500;
86
+ }
87
+ function shouldMergeAction(action, lastAction) {
88
+ if (!lastAction)
89
+ return false;
90
+ switch (action.action.name) {
91
+ case "fill":
92
+ return isSameAction(action, lastAction) && isSameSelector(action, lastAction);
93
+ case "navigate":
94
+ return isSameAction(action, lastAction);
95
+ case "click":
96
+ return isSameAction(action, lastAction) && isSameSelector(action, lastAction) && isShortlyAfter(action, lastAction) && action.action.clickCount > lastAction.action.clickCount;
97
+ }
98
+ return false;
99
+ }
100
+ function collapseActions(actions) {
101
+ const result = [];
102
+ for (const action of actions) {
103
+ const lastAction = result[result.length - 1];
104
+ const shouldMerge = shouldMergeAction(action, lastAction);
105
+ if (!shouldMerge) {
106
+ result.push(action);
107
+ continue;
108
+ }
109
+ const startTime = result[result.length - 1].startTime;
110
+ result[result.length - 1] = action;
111
+ result[result.length - 1].startTime = startTime;
112
+ }
113
+ return result;
114
+ }
115
+ async function generateFrameSelector(frame) {
116
+ const selectorPromises = [];
117
+ while (frame) {
118
+ const parent = frame.parentFrame();
119
+ if (!parent)
120
+ break;
121
+ selectorPromises.push(generateFrameSelectorInParent(parent, frame));
122
+ frame = parent;
123
+ }
124
+ const result = await Promise.all(selectorPromises);
125
+ return result.reverse();
126
+ }
127
+ async function generateFrameSelectorInParent(parent, frame) {
128
+ const result = await (0, import_timeoutRunner.raceAgainstDeadline)(async () => {
129
+ try {
130
+ const frameElement = await frame.frameElement();
131
+ if (!frameElement || !parent)
132
+ return;
133
+ const utility = await parent._utilityContext();
134
+ const injected = await utility.injectedScript();
135
+ const selector = await injected.evaluate((injected2, element) => {
136
+ return injected2.generateSelectorSimple(element);
137
+ }, frameElement);
138
+ return selector;
139
+ } catch (e) {
140
+ }
141
+ }, (0, import_utils.monotonicTime)() + 2e3);
142
+ if (!result.timedOut && result.result)
143
+ return result.result;
144
+ if (frame.name())
145
+ return `iframe[name=${(0, import_utils.quoteCSSAttributeValue)(frame.name())}]`;
146
+ return `iframe[src=${(0, import_utils.quoteCSSAttributeValue)(frame.url())}]`;
147
+ }
148
+ // Annotate the CommonJS export names for ESM import in node:
149
+ 0 && (module.exports = {
150
+ buildFullSelector,
151
+ collapseActions,
152
+ frameForAction,
153
+ generateFrameSelector,
154
+ mainFrameForAction,
155
+ metadataToCallLog,
156
+ shouldMergeAction
157
+ });
@@ -0,0 +1,40 @@
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 sessionExporter_exports = {};
20
+ __export(sessionExporter_exports, {
21
+ exportSession: () => exportSession
22
+ });
23
+ module.exports = __toCommonJS(sessionExporter_exports);
24
+ var import_chat = require("./chat");
25
+ var import_sessionRedactor = require("./sessionRedactor");
26
+ var import_sessionPromptBuilder = require("./sessionPromptBuilder");
27
+ async function exportSession(actions, options, _chatFactory) {
28
+ const redactedSession = (0, import_sessionRedactor.redactSession)(actions, options.pageHasWebSockets);
29
+ const prompt = (0, import_sessionPromptBuilder.buildPrompt)(redactedSession, options);
30
+ const wsEndpoint = options.wsEndpoint;
31
+ const chatInstance = _chatFactory ? _chatFactory(wsEndpoint) : new import_chat.Chat(wsEndpoint);
32
+ const code = await chatInstance.post(prompt);
33
+ if (!code)
34
+ throw new Error("AI generation failed \u2014 check wsEndpoint configuration");
35
+ return { code, warnings: redactedSession.warnings };
36
+ }
37
+ // Annotate the CommonJS export names for ESM import in node:
38
+ 0 && (module.exports = {
39
+ exportSession
40
+ });
@@ -0,0 +1,128 @@
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 sessionPromptBuilder_exports = {};
30
+ __export(sessionPromptBuilder_exports, {
31
+ buildPrompt: () => buildPrompt
32
+ });
33
+ module.exports = __toCommonJS(sessionPromptBuilder_exports);
34
+ var import_path = __toESM(require("path"));
35
+ function buildPrompt(session, options) {
36
+ const { actions, dataCreatingActions, hasWebSockets } = session;
37
+ const segments = [];
38
+ for (const action of actions) {
39
+ const a = action.action;
40
+ const url = a.name === "navigate" || a.name === "openPage" ? a.url : void 0;
41
+ if (a.name === "openPage" && a.url === "about:blank")
42
+ continue;
43
+ if (url || !segments.length)
44
+ segments.push({ url: url ?? "", actions: [action] });
45
+ else
46
+ segments[segments.length - 1].actions.push(action);
47
+ }
48
+ const relativeOutput = import_path.default.relative(process.cwd(), options.outputFile);
49
+ let sessionSection = "";
50
+ for (const seg of segments) {
51
+ if (seg.url)
52
+ sessionSection += `### Page: ${seg.url}
53
+ `;
54
+ for (const ctx of seg.actions) {
55
+ const a = ctx.action;
56
+ const location = a.selector ? `${a.selector}` : a.url ?? "";
57
+ sessionSection += `- ${a.name}: ${location} at t=${ctx.startTime}ms
58
+ `;
59
+ const direct = (ctx.networkEvents ?? []).filter((e) => e.bucket === "direct");
60
+ const pageLoad = (ctx.networkEvents ?? []).filter((e) => e.bucket === "pageLoad");
61
+ if (direct.length) {
62
+ sessionSection += ` API calls (direct):
63
+ `;
64
+ for (const e of direct) {
65
+ const op = e.operationName ? ` (${e.operationName})` : "";
66
+ const payload = e.requestBodySnippet ? ` (payload: ${e.requestBodySnippet.slice(0, 200)}...)` : "";
67
+ const body = e.bodySnippet ? ` (body: ${e.bodySnippet.slice(0, 200)}...)` : "";
68
+ sessionSection += ` - ${e.method} ${e.url}${op}${payload} \u2192 ${e.status ?? "pending"}${body}
69
+ `;
70
+ }
71
+ }
72
+ if (pageLoad.length) {
73
+ sessionSection += ` API calls (page load context):
74
+ `;
75
+ for (const e of pageLoad)
76
+ sessionSection += ` - ${e.method} ${e.url} \u2192 ${e.status ?? "pending"}
77
+ `;
78
+ }
79
+ }
80
+ }
81
+ let cleanupSection = "";
82
+ if (dataCreatingActions.length) {
83
+ cleanupSection = "## Data Created During Session\n";
84
+ for (const idx of dataCreatingActions) {
85
+ const ctx = actions[idx];
86
+ const creates = (ctx.networkEvents ?? []).filter((e) => e.bucket === "direct" && e.method === "POST" && e.status === 201);
87
+ for (const e of creates)
88
+ cleanupSection += `- Step ${idx + 1} (${ctx.action.name}): POST ${e.url} \u2192 201 Created. Add afterEach cleanup using the response ID.
89
+ `;
90
+ }
91
+ } else {
92
+ cleanupSection = "## Data Created During Session\nNo data was created. No cleanup needed.\n";
93
+ }
94
+ const wsSection = hasWebSockets ? "## WebSocket Note\nThis page uses WebSocket connections. Assert on UI state changes that reflect server pushes rather than trying to intercept WS frames.\n\n" : "";
95
+ return `# Playwright Test Generation Request
96
+
97
+ ## Scenario
98
+ Name: ${options.scenarioName}
99
+ Target file: ${relativeOutput}
100
+
101
+ ## Recorded Session
102
+ ${sessionSection.trimEnd()}
103
+
104
+ ${cleanupSection}
105
+ ${wsSection}## Best Practices (follow exactly)
106
+ - Do NOT use page.waitForTimeout(), page.waitForLoadState(), page.waitForNavigation()
107
+ - DO use await expect(locator).toBeVisible() and similar waiting assertions
108
+ - Prefer getByRole, getByLabel, getByPlaceholder, getByTestId over CSS selectors
109
+ - Add a meaningful assertion BEFORE and AFTER each significant action
110
+ - For actions with 'direct' API calls, wrap the click in Promise.all with waitForResponse
111
+ - Never assert on auto-generated IDs, UUIDs, or timestamps from response bodies
112
+ - Use process.env.TEST_* variables for any credentials (already done by redaction)
113
+ - For data-creating actions (201), add afterEach cleanup using the response ID
114
+ - Use randomised test data (append Date.now()) to avoid collision on re-runs
115
+ - Structure as test.describe with one clear test per scenario
116
+
117
+ ## Output Format
118
+ ${options.mode === "clipboard" ? `Generate a complete Playwright test file in TypeScript.
119
+ The file should start with: import { test, expect } from '@playwright/test';
120
+ Save the result to: ${relativeOutput}` : `Return the TypeScript code as a raw JSON string. Your entire response must be valid JSON parseable by JSON.parse().
121
+ Example: "import { test, expect } from '@playwright/test';\\n\\ntest.describe(..."
122
+ Do not include any explanation, markdown fences, or wrapper objects.
123
+ The code must start with: import { test, expect } from '@playwright/test';`}`;
124
+ }
125
+ // Annotate the CommonJS export names for ESM import in node:
126
+ 0 && (module.exports = {
127
+ buildPrompt
128
+ });
@@ -0,0 +1,74 @@
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 sessionRedactor_exports = {};
20
+ __export(sessionRedactor_exports, {
21
+ redactSession: () => redactSession
22
+ });
23
+ module.exports = __toCommonJS(sessionRedactor_exports);
24
+ function redactSession(actions, pageHasWebSockets) {
25
+ const warnings = [];
26
+ const dataCreatingActions = [];
27
+ const copy = JSON.parse(JSON.stringify(actions));
28
+ for (let i = 0; i < copy.length; i++) {
29
+ const ctx = copy[i];
30
+ const action = ctx.action;
31
+ if (action.name === "fill") {
32
+ const fill = action;
33
+ const label = `${fill.selector} ${ctx.description ?? ""}`;
34
+ if (/password|passwd|secret|credential|pin\b/i.test(label)) {
35
+ warnings.push(`Redacted password fill value in step ${i + 1} (${fill.selector})`);
36
+ fill.text = "process.env.TEST_PASSWORD || 'test-password'";
37
+ } else if (/token|api.?key|api.?secret|auth.?key/i.test(label)) {
38
+ warnings.push(`Redacted API key/token fill value in step ${i + 1} (${fill.selector})`);
39
+ fill.text = "process.env.TEST_API_KEY || 'test-api-key'";
40
+ } else if (/ssn|social.?security|card.?number|cvv/i.test(label)) {
41
+ warnings.push(`Redacted sensitive PII fill value in step ${i + 1} (${fill.selector})`);
42
+ fill.text = "'[REDACTED]'";
43
+ }
44
+ }
45
+ for (const event of ctx.networkEvents ?? []) {
46
+ if (event.requestBodySnippet) {
47
+ const before = event.requestBodySnippet;
48
+ event.requestBodySnippet = event.requestBodySnippet.replace(/"password"\s*:\s*"[^"]*"/g, '"password":"[redacted]"').replace(/"passwd"\s*:\s*"[^"]*"/g, '"passwd":"[redacted]"').replace(/"token"\s*:\s*"[^"]*"/g, '"token":"[redacted]"').replace(/"secret"\s*:\s*"[^"]*"/g, '"secret":"[redacted]"').replace(/Bearer\s+[A-Za-z0-9._\-]+/g, "Bearer [redacted]").replace(/"Authorization"\s*:\s*"[^"]*"/g, '"Authorization":"[redacted]"').replace(/\b[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}\b/g, "[card-redacted]");
49
+ if (event.requestBodySnippet !== before)
50
+ warnings.push(`Redacted sensitive data in ${event.method} ${event.url} request payload (step ${i + 1})`);
51
+ }
52
+ if (event.bodySnippet) {
53
+ const before = event.bodySnippet;
54
+ event.bodySnippet = event.bodySnippet.replace(/"password"\s*:\s*"[^"]*"/g, '"password":"[redacted]"').replace(/"passwd"\s*:\s*"[^"]*"/g, '"passwd":"[redacted]"').replace(/"token"\s*:\s*"[^"]*"/g, '"token":"[redacted]"').replace(/"secret"\s*:\s*"[^"]*"/g, '"secret":"[redacted]"').replace(/Bearer\s+[A-Za-z0-9._\-]+/g, "Bearer [redacted]").replace(/"Authorization"\s*:\s*"[^"]*"/g, '"Authorization":"[redacted]"').replace(/\b[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}[\s\-]?[0-9]{4}\b/g, "[card-redacted]");
55
+ if (event.bodySnippet !== before)
56
+ warnings.push(`Redacted sensitive data in ${event.method} ${event.url} body (step ${i + 1})`);
57
+ }
58
+ if (event.bucket === "direct" && event.method === "POST" && event.status === 201) {
59
+ if (!dataCreatingActions.includes(i))
60
+ dataCreatingActions.push(i);
61
+ }
62
+ }
63
+ }
64
+ return {
65
+ actions: copy,
66
+ warnings,
67
+ hasWebSockets: pageHasWebSockets,
68
+ dataCreatingActions
69
+ };
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ redactSession
74
+ });
@@ -0,0 +1,57 @@
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 throttledFile_exports = {};
30
+ __export(throttledFile_exports, {
31
+ ThrottledFile: () => ThrottledFile
32
+ });
33
+ module.exports = __toCommonJS(throttledFile_exports);
34
+ var import_fs = __toESM(require("fs"));
35
+ class ThrottledFile {
36
+ constructor(file) {
37
+ this._file = file;
38
+ }
39
+ setContent(text) {
40
+ this._text = text;
41
+ if (!this._timer)
42
+ this._timer = setTimeout(() => this.flush(), 250);
43
+ }
44
+ flush() {
45
+ if (this._timer) {
46
+ clearTimeout(this._timer);
47
+ this._timer = void 0;
48
+ }
49
+ if (this._text)
50
+ import_fs.default.writeFileSync(this._file, this._text);
51
+ this._text = void 0;
52
+ }
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ ThrottledFile
57
+ });