@stablyai/internal-playwright-core 0.1.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 (405) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +1134 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/install_webkit_wsl.ps1 +35 -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 +80 -0
  23. package/cli.js +18 -0
  24. package/index.d.ts +17 -0
  25. package/index.js +32 -0
  26. package/index.mjs +28 -0
  27. package/lib/androidServerImpl.js +65 -0
  28. package/lib/browserServerImpl.js +120 -0
  29. package/lib/cli/cli.js +58 -0
  30. package/lib/cli/driver.js +97 -0
  31. package/lib/cli/program.js +634 -0
  32. package/lib/cli/programWithTestStub.js +74 -0
  33. package/lib/client/accessibility.js +49 -0
  34. package/lib/client/android.js +361 -0
  35. package/lib/client/api.js +137 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +163 -0
  38. package/lib/client/browserContext.js +529 -0
  39. package/lib/client/browserType.js +184 -0
  40. package/lib/client/cdpSession.js +51 -0
  41. package/lib/client/channelOwner.js +194 -0
  42. package/lib/client/clientHelper.js +64 -0
  43. package/lib/client/clientInstrumentation.js +55 -0
  44. package/lib/client/clientStackTrace.js +69 -0
  45. package/lib/client/clock.js +68 -0
  46. package/lib/client/connection.js +314 -0
  47. package/lib/client/consoleMessage.js +54 -0
  48. package/lib/client/coverage.js +44 -0
  49. package/lib/client/dialog.js +56 -0
  50. package/lib/client/download.js +62 -0
  51. package/lib/client/electron.js +138 -0
  52. package/lib/client/elementHandle.js +281 -0
  53. package/lib/client/errors.js +77 -0
  54. package/lib/client/eventEmitter.js +314 -0
  55. package/lib/client/events.js +99 -0
  56. package/lib/client/fetch.js +369 -0
  57. package/lib/client/fileChooser.js +46 -0
  58. package/lib/client/fileUtils.js +34 -0
  59. package/lib/client/frame.js +408 -0
  60. package/lib/client/harRouter.js +87 -0
  61. package/lib/client/input.js +84 -0
  62. package/lib/client/jsHandle.js +109 -0
  63. package/lib/client/jsonPipe.js +39 -0
  64. package/lib/client/localUtils.js +60 -0
  65. package/lib/client/locator.js +368 -0
  66. package/lib/client/network.js +747 -0
  67. package/lib/client/page.js +721 -0
  68. package/lib/client/platform.js +74 -0
  69. package/lib/client/playwright.js +71 -0
  70. package/lib/client/selectors.js +55 -0
  71. package/lib/client/stream.js +39 -0
  72. package/lib/client/timeoutSettings.js +79 -0
  73. package/lib/client/tracing.js +117 -0
  74. package/lib/client/types.js +28 -0
  75. package/lib/client/video.js +59 -0
  76. package/lib/client/waiter.js +142 -0
  77. package/lib/client/webError.js +39 -0
  78. package/lib/client/webSocket.js +93 -0
  79. package/lib/client/worker.js +63 -0
  80. package/lib/client/writableStream.js +39 -0
  81. package/lib/common/debugLogger.js +90 -0
  82. package/lib/common/socksProxy.js +569 -0
  83. package/lib/common/timeoutSettings.js +73 -0
  84. package/lib/common/types.js +5 -0
  85. package/lib/generated/bindingsControllerSource.js +28 -0
  86. package/lib/generated/clockSource.js +28 -0
  87. package/lib/generated/consoleApiSource.js +28 -0
  88. package/lib/generated/injectedScriptSource.js +28 -0
  89. package/lib/generated/pollingRecorderSource.js +28 -0
  90. package/lib/generated/recorderSource.js +28 -0
  91. package/lib/generated/storageScriptSource.js +28 -0
  92. package/lib/generated/utilityScriptSource.js +28 -0
  93. package/lib/generated/webSocketMockSource.js +336 -0
  94. package/lib/image_tools/colorUtils.js +98 -0
  95. package/lib/image_tools/compare.js +108 -0
  96. package/lib/image_tools/imageChannel.js +70 -0
  97. package/lib/image_tools/stats.js +102 -0
  98. package/lib/inProcessFactory.js +60 -0
  99. package/lib/index.js +19 -0
  100. package/lib/inprocess.js +3 -0
  101. package/lib/outofprocess.js +76 -0
  102. package/lib/protocol/debug.js +27 -0
  103. package/lib/protocol/serializers.js +192 -0
  104. package/lib/protocol/transport.js +82 -0
  105. package/lib/protocol/validator.js +2919 -0
  106. package/lib/protocol/validatorPrimitives.js +193 -0
  107. package/lib/remote/playwrightConnection.js +129 -0
  108. package/lib/remote/playwrightServer.js +335 -0
  109. package/lib/server/accessibility.js +69 -0
  110. package/lib/server/android/android.js +465 -0
  111. package/lib/server/android/backendAdb.js +177 -0
  112. package/lib/server/artifact.js +127 -0
  113. package/lib/server/bidi/bidiBrowser.js +490 -0
  114. package/lib/server/bidi/bidiChromium.js +153 -0
  115. package/lib/server/bidi/bidiConnection.js +212 -0
  116. package/lib/server/bidi/bidiExecutionContext.js +221 -0
  117. package/lib/server/bidi/bidiFirefox.js +130 -0
  118. package/lib/server/bidi/bidiInput.js +146 -0
  119. package/lib/server/bidi/bidiNetworkManager.js +383 -0
  120. package/lib/server/bidi/bidiOverCdp.js +102 -0
  121. package/lib/server/bidi/bidiPage.js +552 -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/bidiDeserializer.js +98 -0
  125. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  126. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  127. package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  128. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  129. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  130. package/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  131. package/lib/server/browser.js +149 -0
  132. package/lib/server/browserContext.js +695 -0
  133. package/lib/server/browserType.js +328 -0
  134. package/lib/server/callLog.js +82 -0
  135. package/lib/server/chromium/appIcon.png +0 -0
  136. package/lib/server/chromium/chromium.js +402 -0
  137. package/lib/server/chromium/chromiumSwitches.js +95 -0
  138. package/lib/server/chromium/crAccessibility.js +263 -0
  139. package/lib/server/chromium/crBrowser.js +501 -0
  140. package/lib/server/chromium/crConnection.js +202 -0
  141. package/lib/server/chromium/crCoverage.js +235 -0
  142. package/lib/server/chromium/crDevTools.js +113 -0
  143. package/lib/server/chromium/crDragDrop.js +131 -0
  144. package/lib/server/chromium/crExecutionContext.js +146 -0
  145. package/lib/server/chromium/crInput.js +187 -0
  146. package/lib/server/chromium/crNetworkManager.js +666 -0
  147. package/lib/server/chromium/crPage.js +1069 -0
  148. package/lib/server/chromium/crPdf.js +121 -0
  149. package/lib/server/chromium/crProtocolHelper.js +145 -0
  150. package/lib/server/chromium/crServiceWorker.js +123 -0
  151. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  152. package/lib/server/chromium/protocol.d.js +16 -0
  153. package/lib/server/chromium/videoRecorder.js +113 -0
  154. package/lib/server/clock.js +149 -0
  155. package/lib/server/codegen/csharp.js +327 -0
  156. package/lib/server/codegen/java.js +274 -0
  157. package/lib/server/codegen/javascript.js +270 -0
  158. package/lib/server/codegen/jsonl.js +52 -0
  159. package/lib/server/codegen/language.js +132 -0
  160. package/lib/server/codegen/languages.js +68 -0
  161. package/lib/server/codegen/python.js +279 -0
  162. package/lib/server/codegen/types.js +16 -0
  163. package/lib/server/console.js +53 -0
  164. package/lib/server/cookieStore.js +206 -0
  165. package/lib/server/debugController.js +191 -0
  166. package/lib/server/debugger.js +119 -0
  167. package/lib/server/deviceDescriptors.js +39 -0
  168. package/lib/server/deviceDescriptorsSource.json +1779 -0
  169. package/lib/server/dialog.js +116 -0
  170. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  171. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  172. package/lib/server/dispatchers/browserContextDispatcher.js +364 -0
  173. package/lib/server/dispatchers/browserDispatcher.js +118 -0
  174. package/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  175. package/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  176. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  177. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  178. package/lib/server/dispatchers/dispatcher.js +371 -0
  179. package/lib/server/dispatchers/electronDispatcher.js +89 -0
  180. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  181. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  182. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  183. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  184. package/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  185. package/lib/server/dispatchers/networkDispatchers.js +213 -0
  186. package/lib/server/dispatchers/pageDispatcher.js +401 -0
  187. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  188. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  189. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  190. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  191. package/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  192. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  193. package/lib/server/dom.js +806 -0
  194. package/lib/server/download.js +70 -0
  195. package/lib/server/electron/electron.js +270 -0
  196. package/lib/server/electron/loader.js +29 -0
  197. package/lib/server/errors.js +69 -0
  198. package/lib/server/fetch.js +621 -0
  199. package/lib/server/fileChooser.js +43 -0
  200. package/lib/server/fileUploadUtils.js +84 -0
  201. package/lib/server/firefox/ffAccessibility.js +238 -0
  202. package/lib/server/firefox/ffBrowser.js +428 -0
  203. package/lib/server/firefox/ffConnection.js +147 -0
  204. package/lib/server/firefox/ffExecutionContext.js +150 -0
  205. package/lib/server/firefox/ffInput.js +159 -0
  206. package/lib/server/firefox/ffNetworkManager.js +256 -0
  207. package/lib/server/firefox/ffPage.js +503 -0
  208. package/lib/server/firefox/firefox.js +116 -0
  209. package/lib/server/firefox/protocol.d.js +16 -0
  210. package/lib/server/formData.js +147 -0
  211. package/lib/server/frameSelectors.js +156 -0
  212. package/lib/server/frames.js +1502 -0
  213. package/lib/server/har/harRecorder.js +147 -0
  214. package/lib/server/har/harTracer.js +607 -0
  215. package/lib/server/harBackend.js +157 -0
  216. package/lib/server/helper.js +96 -0
  217. package/lib/server/index.js +58 -0
  218. package/lib/server/input.js +273 -0
  219. package/lib/server/instrumentation.js +69 -0
  220. package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
  221. package/lib/server/javascript.js +291 -0
  222. package/lib/server/launchApp.js +128 -0
  223. package/lib/server/localUtils.js +218 -0
  224. package/lib/server/macEditingCommands.js +143 -0
  225. package/lib/server/network.js +629 -0
  226. package/lib/server/page.js +871 -0
  227. package/lib/server/pipeTransport.js +89 -0
  228. package/lib/server/playwright.js +69 -0
  229. package/lib/server/progress.js +112 -0
  230. package/lib/server/protocolError.js +52 -0
  231. package/lib/server/recorder/chat.js +161 -0
  232. package/lib/server/recorder/codeGenerator.js +153 -0
  233. package/lib/server/recorder/csharp.js +310 -0
  234. package/lib/server/recorder/java.js +248 -0
  235. package/lib/server/recorder/javascript.js +229 -0
  236. package/lib/server/recorder/jsonl.js +47 -0
  237. package/lib/server/recorder/language.js +44 -0
  238. package/lib/server/recorder/python.js +276 -0
  239. package/lib/server/recorder/recorderActions.js +5 -0
  240. package/lib/server/recorder/recorderApp.js +387 -0
  241. package/lib/server/recorder/recorderRunner.js +138 -0
  242. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  243. package/lib/server/recorder/recorderUtils.js +157 -0
  244. package/lib/server/recorder/throttledFile.js +57 -0
  245. package/lib/server/recorder/utils.js +45 -0
  246. package/lib/server/recorder.js +499 -0
  247. package/lib/server/registry/browserFetcher.js +175 -0
  248. package/lib/server/registry/dependencies.js +371 -0
  249. package/lib/server/registry/index.js +1331 -0
  250. package/lib/server/registry/nativeDeps.js +1280 -0
  251. package/lib/server/registry/oopDownloadBrowserMain.js +120 -0
  252. package/lib/server/screenshotter.js +333 -0
  253. package/lib/server/selectors.js +112 -0
  254. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  255. package/lib/server/socksInterceptor.js +95 -0
  256. package/lib/server/stably/ai-tools/http-request.js +70 -0
  257. package/lib/server/stably/ai-tools/stablyApiCaller.js +137 -0
  258. package/lib/server/stably/autohealing/elementHandleFromCoordinates.js +64 -0
  259. package/lib/server/stably/autohealing/healingService.js +228 -0
  260. package/lib/server/stably/autohealing/screenshotFrame.js +41 -0
  261. package/lib/server/stably/constants.js +31 -0
  262. package/lib/server/trace/recorder/snapshotter.js +147 -0
  263. package/lib/server/trace/recorder/snapshotterInjected.js +541 -0
  264. package/lib/server/trace/recorder/tracing.js +602 -0
  265. package/lib/server/trace/test/inMemorySnapshotter.js +87 -0
  266. package/lib/server/trace/viewer/traceViewer.js +240 -0
  267. package/lib/server/transport.js +181 -0
  268. package/lib/server/types.js +28 -0
  269. package/lib/server/usKeyboardLayout.js +145 -0
  270. package/lib/server/utils/ascii.js +44 -0
  271. package/lib/server/utils/comparators.js +161 -0
  272. package/lib/server/utils/crypto.js +216 -0
  273. package/lib/server/utils/debug.js +42 -0
  274. package/lib/server/utils/debugLogger.js +122 -0
  275. package/lib/server/utils/env.js +73 -0
  276. package/lib/server/utils/eventsHelper.js +39 -0
  277. package/lib/server/utils/expectUtils.js +38 -0
  278. package/lib/server/utils/fileUtils.js +191 -0
  279. package/lib/server/utils/happyEyeballs.js +207 -0
  280. package/lib/server/utils/hostPlatform.js +111 -0
  281. package/lib/server/utils/httpServer.js +218 -0
  282. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  283. package/lib/server/utils/image_tools/compare.js +109 -0
  284. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  285. package/lib/server/utils/image_tools/stats.js +102 -0
  286. package/lib/server/utils/linuxUtils.js +71 -0
  287. package/lib/server/utils/network.js +233 -0
  288. package/lib/server/utils/nodePlatform.js +148 -0
  289. package/lib/server/utils/pipeTransport.js +84 -0
  290. package/lib/server/utils/processLauncher.js +241 -0
  291. package/lib/server/utils/profiler.js +65 -0
  292. package/lib/server/utils/socksProxy.js +511 -0
  293. package/lib/server/utils/spawnAsync.js +41 -0
  294. package/lib/server/utils/task.js +51 -0
  295. package/lib/server/utils/userAgent.js +98 -0
  296. package/lib/server/utils/wsServer.js +121 -0
  297. package/lib/server/utils/zipFile.js +74 -0
  298. package/lib/server/utils/zones.js +57 -0
  299. package/lib/server/webkit/protocol.d.js +16 -0
  300. package/lib/server/webkit/webkit.js +119 -0
  301. package/lib/server/webkit/wkAccessibility.js +237 -0
  302. package/lib/server/webkit/wkBrowser.js +339 -0
  303. package/lib/server/webkit/wkConnection.js +149 -0
  304. package/lib/server/webkit/wkExecutionContext.js +154 -0
  305. package/lib/server/webkit/wkInput.js +181 -0
  306. package/lib/server/webkit/wkInterceptableRequest.js +169 -0
  307. package/lib/server/webkit/wkPage.js +1134 -0
  308. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  309. package/lib/server/webkit/wkWorkers.js +104 -0
  310. package/lib/server/webkit/wsl/webkit-wsl-transport-client.js +74 -0
  311. package/lib/server/webkit/wsl/webkit-wsl-transport-server.js +113 -0
  312. package/lib/third_party/diff_match_patch.js +2222 -0
  313. package/lib/third_party/pixelmatch.js +255 -0
  314. package/lib/utils/ascii.js +31 -0
  315. package/lib/utils/comparators.js +171 -0
  316. package/lib/utils/crypto.js +33 -0
  317. package/lib/utils/debug.js +46 -0
  318. package/lib/utils/debugLogger.js +89 -0
  319. package/lib/utils/env.js +49 -0
  320. package/lib/utils/eventsHelper.js +38 -0
  321. package/lib/utils/fileUtils.js +205 -0
  322. package/lib/utils/glob.js +83 -0
  323. package/lib/utils/happy-eyeballs.js +160 -0
  324. package/lib/utils/headers.js +52 -0
  325. package/lib/utils/hostPlatform.js +128 -0
  326. package/lib/utils/httpServer.js +236 -0
  327. package/lib/utils/index.js +346 -0
  328. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  329. package/lib/utils/isomorphic/assert.js +31 -0
  330. package/lib/utils/isomorphic/colors.js +72 -0
  331. package/lib/utils/isomorphic/cssParser.js +245 -0
  332. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  333. package/lib/utils/isomorphic/headers.js +53 -0
  334. package/lib/utils/isomorphic/locatorGenerators.js +673 -0
  335. package/lib/utils/isomorphic/locatorParser.js +176 -0
  336. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  337. package/lib/utils/isomorphic/manualPromise.js +114 -0
  338. package/lib/utils/isomorphic/mimeType.js +459 -0
  339. package/lib/utils/isomorphic/multimap.js +80 -0
  340. package/lib/utils/isomorphic/protocolFormatter.js +78 -0
  341. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  342. package/lib/utils/isomorphic/rtti.js +43 -0
  343. package/lib/utils/isomorphic/selectorParser.js +386 -0
  344. package/lib/utils/isomorphic/semaphore.js +54 -0
  345. package/lib/utils/isomorphic/stackTrace.js +158 -0
  346. package/lib/utils/isomorphic/stringUtils.js +155 -0
  347. package/lib/utils/isomorphic/time.js +49 -0
  348. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  349. package/lib/utils/isomorphic/traceUtils.js +58 -0
  350. package/lib/utils/isomorphic/types.js +16 -0
  351. package/lib/utils/isomorphic/urlMatch.js +176 -0
  352. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  353. package/lib/utils/linuxUtils.js +78 -0
  354. package/lib/utils/manualPromise.js +109 -0
  355. package/lib/utils/mimeType.js +29 -0
  356. package/lib/utils/multimap.js +75 -0
  357. package/lib/utils/network.js +188 -0
  358. package/lib/utils/processLauncher.js +248 -0
  359. package/lib/utils/profiler.js +53 -0
  360. package/lib/utils/rtti.js +44 -0
  361. package/lib/utils/semaphore.js +51 -0
  362. package/lib/utils/spawnAsync.js +45 -0
  363. package/lib/utils/stackTrace.js +121 -0
  364. package/lib/utils/task.js +58 -0
  365. package/lib/utils/time.js +37 -0
  366. package/lib/utils/timeoutRunner.js +66 -0
  367. package/lib/utils/traceUtils.js +44 -0
  368. package/lib/utils/userAgent.js +105 -0
  369. package/lib/utils/wsServer.js +127 -0
  370. package/lib/utils/zipFile.js +75 -0
  371. package/lib/utils/zones.js +62 -0
  372. package/lib/utils.js +107 -0
  373. package/lib/utilsBundle.js +109 -0
  374. package/lib/utilsBundleImpl/index.js +218 -0
  375. package/lib/utilsBundleImpl/xdg-open +1066 -0
  376. package/lib/vite/htmlReport/index.html +84 -0
  377. package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +1 -0
  378. package/lib/vite/recorder/assets/codeMirrorModule-RJCXzfmE.js +24 -0
  379. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  380. package/lib/vite/recorder/assets/index-Ri0uHF7I.css +1 -0
  381. package/lib/vite/recorder/assets/index-Y-X2TGJv.js +193 -0
  382. package/lib/vite/recorder/index.html +29 -0
  383. package/lib/vite/recorder/playwright-logo.svg +9 -0
  384. package/lib/vite/traceViewer/assets/codeMirrorModule-Bhnc5o2x.js +24 -0
  385. package/lib/vite/traceViewer/assets/defaultSettingsView-ClwvkA2N.js +265 -0
  386. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  387. package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +1 -0
  388. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  389. package/lib/vite/traceViewer/defaultSettingsView.TQ8_7ybu.css +1 -0
  390. package/lib/vite/traceViewer/index.DFO9NNF5.js +2 -0
  391. package/lib/vite/traceViewer/index.I8N9v4jT.css +1 -0
  392. package/lib/vite/traceViewer/index.html +43 -0
  393. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  394. package/lib/vite/traceViewer/snapshot.html +21 -0
  395. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  396. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  397. package/lib/vite/traceViewer/uiMode.Shu3QS-1.js +5 -0
  398. package/lib/vite/traceViewer/uiMode.html +17 -0
  399. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  400. package/lib/zipBundle.js +34 -0
  401. package/lib/zipBundleImpl.js +5 -0
  402. package/package.json +43 -0
  403. package/types/protocol.d.ts +23130 -0
  404. package/types/structs.d.ts +45 -0
  405. package/types/types.d.ts +22857 -0
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CSharpLanguageGenerator = void 0;
7
+ var _language = require("./language");
8
+ var _utils = require("./utils");
9
+ var _stringUtils = require("../../utils/isomorphic/stringUtils");
10
+ var _deviceDescriptors = require("../deviceDescriptors");
11
+ var _locatorGenerators = require("../../utils/isomorphic/locatorGenerators");
12
+ /**
13
+ * Copyright (c) Microsoft Corporation.
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ class CSharpLanguageGenerator {
29
+ constructor(mode) {
30
+ this.id = void 0;
31
+ this.groupName = '.NET C#';
32
+ this.name = void 0;
33
+ this.highlighter = 'csharp';
34
+ this._mode = void 0;
35
+ if (mode === 'library') {
36
+ this.name = 'Library';
37
+ this.id = 'csharp';
38
+ } else if (mode === 'mstest') {
39
+ this.name = 'MSTest';
40
+ this.id = 'csharp-mstest';
41
+ } else if (mode === 'nunit') {
42
+ this.name = 'NUnit';
43
+ this.id = 'csharp-nunit';
44
+ } else {
45
+ throw new Error(`Unknown C# language mode: ${mode}`);
46
+ }
47
+ this._mode = mode;
48
+ }
49
+ generateAction(actionInContext) {
50
+ const action = this._generateActionInner(actionInContext);
51
+ if (action) return action;
52
+ return '';
53
+ }
54
+ _generateActionInner(actionInContext) {
55
+ const action = actionInContext.action;
56
+ if (this._mode !== 'library' && (action.name === 'openPage' || action.name === 'closePage')) return '';
57
+ let pageAlias = actionInContext.frame.pageAlias;
58
+ if (this._mode !== 'library') pageAlias = pageAlias.replace('page', 'Page');
59
+ const formatter = new CSharpFormatter(this._mode === 'library' ? 0 : 8);
60
+ if (action.name === 'openPage') {
61
+ formatter.add(`var ${pageAlias} = await context.NewPageAsync();`);
62
+ if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/') formatter.add(`await ${pageAlias}.GotoAsync(${quote(action.url)});`);
63
+ return formatter.format();
64
+ }
65
+ let subject;
66
+ if (actionInContext.frame.isMainFrame) {
67
+ subject = pageAlias;
68
+ } else {
69
+ const locators = actionInContext.frame.selectorsChain.map(selector => `.FrameLocator(${quote(selector)})`);
70
+ subject = `${pageAlias}${locators.join('')}`;
71
+ }
72
+ const signals = (0, _language.toSignalMap)(action);
73
+ if (signals.dialog) {
74
+ formatter.add(` void ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler(object sender, IDialog dialog)
75
+ {
76
+ Console.WriteLine($"Dialog message: {dialog.Message}");
77
+ dialog.DismissAsync();
78
+ ${pageAlias}.Dialog -= ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler;
79
+ }
80
+ ${pageAlias}.Dialog += ${pageAlias}_Dialog${signals.dialog.dialogAlias}_EventHandler;`);
81
+ }
82
+ const lines = [];
83
+ lines.push(this._generateActionCall(subject, action));
84
+ if (signals.download) {
85
+ lines.unshift(`var download${signals.download.downloadAlias} = await ${pageAlias}.RunAndWaitForDownloadAsync(async () =>\n{`);
86
+ lines.push(`});`);
87
+ }
88
+ if (signals.popup) {
89
+ lines.unshift(`var ${signals.popup.popupAlias} = await ${pageAlias}.RunAndWaitForPopupAsync(async () =>\n{`);
90
+ lines.push(`});`);
91
+ }
92
+ for (const line of lines) formatter.add(line);
93
+ return formatter.format();
94
+ }
95
+ _generateActionCall(subject, action) {
96
+ switch (action.name) {
97
+ case 'openPage':
98
+ throw Error('Not reached');
99
+ case 'closePage':
100
+ return `await ${subject}.CloseAsync();`;
101
+ case 'click':
102
+ {
103
+ let method = 'Click';
104
+ if (action.clickCount === 2) method = 'DblClick';
105
+ const modifiers = (0, _utils.toModifiers)(action.modifiers);
106
+ const options = {};
107
+ if (action.button !== 'left') options.button = action.button;
108
+ if (modifiers.length) options.modifiers = modifiers;
109
+ if (action.clickCount > 2) options.clickCount = action.clickCount;
110
+ if (action.position) options.position = action.position;
111
+ if (!Object.entries(options).length) return `await ${subject}.${this._asLocator(action.selector)}.${method}Async();`;
112
+ const optionsString = formatObject(options, ' ', 'Locator' + method + 'Options');
113
+ return `await ${subject}.${this._asLocator(action.selector)}.${method}Async(${optionsString});`;
114
+ }
115
+ case 'check':
116
+ return `await ${subject}.${this._asLocator(action.selector)}.CheckAsync();`;
117
+ case 'uncheck':
118
+ return `await ${subject}.${this._asLocator(action.selector)}.UncheckAsync();`;
119
+ case 'fill':
120
+ return `await ${subject}.${this._asLocator(action.selector)}.FillAsync(${quote(action.text)});`;
121
+ case 'setInputFiles':
122
+ return `await ${subject}.${this._asLocator(action.selector)}.SetInputFilesAsync(${formatObject(action.files)});`;
123
+ case 'press':
124
+ {
125
+ const modifiers = (0, _utils.toModifiers)(action.modifiers);
126
+ const shortcut = [...modifiers, action.key].join('+');
127
+ return `await ${subject}.${this._asLocator(action.selector)}.PressAsync(${quote(shortcut)});`;
128
+ }
129
+ case 'navigate':
130
+ return `await ${subject}.GotoAsync(${quote(action.url)});`;
131
+ case 'select':
132
+ return `await ${subject}.${this._asLocator(action.selector)}.SelectOptionAsync(${formatObject(action.options)});`;
133
+ case 'assertText':
134
+ return `await Expect(${subject}.${this._asLocator(action.selector)}).${action.substring ? 'ToContainTextAsync' : 'ToHaveTextAsync'}(${quote(action.text)});`;
135
+ case 'assertChecked':
136
+ return `await Expect(${subject}.${this._asLocator(action.selector)})${action.checked ? '' : '.Not'}.ToBeCheckedAsync();`;
137
+ case 'assertVisible':
138
+ return `await Expect(${subject}.${this._asLocator(action.selector)}).ToBeVisibleAsync();`;
139
+ case 'assertValue':
140
+ {
141
+ const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;
142
+ return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
143
+ }
144
+ }
145
+ }
146
+ _asLocator(selector) {
147
+ return (0, _locatorGenerators.asLocator)('csharp', selector);
148
+ }
149
+ generateHeader(options) {
150
+ if (this._mode === 'library') return this.generateStandaloneHeader(options);
151
+ return this.generateTestRunnerHeader(options);
152
+ }
153
+ generateStandaloneHeader(options) {
154
+ const formatter = new CSharpFormatter(0);
155
+ formatter.add(`
156
+ using Microsoft.Playwright;
157
+ using System;
158
+ using System.Threading.Tasks;
159
+
160
+ using var playwright = await Playwright.CreateAsync();
161
+ await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions, ' ', 'BrowserTypeLaunchOptions')});
162
+ var context = await browser.NewContextAsync(${formatContextOptions(options.contextOptions, options.deviceName)});`);
163
+ formatter.newLine();
164
+ return formatter.format();
165
+ }
166
+ generateTestRunnerHeader(options) {
167
+ const formatter = new CSharpFormatter(0);
168
+ formatter.add(`
169
+ using Microsoft.Playwright.${this._mode === 'nunit' ? 'NUnit' : 'MSTest'};
170
+ using Microsoft.Playwright;
171
+
172
+ ${this._mode === 'nunit' ? `[Parallelizable(ParallelScope.Self)]
173
+ [TestFixture]` : '[TestClass]'}
174
+ public class Tests : PageTest
175
+ {`);
176
+ const formattedContextOptions = formatContextOptions(options.contextOptions, options.deviceName);
177
+ if (formattedContextOptions) {
178
+ formatter.add(`public override BrowserNewContextOptions ContextOptions()
179
+ {
180
+ return ${formattedContextOptions};
181
+ }`);
182
+ formatter.newLine();
183
+ }
184
+ formatter.add(` [${this._mode === 'nunit' ? 'Test' : 'TestMethod'}]
185
+ public async Task MyTest()
186
+ {`);
187
+ return formatter.format();
188
+ }
189
+ generateFooter(saveStorage) {
190
+ const offset = this._mode === 'library' ? '' : ' ';
191
+ let storageStateLine = saveStorage ? `\n${offset}await context.StorageStateAsync(new BrowserContextStorageStateOptions\n${offset}{\n${offset} Path = ${quote(saveStorage)}\n${offset}});\n` : '';
192
+ if (this._mode !== 'library') storageStateLine += ` }\n}\n`;
193
+ return storageStateLine;
194
+ }
195
+ }
196
+ exports.CSharpLanguageGenerator = CSharpLanguageGenerator;
197
+ function formatObject(value, indent = ' ', name = '') {
198
+ if (typeof value === 'string') {
199
+ if (['permissions', 'colorScheme', 'modifiers', 'button', 'recordHarContent', 'recordHarMode', 'serviceWorkers'].includes(name)) return `${getClassName(name)}.${toPascal(value)}`;
200
+ return quote(value);
201
+ }
202
+ if (Array.isArray(value)) return `new[] { ${value.map(o => formatObject(o, indent, name)).join(', ')} }`;
203
+ if (typeof value === 'object') {
204
+ const keys = Object.keys(value).filter(key => value[key] !== undefined).sort();
205
+ if (!keys.length) return name ? `new ${getClassName(name)}` : '';
206
+ const tokens = [];
207
+ for (const key of keys) {
208
+ const property = getPropertyName(key);
209
+ tokens.push(`${property} = ${formatObject(value[key], indent, key)},`);
210
+ }
211
+ if (name) return `new ${getClassName(name)}\n{\n${indent}${tokens.join(`\n${indent}`)}\n${indent}}`;
212
+ return `{\n${indent}${tokens.join(`\n${indent}`)}\n${indent}}`;
213
+ }
214
+ if (name === 'latitude' || name === 'longitude') return String(value) + 'm';
215
+ return String(value);
216
+ }
217
+ function getClassName(value) {
218
+ switch (value) {
219
+ case 'viewport':
220
+ return 'ViewportSize';
221
+ case 'proxy':
222
+ return 'ProxySettings';
223
+ case 'permissions':
224
+ return 'ContextPermission';
225
+ case 'modifiers':
226
+ return 'KeyboardModifier';
227
+ case 'button':
228
+ return 'MouseButton';
229
+ case 'recordHarMode':
230
+ return 'HarMode';
231
+ case 'recordHarContent':
232
+ return 'HarContentPolicy';
233
+ case 'serviceWorkers':
234
+ return 'ServiceWorkerPolicy';
235
+ default:
236
+ return toPascal(value);
237
+ }
238
+ }
239
+ function getPropertyName(key) {
240
+ switch (key) {
241
+ case 'storageState':
242
+ return 'StorageStatePath';
243
+ case 'viewport':
244
+ return 'ViewportSize';
245
+ default:
246
+ return toPascal(key);
247
+ }
248
+ }
249
+ function toPascal(value) {
250
+ return value[0].toUpperCase() + value.slice(1);
251
+ }
252
+ function convertContextOptions(options) {
253
+ const result = {
254
+ ...options
255
+ };
256
+ if (options.recordHar) {
257
+ result['recordHarPath'] = options.recordHar.path;
258
+ result['recordHarContent'] = options.recordHar.content;
259
+ result['recordHarMode'] = options.recordHar.mode;
260
+ result['recordHarOmitContent'] = options.recordHar.omitContent;
261
+ result['recordHarUrlFilter'] = options.recordHar.urlFilter;
262
+ delete result.recordHar;
263
+ }
264
+ return result;
265
+ }
266
+ function formatContextOptions(options, deviceName) {
267
+ const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
268
+ if (!device) {
269
+ if (!Object.entries(options).length) return '';
270
+ return formatObject(convertContextOptions(options), ' ', 'BrowserNewContextOptions');
271
+ }
272
+ options = (0, _language.sanitizeDeviceOptions)(device, options);
273
+ if (!Object.entries(options).length) return `playwright.Devices[${quote(deviceName)}]`;
274
+ return formatObject(convertContextOptions(options), ' ', `BrowserNewContextOptions(playwright.Devices[${quote(deviceName)}])`);
275
+ }
276
+ class CSharpFormatter {
277
+ constructor(offset = 0) {
278
+ this._baseIndent = void 0;
279
+ this._baseOffset = void 0;
280
+ this._lines = [];
281
+ this._baseIndent = ' '.repeat(4);
282
+ this._baseOffset = ' '.repeat(offset);
283
+ }
284
+ prepend(text) {
285
+ this._lines = text.trim().split('\n').map(line => line.trim()).concat(this._lines);
286
+ }
287
+ add(text) {
288
+ this._lines.push(...text.trim().split('\n').map(line => line.trim()));
289
+ }
290
+ newLine() {
291
+ this._lines.push('');
292
+ }
293
+ format() {
294
+ let spaces = '';
295
+ let previousLine = '';
296
+ return this._lines.map(line => {
297
+ if (line === '') return line;
298
+ if (line.startsWith('}') || line.startsWith(']') || line.includes('});') || line === ');') spaces = spaces.substring(this._baseIndent.length);
299
+ const extraSpaces = /^(for|while|if).*\(.*\)$/.test(previousLine) ? this._baseIndent : '';
300
+ previousLine = line;
301
+ line = spaces + extraSpaces + line;
302
+ if (line.endsWith('{') || line.endsWith('[') || line.endsWith('(')) spaces += this._baseIndent;
303
+ if (line.endsWith('));')) spaces = spaces.substring(this._baseIndent.length);
304
+ return this._baseOffset + line;
305
+ }).join('\n');
306
+ }
307
+ }
308
+ function quote(text) {
309
+ return (0, _stringUtils.escapeWithQuotes)(text, '\"');
310
+ }
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.JavaLanguageGenerator = void 0;
7
+ var _language = require("./language");
8
+ var _utils = require("./utils");
9
+ var _deviceDescriptors = require("../deviceDescriptors");
10
+ var _javascript = require("./javascript");
11
+ var _stringUtils = require("../../utils/isomorphic/stringUtils");
12
+ var _locatorGenerators = require("../../utils/isomorphic/locatorGenerators");
13
+ /**
14
+ * Copyright (c) Microsoft Corporation.
15
+ *
16
+ * Licensed under the Apache License, Version 2.0 (the "License");
17
+ * you may not use this file except in compliance with the License.
18
+ * You may obtain a copy of the License at
19
+ *
20
+ * http://www.apache.org/licenses/LICENSE-2.0
21
+ *
22
+ * Unless required by applicable law or agreed to in writing, software
23
+ * distributed under the License is distributed on an "AS IS" BASIS,
24
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ * See the License for the specific language governing permissions and
26
+ * limitations under the License.
27
+ */
28
+
29
+ class JavaLanguageGenerator {
30
+ constructor(mode) {
31
+ this.id = void 0;
32
+ this.groupName = 'Java';
33
+ this.name = void 0;
34
+ this.highlighter = 'java';
35
+ this._mode = void 0;
36
+ if (mode === 'library') {
37
+ this.name = 'Library';
38
+ this.id = 'java';
39
+ } else if (mode === 'junit') {
40
+ this.name = 'JUnit';
41
+ this.id = 'java-junit';
42
+ } else {
43
+ throw new Error(`Unknown Java language mode: ${mode}`);
44
+ }
45
+ this._mode = mode;
46
+ }
47
+ generateAction(actionInContext) {
48
+ const action = actionInContext.action;
49
+ const pageAlias = actionInContext.frame.pageAlias;
50
+ const offset = this._mode === 'junit' ? 4 : 6;
51
+ const formatter = new _javascript.JavaScriptFormatter(offset);
52
+ if (this._mode !== 'library' && (action.name === 'openPage' || action.name === 'closePage')) return '';
53
+ if (action.name === 'openPage') {
54
+ formatter.add(`Page ${pageAlias} = context.newPage();`);
55
+ if (action.url && action.url !== 'about:blank' && action.url !== 'chrome://newtab/') formatter.add(`${pageAlias}.navigate(${quote(action.url)});`);
56
+ return formatter.format();
57
+ }
58
+ let subject;
59
+ let inFrameLocator = false;
60
+ if (actionInContext.frame.isMainFrame) {
61
+ subject = pageAlias;
62
+ } else {
63
+ const locators = actionInContext.frame.selectorsChain.map(selector => `.frameLocator(${quote(selector)})`);
64
+ subject = `${pageAlias}${locators.join('')}`;
65
+ inFrameLocator = true;
66
+ }
67
+ const signals = (0, _language.toSignalMap)(action);
68
+ if (signals.dialog) {
69
+ formatter.add(` ${pageAlias}.onceDialog(dialog -> {
70
+ System.out.println(String.format("Dialog message: %s", dialog.message()));
71
+ dialog.dismiss();
72
+ });`);
73
+ }
74
+ let code = this._generateActionCall(subject, action, inFrameLocator);
75
+ if (signals.popup) {
76
+ code = `Page ${signals.popup.popupAlias} = ${pageAlias}.waitForPopup(() -> {
77
+ ${code}
78
+ });`;
79
+ }
80
+ if (signals.download) {
81
+ code = `Download download${signals.download.downloadAlias} = ${pageAlias}.waitForDownload(() -> {
82
+ ${code}
83
+ });`;
84
+ }
85
+ formatter.add(code);
86
+ return formatter.format();
87
+ }
88
+ _generateActionCall(subject, action, inFrameLocator) {
89
+ switch (action.name) {
90
+ case 'openPage':
91
+ throw Error('Not reached');
92
+ case 'closePage':
93
+ return `${subject}.close();`;
94
+ case 'click':
95
+ {
96
+ let method = 'click';
97
+ if (action.clickCount === 2) method = 'dblclick';
98
+ const modifiers = (0, _utils.toModifiers)(action.modifiers);
99
+ const options = {};
100
+ if (action.button !== 'left') options.button = action.button;
101
+ if (modifiers.length) options.modifiers = modifiers;
102
+ if (action.clickCount > 2) options.clickCount = action.clickCount;
103
+ if (action.position) options.position = action.position;
104
+ const optionsText = formatClickOptions(options);
105
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.${method}(${optionsText});`;
106
+ }
107
+ case 'check':
108
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.check();`;
109
+ case 'uncheck':
110
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.uncheck();`;
111
+ case 'fill':
112
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.fill(${quote(action.text)});`;
113
+ case 'setInputFiles':
114
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.setInputFiles(${formatPath(action.files.length === 1 ? action.files[0] : action.files)});`;
115
+ case 'press':
116
+ {
117
+ const modifiers = (0, _utils.toModifiers)(action.modifiers);
118
+ const shortcut = [...modifiers, action.key].join('+');
119
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.press(${quote(shortcut)});`;
120
+ }
121
+ case 'navigate':
122
+ return `${subject}.navigate(${quote(action.url)});`;
123
+ case 'select':
124
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length > 1 ? action.options : action.options[0])});`;
125
+ case 'assertText':
126
+ return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${action.substring ? 'containsText' : 'hasText'}(${quote(action.text)});`;
127
+ case 'assertChecked':
128
+ return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)})${action.checked ? '' : '.not()'}.isChecked();`;
129
+ case 'assertVisible':
130
+ return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).isVisible();`;
131
+ case 'assertValue':
132
+ {
133
+ const assertion = action.value ? `hasValue(${quote(action.value)})` : `isEmpty()`;
134
+ return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${assertion};`;
135
+ }
136
+ }
137
+ }
138
+ _asLocator(selector, inFrameLocator) {
139
+ return (0, _locatorGenerators.asLocator)('java', selector, inFrameLocator);
140
+ }
141
+ generateHeader(options) {
142
+ const formatter = new _javascript.JavaScriptFormatter();
143
+ if (this._mode === 'junit') {
144
+ formatter.add(`
145
+ import com.microsoft.playwright.junit.UsePlaywright;
146
+ import com.microsoft.playwright.Page;
147
+ import com.microsoft.playwright.options.*;
148
+
149
+ import org.junit.jupiter.api.*;
150
+ import static com.microsoft.playwright.assertions.PlaywrightAssertions.*;
151
+
152
+ @UsePlaywright
153
+ public class TestExample {
154
+ @Test
155
+ void test(Page page) {`);
156
+ return formatter.format();
157
+ }
158
+ formatter.add(`
159
+ import com.microsoft.playwright.*;
160
+ import com.microsoft.playwright.options.*;
161
+ import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
162
+ import java.util.*;
163
+
164
+ public class Example {
165
+ public static void main(String[] args) {
166
+ try (Playwright playwright = Playwright.create()) {
167
+ Browser browser = playwright.${options.browserName}().launch(${formatLaunchOptions(options.launchOptions)});
168
+ BrowserContext context = browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName)});`);
169
+ return formatter.format();
170
+ }
171
+ generateFooter(saveStorage) {
172
+ const storageStateLine = saveStorage ? `\n context.storageState(new BrowserContext.StorageStateOptions().setPath(${quote(saveStorage)}));\n` : '';
173
+ if (this._mode === 'junit') {
174
+ return `${storageStateLine} }
175
+ }`;
176
+ }
177
+ return `${storageStateLine} }
178
+ }
179
+ }`;
180
+ }
181
+ }
182
+ exports.JavaLanguageGenerator = JavaLanguageGenerator;
183
+ function formatPath(files) {
184
+ if (Array.isArray(files)) {
185
+ if (files.length === 0) return 'new Path[0]';
186
+ return `new Path[] {${files.map(s => 'Paths.get(' + quote(s) + ')').join(', ')}}`;
187
+ }
188
+ return `Paths.get(${quote(files)})`;
189
+ }
190
+ function formatSelectOption(options) {
191
+ if (Array.isArray(options)) {
192
+ if (options.length === 0) return 'new String[0]';
193
+ return `new String[] {${options.map(s => quote(s)).join(', ')}}`;
194
+ }
195
+ return quote(options);
196
+ }
197
+ function formatLaunchOptions(options) {
198
+ const lines = [];
199
+ if (!Object.keys(options).filter(key => options[key] !== undefined).length) return '';
200
+ lines.push('new BrowserType.LaunchOptions()');
201
+ if (options.channel) lines.push(` .setChannel(${quote(options.channel)})`);
202
+ if (typeof options.headless === 'boolean') lines.push(` .setHeadless(false)`);
203
+ return lines.join('\n');
204
+ }
205
+ function formatContextOptions(contextOptions, deviceName) {
206
+ var _options$recordHar, _options$recordHar2, _options$recordHar3, _options$recordHar4, _options$recordHar5, _options$recordHar6, _options$recordHar7;
207
+ const lines = [];
208
+ if (!Object.keys(contextOptions).length && !deviceName) return '';
209
+ const device = deviceName ? _deviceDescriptors.deviceDescriptors[deviceName] : {};
210
+ const options = {
211
+ ...device,
212
+ ...contextOptions
213
+ };
214
+ lines.push('new Browser.NewContextOptions()');
215
+ if (options.acceptDownloads) lines.push(` .setAcceptDownloads(true)`);
216
+ if (options.bypassCSP) lines.push(` .setBypassCSP(true)`);
217
+ if (options.colorScheme) lines.push(` .setColorScheme(ColorScheme.${options.colorScheme.toUpperCase()})`);
218
+ if (options.deviceScaleFactor) lines.push(` .setDeviceScaleFactor(${options.deviceScaleFactor})`);
219
+ if (options.geolocation) lines.push(` .setGeolocation(${options.geolocation.latitude}, ${options.geolocation.longitude})`);
220
+ if (options.hasTouch) lines.push(` .setHasTouch(${options.hasTouch})`);
221
+ if (options.isMobile) lines.push(` .setIsMobile(${options.isMobile})`);
222
+ if (options.locale) lines.push(` .setLocale(${quote(options.locale)})`);
223
+ if (options.proxy) lines.push(` .setProxy(new Proxy(${quote(options.proxy.server)}))`);
224
+ if ((_options$recordHar = options.recordHar) !== null && _options$recordHar !== void 0 && _options$recordHar.content) lines.push(` .setRecordHarContent(HarContentPolicy.${(_options$recordHar2 = options.recordHar) === null || _options$recordHar2 === void 0 ? void 0 : _options$recordHar2.content.toUpperCase()})`);
225
+ if ((_options$recordHar3 = options.recordHar) !== null && _options$recordHar3 !== void 0 && _options$recordHar3.mode) lines.push(` .setRecordHarMode(HarMode.${(_options$recordHar4 = options.recordHar) === null || _options$recordHar4 === void 0 ? void 0 : _options$recordHar4.mode.toUpperCase()})`);
226
+ if ((_options$recordHar5 = options.recordHar) !== null && _options$recordHar5 !== void 0 && _options$recordHar5.omitContent) lines.push(` .setRecordHarOmitContent(true)`);
227
+ if ((_options$recordHar6 = options.recordHar) !== null && _options$recordHar6 !== void 0 && _options$recordHar6.path) lines.push(` .setRecordHarPath(Paths.get(${quote(options.recordHar.path)}))`);
228
+ if ((_options$recordHar7 = options.recordHar) !== null && _options$recordHar7 !== void 0 && _options$recordHar7.urlFilter) lines.push(` .setRecordHarUrlFilter(${quote(options.recordHar.urlFilter)})`);
229
+ if (options.serviceWorkers) lines.push(` .setServiceWorkers(ServiceWorkerPolicy.${options.serviceWorkers.toUpperCase()})`);
230
+ if (options.storageState) lines.push(` .setStorageStatePath(Paths.get(${quote(options.storageState)}))`);
231
+ if (options.timezoneId) lines.push(` .setTimezoneId(${quote(options.timezoneId)})`);
232
+ if (options.userAgent) lines.push(` .setUserAgent(${quote(options.userAgent)})`);
233
+ if (options.viewport) lines.push(` .setViewportSize(${options.viewport.width}, ${options.viewport.height})`);
234
+ return lines.join('\n');
235
+ }
236
+ function formatClickOptions(options) {
237
+ const lines = [];
238
+ if (options.button) lines.push(` .setButton(MouseButton.${options.button.toUpperCase()})`);
239
+ if (options.modifiers) lines.push(` .setModifiers(Arrays.asList(${options.modifiers.map(m => `KeyboardModifier.${m.toUpperCase()}`).join(', ')}))`);
240
+ if (options.clickCount) lines.push(` .setClickCount(${options.clickCount})`);
241
+ if (options.position) lines.push(` .setPosition(${options.position.x}, ${options.position.y})`);
242
+ if (!lines.length) return '';
243
+ lines.unshift(`new Locator.ClickOptions()`);
244
+ return lines.join('\n');
245
+ }
246
+ function quote(text) {
247
+ return (0, _stringUtils.escapeWithQuotes)(text, '\"');
248
+ }