@browsermation/browser-engine 0.0.12 → 0.0.16

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 (513) hide show
  1. package/dist/node_modules/playwright/LICENSE +202 -0
  2. package/dist/node_modules/playwright/NOTICE +5 -0
  3. package/dist/node_modules/playwright/README.md +168 -0
  4. package/dist/node_modules/playwright/ThirdPartyNotices.txt +6197 -0
  5. package/dist/node_modules/playwright/cli.js +19 -0
  6. package/dist/node_modules/playwright/index.d.ts +17 -0
  7. package/dist/node_modules/playwright/index.js +17 -0
  8. package/dist/node_modules/playwright/index.mjs +18 -0
  9. package/dist/node_modules/playwright/jsx-runtime.js +42 -0
  10. package/dist/node_modules/playwright/jsx-runtime.mjs +21 -0
  11. package/dist/node_modules/playwright/lib/agents/copilot-setup-steps.yml +34 -0
  12. package/dist/node_modules/playwright/lib/agents/generateAgents.js +395 -0
  13. package/dist/node_modules/playwright/lib/agents/playwright-test-coverage.prompt.md +31 -0
  14. package/dist/node_modules/playwright/lib/agents/playwright-test-generate.prompt.md +8 -0
  15. package/dist/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +88 -0
  16. package/dist/node_modules/playwright/lib/agents/playwright-test-heal.prompt.md +6 -0
  17. package/dist/node_modules/playwright/lib/agents/playwright-test-healer.agent.md +55 -0
  18. package/dist/node_modules/playwright/lib/agents/playwright-test-plan.prompt.md +9 -0
  19. package/dist/node_modules/playwright/lib/agents/playwright-test-planner.agent.md +72 -0
  20. package/dist/node_modules/playwright/lib/common/config.js +280 -0
  21. package/dist/node_modules/playwright/lib/common/configLoader.js +344 -0
  22. package/dist/node_modules/playwright/lib/common/esmLoaderHost.js +102 -0
  23. package/dist/node_modules/playwright/lib/common/expectBundle.js +43 -0
  24. package/dist/node_modules/playwright/lib/common/expectBundleImpl.js +407 -0
  25. package/dist/node_modules/playwright/lib/common/fixtures.js +302 -0
  26. package/dist/node_modules/playwright/lib/common/globals.js +58 -0
  27. package/dist/node_modules/playwright/lib/common/ipc.js +60 -0
  28. package/dist/node_modules/playwright/lib/common/poolBuilder.js +85 -0
  29. package/dist/node_modules/playwright/lib/common/process.js +104 -0
  30. package/dist/node_modules/playwright/lib/common/suiteUtils.js +140 -0
  31. package/dist/node_modules/playwright/lib/common/test.js +321 -0
  32. package/dist/node_modules/playwright/lib/common/testLoader.js +101 -0
  33. package/dist/node_modules/playwright/lib/common/testType.js +298 -0
  34. package/dist/node_modules/playwright/lib/common/validators.js +68 -0
  35. package/dist/node_modules/playwright/lib/fsWatcher.js +67 -0
  36. package/dist/node_modules/playwright/lib/index.js +682 -0
  37. package/dist/node_modules/playwright/lib/internalsForTest.js +42 -0
  38. package/dist/node_modules/playwright/lib/isomorphic/events.js +77 -0
  39. package/dist/node_modules/playwright/lib/isomorphic/folders.js +30 -0
  40. package/dist/node_modules/playwright/lib/isomorphic/stringInternPool.js +69 -0
  41. package/dist/node_modules/playwright/lib/isomorphic/teleReceiver.js +508 -0
  42. package/dist/node_modules/playwright/lib/isomorphic/teleSuiteUpdater.js +137 -0
  43. package/dist/node_modules/playwright/lib/isomorphic/testServerConnection.js +225 -0
  44. package/dist/node_modules/playwright/lib/isomorphic/testServerInterface.js +16 -0
  45. package/dist/node_modules/playwright/lib/isomorphic/testTree.js +334 -0
  46. package/dist/node_modules/playwright/lib/isomorphic/types.d.js +16 -0
  47. package/dist/node_modules/playwright/lib/loader/loaderMain.js +59 -0
  48. package/dist/node_modules/playwright/lib/matchers/expect.js +324 -0
  49. package/dist/node_modules/playwright/lib/matchers/matcherHint.js +87 -0
  50. package/dist/node_modules/playwright/lib/matchers/matchers.js +382 -0
  51. package/dist/node_modules/playwright/lib/matchers/toBeTruthy.js +73 -0
  52. package/dist/node_modules/playwright/lib/matchers/toEqual.js +99 -0
  53. package/dist/node_modules/playwright/lib/matchers/toHaveURL.js +102 -0
  54. package/dist/node_modules/playwright/lib/matchers/toMatchAriaSnapshot.js +159 -0
  55. package/dist/node_modules/playwright/lib/matchers/toMatchSnapshot.js +341 -0
  56. package/dist/node_modules/playwright/lib/matchers/toMatchText.js +99 -0
  57. package/dist/node_modules/playwright/lib/mcp/browser/actions.d.js +16 -0
  58. package/dist/node_modules/playwright/lib/mcp/browser/browserContextFactory.js +296 -0
  59. package/dist/node_modules/playwright/lib/mcp/browser/browserServerBackend.js +76 -0
  60. package/dist/node_modules/playwright/lib/mcp/browser/codegen.js +66 -0
  61. package/dist/node_modules/playwright/lib/mcp/browser/config.js +368 -0
  62. package/dist/node_modules/playwright/lib/mcp/browser/context.js +267 -0
  63. package/dist/node_modules/playwright/lib/mcp/browser/response.js +237 -0
  64. package/dist/node_modules/playwright/lib/mcp/browser/sessionLog.js +160 -0
  65. package/dist/node_modules/playwright/lib/mcp/browser/tab.js +292 -0
  66. package/dist/node_modules/playwright/lib/mcp/browser/tools/common.js +63 -0
  67. package/dist/node_modules/playwright/lib/mcp/browser/tools/console.js +44 -0
  68. package/dist/node_modules/playwright/lib/mcp/browser/tools/dialogs.js +60 -0
  69. package/dist/node_modules/playwright/lib/mcp/browser/tools/evaluate.js +69 -0
  70. package/dist/node_modules/playwright/lib/mcp/browser/tools/files.js +58 -0
  71. package/dist/node_modules/playwright/lib/mcp/browser/tools/form.js +73 -0
  72. package/dist/node_modules/playwright/lib/mcp/browser/tools/install.js +69 -0
  73. package/dist/node_modules/playwright/lib/mcp/browser/tools/keyboard.js +84 -0
  74. package/dist/node_modules/playwright/lib/mcp/browser/tools/mouse.js +107 -0
  75. package/dist/node_modules/playwright/lib/mcp/browser/tools/navigate.js +62 -0
  76. package/dist/node_modules/playwright/lib/mcp/browser/tools/network.js +54 -0
  77. package/dist/node_modules/playwright/lib/mcp/browser/tools/pdf.js +59 -0
  78. package/dist/node_modules/playwright/lib/mcp/browser/tools/runCode.js +75 -0
  79. package/dist/node_modules/playwright/lib/mcp/browser/tools/screenshot.js +106 -0
  80. package/dist/node_modules/playwright/lib/mcp/browser/tools/snapshot.js +181 -0
  81. package/dist/node_modules/playwright/lib/mcp/browser/tools/tabs.js +67 -0
  82. package/dist/node_modules/playwright/lib/mcp/browser/tools/tool.js +49 -0
  83. package/dist/node_modules/playwright/lib/mcp/browser/tools/tracing.js +74 -0
  84. package/dist/node_modules/playwright/lib/mcp/browser/tools/utils.js +89 -0
  85. package/dist/node_modules/playwright/lib/mcp/browser/tools/verify.js +153 -0
  86. package/dist/node_modules/playwright/lib/mcp/browser/tools/wait.js +63 -0
  87. package/dist/node_modules/playwright/lib/mcp/browser/tools.js +82 -0
  88. package/dist/node_modules/playwright/lib/mcp/browser/watchdog.js +44 -0
  89. package/dist/node_modules/playwright/lib/mcp/config.d.js +16 -0
  90. package/dist/node_modules/playwright/lib/mcp/extension/cdpRelay.js +351 -0
  91. package/dist/node_modules/playwright/lib/mcp/extension/extensionContextFactory.js +75 -0
  92. package/dist/node_modules/playwright/lib/mcp/extension/protocol.js +28 -0
  93. package/dist/node_modules/playwright/lib/mcp/index.js +61 -0
  94. package/dist/node_modules/playwright/lib/mcp/log.js +35 -0
  95. package/dist/node_modules/playwright/lib/mcp/program.js +116 -0
  96. package/dist/node_modules/playwright/lib/mcp/sdk/bundle.js +81 -0
  97. package/dist/node_modules/playwright/lib/mcp/sdk/exports.js +30 -0
  98. package/dist/node_modules/playwright/lib/mcp/sdk/http.js +187 -0
  99. package/dist/node_modules/playwright/lib/mcp/sdk/inProcessTransport.js +71 -0
  100. package/dist/node_modules/playwright/lib/mcp/sdk/proxyBackend.js +128 -0
  101. package/dist/node_modules/playwright/lib/mcp/sdk/server.js +198 -0
  102. package/dist/node_modules/playwright/lib/mcp/sdk/tool.js +47 -0
  103. package/dist/node_modules/playwright/lib/mcp/test/browserBackend.js +108 -0
  104. package/dist/node_modules/playwright/lib/mcp/test/generatorTools.js +122 -0
  105. package/dist/node_modules/playwright/lib/mcp/test/plannerTools.js +144 -0
  106. package/dist/node_modules/playwright/lib/mcp/test/seed.js +82 -0
  107. package/dist/node_modules/playwright/lib/mcp/test/streams.js +44 -0
  108. package/dist/node_modules/playwright/lib/mcp/test/testBackend.js +99 -0
  109. package/dist/node_modules/playwright/lib/mcp/test/testContext.js +279 -0
  110. package/dist/node_modules/playwright/lib/mcp/test/testTool.js +30 -0
  111. package/dist/node_modules/playwright/lib/mcp/test/testTools.js +106 -0
  112. package/dist/node_modules/playwright/lib/mcpBundleImpl.js +41 -0
  113. package/dist/node_modules/playwright/lib/plugins/gitCommitInfoPlugin.js +198 -0
  114. package/dist/node_modules/playwright/lib/plugins/index.js +28 -0
  115. package/dist/node_modules/playwright/lib/plugins/webServerPlugin.js +237 -0
  116. package/dist/node_modules/playwright/lib/program.js +403 -0
  117. package/dist/node_modules/playwright/lib/reporters/base.js +609 -0
  118. package/dist/node_modules/playwright/lib/reporters/blob.js +135 -0
  119. package/dist/node_modules/playwright/lib/reporters/dot.js +82 -0
  120. package/dist/node_modules/playwright/lib/reporters/empty.js +32 -0
  121. package/dist/node_modules/playwright/lib/reporters/github.js +128 -0
  122. package/dist/node_modules/playwright/lib/reporters/html.js +623 -0
  123. package/dist/node_modules/playwright/lib/reporters/internalReporter.js +132 -0
  124. package/dist/node_modules/playwright/lib/reporters/json.js +254 -0
  125. package/dist/node_modules/playwright/lib/reporters/junit.js +232 -0
  126. package/dist/node_modules/playwright/lib/reporters/line.js +113 -0
  127. package/dist/node_modules/playwright/lib/reporters/list.js +231 -0
  128. package/dist/node_modules/playwright/lib/reporters/listModeReporter.js +69 -0
  129. package/dist/node_modules/playwright/lib/reporters/markdown.js +144 -0
  130. package/dist/node_modules/playwright/lib/reporters/merge.js +541 -0
  131. package/dist/node_modules/playwright/lib/reporters/multiplexer.js +104 -0
  132. package/dist/node_modules/playwright/lib/reporters/reporterV2.js +102 -0
  133. package/dist/node_modules/playwright/lib/reporters/teleEmitter.js +299 -0
  134. package/dist/node_modules/playwright/lib/reporters/versions/blobV1.js +16 -0
  135. package/dist/node_modules/playwright/lib/runner/dispatcher.js +515 -0
  136. package/dist/node_modules/playwright/lib/runner/failureTracker.js +72 -0
  137. package/dist/node_modules/playwright/lib/runner/lastRun.js +77 -0
  138. package/dist/node_modules/playwright/lib/runner/loadUtils.js +334 -0
  139. package/dist/node_modules/playwright/lib/runner/loaderHost.js +89 -0
  140. package/dist/node_modules/playwright/lib/runner/processHost.js +161 -0
  141. package/dist/node_modules/playwright/lib/runner/projectUtils.js +241 -0
  142. package/dist/node_modules/playwright/lib/runner/rebase.js +189 -0
  143. package/dist/node_modules/playwright/lib/runner/reporters.js +138 -0
  144. package/dist/node_modules/playwright/lib/runner/sigIntWatcher.js +96 -0
  145. package/dist/node_modules/playwright/lib/runner/taskRunner.js +127 -0
  146. package/dist/node_modules/playwright/lib/runner/tasks.js +410 -0
  147. package/dist/node_modules/playwright/lib/runner/testGroups.js +117 -0
  148. package/dist/node_modules/playwright/lib/runner/testRunner.js +389 -0
  149. package/dist/node_modules/playwright/lib/runner/testServer.js +269 -0
  150. package/dist/node_modules/playwright/lib/runner/uiModeReporter.js +30 -0
  151. package/dist/node_modules/playwright/lib/runner/vcs.js +72 -0
  152. package/dist/node_modules/playwright/lib/runner/watchMode.js +395 -0
  153. package/dist/node_modules/playwright/lib/runner/workerHost.js +98 -0
  154. package/dist/node_modules/playwright/lib/third_party/pirates.js +62 -0
  155. package/dist/node_modules/playwright/lib/third_party/tsconfig-loader.js +103 -0
  156. package/dist/node_modules/playwright/lib/transform/babelBundle.js +43 -0
  157. package/dist/node_modules/playwright/lib/transform/babelBundleImpl.js +461 -0
  158. package/dist/node_modules/playwright/lib/transform/compilationCache.js +272 -0
  159. package/dist/node_modules/playwright/lib/transform/esmLoader.js +104 -0
  160. package/dist/node_modules/playwright/lib/transform/portTransport.js +67 -0
  161. package/dist/node_modules/playwright/lib/transform/transform.js +293 -0
  162. package/dist/node_modules/playwright/lib/util.js +403 -0
  163. package/dist/node_modules/playwright/lib/utilsBundle.js +43 -0
  164. package/dist/node_modules/playwright/lib/utilsBundleImpl.js +100 -0
  165. package/dist/node_modules/playwright/lib/worker/fixtureRunner.js +258 -0
  166. package/dist/node_modules/playwright/lib/worker/testInfo.js +516 -0
  167. package/dist/node_modules/playwright/lib/worker/testTracing.js +345 -0
  168. package/dist/node_modules/playwright/lib/worker/timeoutManager.js +174 -0
  169. package/dist/node_modules/playwright/lib/worker/util.js +31 -0
  170. package/dist/node_modules/playwright/lib/worker/workerMain.js +529 -0
  171. package/dist/node_modules/playwright/package.json +72 -0
  172. package/dist/node_modules/playwright/test.d.ts +18 -0
  173. package/dist/node_modules/playwright/test.js +24 -0
  174. package/dist/node_modules/playwright/test.mjs +33 -0
  175. package/dist/node_modules/playwright/types/test.d.ts +10253 -0
  176. package/dist/node_modules/playwright/types/testReporter.d.ts +821 -0
  177. package/dist/node_modules/playwright-core/LICENSE +202 -0
  178. package/dist/node_modules/playwright-core/NOTICE +5 -0
  179. package/dist/node_modules/playwright-core/README.md +3 -0
  180. package/dist/node_modules/playwright-core/ThirdPartyNotices.txt +1161 -0
  181. package/dist/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  182. package/dist/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
  183. package/dist/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
  184. package/dist/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  185. package/dist/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  186. package/dist/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
  187. package/dist/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  188. package/dist/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  189. package/dist/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
  190. package/dist/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  191. package/dist/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  192. package/dist/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
  193. package/dist/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  194. package/dist/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  195. package/dist/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
  196. package/dist/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  197. package/dist/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  198. package/dist/node_modules/playwright-core/browsers.json +80 -0
  199. package/dist/node_modules/playwright-core/cli.js +18 -0
  200. package/dist/node_modules/playwright-core/index.d.ts +17 -0
  201. package/dist/node_modules/playwright-core/index.js +32 -0
  202. package/dist/node_modules/playwright-core/index.mjs +28 -0
  203. package/dist/node_modules/playwright-core/lib/androidServerImpl.js +65 -0
  204. package/dist/node_modules/playwright-core/lib/browserServerImpl.js +120 -0
  205. package/dist/node_modules/playwright-core/lib/cli/driver.js +97 -0
  206. package/dist/node_modules/playwright-core/lib/cli/program.js +590 -0
  207. package/dist/node_modules/playwright-core/lib/cli/programWithTestStub.js +74 -0
  208. package/dist/node_modules/playwright-core/lib/client/android.js +361 -0
  209. package/dist/node_modules/playwright-core/lib/client/api.js +134 -0
  210. package/dist/node_modules/playwright-core/lib/client/artifact.js +79 -0
  211. package/dist/node_modules/playwright-core/lib/client/browser.js +163 -0
  212. package/dist/node_modules/playwright-core/lib/client/browserContext.js +547 -0
  213. package/dist/node_modules/playwright-core/lib/client/browserType.js +184 -0
  214. package/dist/node_modules/playwright-core/lib/client/cdpSession.js +51 -0
  215. package/dist/node_modules/playwright-core/lib/client/channelOwner.js +194 -0
  216. package/dist/node_modules/playwright-core/lib/client/clientHelper.js +64 -0
  217. package/dist/node_modules/playwright-core/lib/client/clientInstrumentation.js +55 -0
  218. package/dist/node_modules/playwright-core/lib/client/clientStackTrace.js +69 -0
  219. package/dist/node_modules/playwright-core/lib/client/clock.js +68 -0
  220. package/dist/node_modules/playwright-core/lib/client/connection.js +314 -0
  221. package/dist/node_modules/playwright-core/lib/client/consoleMessage.js +58 -0
  222. package/dist/node_modules/playwright-core/lib/client/coverage.js +44 -0
  223. package/dist/node_modules/playwright-core/lib/client/dialog.js +56 -0
  224. package/dist/node_modules/playwright-core/lib/client/download.js +62 -0
  225. package/dist/node_modules/playwright-core/lib/client/electron.js +138 -0
  226. package/dist/node_modules/playwright-core/lib/client/elementHandle.js +281 -0
  227. package/dist/node_modules/playwright-core/lib/client/errors.js +77 -0
  228. package/dist/node_modules/playwright-core/lib/client/eventEmitter.js +314 -0
  229. package/dist/node_modules/playwright-core/lib/client/events.js +100 -0
  230. package/dist/node_modules/playwright-core/lib/client/fetch.js +369 -0
  231. package/dist/node_modules/playwright-core/lib/client/fileChooser.js +46 -0
  232. package/dist/node_modules/playwright-core/lib/client/fileUtils.js +34 -0
  233. package/dist/node_modules/playwright-core/lib/client/frame.js +408 -0
  234. package/dist/node_modules/playwright-core/lib/client/harRouter.js +87 -0
  235. package/dist/node_modules/playwright-core/lib/client/input.js +84 -0
  236. package/dist/node_modules/playwright-core/lib/client/jsHandle.js +109 -0
  237. package/dist/node_modules/playwright-core/lib/client/jsonPipe.js +39 -0
  238. package/dist/node_modules/playwright-core/lib/client/localUtils.js +60 -0
  239. package/dist/node_modules/playwright-core/lib/client/locator.js +369 -0
  240. package/dist/node_modules/playwright-core/lib/client/network.js +747 -0
  241. package/dist/node_modules/playwright-core/lib/client/page.js +718 -0
  242. package/dist/node_modules/playwright-core/lib/client/platform.js +74 -0
  243. package/dist/node_modules/playwright-core/lib/client/playwright.js +71 -0
  244. package/dist/node_modules/playwright-core/lib/client/selectors.js +55 -0
  245. package/dist/node_modules/playwright-core/lib/client/stream.js +39 -0
  246. package/dist/node_modules/playwright-core/lib/client/timeoutSettings.js +79 -0
  247. package/dist/node_modules/playwright-core/lib/client/tracing.js +119 -0
  248. package/dist/node_modules/playwright-core/lib/client/types.js +28 -0
  249. package/dist/node_modules/playwright-core/lib/client/video.js +59 -0
  250. package/dist/node_modules/playwright-core/lib/client/waiter.js +142 -0
  251. package/dist/node_modules/playwright-core/lib/client/webError.js +39 -0
  252. package/dist/node_modules/playwright-core/lib/client/webSocket.js +93 -0
  253. package/dist/node_modules/playwright-core/lib/client/worker.js +85 -0
  254. package/dist/node_modules/playwright-core/lib/client/writableStream.js +39 -0
  255. package/dist/node_modules/playwright-core/lib/generated/bindingsControllerSource.js +28 -0
  256. package/dist/node_modules/playwright-core/lib/generated/clockSource.js +28 -0
  257. package/dist/node_modules/playwright-core/lib/generated/injectedScriptSource.js +28 -0
  258. package/dist/node_modules/playwright-core/lib/generated/pollingRecorderSource.js +28 -0
  259. package/dist/node_modules/playwright-core/lib/generated/storageScriptSource.js +28 -0
  260. package/dist/node_modules/playwright-core/lib/generated/utilityScriptSource.js +28 -0
  261. package/dist/node_modules/playwright-core/lib/generated/webSocketMockSource.js +336 -0
  262. package/dist/node_modules/playwright-core/lib/inProcessFactory.js +60 -0
  263. package/dist/node_modules/playwright-core/lib/inprocess.js +3 -0
  264. package/dist/node_modules/playwright-core/lib/outofprocess.js +76 -0
  265. package/dist/node_modules/playwright-core/lib/protocol/serializers.js +192 -0
  266. package/dist/node_modules/playwright-core/lib/protocol/validator.js +2890 -0
  267. package/dist/node_modules/playwright-core/lib/protocol/validatorPrimitives.js +193 -0
  268. package/dist/node_modules/playwright-core/lib/remote/playwrightConnection.js +129 -0
  269. package/dist/node_modules/playwright-core/lib/remote/playwrightServer.js +335 -0
  270. package/dist/node_modules/playwright-core/lib/server/android/android.js +465 -0
  271. package/dist/node_modules/playwright-core/lib/server/android/backendAdb.js +177 -0
  272. package/dist/node_modules/playwright-core/lib/server/artifact.js +127 -0
  273. package/dist/node_modules/playwright-core/lib/server/bidi/bidiBrowser.js +505 -0
  274. package/dist/node_modules/playwright-core/lib/server/bidi/bidiChromium.js +153 -0
  275. package/dist/node_modules/playwright-core/lib/server/bidi/bidiConnection.js +212 -0
  276. package/dist/node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js +221 -0
  277. package/dist/node_modules/playwright-core/lib/server/bidi/bidiFirefox.js +130 -0
  278. package/dist/node_modules/playwright-core/lib/server/bidi/bidiInput.js +146 -0
  279. package/dist/node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js +383 -0
  280. package/dist/node_modules/playwright-core/lib/server/bidi/bidiOverCdp.js +102 -0
  281. package/dist/node_modules/playwright-core/lib/server/bidi/bidiPage.js +572 -0
  282. package/dist/node_modules/playwright-core/lib/server/bidi/bidiPdf.js +106 -0
  283. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  284. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiDeserializer.js +98 -0
  285. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  286. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  287. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  288. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  289. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  290. package/dist/node_modules/playwright-core/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  291. package/dist/node_modules/playwright-core/lib/server/browser.js +149 -0
  292. package/dist/node_modules/playwright-core/lib/server/browserContext.js +695 -0
  293. package/dist/node_modules/playwright-core/lib/server/browserType.js +328 -0
  294. package/dist/node_modules/playwright-core/lib/server/callLog.js +82 -0
  295. package/dist/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  296. package/dist/node_modules/playwright-core/lib/server/chromium/chromium.js +402 -0
  297. package/dist/node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js +104 -0
  298. package/dist/node_modules/playwright-core/lib/server/chromium/crBrowser.js +510 -0
  299. package/dist/node_modules/playwright-core/lib/server/chromium/crConnection.js +202 -0
  300. package/dist/node_modules/playwright-core/lib/server/chromium/crCoverage.js +235 -0
  301. package/dist/node_modules/playwright-core/lib/server/chromium/crDevTools.js +113 -0
  302. package/dist/node_modules/playwright-core/lib/server/chromium/crDragDrop.js +131 -0
  303. package/dist/node_modules/playwright-core/lib/server/chromium/crExecutionContext.js +146 -0
  304. package/dist/node_modules/playwright-core/lib/server/chromium/crInput.js +187 -0
  305. package/dist/node_modules/playwright-core/lib/server/chromium/crNetworkManager.js +666 -0
  306. package/dist/node_modules/playwright-core/lib/server/chromium/crPage.js +1069 -0
  307. package/dist/node_modules/playwright-core/lib/server/chromium/crPdf.js +121 -0
  308. package/dist/node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js +145 -0
  309. package/dist/node_modules/playwright-core/lib/server/chromium/crServiceWorker.js +136 -0
  310. package/dist/node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js +162 -0
  311. package/dist/node_modules/playwright-core/lib/server/chromium/protocol.d.js +16 -0
  312. package/dist/node_modules/playwright-core/lib/server/chromium/videoRecorder.js +115 -0
  313. package/dist/node_modules/playwright-core/lib/server/clock.js +149 -0
  314. package/dist/node_modules/playwright-core/lib/server/codegen/csharp.js +327 -0
  315. package/dist/node_modules/playwright-core/lib/server/codegen/java.js +274 -0
  316. package/dist/node_modules/playwright-core/lib/server/codegen/javascript.js +270 -0
  317. package/dist/node_modules/playwright-core/lib/server/codegen/jsonl.js +52 -0
  318. package/dist/node_modules/playwright-core/lib/server/codegen/language.js +132 -0
  319. package/dist/node_modules/playwright-core/lib/server/codegen/languages.js +68 -0
  320. package/dist/node_modules/playwright-core/lib/server/codegen/python.js +279 -0
  321. package/dist/node_modules/playwright-core/lib/server/codegen/types.js +16 -0
  322. package/dist/node_modules/playwright-core/lib/server/console.js +57 -0
  323. package/dist/node_modules/playwright-core/lib/server/cookieStore.js +206 -0
  324. package/dist/node_modules/playwright-core/lib/server/debugController.js +191 -0
  325. package/dist/node_modules/playwright-core/lib/server/debugger.js +119 -0
  326. package/dist/node_modules/playwright-core/lib/server/deviceDescriptors.js +39 -0
  327. package/dist/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +1779 -0
  328. package/dist/node_modules/playwright-core/lib/server/dialog.js +116 -0
  329. package/dist/node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js +325 -0
  330. package/dist/node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js +118 -0
  331. package/dist/node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js +381 -0
  332. package/dist/node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js +118 -0
  333. package/dist/node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  334. package/dist/node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  335. package/dist/node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  336. package/dist/node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js +47 -0
  337. package/dist/node_modules/playwright-core/lib/server/dispatchers/dispatcher.js +371 -0
  338. package/dist/node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js +89 -0
  339. package/dist/node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  340. package/dist/node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js +227 -0
  341. package/dist/node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  342. package/dist/node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  343. package/dist/node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  344. package/dist/node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js +213 -0
  345. package/dist/node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js +389 -0
  346. package/dist/node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  347. package/dist/node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js +67 -0
  348. package/dist/node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js +68 -0
  349. package/dist/node_modules/playwright-core/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  350. package/dist/node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  351. package/dist/node_modules/playwright-core/lib/server/dom.js +806 -0
  352. package/dist/node_modules/playwright-core/lib/server/download.js +70 -0
  353. package/dist/node_modules/playwright-core/lib/server/electron/electron.js +270 -0
  354. package/dist/node_modules/playwright-core/lib/server/electron/loader.js +29 -0
  355. package/dist/node_modules/playwright-core/lib/server/errors.js +69 -0
  356. package/dist/node_modules/playwright-core/lib/server/fetch.js +621 -0
  357. package/dist/node_modules/playwright-core/lib/server/fileChooser.js +43 -0
  358. package/dist/node_modules/playwright-core/lib/server/fileUploadUtils.js +84 -0
  359. package/dist/node_modules/playwright-core/lib/server/firefox/ffBrowser.js +428 -0
  360. package/dist/node_modules/playwright-core/lib/server/firefox/ffConnection.js +147 -0
  361. package/dist/node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js +150 -0
  362. package/dist/node_modules/playwright-core/lib/server/firefox/ffInput.js +159 -0
  363. package/dist/node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js +256 -0
  364. package/dist/node_modules/playwright-core/lib/server/firefox/ffPage.js +500 -0
  365. package/dist/node_modules/playwright-core/lib/server/firefox/firefox.js +116 -0
  366. package/dist/node_modules/playwright-core/lib/server/firefox/protocol.d.js +16 -0
  367. package/dist/node_modules/playwright-core/lib/server/formData.js +147 -0
  368. package/dist/node_modules/playwright-core/lib/server/frameSelectors.js +154 -0
  369. package/dist/node_modules/playwright-core/lib/server/frames.js +1455 -0
  370. package/dist/node_modules/playwright-core/lib/server/har/harRecorder.js +147 -0
  371. package/dist/node_modules/playwright-core/lib/server/har/harTracer.js +607 -0
  372. package/dist/node_modules/playwright-core/lib/server/harBackend.js +157 -0
  373. package/dist/node_modules/playwright-core/lib/server/helper.js +96 -0
  374. package/dist/node_modules/playwright-core/lib/server/index.js +58 -0
  375. package/dist/node_modules/playwright-core/lib/server/input.js +277 -0
  376. package/dist/node_modules/playwright-core/lib/server/instrumentation.js +69 -0
  377. package/dist/node_modules/playwright-core/lib/server/javascript.js +291 -0
  378. package/dist/node_modules/playwright-core/lib/server/launchApp.js +128 -0
  379. package/dist/node_modules/playwright-core/lib/server/localUtils.js +214 -0
  380. package/dist/node_modules/playwright-core/lib/server/macEditingCommands.js +143 -0
  381. package/dist/node_modules/playwright-core/lib/server/network.js +629 -0
  382. package/dist/node_modules/playwright-core/lib/server/page.js +886 -0
  383. package/dist/node_modules/playwright-core/lib/server/pipeTransport.js +89 -0
  384. package/dist/node_modules/playwright-core/lib/server/playwright.js +69 -0
  385. package/dist/node_modules/playwright-core/lib/server/progress.js +112 -0
  386. package/dist/node_modules/playwright-core/lib/server/protocolError.js +52 -0
  387. package/dist/node_modules/playwright-core/lib/server/recorder/chat.js +161 -0
  388. package/dist/node_modules/playwright-core/lib/server/recorder/recorderApp.js +387 -0
  389. package/dist/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +138 -0
  390. package/dist/node_modules/playwright-core/lib/server/recorder/recorderSignalProcessor.js +83 -0
  391. package/dist/node_modules/playwright-core/lib/server/recorder/recorderUtils.js +157 -0
  392. package/dist/node_modules/playwright-core/lib/server/recorder/throttledFile.js +57 -0
  393. package/dist/node_modules/playwright-core/lib/server/recorder.js +499 -0
  394. package/dist/node_modules/playwright-core/lib/server/registry/browserFetcher.js +175 -0
  395. package/dist/node_modules/playwright-core/lib/server/registry/dependencies.js +371 -0
  396. package/dist/node_modules/playwright-core/lib/server/registry/index.js +1399 -0
  397. package/dist/node_modules/playwright-core/lib/server/registry/nativeDeps.js +1280 -0
  398. package/dist/node_modules/playwright-core/lib/server/registry/oopDownloadBrowserMain.js +124 -0
  399. package/dist/node_modules/playwright-core/lib/server/screenshotter.js +333 -0
  400. package/dist/node_modules/playwright-core/lib/server/selectors.js +112 -0
  401. package/dist/node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js +383 -0
  402. package/dist/node_modules/playwright-core/lib/server/socksInterceptor.js +95 -0
  403. package/dist/node_modules/playwright-core/lib/server/trace/recorder/snapshotter.js +147 -0
  404. package/dist/node_modules/playwright-core/lib/server/trace/recorder/snapshotterInjected.js +541 -0
  405. package/dist/node_modules/playwright-core/lib/server/trace/recorder/tracing.js +604 -0
  406. package/dist/node_modules/playwright-core/lib/server/trace/test/inMemorySnapshotter.js +87 -0
  407. package/dist/node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js +241 -0
  408. package/dist/node_modules/playwright-core/lib/server/transport.js +181 -0
  409. package/dist/node_modules/playwright-core/lib/server/types.js +28 -0
  410. package/dist/node_modules/playwright-core/lib/server/usKeyboardLayout.js +145 -0
  411. package/dist/node_modules/playwright-core/lib/server/utils/ascii.js +44 -0
  412. package/dist/node_modules/playwright-core/lib/server/utils/comparators.js +139 -0
  413. package/dist/node_modules/playwright-core/lib/server/utils/crypto.js +216 -0
  414. package/dist/node_modules/playwright-core/lib/server/utils/debug.js +42 -0
  415. package/dist/node_modules/playwright-core/lib/server/utils/debugLogger.js +122 -0
  416. package/dist/node_modules/playwright-core/lib/server/utils/env.js +73 -0
  417. package/dist/node_modules/playwright-core/lib/server/utils/eventsHelper.js +39 -0
  418. package/dist/node_modules/playwright-core/lib/server/utils/expectUtils.js +38 -0
  419. package/dist/node_modules/playwright-core/lib/server/utils/fileUtils.js +191 -0
  420. package/dist/node_modules/playwright-core/lib/server/utils/happyEyeballs.js +207 -0
  421. package/dist/node_modules/playwright-core/lib/server/utils/hostPlatform.js +123 -0
  422. package/dist/node_modules/playwright-core/lib/server/utils/httpServer.js +218 -0
  423. package/dist/node_modules/playwright-core/lib/server/utils/imageUtils.js +141 -0
  424. package/dist/node_modules/playwright-core/lib/server/utils/image_tools/colorUtils.js +89 -0
  425. package/dist/node_modules/playwright-core/lib/server/utils/image_tools/compare.js +109 -0
  426. package/dist/node_modules/playwright-core/lib/server/utils/image_tools/imageChannel.js +78 -0
  427. package/dist/node_modules/playwright-core/lib/server/utils/image_tools/stats.js +102 -0
  428. package/dist/node_modules/playwright-core/lib/server/utils/linuxUtils.js +71 -0
  429. package/dist/node_modules/playwright-core/lib/server/utils/network.js +233 -0
  430. package/dist/node_modules/playwright-core/lib/server/utils/nodePlatform.js +148 -0
  431. package/dist/node_modules/playwright-core/lib/server/utils/pipeTransport.js +84 -0
  432. package/dist/node_modules/playwright-core/lib/server/utils/processLauncher.js +241 -0
  433. package/dist/node_modules/playwright-core/lib/server/utils/profiler.js +65 -0
  434. package/dist/node_modules/playwright-core/lib/server/utils/socksProxy.js +511 -0
  435. package/dist/node_modules/playwright-core/lib/server/utils/spawnAsync.js +41 -0
  436. package/dist/node_modules/playwright-core/lib/server/utils/task.js +51 -0
  437. package/dist/node_modules/playwright-core/lib/server/utils/userAgent.js +98 -0
  438. package/dist/node_modules/playwright-core/lib/server/utils/wsServer.js +121 -0
  439. package/dist/node_modules/playwright-core/lib/server/utils/zipFile.js +74 -0
  440. package/dist/node_modules/playwright-core/lib/server/utils/zones.js +57 -0
  441. package/dist/node_modules/playwright-core/lib/server/webkit/protocol.d.js +16 -0
  442. package/dist/node_modules/playwright-core/lib/server/webkit/webkit.js +110 -0
  443. package/dist/node_modules/playwright-core/lib/server/webkit/wkBrowser.js +339 -0
  444. package/dist/node_modules/playwright-core/lib/server/webkit/wkConnection.js +149 -0
  445. package/dist/node_modules/playwright-core/lib/server/webkit/wkExecutionContext.js +154 -0
  446. package/dist/node_modules/playwright-core/lib/server/webkit/wkInput.js +181 -0
  447. package/dist/node_modules/playwright-core/lib/server/webkit/wkInterceptableRequest.js +169 -0
  448. package/dist/node_modules/playwright-core/lib/server/webkit/wkPage.js +1130 -0
  449. package/dist/node_modules/playwright-core/lib/server/webkit/wkProvisionalPage.js +83 -0
  450. package/dist/node_modules/playwright-core/lib/server/webkit/wkWorkers.js +105 -0
  451. package/dist/node_modules/playwright-core/lib/third_party/pixelmatch.js +255 -0
  452. package/dist/node_modules/playwright-core/lib/utils/isomorphic/ariaSnapshot.js +397 -0
  453. package/dist/node_modules/playwright-core/lib/utils/isomorphic/assert.js +31 -0
  454. package/dist/node_modules/playwright-core/lib/utils/isomorphic/colors.js +72 -0
  455. package/dist/node_modules/playwright-core/lib/utils/isomorphic/cssParser.js +245 -0
  456. package/dist/node_modules/playwright-core/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  457. package/dist/node_modules/playwright-core/lib/utils/isomorphic/headers.js +53 -0
  458. package/dist/node_modules/playwright-core/lib/utils/isomorphic/locatorGenerators.js +689 -0
  459. package/dist/node_modules/playwright-core/lib/utils/isomorphic/locatorParser.js +176 -0
  460. package/dist/node_modules/playwright-core/lib/utils/isomorphic/locatorUtils.js +81 -0
  461. package/dist/node_modules/playwright-core/lib/utils/isomorphic/manualPromise.js +114 -0
  462. package/dist/node_modules/playwright-core/lib/utils/isomorphic/mimeType.js +459 -0
  463. package/dist/node_modules/playwright-core/lib/utils/isomorphic/multimap.js +80 -0
  464. package/dist/node_modules/playwright-core/lib/utils/isomorphic/protocolFormatter.js +81 -0
  465. package/dist/node_modules/playwright-core/lib/utils/isomorphic/protocolMetainfo.js +322 -0
  466. package/dist/node_modules/playwright-core/lib/utils/isomorphic/rtti.js +43 -0
  467. package/dist/node_modules/playwright-core/lib/utils/isomorphic/selectorParser.js +386 -0
  468. package/dist/node_modules/playwright-core/lib/utils/isomorphic/semaphore.js +54 -0
  469. package/dist/node_modules/playwright-core/lib/utils/isomorphic/stackTrace.js +158 -0
  470. package/dist/node_modules/playwright-core/lib/utils/isomorphic/stringUtils.js +155 -0
  471. package/dist/node_modules/playwright-core/lib/utils/isomorphic/time.js +49 -0
  472. package/dist/node_modules/playwright-core/lib/utils/isomorphic/timeoutRunner.js +66 -0
  473. package/dist/node_modules/playwright-core/lib/utils/isomorphic/traceUtils.js +58 -0
  474. package/dist/node_modules/playwright-core/lib/utils/isomorphic/types.js +16 -0
  475. package/dist/node_modules/playwright-core/lib/utils/isomorphic/urlMatch.js +190 -0
  476. package/dist/node_modules/playwright-core/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  477. package/dist/node_modules/playwright-core/lib/utils.js +109 -0
  478. package/dist/node_modules/playwright-core/lib/utilsBundle.js +112 -0
  479. package/dist/node_modules/playwright-core/lib/utilsBundleImpl/index.js +218 -0
  480. package/dist/node_modules/playwright-core/lib/utilsBundleImpl/xdg-open +1066 -0
  481. package/dist/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
  482. package/dist/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-BoWUGj0J.js +25 -0
  483. package/dist/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +1 -0
  484. package/dist/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  485. package/dist/node_modules/playwright-core/lib/vite/recorder/assets/index-DJqDAOZp.js +193 -0
  486. package/dist/node_modules/playwright-core/lib/vite/recorder/assets/index-Ri0uHF7I.css +1 -0
  487. package/dist/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  488. package/dist/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  489. package/dist/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-Bucv2d7q.js +25 -0
  490. package/dist/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-BEpdCv1S.js +266 -0
  491. package/dist/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  492. package/dist/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +1 -0
  493. package/dist/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  494. package/dist/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.ConWv5KN.css +1 -0
  495. package/dist/node_modules/playwright-core/lib/vite/traceViewer/index.BxQ34UMZ.js +2 -0
  496. package/dist/node_modules/playwright-core/lib/vite/traceViewer/index.C4Y3Aw8n.css +1 -0
  497. package/dist/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
  498. package/dist/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
  499. package/dist/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  500. package/dist/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
  501. package/dist/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -0
  502. package/dist/node_modules/playwright-core/lib/vite/traceViewer/uiMode.BWTwXl41.js +5 -0
  503. package/dist/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  504. package/dist/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
  505. package/dist/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  506. package/dist/node_modules/playwright-core/lib/zipBundle.js +34 -0
  507. package/dist/node_modules/playwright-core/lib/zipBundleImpl.js +5 -0
  508. package/dist/node_modules/playwright-core/package.json +42 -0
  509. package/dist/node_modules/playwright-core/types/protocol.d.ts +23245 -0
  510. package/dist/node_modules/playwright-core/types/structs.d.ts +45 -0
  511. package/dist/node_modules/playwright-core/types/types.d.ts +22856 -0
  512. package/dist/server.obf.js +1 -1
  513. package/package.json +11 -12
@@ -0,0 +1,1399 @@
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 registry_exports = {};
30
+ __export(registry_exports, {
31
+ Registry: () => Registry,
32
+ browserDirectoryToMarkerFilePath: () => browserDirectoryToMarkerFilePath,
33
+ buildPlaywrightCLICommand: () => buildPlaywrightCLICommand,
34
+ findChromiumChannelBestEffort: () => findChromiumChannelBestEffort,
35
+ installBrowsersForNpmInstall: () => installBrowsersForNpmInstall,
36
+ registry: () => registry,
37
+ registryDirectory: () => registryDirectory,
38
+ writeDockerVersion: () => import_dependencies3.writeDockerVersion
39
+ });
40
+ module.exports = __toCommonJS(registry_exports);
41
+ var import_fs = __toESM(require("fs"));
42
+ var import_os = __toESM(require("os"));
43
+ var import_path = __toESM(require("path"));
44
+ var util = __toESM(require("util"));
45
+ var import_browserFetcher = require("./browserFetcher");
46
+ var import_dependencies = require("./dependencies");
47
+ var import_dependencies2 = require("./dependencies");
48
+ var import_utils = require("../../utils");
49
+ var import_ascii = require("../utils/ascii");
50
+ var import_debugLogger = require("../utils/debugLogger");
51
+ var import_hostPlatform = require("../utils/hostPlatform");
52
+ var import_network = require("../utils/network");
53
+ var import_spawnAsync = require("../utils/spawnAsync");
54
+ var import_userAgent = require("../utils/userAgent");
55
+ var import_utilsBundle = require("../../utilsBundle");
56
+ var import_fileUtils = require("../utils/fileUtils");
57
+ var import_dependencies3 = require("./dependencies");
58
+ const PACKAGE_PATH = import_path.default.join(__dirname, "..", "..", "..");
59
+ const BIN_PATH = import_path.default.join(__dirname, "..", "..", "..", "bin");
60
+ const PLAYWRIGHT_CDN_MIRRORS = [
61
+ "https://cdn.playwright.dev/dbazure/download/playwright",
62
+ // ESRP CDN
63
+ "https://playwright.download.prss.microsoft.com/dbazure/download/playwright",
64
+ // Directly hit ESRP CDN
65
+ "https://cdn.playwright.dev"
66
+ // Hit the Storage Bucket directly
67
+ ];
68
+ if (process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
69
+ for (let i = 0; i < PLAYWRIGHT_CDN_MIRRORS.length; i++) {
70
+ const cdn = PLAYWRIGHT_CDN_MIRRORS[i];
71
+ if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
72
+ const parsedCDN = new URL(cdn);
73
+ parsedCDN.hostname = parsedCDN.hostname + ".does-not-resolve.playwright.dev";
74
+ PLAYWRIGHT_CDN_MIRRORS[i] = parsedCDN.toString();
75
+ }
76
+ }
77
+ }
78
+ const EXECUTABLE_PATHS = {
79
+ "chromium": {
80
+ "<unknown>": void 0,
81
+ "linux-x64": ["chrome-linux64", "chrome"],
82
+ "linux-arm64": ["chrome-linux", "chrome"],
83
+ // non-cft build
84
+ "mac-x64": ["chrome-mac-x64", "Google Chrome for Testing.app", "Contents", "MacOS", "Google Chrome for Testing"],
85
+ "mac-arm64": ["chrome-mac-arm64", "Google Chrome for Testing.app", "Contents", "MacOS", "Google Chrome for Testing"],
86
+ "win-x64": ["chrome-win64", "chrome.exe"]
87
+ },
88
+ "chromium-headless-shell": {
89
+ "<unknown>": void 0,
90
+ "linux-x64": ["chrome-headless-shell-linux64", "chrome-headless-shell"],
91
+ "linux-arm64": ["chrome-linux", "headless_shell"],
92
+ // non-cft build
93
+ "mac-x64": ["chrome-headless-shell-mac-x64", "chrome-headless-shell"],
94
+ "mac-arm64": ["chrome-headless-shell-mac-arm64", "chrome-headless-shell"],
95
+ "win-x64": ["chrome-headless-shell-win64", "chrome-headless-shell.exe"]
96
+ },
97
+ "chromium-tip-of-tree": {
98
+ "<unknown>": void 0,
99
+ "linux-x64": ["chrome-linux64", "chrome"],
100
+ "linux-arm64": ["chrome-linux", "chrome"],
101
+ // non-cft build
102
+ "mac-x64": ["chrome-mac-x64", "Google Chrome for Testing.app", "Contents", "MacOS", "Google Chrome for Testing"],
103
+ "mac-arm64": ["chrome-mac-arm64", "Google Chrome for Testing.app", "Contents", "MacOS", "Google Chrome for Testing"],
104
+ "win-x64": ["chrome-win64", "chrome.exe"]
105
+ },
106
+ "chromium-tip-of-tree-headless-shell": {
107
+ "<unknown>": void 0,
108
+ "linux-x64": ["chrome-headless-shell-linux64", "chrome-headless-shell"],
109
+ "linux-arm64": ["chrome-linux", "headless_shell"],
110
+ // non-cft build
111
+ "mac-x64": ["chrome-headless-shell-mac-x64", "chrome-headless-shell"],
112
+ "mac-arm64": ["chrome-headless-shell-mac-arm64", "chrome-headless-shell"],
113
+ "win-x64": ["chrome-headless-shell-win64", "chrome-headless-shell.exe"]
114
+ },
115
+ "firefox": {
116
+ "<unknown>": void 0,
117
+ "linux-x64": ["firefox", "firefox"],
118
+ "linux-arm64": ["firefox", "firefox"],
119
+ "mac-x64": ["firefox", "Nightly.app", "Contents", "MacOS", "firefox"],
120
+ "mac-arm64": ["firefox", "Nightly.app", "Contents", "MacOS", "firefox"],
121
+ "win-x64": ["firefox", "firefox.exe"]
122
+ },
123
+ "webkit": {
124
+ "<unknown>": void 0,
125
+ "linux-x64": ["pw_run.sh"],
126
+ "linux-arm64": ["pw_run.sh"],
127
+ "mac-x64": ["pw_run.sh"],
128
+ "mac-arm64": ["pw_run.sh"],
129
+ "win-x64": ["Playwright.exe"]
130
+ },
131
+ "ffmpeg": {
132
+ "<unknown>": void 0,
133
+ "linux-x64": ["ffmpeg-linux"],
134
+ "linux-arm64": ["ffmpeg-linux"],
135
+ "mac-x64": ["ffmpeg-mac"],
136
+ "mac-arm64": ["ffmpeg-mac"],
137
+ "win-x64": ["ffmpeg-win64.exe"]
138
+ },
139
+ "winldd": {
140
+ "<unknown>": void 0,
141
+ "linux-x64": void 0,
142
+ "linux-arm64": void 0,
143
+ "mac-x64": void 0,
144
+ "mac-arm64": void 0,
145
+ "win-x64": ["PrintDeps.exe"]
146
+ }
147
+ };
148
+ const DOWNLOAD_PATHS = {
149
+ "chromium": {
150
+ "<unknown>": void 0,
151
+ "ubuntu18.04-x64": void 0,
152
+ "ubuntu20.04-x64": "builds/chromium/%s/chromium-linux.zip",
153
+ "ubuntu22.04-x64": "builds/chromium/%s/chromium-linux.zip",
154
+ "ubuntu24.04-x64": "builds/chromium/%s/chromium-linux.zip",
155
+ "ubuntu18.04-arm64": void 0,
156
+ "ubuntu20.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
157
+ "ubuntu22.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
158
+ "ubuntu24.04-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
159
+ "debian11-x64": "builds/chromium/%s/chromium-linux.zip",
160
+ "debian11-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
161
+ "debian12-x64": "builds/chromium/%s/chromium-linux.zip",
162
+ "debian12-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
163
+ "debian13-x64": "builds/chromium/%s/chromium-linux.zip",
164
+ "debian13-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
165
+ "mac10.13": "builds/chromium/%s/chromium-mac.zip",
166
+ "mac10.14": "builds/chromium/%s/chromium-mac.zip",
167
+ "mac10.15": "builds/chromium/%s/chromium-mac.zip",
168
+ "mac11": "builds/chromium/%s/chromium-mac.zip",
169
+ "mac11-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
170
+ "mac12": "builds/chromium/%s/chromium-mac.zip",
171
+ "mac12-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
172
+ "mac13": "builds/chromium/%s/chromium-mac.zip",
173
+ "mac13-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
174
+ "mac14": "builds/chromium/%s/chromium-mac.zip",
175
+ "mac14-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
176
+ "mac15": "builds/chromium/%s/chromium-mac.zip",
177
+ "mac15-arm64": "builds/chromium/%s/chromium-mac-arm64.zip",
178
+ "win64": "builds/chromium/%s/chromium-win64.zip"
179
+ },
180
+ "chromium-headless-shell": {
181
+ "<unknown>": void 0,
182
+ "ubuntu18.04-x64": void 0,
183
+ "ubuntu20.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
184
+ "ubuntu22.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
185
+ "ubuntu24.04-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
186
+ "ubuntu18.04-arm64": void 0,
187
+ "ubuntu20.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
188
+ "ubuntu22.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
189
+ "ubuntu24.04-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
190
+ "debian11-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
191
+ "debian11-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
192
+ "debian12-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
193
+ "debian12-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
194
+ "debian13-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
195
+ "debian13-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
196
+ "mac10.13": void 0,
197
+ "mac10.14": void 0,
198
+ "mac10.15": void 0,
199
+ "mac11": "builds/chromium/%s/chromium-headless-shell-mac.zip",
200
+ "mac11-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
201
+ "mac12": "builds/chromium/%s/chromium-headless-shell-mac.zip",
202
+ "mac12-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
203
+ "mac13": "builds/chromium/%s/chromium-headless-shell-mac.zip",
204
+ "mac13-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
205
+ "mac14": "builds/chromium/%s/chromium-headless-shell-mac.zip",
206
+ "mac14-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
207
+ "mac15": "builds/chromium/%s/chromium-headless-shell-mac.zip",
208
+ "mac15-arm64": "builds/chromium/%s/chromium-headless-shell-mac-arm64.zip",
209
+ "win64": "builds/chromium/%s/chromium-headless-shell-win64.zip"
210
+ },
211
+ "chromium-tip-of-tree": {
212
+ "<unknown>": void 0,
213
+ "ubuntu18.04-x64": void 0,
214
+ "ubuntu20.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
215
+ "ubuntu22.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
216
+ "ubuntu24.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
217
+ "ubuntu18.04-arm64": void 0,
218
+ "ubuntu20.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
219
+ "ubuntu22.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
220
+ "ubuntu24.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
221
+ "debian11-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
222
+ "debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
223
+ "debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
224
+ "debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
225
+ "debian13-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
226
+ "debian13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
227
+ "mac10.13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
228
+ "mac10.14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
229
+ "mac10.15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
230
+ "mac11": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
231
+ "mac11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
232
+ "mac12": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
233
+ "mac12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
234
+ "mac13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
235
+ "mac13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
236
+ "mac14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
237
+ "mac14-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
238
+ "mac15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
239
+ "mac15-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip",
240
+ "win64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip"
241
+ },
242
+ "chromium-tip-of-tree-headless-shell": {
243
+ "<unknown>": void 0,
244
+ "ubuntu18.04-x64": void 0,
245
+ "ubuntu20.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
246
+ "ubuntu22.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
247
+ "ubuntu24.04-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
248
+ "ubuntu18.04-arm64": void 0,
249
+ "ubuntu20.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
250
+ "ubuntu22.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
251
+ "ubuntu24.04-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
252
+ "debian11-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
253
+ "debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
254
+ "debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
255
+ "debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
256
+ "debian13-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
257
+ "debian13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
258
+ "mac10.13": void 0,
259
+ "mac10.14": void 0,
260
+ "mac10.15": void 0,
261
+ "mac11": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
262
+ "mac11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
263
+ "mac12": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
264
+ "mac12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
265
+ "mac13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
266
+ "mac13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
267
+ "mac14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
268
+ "mac14-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
269
+ "mac15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip",
270
+ "mac15-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip",
271
+ "win64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-win64.zip"
272
+ },
273
+ "firefox": {
274
+ "<unknown>": void 0,
275
+ "ubuntu18.04-x64": void 0,
276
+ "ubuntu20.04-x64": "builds/firefox/%s/firefox-ubuntu-20.04.zip",
277
+ "ubuntu22.04-x64": "builds/firefox/%s/firefox-ubuntu-22.04.zip",
278
+ "ubuntu24.04-x64": "builds/firefox/%s/firefox-ubuntu-24.04.zip",
279
+ "ubuntu18.04-arm64": void 0,
280
+ "ubuntu20.04-arm64": "builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip",
281
+ "ubuntu22.04-arm64": "builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip",
282
+ "ubuntu24.04-arm64": "builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip",
283
+ "debian11-x64": "builds/firefox/%s/firefox-debian-11.zip",
284
+ "debian11-arm64": "builds/firefox/%s/firefox-debian-11-arm64.zip",
285
+ "debian12-x64": "builds/firefox/%s/firefox-debian-12.zip",
286
+ "debian12-arm64": "builds/firefox/%s/firefox-debian-12-arm64.zip",
287
+ "debian13-x64": "builds/firefox/%s/firefox-debian-13.zip",
288
+ "debian13-arm64": "builds/firefox/%s/firefox-debian-13-arm64.zip",
289
+ "mac10.13": "builds/firefox/%s/firefox-mac.zip",
290
+ "mac10.14": "builds/firefox/%s/firefox-mac.zip",
291
+ "mac10.15": "builds/firefox/%s/firefox-mac.zip",
292
+ "mac11": "builds/firefox/%s/firefox-mac.zip",
293
+ "mac11-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
294
+ "mac12": "builds/firefox/%s/firefox-mac.zip",
295
+ "mac12-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
296
+ "mac13": "builds/firefox/%s/firefox-mac.zip",
297
+ "mac13-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
298
+ "mac14": "builds/firefox/%s/firefox-mac.zip",
299
+ "mac14-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
300
+ "mac15": "builds/firefox/%s/firefox-mac.zip",
301
+ "mac15-arm64": "builds/firefox/%s/firefox-mac-arm64.zip",
302
+ "win64": "builds/firefox/%s/firefox-win64.zip"
303
+ },
304
+ "firefox-beta": {
305
+ "<unknown>": void 0,
306
+ "ubuntu18.04-x64": void 0,
307
+ "ubuntu20.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip",
308
+ "ubuntu22.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip",
309
+ "ubuntu24.04-x64": "builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip",
310
+ "ubuntu18.04-arm64": void 0,
311
+ "ubuntu20.04-arm64": void 0,
312
+ "ubuntu22.04-arm64": "builds/firefox-beta/%s/firefox-beta-ubuntu-22.04-arm64.zip",
313
+ "ubuntu24.04-arm64": "builds/firefox-beta/%s/firefox-beta-ubuntu-24.04-arm64.zip",
314
+ "debian11-x64": "builds/firefox-beta/%s/firefox-beta-debian-11.zip",
315
+ "debian11-arm64": "builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip",
316
+ "debian12-x64": "builds/firefox-beta/%s/firefox-beta-debian-12.zip",
317
+ "debian12-arm64": "builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip",
318
+ "debian13-x64": "builds/firefox-beta/%s/firefox-beta-debian-12.zip",
319
+ "debian13-arm64": "builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip",
320
+ "mac10.13": "builds/firefox-beta/%s/firefox-beta-mac.zip",
321
+ "mac10.14": "builds/firefox-beta/%s/firefox-beta-mac.zip",
322
+ "mac10.15": "builds/firefox-beta/%s/firefox-beta-mac.zip",
323
+ "mac11": "builds/firefox-beta/%s/firefox-beta-mac.zip",
324
+ "mac11-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
325
+ "mac12": "builds/firefox-beta/%s/firefox-beta-mac.zip",
326
+ "mac12-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
327
+ "mac13": "builds/firefox-beta/%s/firefox-beta-mac.zip",
328
+ "mac13-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
329
+ "mac14": "builds/firefox-beta/%s/firefox-beta-mac.zip",
330
+ "mac14-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
331
+ "mac15": "builds/firefox-beta/%s/firefox-beta-mac.zip",
332
+ "mac15-arm64": "builds/firefox-beta/%s/firefox-beta-mac-arm64.zip",
333
+ "win64": "builds/firefox-beta/%s/firefox-beta-win64.zip"
334
+ },
335
+ "webkit": {
336
+ "<unknown>": void 0,
337
+ "ubuntu18.04-x64": void 0,
338
+ "ubuntu20.04-x64": "builds/webkit/%s/webkit-ubuntu-20.04.zip",
339
+ "ubuntu22.04-x64": "builds/webkit/%s/webkit-ubuntu-22.04.zip",
340
+ "ubuntu24.04-x64": "builds/webkit/%s/webkit-ubuntu-24.04.zip",
341
+ "ubuntu18.04-arm64": void 0,
342
+ "ubuntu20.04-arm64": "builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip",
343
+ "ubuntu22.04-arm64": "builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip",
344
+ "ubuntu24.04-arm64": "builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip",
345
+ "debian11-x64": "builds/webkit/%s/webkit-debian-11.zip",
346
+ "debian11-arm64": "builds/webkit/%s/webkit-debian-11-arm64.zip",
347
+ "debian12-x64": "builds/webkit/%s/webkit-debian-12.zip",
348
+ "debian12-arm64": "builds/webkit/%s/webkit-debian-12-arm64.zip",
349
+ "debian13-x64": "builds/webkit/%s/webkit-debian-13.zip",
350
+ "debian13-arm64": "builds/webkit/%s/webkit-debian-13-arm64.zip",
351
+ "mac10.13": void 0,
352
+ "mac10.14": "builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip",
353
+ "mac10.15": "builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip",
354
+ "mac11": "builds/webkit/%s/webkit-mac-11.zip",
355
+ "mac11-arm64": "builds/webkit/%s/webkit-mac-11-arm64.zip",
356
+ "mac12": "builds/webkit/%s/webkit-mac-12.zip",
357
+ "mac12-arm64": "builds/webkit/%s/webkit-mac-12-arm64.zip",
358
+ "mac13": "builds/webkit/%s/webkit-mac-13.zip",
359
+ "mac13-arm64": "builds/webkit/%s/webkit-mac-13-arm64.zip",
360
+ "mac14": "builds/webkit/%s/webkit-mac-14.zip",
361
+ "mac14-arm64": "builds/webkit/%s/webkit-mac-14-arm64.zip",
362
+ "mac15": "builds/webkit/%s/webkit-mac-15.zip",
363
+ "mac15-arm64": "builds/webkit/%s/webkit-mac-15-arm64.zip",
364
+ "win64": "builds/webkit/%s/webkit-win64.zip"
365
+ },
366
+ "ffmpeg": {
367
+ "<unknown>": void 0,
368
+ "ubuntu18.04-x64": void 0,
369
+ "ubuntu20.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
370
+ "ubuntu22.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
371
+ "ubuntu24.04-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
372
+ "ubuntu18.04-arm64": void 0,
373
+ "ubuntu20.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
374
+ "ubuntu22.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
375
+ "ubuntu24.04-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
376
+ "debian11-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
377
+ "debian11-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
378
+ "debian12-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
379
+ "debian12-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
380
+ "debian13-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
381
+ "debian13-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
382
+ "mac10.13": "builds/ffmpeg/%s/ffmpeg-mac.zip",
383
+ "mac10.14": "builds/ffmpeg/%s/ffmpeg-mac.zip",
384
+ "mac10.15": "builds/ffmpeg/%s/ffmpeg-mac.zip",
385
+ "mac11": "builds/ffmpeg/%s/ffmpeg-mac.zip",
386
+ "mac11-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
387
+ "mac12": "builds/ffmpeg/%s/ffmpeg-mac.zip",
388
+ "mac12-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
389
+ "mac13": "builds/ffmpeg/%s/ffmpeg-mac.zip",
390
+ "mac13-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
391
+ "mac14": "builds/ffmpeg/%s/ffmpeg-mac.zip",
392
+ "mac14-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
393
+ "mac15": "builds/ffmpeg/%s/ffmpeg-mac.zip",
394
+ "mac15-arm64": "builds/ffmpeg/%s/ffmpeg-mac-arm64.zip",
395
+ "win64": "builds/ffmpeg/%s/ffmpeg-win64.zip"
396
+ },
397
+ "winldd": {
398
+ "<unknown>": void 0,
399
+ "ubuntu18.04-x64": void 0,
400
+ "ubuntu20.04-x64": void 0,
401
+ "ubuntu22.04-x64": void 0,
402
+ "ubuntu24.04-x64": void 0,
403
+ "ubuntu18.04-arm64": void 0,
404
+ "ubuntu20.04-arm64": void 0,
405
+ "ubuntu22.04-arm64": void 0,
406
+ "ubuntu24.04-arm64": void 0,
407
+ "debian11-x64": void 0,
408
+ "debian11-arm64": void 0,
409
+ "debian12-x64": void 0,
410
+ "debian12-arm64": void 0,
411
+ "debian13-x64": void 0,
412
+ "debian13-arm64": void 0,
413
+ "mac10.13": void 0,
414
+ "mac10.14": void 0,
415
+ "mac10.15": void 0,
416
+ "mac11": void 0,
417
+ "mac11-arm64": void 0,
418
+ "mac12": void 0,
419
+ "mac12-arm64": void 0,
420
+ "mac13": void 0,
421
+ "mac13-arm64": void 0,
422
+ "mac14": void 0,
423
+ "mac14-arm64": void 0,
424
+ "mac15": void 0,
425
+ "mac15-arm64": void 0,
426
+ "win64": "builds/winldd/%s/winldd-win64.zip"
427
+ },
428
+ "android": {
429
+ "<unknown>": "builds/android/%s/android.zip",
430
+ "ubuntu18.04-x64": void 0,
431
+ "ubuntu20.04-x64": "builds/android/%s/android.zip",
432
+ "ubuntu22.04-x64": "builds/android/%s/android.zip",
433
+ "ubuntu24.04-x64": "builds/android/%s/android.zip",
434
+ "ubuntu18.04-arm64": void 0,
435
+ "ubuntu20.04-arm64": "builds/android/%s/android.zip",
436
+ "ubuntu22.04-arm64": "builds/android/%s/android.zip",
437
+ "ubuntu24.04-arm64": "builds/android/%s/android.zip",
438
+ "debian11-x64": "builds/android/%s/android.zip",
439
+ "debian11-arm64": "builds/android/%s/android.zip",
440
+ "debian12-x64": "builds/android/%s/android.zip",
441
+ "debian12-arm64": "builds/android/%s/android.zip",
442
+ "debian13-x64": "builds/android/%s/android.zip",
443
+ "debian13-arm64": "builds/android/%s/android.zip",
444
+ "mac10.13": "builds/android/%s/android.zip",
445
+ "mac10.14": "builds/android/%s/android.zip",
446
+ "mac10.15": "builds/android/%s/android.zip",
447
+ "mac11": "builds/android/%s/android.zip",
448
+ "mac11-arm64": "builds/android/%s/android.zip",
449
+ "mac12": "builds/android/%s/android.zip",
450
+ "mac12-arm64": "builds/android/%s/android.zip",
451
+ "mac13": "builds/android/%s/android.zip",
452
+ "mac13-arm64": "builds/android/%s/android.zip",
453
+ "mac14": "builds/android/%s/android.zip",
454
+ "mac14-arm64": "builds/android/%s/android.zip",
455
+ "mac15": "builds/android/%s/android.zip",
456
+ "mac15-arm64": "builds/android/%s/android.zip",
457
+ "win64": "builds/android/%s/android.zip"
458
+ }
459
+ };
460
+ const registryDirectory = (() => {
461
+ let result;
462
+ const envDefined = (0, import_utils.getFromENV)("PLAYWRIGHT_BROWSERS_PATH");
463
+ if (envDefined === "0") {
464
+ result = import_path.default.join(__dirname, "..", "..", "..", ".local-browsers");
465
+ } else if (envDefined) {
466
+ result = envDefined;
467
+ } else {
468
+ let cacheDirectory;
469
+ if (process.platform === "linux")
470
+ cacheDirectory = process.env.XDG_CACHE_HOME || import_path.default.join(import_os.default.homedir(), ".cache");
471
+ else if (process.platform === "darwin")
472
+ cacheDirectory = import_path.default.join(import_os.default.homedir(), "Library", "Caches");
473
+ else if (process.platform === "win32")
474
+ cacheDirectory = process.env.LOCALAPPDATA || import_path.default.join(import_os.default.homedir(), "AppData", "Local");
475
+ else
476
+ throw new Error("Unsupported platform: " + process.platform);
477
+ result = import_path.default.join(cacheDirectory, "ms-playwright");
478
+ }
479
+ if (!import_path.default.isAbsolute(result)) {
480
+ result = import_path.default.resolve((0, import_utils.getFromENV)("INIT_CWD") || process.cwd(), result);
481
+ }
482
+ return result;
483
+ })();
484
+ function isBrowserDirectory(browserDirectory) {
485
+ const baseName = import_path.default.basename(browserDirectory);
486
+ for (const browserName of allDownloadable) {
487
+ if (baseName.startsWith(browserName.replace(/-/g, "_") + "-"))
488
+ return true;
489
+ }
490
+ return false;
491
+ }
492
+ function readDescriptors(browsersJSON) {
493
+ return browsersJSON["browsers"].map((obj) => {
494
+ const name = obj.name;
495
+ const revisionOverride = (obj.revisionOverrides || {})[import_hostPlatform.hostPlatform];
496
+ const revision = revisionOverride || obj.revision;
497
+ const browserDirectoryPrefix = revisionOverride ? `${name}_${import_hostPlatform.hostPlatform}_special` : `${name}`;
498
+ const descriptor = {
499
+ name,
500
+ revision,
501
+ hasRevisionOverride: !!revisionOverride,
502
+ // We only put browser version for the supported operating systems.
503
+ browserVersion: revisionOverride ? void 0 : obj.browserVersion,
504
+ installByDefault: !!obj.installByDefault,
505
+ // Method `isBrowserDirectory` determines directory to be browser iff
506
+ // it starts with some browser name followed by '-'. Some browser names
507
+ // are prefixes of others, e.g. 'webkit' is a prefix of `webkit-technology-preview`.
508
+ // To avoid older registries erroneously removing 'webkit-technology-preview', we have to
509
+ // ensure that browser folders to never include dashes inside.
510
+ dir: import_path.default.join(registryDirectory, browserDirectoryPrefix.replace(/-/g, "_") + "-" + revision)
511
+ };
512
+ return descriptor;
513
+ });
514
+ }
515
+ const allDownloadable = ["android", "chromium", "firefox", "webkit", "ffmpeg", "firefox-beta", "chromium-tip-of-tree", "chromium-headless-shell", "chromium-tip-of-tree-headless-shell"];
516
+ class Registry {
517
+ constructor(browsersJSON) {
518
+ const descriptors = readDescriptors(browsersJSON);
519
+ const findExecutablePath = (dir, name) => {
520
+ const tokens = EXECUTABLE_PATHS[name][import_hostPlatform.shortPlatform];
521
+ return tokens ? import_path.default.join(dir, ...tokens) : void 0;
522
+ };
523
+ const executablePathOrDie = (name, e, installByDefault, sdkLanguage) => {
524
+ if (!e)
525
+ throw new Error(`${name} is not supported on ${import_hostPlatform.hostPlatform}`);
526
+ const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install${installByDefault ? "" : " " + name}`);
527
+ if (!(0, import_fileUtils.canAccessFile)(e)) {
528
+ const currentDockerVersion = (0, import_dependencies.readDockerVersionSync)();
529
+ const preferredDockerVersion = currentDockerVersion ? (0, import_dependencies.dockerVersion)(currentDockerVersion.dockerImageNameTemplate) : null;
530
+ const isOutdatedDockerImage = currentDockerVersion && preferredDockerVersion && currentDockerVersion.dockerImageName !== preferredDockerVersion.dockerImageName;
531
+ const prettyMessage = isOutdatedDockerImage ? [
532
+ `Looks like ${sdkLanguage === "javascript" ? "Playwright Test or " : ""}Playwright was just updated to ${preferredDockerVersion.driverVersion}.`,
533
+ `Please update docker image as well.`,
534
+ `- current: ${currentDockerVersion.dockerImageName}`,
535
+ `- required: ${preferredDockerVersion.dockerImageName}`,
536
+ ``,
537
+ `<3 Playwright Team`
538
+ ].join("\n") : [
539
+ `Looks like ${sdkLanguage === "javascript" ? "Playwright Test or " : ""}Playwright was just installed or updated.`,
540
+ `Please run the following command to download new browser${installByDefault ? "s" : ""}:`,
541
+ ``,
542
+ ` ${installCommand}`,
543
+ ``,
544
+ `<3 Playwright Team`
545
+ ].join("\n");
546
+ throw new Error(`Executable doesn't exist at ${e}
547
+ ${(0, import_ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
548
+ }
549
+ return e;
550
+ };
551
+ this._executables = [];
552
+ const chromium = descriptors.find((d) => d.name === "chromium");
553
+ const chromiumExecutable = findExecutablePath(chromium.dir, "chromium");
554
+ this._executables.push({
555
+ type: "browser",
556
+ name: "chromium",
557
+ browserName: "chromium",
558
+ directory: chromium.dir,
559
+ executablePath: () => chromiumExecutable,
560
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumExecutable, chromium.installByDefault, sdkLanguage),
561
+ installType: chromium.installByDefault ? "download-by-default" : "download-on-demand",
562
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromium.dir, ["chrome-linux"], [], ["chrome-win"]),
563
+ downloadURLs: this._downloadURLs(chromium),
564
+ browserVersion: chromium.browserVersion,
565
+ _install: () => this._downloadExecutable(chromium, chromiumExecutable),
566
+ _dependencyGroup: "chromium",
567
+ _isHermeticInstallation: true
568
+ });
569
+ const chromiumHeadlessShell = descriptors.find((d) => d.name === "chromium-headless-shell");
570
+ const chromiumHeadlessShellExecutable = findExecutablePath(chromiumHeadlessShell.dir, "chromium-headless-shell");
571
+ this._executables.push({
572
+ type: "channel",
573
+ name: "chromium-headless-shell",
574
+ browserName: "chromium",
575
+ directory: chromiumHeadlessShell.dir,
576
+ executablePath: () => chromiumHeadlessShellExecutable,
577
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumHeadlessShellExecutable, chromiumHeadlessShell.installByDefault, sdkLanguage),
578
+ installType: chromiumHeadlessShell.installByDefault ? "download-by-default" : "download-on-demand",
579
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumHeadlessShell.dir, ["chrome-linux"], [], ["chrome-win"]),
580
+ downloadURLs: this._downloadURLs(chromiumHeadlessShell),
581
+ browserVersion: chromium.browserVersion,
582
+ _install: () => this._downloadExecutable(chromiumHeadlessShell, chromiumHeadlessShellExecutable),
583
+ _dependencyGroup: "chromium",
584
+ _isHermeticInstallation: true
585
+ });
586
+ const chromiumTipOfTreeHeadlessShell = descriptors.find((d) => d.name === "chromium-tip-of-tree-headless-shell");
587
+ const chromiumTipOfTreeHeadlessShellExecutable = findExecutablePath(chromiumTipOfTreeHeadlessShell.dir, "chromium-tip-of-tree-headless-shell");
588
+ this._executables.push({
589
+ type: "channel",
590
+ name: "chromium-tip-of-tree-headless-shell",
591
+ browserName: "chromium",
592
+ directory: chromiumTipOfTreeHeadlessShell.dir,
593
+ executablePath: () => chromiumTipOfTreeHeadlessShellExecutable,
594
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumTipOfTreeHeadlessShellExecutable, chromiumTipOfTreeHeadlessShell.installByDefault, sdkLanguage),
595
+ installType: chromiumTipOfTreeHeadlessShell.installByDefault ? "download-by-default" : "download-on-demand",
596
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTreeHeadlessShell.dir, ["chrome-linux"], [], ["chrome-win"]),
597
+ downloadURLs: this._downloadURLs(chromiumTipOfTreeHeadlessShell),
598
+ browserVersion: chromium.browserVersion,
599
+ _install: () => this._downloadExecutable(chromiumTipOfTreeHeadlessShell, chromiumTipOfTreeHeadlessShellExecutable),
600
+ _dependencyGroup: "chromium",
601
+ _isHermeticInstallation: true
602
+ });
603
+ const chromiumTipOfTree = descriptors.find((d) => d.name === "chromium-tip-of-tree");
604
+ const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir, "chromium-tip-of-tree");
605
+ this._executables.push({
606
+ type: "tool",
607
+ name: "chromium-tip-of-tree",
608
+ browserName: "chromium",
609
+ directory: chromiumTipOfTree.dir,
610
+ executablePath: () => chromiumTipOfTreeExecutable,
611
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium-tip-of-tree", chromiumTipOfTreeExecutable, chromiumTipOfTree.installByDefault, sdkLanguage),
612
+ installType: chromiumTipOfTree.installByDefault ? "download-by-default" : "download-on-demand",
613
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromiumTipOfTree.dir, ["chrome-linux"], [], ["chrome-win"]),
614
+ downloadURLs: this._downloadURLs(chromiumTipOfTree),
615
+ browserVersion: chromiumTipOfTree.browserVersion,
616
+ _install: () => this._downloadExecutable(chromiumTipOfTree, chromiumTipOfTreeExecutable),
617
+ _dependencyGroup: "chromium",
618
+ _isHermeticInstallation: true
619
+ });
620
+ this._executables.push(this._createChromiumChannel("chrome", {
621
+ "linux": "/opt/google/chrome/chrome",
622
+ "darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
623
+ "win32": `\\Google\\Chrome\\Application\\chrome.exe`
624
+ }, () => this._installChromiumChannel("chrome", {
625
+ "linux": "reinstall_chrome_stable_linux.sh",
626
+ "darwin": "reinstall_chrome_stable_mac.sh",
627
+ "win32": "reinstall_chrome_stable_win.ps1"
628
+ })));
629
+ this._executables.push(this._createChromiumChannel("chrome-beta", {
630
+ "linux": "/opt/google/chrome-beta/chrome",
631
+ "darwin": "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta",
632
+ "win32": `\\Google\\Chrome Beta\\Application\\chrome.exe`
633
+ }, () => this._installChromiumChannel("chrome-beta", {
634
+ "linux": "reinstall_chrome_beta_linux.sh",
635
+ "darwin": "reinstall_chrome_beta_mac.sh",
636
+ "win32": "reinstall_chrome_beta_win.ps1"
637
+ })));
638
+ this._executables.push(this._createChromiumChannel("chrome-dev", {
639
+ "linux": "/opt/google/chrome-unstable/chrome",
640
+ "darwin": "/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev",
641
+ "win32": `\\Google\\Chrome Dev\\Application\\chrome.exe`
642
+ }));
643
+ this._executables.push(this._createChromiumChannel("chrome-canary", {
644
+ "linux": "/opt/google/chrome-canary/chrome",
645
+ "darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
646
+ "win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
647
+ }));
648
+ this._executables.push(this._createChromiumChannel("msedge", {
649
+ "linux": "/opt/microsoft/msedge/msedge",
650
+ "darwin": "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
651
+ "win32": `\\Microsoft\\Edge\\Application\\msedge.exe`
652
+ }, () => this._installMSEdgeChannel("msedge", {
653
+ "linux": "reinstall_msedge_stable_linux.sh",
654
+ "darwin": "reinstall_msedge_stable_mac.sh",
655
+ "win32": "reinstall_msedge_stable_win.ps1"
656
+ })));
657
+ this._executables.push(this._createChromiumChannel("msedge-beta", {
658
+ "linux": "/opt/microsoft/msedge-beta/msedge",
659
+ "darwin": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta",
660
+ "win32": `\\Microsoft\\Edge Beta\\Application\\msedge.exe`
661
+ }, () => this._installMSEdgeChannel("msedge-beta", {
662
+ "darwin": "reinstall_msedge_beta_mac.sh",
663
+ "linux": "reinstall_msedge_beta_linux.sh",
664
+ "win32": "reinstall_msedge_beta_win.ps1"
665
+ })));
666
+ this._executables.push(this._createChromiumChannel("msedge-dev", {
667
+ "linux": "/opt/microsoft/msedge-dev/msedge",
668
+ "darwin": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev",
669
+ "win32": `\\Microsoft\\Edge Dev\\Application\\msedge.exe`
670
+ }, () => this._installMSEdgeChannel("msedge-dev", {
671
+ "darwin": "reinstall_msedge_dev_mac.sh",
672
+ "linux": "reinstall_msedge_dev_linux.sh",
673
+ "win32": "reinstall_msedge_dev_win.ps1"
674
+ })));
675
+ this._executables.push(this._createChromiumChannel("msedge-canary", {
676
+ "linux": "",
677
+ "darwin": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary",
678
+ "win32": `\\Microsoft\\Edge SxS\\Application\\msedge.exe`
679
+ }));
680
+ this._executables.push(this._createBidiFirefoxChannel("moz-firefox", {
681
+ "linux": "/snap/bin/firefox",
682
+ "darwin": "/Applications/Firefox.app/Contents/MacOS/firefox",
683
+ "win32": "\\Mozilla Firefox\\firefox.exe"
684
+ }));
685
+ this._executables.push(this._createBidiFirefoxChannel("moz-firefox-beta", {
686
+ "linux": "/opt/firefox-beta/firefox",
687
+ "darwin": "/Applications/Firefox.app/Contents/MacOS/firefox",
688
+ "win32": "\\Mozilla Firefox\\firefox.exe"
689
+ }));
690
+ this._executables.push(this._createBidiFirefoxChannel("moz-firefox-nightly", {
691
+ "linux": "/opt/firefox-nightly/firefox",
692
+ "darwin": "/Applications/Firefox Nightly.app/Contents/MacOS/firefox",
693
+ "win32": "\\Mozilla Firefox\\firefox.exe"
694
+ }));
695
+ this._executables.push(this._createBidiChromiumChannel("bidi-chrome-stable", {
696
+ "linux": "/opt/google/chrome/chrome",
697
+ "darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
698
+ "win32": `\\Google\\Chrome\\Application\\chrome.exe`
699
+ }));
700
+ this._executables.push(this._createBidiChromiumChannel("bidi-chrome-canary", {
701
+ "linux": "/opt/google/chrome-canary/chrome",
702
+ "darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
703
+ "win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
704
+ }));
705
+ this._executables.push({
706
+ type: "channel",
707
+ name: "bidi-chromium",
708
+ browserName: "chromium",
709
+ directory: chromium.dir,
710
+ executablePath: () => chromiumExecutable,
711
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumExecutable, chromium.installByDefault, sdkLanguage),
712
+ installType: "download-on-demand",
713
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, chromium.dir, ["chrome-linux"], [], ["chrome-win"]),
714
+ downloadURLs: this._downloadURLs(chromium),
715
+ browserVersion: chromium.browserVersion,
716
+ _install: () => this._downloadExecutable(chromium, chromiumExecutable),
717
+ _dependencyGroup: "chromium",
718
+ _isHermeticInstallation: true
719
+ });
720
+ const firefox = descriptors.find((d) => d.name === "firefox");
721
+ const firefoxExecutable = findExecutablePath(firefox.dir, "firefox");
722
+ this._executables.push({
723
+ type: "browser",
724
+ name: "firefox",
725
+ browserName: "firefox",
726
+ directory: firefox.dir,
727
+ executablePath: () => firefoxExecutable,
728
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("firefox", firefoxExecutable, firefox.installByDefault, sdkLanguage),
729
+ installType: firefox.installByDefault ? "download-by-default" : "download-on-demand",
730
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, firefox.dir, ["firefox"], [], ["firefox"]),
731
+ downloadURLs: this._downloadURLs(firefox),
732
+ browserVersion: firefox.browserVersion,
733
+ _install: () => this._downloadExecutable(firefox, firefoxExecutable),
734
+ _dependencyGroup: "firefox",
735
+ _isHermeticInstallation: true
736
+ });
737
+ const firefoxBeta = descriptors.find((d) => d.name === "firefox-beta");
738
+ const firefoxBetaExecutable = findExecutablePath(firefoxBeta.dir, "firefox");
739
+ this._executables.push({
740
+ type: "tool",
741
+ name: "firefox-beta",
742
+ browserName: "firefox",
743
+ directory: firefoxBeta.dir,
744
+ executablePath: () => firefoxBetaExecutable,
745
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("firefox-beta", firefoxBetaExecutable, firefoxBeta.installByDefault, sdkLanguage),
746
+ installType: firefoxBeta.installByDefault ? "download-by-default" : "download-on-demand",
747
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, firefoxBeta.dir, ["firefox"], [], ["firefox"]),
748
+ downloadURLs: this._downloadURLs(firefoxBeta),
749
+ browserVersion: firefoxBeta.browserVersion,
750
+ _install: () => this._downloadExecutable(firefoxBeta, firefoxBetaExecutable),
751
+ _dependencyGroup: "firefox",
752
+ _isHermeticInstallation: true
753
+ });
754
+ const webkit = descriptors.find((d) => d.name === "webkit");
755
+ const webkitExecutable = findExecutablePath(webkit.dir, "webkit");
756
+ const webkitLinuxLddDirectories = [
757
+ import_path.default.join("minibrowser-gtk"),
758
+ import_path.default.join("minibrowser-gtk", "bin"),
759
+ import_path.default.join("minibrowser-gtk", "lib"),
760
+ import_path.default.join("minibrowser-gtk", "sys", "lib"),
761
+ import_path.default.join("minibrowser-wpe"),
762
+ import_path.default.join("minibrowser-wpe", "bin"),
763
+ import_path.default.join("minibrowser-wpe", "lib"),
764
+ import_path.default.join("minibrowser-wpe", "sys", "lib")
765
+ ];
766
+ this._executables.push({
767
+ type: "browser",
768
+ name: "webkit",
769
+ browserName: "webkit",
770
+ directory: webkit.dir,
771
+ executablePath: () => webkitExecutable,
772
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("webkit", webkitExecutable, webkit.installByDefault, sdkLanguage),
773
+ installType: webkit.installByDefault ? "download-by-default" : "download-on-demand",
774
+ _validateHostRequirements: (sdkLanguage) => this._validateHostRequirements(sdkLanguage, webkit.dir, webkitLinuxLddDirectories, ["libGLESv2.so.2", "libx264.so"], [""]),
775
+ downloadURLs: this._downloadURLs(webkit),
776
+ browserVersion: webkit.browserVersion,
777
+ _install: () => this._downloadExecutable(webkit, webkitExecutable),
778
+ _dependencyGroup: "webkit",
779
+ _isHermeticInstallation: true
780
+ });
781
+ this._executables.push({
782
+ type: "channel",
783
+ name: "webkit-wsl",
784
+ browserName: "webkit",
785
+ directory: webkit.dir,
786
+ executablePath: () => webkitExecutable,
787
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("webkit", webkitExecutable, webkit.installByDefault, sdkLanguage),
788
+ installType: "download-on-demand",
789
+ _validateHostRequirements: (sdkLanguage) => Promise.resolve(),
790
+ _isHermeticInstallation: true,
791
+ _install: async () => {
792
+ if (process.platform !== "win32")
793
+ throw new Error(`WebKit via WSL is only supported on Windows`);
794
+ const script = import_path.default.join(BIN_PATH, "install_webkit_wsl.ps1");
795
+ const { code } = await (0, import_spawnAsync.spawnAsync)("powershell.exe", [
796
+ "-ExecutionPolicy",
797
+ "Bypass",
798
+ "-File",
799
+ script
800
+ ], {
801
+ stdio: "inherit"
802
+ });
803
+ if (code !== 0)
804
+ throw new Error(`Failed to install WebKit via WSL`);
805
+ }
806
+ });
807
+ const ffmpeg = descriptors.find((d) => d.name === "ffmpeg");
808
+ const ffmpegExecutable = findExecutablePath(ffmpeg.dir, "ffmpeg");
809
+ this._executables.push({
810
+ type: "tool",
811
+ name: "ffmpeg",
812
+ browserName: void 0,
813
+ directory: ffmpeg.dir,
814
+ executablePath: () => ffmpegExecutable,
815
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("ffmpeg", ffmpegExecutable, ffmpeg.installByDefault, sdkLanguage),
816
+ installType: ffmpeg.installByDefault ? "download-by-default" : "download-on-demand",
817
+ _validateHostRequirements: () => Promise.resolve(),
818
+ downloadURLs: this._downloadURLs(ffmpeg),
819
+ _install: () => this._downloadExecutable(ffmpeg, ffmpegExecutable),
820
+ _dependencyGroup: "tools",
821
+ _isHermeticInstallation: true
822
+ });
823
+ const winldd = descriptors.find((d) => d.name === "winldd");
824
+ const winlddExecutable = findExecutablePath(winldd.dir, "winldd");
825
+ this._executables.push({
826
+ type: "tool",
827
+ name: "winldd",
828
+ browserName: void 0,
829
+ directory: winldd.dir,
830
+ executablePath: () => winlddExecutable,
831
+ executablePathOrDie: (sdkLanguage) => executablePathOrDie("winldd", winlddExecutable, winldd.installByDefault, sdkLanguage),
832
+ installType: process.platform === "win32" ? "download-by-default" : "none",
833
+ _validateHostRequirements: () => Promise.resolve(),
834
+ downloadURLs: this._downloadURLs(winldd),
835
+ _install: () => this._downloadExecutable(winldd, winlddExecutable),
836
+ _dependencyGroup: "tools",
837
+ _isHermeticInstallation: true
838
+ });
839
+ const android = descriptors.find((d) => d.name === "android");
840
+ this._executables.push({
841
+ type: "tool",
842
+ name: "android",
843
+ browserName: void 0,
844
+ directory: android.dir,
845
+ executablePath: () => void 0,
846
+ executablePathOrDie: () => "",
847
+ installType: "download-on-demand",
848
+ _validateHostRequirements: () => Promise.resolve(),
849
+ downloadURLs: this._downloadURLs(android),
850
+ _install: () => this._downloadExecutable(android),
851
+ _dependencyGroup: "tools",
852
+ _isHermeticInstallation: true
853
+ });
854
+ }
855
+ _createChromiumChannel(name, lookAt, install) {
856
+ const executablePath = (sdkLanguage, shouldThrow) => {
857
+ const suffix = lookAt[process.platform];
858
+ if (!suffix) {
859
+ if (shouldThrow)
860
+ throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
861
+ return void 0;
862
+ }
863
+ const prefixes = process.platform === "win32" ? [
864
+ process.env.LOCALAPPDATA,
865
+ process.env.PROGRAMFILES,
866
+ process.env["PROGRAMFILES(X86)"],
867
+ // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
868
+ process.env.HOMEDRIVE + "\\Program Files",
869
+ process.env.HOMEDRIVE + "\\Program Files (x86)"
870
+ ].filter(Boolean) : [""];
871
+ for (const prefix of prefixes) {
872
+ const executablePath2 = import_path.default.join(prefix, suffix);
873
+ if ((0, import_fileUtils.canAccessFile)(executablePath2))
874
+ return executablePath2;
875
+ }
876
+ if (!shouldThrow)
877
+ return void 0;
878
+ const location = prefixes.length ? ` at ${import_path.default.join(prefixes[0], suffix)}` : ``;
879
+ const installation = install ? `
880
+ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
881
+ throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
882
+ };
883
+ return {
884
+ type: "channel",
885
+ name,
886
+ browserName: "chromium",
887
+ directory: void 0,
888
+ executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
889
+ executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
890
+ installType: install ? "install-script" : "none",
891
+ _validateHostRequirements: () => Promise.resolve(),
892
+ _isHermeticInstallation: false,
893
+ _install: install
894
+ };
895
+ }
896
+ _createBidiFirefoxChannel(name, lookAt, install) {
897
+ const executablePath = (sdkLanguage, shouldThrow) => {
898
+ const suffix = lookAt[process.platform];
899
+ if (!suffix) {
900
+ if (shouldThrow)
901
+ throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);
902
+ return void 0;
903
+ }
904
+ const prefixes = process.platform === "win32" ? [
905
+ process.env.LOCALAPPDATA,
906
+ process.env.PROGRAMFILES,
907
+ process.env["PROGRAMFILES(X86)"],
908
+ // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
909
+ process.env.HOMEDRIVE + "\\Program Files",
910
+ process.env.HOMEDRIVE + "\\Program Files (x86)"
911
+ ].filter(Boolean) : [""];
912
+ for (const prefix of prefixes) {
913
+ const executablePath2 = import_path.default.join(prefix, suffix);
914
+ if ((0, import_fileUtils.canAccessFile)(executablePath2))
915
+ return executablePath2;
916
+ }
917
+ if (shouldThrow)
918
+ throw new Error(`Cannot find Firefox installation for channel '${name}' at the standard system paths. ${`Tried paths:
919
+ ${prefixes.map((p) => import_path.default.join(p, suffix)).join("\n ")}`}`);
920
+ return void 0;
921
+ };
922
+ return {
923
+ type: "channel",
924
+ name,
925
+ browserName: "firefox",
926
+ directory: void 0,
927
+ executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
928
+ executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
929
+ installType: "none",
930
+ _validateHostRequirements: () => Promise.resolve(),
931
+ _isHermeticInstallation: true,
932
+ _install: install
933
+ };
934
+ }
935
+ _createBidiChromiumChannel(name, lookAt, install) {
936
+ const executablePath = (sdkLanguage, shouldThrow) => {
937
+ const suffix = lookAt[process.platform];
938
+ if (!suffix) {
939
+ if (shouldThrow)
940
+ throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
941
+ return void 0;
942
+ }
943
+ const prefixes = process.platform === "win32" ? [
944
+ process.env.LOCALAPPDATA,
945
+ process.env.PROGRAMFILES,
946
+ process.env["PROGRAMFILES(X86)"],
947
+ // In some cases there is no PROGRAMFILES/(86) env var set but HOMEDRIVE is set.
948
+ process.env.HOMEDRIVE + "\\Program Files",
949
+ process.env.HOMEDRIVE + "\\Program Files (x86)"
950
+ ].filter(Boolean) : [""];
951
+ for (const prefix of prefixes) {
952
+ const executablePath2 = import_path.default.join(prefix, suffix);
953
+ if ((0, import_fileUtils.canAccessFile)(executablePath2))
954
+ return executablePath2;
955
+ }
956
+ if (!shouldThrow)
957
+ return void 0;
958
+ const location = prefixes.length ? ` at ${import_path.default.join(prefixes[0], suffix)}` : ``;
959
+ const installation = install ? `
960
+ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
961
+ throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
962
+ };
963
+ return {
964
+ type: "channel",
965
+ name,
966
+ browserName: "chromium",
967
+ directory: void 0,
968
+ executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
969
+ executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
970
+ installType: install ? "install-script" : "none",
971
+ _validateHostRequirements: () => Promise.resolve(),
972
+ _isHermeticInstallation: false,
973
+ _install: install
974
+ };
975
+ }
976
+ executables() {
977
+ return this._executables;
978
+ }
979
+ findExecutable(name) {
980
+ return this._executables.find((b) => b.name === name);
981
+ }
982
+ defaultExecutables() {
983
+ return this._executables.filter((e) => e.installType === "download-by-default");
984
+ }
985
+ _dedupe(executables) {
986
+ return Array.from(new Set(executables));
987
+ }
988
+ async _validateHostRequirements(sdkLanguage, browserDirectory, linuxLddDirectories, dlOpenLibraries, windowsExeAndDllDirectories) {
989
+ if (import_os.default.platform() === "linux")
990
+ return await (0, import_dependencies2.validateDependenciesLinux)(sdkLanguage, linuxLddDirectories.map((d) => import_path.default.join(browserDirectory, d)), dlOpenLibraries);
991
+ if (import_os.default.platform() === "win32" && import_os.default.arch() === "x64")
992
+ return await (0, import_dependencies2.validateDependenciesWindows)(sdkLanguage, windowsExeAndDllDirectories.map((d) => import_path.default.join(browserDirectory, d)));
993
+ }
994
+ async installDeps(executablesToInstallDeps, dryRun) {
995
+ const executables = this._dedupe(executablesToInstallDeps);
996
+ const targets = /* @__PURE__ */ new Set();
997
+ for (const executable of executables) {
998
+ if (executable._dependencyGroup)
999
+ targets.add(executable._dependencyGroup);
1000
+ }
1001
+ targets.add("tools");
1002
+ if (import_os.default.platform() === "win32")
1003
+ return await (0, import_dependencies2.installDependenciesWindows)(targets, dryRun);
1004
+ if (import_os.default.platform() === "linux")
1005
+ return await (0, import_dependencies2.installDependenciesLinux)(targets, dryRun);
1006
+ }
1007
+ async install(executablesToInstall, options) {
1008
+ const executables = this._dedupe(executablesToInstall);
1009
+ await import_fs.default.promises.mkdir(registryDirectory, { recursive: true });
1010
+ const lockfilePath = import_path.default.join(registryDirectory, "__dirlock");
1011
+ const linksDir = import_path.default.join(registryDirectory, ".links");
1012
+ let releaseLock;
1013
+ try {
1014
+ releaseLock = await import_utilsBundle.lockfile.lock(registryDirectory, {
1015
+ retries: {
1016
+ // Retry 20 times during 10 minutes with
1017
+ // exponential back-off.
1018
+ // See documentation at: https://www.npmjs.com/package/retry#retrytimeoutsoptions
1019
+ retries: 20,
1020
+ factor: 1.27579
1021
+ },
1022
+ onCompromised: (err) => {
1023
+ throw new Error(`${err.message} Path: ${lockfilePath}`);
1024
+ },
1025
+ lockfilePath
1026
+ });
1027
+ await import_fs.default.promises.mkdir(linksDir, { recursive: true });
1028
+ await import_fs.default.promises.writeFile(import_path.default.join(linksDir, (0, import_utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
1029
+ if (!(0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_GC"))
1030
+ await this._validateInstallationCache(linksDir);
1031
+ for (const executable of executables) {
1032
+ if (!executable._install)
1033
+ throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);
1034
+ const { embedderName } = (0, import_userAgent.getEmbedderName)();
1035
+ if (!(0, import_utils.getAsBooleanFromENV)("CI") && !executable._isHermeticInstallation && !options?.force && executable.executablePath(embedderName)) {
1036
+ const command = buildPlaywrightCLICommand(embedderName, "install --force " + executable.name);
1037
+ process.stderr.write("\n" + (0, import_ascii.wrapInASCIIBox)([
1038
+ `ATTENTION: "${executable.name}" is already installed on the system!`,
1039
+ ``,
1040
+ `"${executable.name}" installation is not hermetic; installing newer version`,
1041
+ `requires *removal* of a current installation first.`,
1042
+ ``,
1043
+ `To *uninstall* current version and re-install latest "${executable.name}":`,
1044
+ ``,
1045
+ `- Close all running instances of "${executable.name}", if any`,
1046
+ `- Use "--force" to install browser:`,
1047
+ ``,
1048
+ ` ${command}`,
1049
+ ``,
1050
+ `<3 Playwright Team`
1051
+ ].join("\n"), 1) + "\n\n");
1052
+ return;
1053
+ }
1054
+ await executable._install();
1055
+ }
1056
+ } catch (e) {
1057
+ if (e.code === "ELOCKED") {
1058
+ const rmCommand = process.platform === "win32" ? "rm -R" : "rm -rf";
1059
+ throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)([
1060
+ `An active lockfile is found at:`,
1061
+ ``,
1062
+ ` ${lockfilePath}`,
1063
+ ``,
1064
+ `Either:`,
1065
+ `- wait a few minutes if other Playwright is installing browsers in parallel`,
1066
+ `- remove lock manually with:`,
1067
+ ``,
1068
+ ` ${rmCommand} ${lockfilePath}`,
1069
+ ``,
1070
+ `<3 Playwright Team`
1071
+ ].join("\n"), 1));
1072
+ } else {
1073
+ throw e;
1074
+ }
1075
+ } finally {
1076
+ if (releaseLock)
1077
+ await releaseLock();
1078
+ }
1079
+ }
1080
+ async uninstall(all) {
1081
+ const linksDir = import_path.default.join(registryDirectory, ".links");
1082
+ if (all) {
1083
+ const links = await import_fs.default.promises.readdir(linksDir).catch(() => []);
1084
+ for (const link of links)
1085
+ await import_fs.default.promises.unlink(import_path.default.join(linksDir, link));
1086
+ } else {
1087
+ await import_fs.default.promises.unlink(import_path.default.join(linksDir, (0, import_utils.calculateSha1)(PACKAGE_PATH))).catch(() => {
1088
+ });
1089
+ }
1090
+ await this._validateInstallationCache(linksDir);
1091
+ return {
1092
+ numberOfBrowsersLeft: (await import_fs.default.promises.readdir(registryDirectory).catch(() => [])).filter((browserDirectory) => isBrowserDirectory(browserDirectory)).length
1093
+ };
1094
+ }
1095
+ async validateHostRequirementsForExecutablesIfNeeded(executables, sdkLanguage) {
1096
+ if ((0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS")) {
1097
+ process.stderr.write("Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.\n");
1098
+ return;
1099
+ }
1100
+ for (const executable of executables)
1101
+ await this._validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage);
1102
+ }
1103
+ async _validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage) {
1104
+ const kMaximumReValidationPeriod = 30 * 24 * 60 * 60 * 1e3;
1105
+ if (!executable.directory)
1106
+ return;
1107
+ const markerFile = import_path.default.join(executable.directory, "DEPENDENCIES_VALIDATED");
1108
+ if (await import_fs.default.promises.stat(markerFile).then((stat) => Date.now() - stat.mtime.getTime() < kMaximumReValidationPeriod).catch(() => false))
1109
+ return;
1110
+ import_debugLogger.debugLogger.log("install", `validating host requirements for "${executable.name}"`);
1111
+ try {
1112
+ await executable._validateHostRequirements(sdkLanguage);
1113
+ import_debugLogger.debugLogger.log("install", `validation passed for ${executable.name}`);
1114
+ } catch (error) {
1115
+ import_debugLogger.debugLogger.log("install", `validation failed for ${executable.name}`);
1116
+ throw error;
1117
+ }
1118
+ await import_fs.default.promises.writeFile(markerFile, "").catch(() => {
1119
+ });
1120
+ }
1121
+ _downloadURLs(descriptor) {
1122
+ const paths = DOWNLOAD_PATHS[descriptor.name];
1123
+ const downloadPathTemplate = paths[import_hostPlatform.hostPlatform] || paths["<unknown>"];
1124
+ if (!downloadPathTemplate)
1125
+ return [];
1126
+ const downloadPath = util.format(downloadPathTemplate, descriptor.revision);
1127
+ let downloadURLs = PLAYWRIGHT_CDN_MIRRORS.map((mirror) => `${mirror}/${downloadPath}`);
1128
+ let downloadHostEnv;
1129
+ if (descriptor.name.startsWith("chromium"))
1130
+ downloadHostEnv = "PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST";
1131
+ else if (descriptor.name.startsWith("firefox"))
1132
+ downloadHostEnv = "PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST";
1133
+ else if (descriptor.name.startsWith("webkit"))
1134
+ downloadHostEnv = "PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST";
1135
+ const customHostOverride = downloadHostEnv && (0, import_utils.getFromENV)(downloadHostEnv) || (0, import_utils.getFromENV)("PLAYWRIGHT_DOWNLOAD_HOST");
1136
+ if (customHostOverride)
1137
+ downloadURLs = [`${customHostOverride}/${downloadPath}`];
1138
+ return downloadURLs;
1139
+ }
1140
+ async _downloadExecutable(descriptor, executablePath) {
1141
+ const downloadURLs = this._downloadURLs(descriptor);
1142
+ if (!downloadURLs.length)
1143
+ throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${import_hostPlatform.hostPlatform}`);
1144
+ if (!import_hostPlatform.isOfficiallySupportedPlatform)
1145
+ (0, import_browserFetcher.logPolitely)(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${import_hostPlatform.hostPlatform}.`);
1146
+ if (descriptor.hasRevisionOverride) {
1147
+ const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${import_hostPlatform.hostPlatform}. Please update to the latest version of your operating system to test up-to-date browsers.`;
1148
+ if (process.env.GITHUB_ACTIONS)
1149
+ console.log(`::warning title=Playwright::${message}`);
1150
+ else
1151
+ (0, import_browserFetcher.logPolitely)(message);
1152
+ }
1153
+ const displayName = descriptor.name.split("-").map((word) => {
1154
+ return word === "ffmpeg" ? "FFMPEG" : word.charAt(0).toUpperCase() + word.slice(1);
1155
+ }).join(" ");
1156
+ const title = descriptor.browserVersion ? `${displayName} ${descriptor.browserVersion} (playwright build v${descriptor.revision})` : `${displayName} playwright build v${descriptor.revision}`;
1157
+ const downloadFileName = `playwright-download-${descriptor.name}-${import_hostPlatform.hostPlatform}-${descriptor.revision}.zip`;
1158
+ const downloadSocketTimeoutEnv = (0, import_utils.getFromENV)("PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT");
1159
+ const downloadSocketTimeout = +(downloadSocketTimeoutEnv || "0") || import_network.NET_DEFAULT_TIMEOUT;
1160
+ await (0, import_browserFetcher.downloadBrowserWithProgressBar)(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadSocketTimeout).catch((e) => {
1161
+ throw new Error(`Failed to download ${title}, caused by
1162
+ ${e.stack}`);
1163
+ });
1164
+ }
1165
+ async _installMSEdgeChannel(channel, scripts) {
1166
+ const scriptArgs = [];
1167
+ if (process.platform !== "linux") {
1168
+ const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)(void 0, { url: "https://edgeupdates.microsoft.com/api/products" })));
1169
+ const productName = {
1170
+ "msedge": "Stable",
1171
+ "msedge-beta": "Beta",
1172
+ "msedge-dev": "Dev"
1173
+ }[channel];
1174
+ const product = products.find((product2) => product2.product === productName);
1175
+ const searchConfig = {
1176
+ darwin: { platform: "MacOS", arch: "universal", artifact: "pkg" },
1177
+ win32: { platform: "Windows", arch: "x64", artifact: "msi" }
1178
+ }[process.platform];
1179
+ const release = searchConfig ? product.releases.find((release2) => release2.platform === searchConfig.platform && release2.architecture === searchConfig.arch && release2.artifacts.length > 0) : null;
1180
+ const artifact = release ? release.artifacts.find((artifact2) => artifact2.artifactname === searchConfig.artifact) : null;
1181
+ if (artifact)
1182
+ scriptArgs.push(
1183
+ artifact.location
1184
+ /* url */
1185
+ );
1186
+ else
1187
+ throw new Error(`Cannot install ${channel} on ${process.platform}`);
1188
+ }
1189
+ await this._installChromiumChannel(channel, scripts, scriptArgs);
1190
+ }
1191
+ async _installChromiumChannel(channel, scripts, scriptArgs = []) {
1192
+ const scriptName = scripts[process.platform];
1193
+ if (!scriptName)
1194
+ throw new Error(`Cannot install ${channel} on ${process.platform}`);
1195
+ const cwd = BIN_PATH;
1196
+ const isPowerShell = scriptName.endsWith(".ps1");
1197
+ if (isPowerShell) {
1198
+ const args = [
1199
+ "-ExecutionPolicy",
1200
+ "Bypass",
1201
+ "-File",
1202
+ import_path.default.join(BIN_PATH, scriptName),
1203
+ ...scriptArgs
1204
+ ];
1205
+ const { code } = await (0, import_spawnAsync.spawnAsync)("powershell.exe", args, { cwd, stdio: "inherit" });
1206
+ if (code !== 0)
1207
+ throw new Error(`Failed to install ${channel}`);
1208
+ } else {
1209
+ const { command, args, elevatedPermissions } = await (0, import_dependencies.transformCommandsForRoot)([`bash "${import_path.default.join(BIN_PATH, scriptName)}" ${scriptArgs.join("")}`]);
1210
+ if (elevatedPermissions)
1211
+ console.log("Switching to root user to install dependencies...");
1212
+ const { code } = await (0, import_spawnAsync.spawnAsync)(command, args, { cwd, stdio: "inherit" });
1213
+ if (code !== 0)
1214
+ throw new Error(`Failed to install ${channel}`);
1215
+ }
1216
+ }
1217
+ async listInstalledBrowsers() {
1218
+ const linksDir = import_path.default.join(registryDirectory, ".links");
1219
+ const { browsers } = await this._traverseBrowserInstallations(linksDir);
1220
+ return browsers.filter((browser) => import_fs.default.existsSync(browser.browserPath));
1221
+ }
1222
+ async _validateInstallationCache(linksDir) {
1223
+ const { browsers, brokenLinks } = await this._traverseBrowserInstallations(linksDir);
1224
+ await this._deleteStaleBrowsers(browsers);
1225
+ await this._deleteBrokenInstallations(brokenLinks);
1226
+ }
1227
+ async _traverseBrowserInstallations(linksDir) {
1228
+ const browserList = [];
1229
+ const brokenLinks = [];
1230
+ for (const fileName of await import_fs.default.promises.readdir(linksDir)) {
1231
+ const linkPath = import_path.default.join(linksDir, fileName);
1232
+ let linkTarget = "";
1233
+ try {
1234
+ linkTarget = (await import_fs.default.promises.readFile(linkPath)).toString();
1235
+ const browsersJSON = require(import_path.default.join(linkTarget, "browsers.json"));
1236
+ const descriptors = readDescriptors(browsersJSON);
1237
+ for (const browserName of allDownloadable) {
1238
+ const descriptor = descriptors.find((d) => d.name === browserName);
1239
+ if (!descriptor)
1240
+ continue;
1241
+ const browserPath = descriptor.dir;
1242
+ const browserVersion = parseInt(descriptor.revision, 10);
1243
+ browserList.push({
1244
+ browserName,
1245
+ browserVersion,
1246
+ browserPath,
1247
+ referenceDir: linkTarget
1248
+ });
1249
+ }
1250
+ } catch (e) {
1251
+ brokenLinks.push(linkPath);
1252
+ }
1253
+ }
1254
+ return { browsers: browserList, brokenLinks };
1255
+ }
1256
+ async _deleteStaleBrowsers(browserList) {
1257
+ const usedBrowserPaths = /* @__PURE__ */ new Set();
1258
+ for (const browser of browserList) {
1259
+ const { browserName, browserVersion, browserPath } = browser;
1260
+ const shouldHaveMarkerFile = browserName === "chromium" && (browserVersion >= 786218 || browserVersion < 3e5) || browserName === "firefox" && browserVersion >= 1128 || browserName === "webkit" && browserVersion >= 1307 || // All new applications have a marker file right away.
1261
+ browserName !== "firefox" && browserName !== "chromium" && browserName !== "webkit";
1262
+ if (!shouldHaveMarkerFile || await (0, import_fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(browserPath)))
1263
+ usedBrowserPaths.add(browserPath);
1264
+ }
1265
+ let downloadedBrowsers = (await import_fs.default.promises.readdir(registryDirectory)).map((file) => import_path.default.join(registryDirectory, file));
1266
+ downloadedBrowsers = downloadedBrowsers.filter((file) => isBrowserDirectory(file));
1267
+ const directories = new Set(downloadedBrowsers);
1268
+ for (const browserDirectory of usedBrowserPaths)
1269
+ directories.delete(browserDirectory);
1270
+ for (const directory of directories)
1271
+ (0, import_browserFetcher.logPolitely)("Removing unused browser at " + directory);
1272
+ await (0, import_fileUtils.removeFolders)([...directories]);
1273
+ }
1274
+ async _deleteBrokenInstallations(brokenLinks) {
1275
+ for (const linkPath of brokenLinks)
1276
+ await import_fs.default.promises.unlink(linkPath).catch((e) => {
1277
+ });
1278
+ }
1279
+ _defaultBrowsersToInstall(options) {
1280
+ let executables = this.defaultExecutables();
1281
+ if (options.shell === "no")
1282
+ executables = executables.filter((e) => e.name !== "chromium-headless-shell");
1283
+ if (options.shell === "only")
1284
+ executables = executables.filter((e) => e.name !== "chromium");
1285
+ return executables;
1286
+ }
1287
+ suggestedBrowsersToInstall() {
1288
+ return this.executables().filter((e) => e.installType !== "none" && e.type !== "tool").map((e) => e.name).join(", ");
1289
+ }
1290
+ resolveBrowsers(aliases, options) {
1291
+ if (aliases.length === 0)
1292
+ return this._defaultBrowsersToInstall(options);
1293
+ const faultyArguments = [];
1294
+ const executables = [];
1295
+ const handleArgument = (arg) => {
1296
+ const executable = this.findExecutable(arg);
1297
+ if (!executable || executable.installType === "none")
1298
+ faultyArguments.push(arg);
1299
+ else
1300
+ executables.push(executable);
1301
+ if (executable?.browserName === "chromium")
1302
+ executables.push(this.findExecutable("ffmpeg"));
1303
+ };
1304
+ for (const alias of aliases) {
1305
+ if (alias === "chromium") {
1306
+ if (options.shell !== "only")
1307
+ handleArgument("chromium");
1308
+ if (options.shell !== "no")
1309
+ handleArgument("chromium-headless-shell");
1310
+ } else {
1311
+ handleArgument(alias);
1312
+ }
1313
+ }
1314
+ if (process.platform === "win32")
1315
+ executables.push(this.findExecutable("winldd"));
1316
+ if (faultyArguments.length)
1317
+ throw new Error(`Invalid installation targets: ${faultyArguments.map((name) => `'${name}'`).join(", ")}. Expecting one of: ${this.suggestedBrowsersToInstall()}`);
1318
+ return executables;
1319
+ }
1320
+ }
1321
+ function browserDirectoryToMarkerFilePath(browserDirectory) {
1322
+ return import_path.default.join(browserDirectory, "INSTALLATION_COMPLETE");
1323
+ }
1324
+ function buildPlaywrightCLICommand(sdkLanguage, parameters) {
1325
+ switch (sdkLanguage) {
1326
+ case "python":
1327
+ return `playwright ${parameters}`;
1328
+ case "java":
1329
+ return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="${parameters}"`;
1330
+ case "csharp":
1331
+ return `pwsh bin/Debug/netX/playwright.ps1 ${parameters}`;
1332
+ default: {
1333
+ const packageManagerCommand = (0, import_utils.getPackageManagerExecCommand)();
1334
+ return `${packageManagerCommand} playwright ${parameters}`;
1335
+ }
1336
+ }
1337
+ }
1338
+ async function installBrowsersForNpmInstall(browsers) {
1339
+ if ((0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD")) {
1340
+ (0, import_browserFetcher.logPolitely)("Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set");
1341
+ return false;
1342
+ }
1343
+ const executables = [];
1344
+ if (process.platform === "win32")
1345
+ executables.push(registry.findExecutable("winldd"));
1346
+ for (const browserName of browsers) {
1347
+ const executable = registry.findExecutable(browserName);
1348
+ if (!executable || executable.installType === "none")
1349
+ throw new Error(`Cannot install ${browserName}`);
1350
+ executables.push(executable);
1351
+ }
1352
+ await registry.install(executables);
1353
+ }
1354
+ function findChromiumChannelBestEffort(sdkLanguage) {
1355
+ let channel = null;
1356
+ for (const name of ["chromium", "chrome", "msedge"]) {
1357
+ try {
1358
+ registry.findExecutable(name).executablePathOrDie(sdkLanguage);
1359
+ channel = name === "chromium" ? void 0 : name;
1360
+ break;
1361
+ } catch (e) {
1362
+ }
1363
+ }
1364
+ if (channel === null) {
1365
+ const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install chromium`);
1366
+ const prettyMessage = [
1367
+ `No chromium-based browser found on the system.`,
1368
+ `Please run the following command to download one:`,
1369
+ ``,
1370
+ ` ${installCommand}`,
1371
+ ``,
1372
+ `<3 Playwright Team`
1373
+ ].join("\n");
1374
+ throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)(prettyMessage, 1));
1375
+ }
1376
+ return channel;
1377
+ }
1378
+ function lowercaseAllKeys(json) {
1379
+ if (typeof json !== "object" || !json)
1380
+ return json;
1381
+ if (Array.isArray(json))
1382
+ return json.map(lowercaseAllKeys);
1383
+ const result = {};
1384
+ for (const [key, value] of Object.entries(json))
1385
+ result[key.toLowerCase()] = lowercaseAllKeys(value);
1386
+ return result;
1387
+ }
1388
+ const registry = new Registry(require("../../../browsers.json"));
1389
+ // Annotate the CommonJS export names for ESM import in node:
1390
+ 0 && (module.exports = {
1391
+ Registry,
1392
+ browserDirectoryToMarkerFilePath,
1393
+ buildPlaywrightCLICommand,
1394
+ findChromiumChannelBestEffort,
1395
+ installBrowsersForNpmInstall,
1396
+ registry,
1397
+ registryDirectory,
1398
+ writeDockerVersion
1399
+ });