pokeedex 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +30 -0
  3. data/.gitignore +13 -0
  4. data/.standard.yml +9 -0
  5. data/CHANGELOG.md +5 -0
  6. data/CODE_OF_CONDUCT.md +132 -0
  7. data/Gemfile +14 -0
  8. data/Gemfile.lock +125 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +154 -0
  11. data/Rakefile +20 -0
  12. data/bin/pokeedex +85 -0
  13. data/lib/pokeedex/configuration.rb +47 -0
  14. data/lib/pokeedex/database.rb +42 -0
  15. data/lib/pokeedex/db/migrations/001_create_pokemons.rb +26 -0
  16. data/lib/pokeedex/exceptions.rb +15 -0
  17. data/lib/pokeedex/pokemon/base.rb +16 -0
  18. data/lib/pokeedex/pokemon/decorators/base.rb +112 -0
  19. data/lib/pokeedex/pokemon/model/base.rb +43 -0
  20. data/lib/pokeedex/pokemon/scrapper/base.rb +34 -0
  21. data/lib/pokeedex/pokemon/scrapper/fetchers/base.rb +123 -0
  22. data/lib/pokeedex/pokemon/scrapper/parsers/base.rb +205 -0
  23. data/lib/pokeedex/pokemon/scrapper/pokedex.rb +50 -0
  24. data/lib/pokeedex/pokemon/searcher/base.rb +59 -0
  25. data/lib/pokeedex/version.rb +5 -0
  26. data/lib/pokeedex.rb +55 -0
  27. data/node_modules/.bin/playwright +1 -0
  28. data/node_modules/.bin/playwright-core +1 -0
  29. data/node_modules/.yarn-integrity +22 -0
  30. data/node_modules/@playwright/test/LICENSE +202 -0
  31. data/node_modules/@playwright/test/NOTICE +5 -0
  32. data/node_modules/@playwright/test/README.md +169 -0
  33. data/node_modules/@playwright/test/cli.js +19 -0
  34. data/node_modules/@playwright/test/index.d.ts +18 -0
  35. data/node_modules/@playwright/test/index.js +17 -0
  36. data/node_modules/@playwright/test/index.mjs +18 -0
  37. data/node_modules/@playwright/test/node_modules/.bin/playwright +1 -0
  38. data/node_modules/@playwright/test/package.json +35 -0
  39. data/node_modules/@playwright/test/reporter.d.ts +17 -0
  40. data/node_modules/@playwright/test/reporter.js +17 -0
  41. data/node_modules/@playwright/test/reporter.mjs +17 -0
  42. data/node_modules/@types/node/LICENSE +21 -0
  43. data/node_modules/@types/node/README.md +15 -0
  44. data/node_modules/@types/node/assert/strict.d.ts +8 -0
  45. data/node_modules/@types/node/assert.d.ts +1040 -0
  46. data/node_modules/@types/node/async_hooks.d.ts +541 -0
  47. data/node_modules/@types/node/buffer.d.ts +2300 -0
  48. data/node_modules/@types/node/child_process.d.ts +1544 -0
  49. data/node_modules/@types/node/cluster.d.ts +578 -0
  50. data/node_modules/@types/node/console.d.ts +452 -0
  51. data/node_modules/@types/node/constants.d.ts +19 -0
  52. data/node_modules/@types/node/crypto.d.ts +4451 -0
  53. data/node_modules/@types/node/dgram.d.ts +596 -0
  54. data/node_modules/@types/node/diagnostics_channel.d.ts +554 -0
  55. data/node_modules/@types/node/dns/promises.d.ts +476 -0
  56. data/node_modules/@types/node/dns.d.ts +865 -0
  57. data/node_modules/@types/node/dom-events.d.ts +124 -0
  58. data/node_modules/@types/node/domain.d.ts +170 -0
  59. data/node_modules/@types/node/events.d.ts +931 -0
  60. data/node_modules/@types/node/fs/promises.d.ts +1264 -0
  61. data/node_modules/@types/node/fs.d.ts +4390 -0
  62. data/node_modules/@types/node/globals.d.ts +611 -0
  63. data/node_modules/@types/node/globals.global.d.ts +1 -0
  64. data/node_modules/@types/node/http.d.ts +1921 -0
  65. data/node_modules/@types/node/http2.d.ts +2555 -0
  66. data/node_modules/@types/node/https.d.ts +544 -0
  67. data/node_modules/@types/node/index.d.ts +90 -0
  68. data/node_modules/@types/node/inspector.d.ts +3966 -0
  69. data/node_modules/@types/node/module.d.ts +301 -0
  70. data/node_modules/@types/node/net.d.ts +995 -0
  71. data/node_modules/@types/node/os.d.ts +495 -0
  72. data/node_modules/@types/node/package.json +217 -0
  73. data/node_modules/@types/node/path.d.ts +200 -0
  74. data/node_modules/@types/node/perf_hooks.d.ts +941 -0
  75. data/node_modules/@types/node/process.d.ts +1912 -0
  76. data/node_modules/@types/node/punycode.d.ts +117 -0
  77. data/node_modules/@types/node/querystring.d.ts +153 -0
  78. data/node_modules/@types/node/readline/promises.d.ts +150 -0
  79. data/node_modules/@types/node/readline.d.ts +540 -0
  80. data/node_modules/@types/node/repl.d.ts +430 -0
  81. data/node_modules/@types/node/sea.d.ts +153 -0
  82. data/node_modules/@types/node/sqlite.d.ts +213 -0
  83. data/node_modules/@types/node/stream/consumers.d.ts +12 -0
  84. data/node_modules/@types/node/stream/promises.d.ts +83 -0
  85. data/node_modules/@types/node/stream/web.d.ts +606 -0
  86. data/node_modules/@types/node/stream.d.ts +1726 -0
  87. data/node_modules/@types/node/string_decoder.d.ts +67 -0
  88. data/node_modules/@types/node/test.d.ts +2098 -0
  89. data/node_modules/@types/node/timers/promises.d.ts +97 -0
  90. data/node_modules/@types/node/timers.d.ts +240 -0
  91. data/node_modules/@types/node/tls.d.ts +1220 -0
  92. data/node_modules/@types/node/trace_events.d.ts +197 -0
  93. data/node_modules/@types/node/tty.d.ts +208 -0
  94. data/node_modules/@types/node/url.d.ts +969 -0
  95. data/node_modules/@types/node/util.d.ts +2301 -0
  96. data/node_modules/@types/node/v8.d.ts +808 -0
  97. data/node_modules/@types/node/vm.d.ts +922 -0
  98. data/node_modules/@types/node/wasi.d.ts +181 -0
  99. data/node_modules/@types/node/worker_threads.d.ts +712 -0
  100. data/node_modules/@types/node/zlib.d.ts +539 -0
  101. data/node_modules/fsevents/LICENSE +22 -0
  102. data/node_modules/fsevents/README.md +83 -0
  103. data/node_modules/fsevents/fsevents.d.ts +46 -0
  104. data/node_modules/fsevents/fsevents.js +82 -0
  105. data/node_modules/fsevents/fsevents.node +0 -0
  106. data/node_modules/fsevents/package.json +62 -0
  107. data/node_modules/playwright/.eslintrc.js +6 -0
  108. data/node_modules/playwright/LICENSE +202 -0
  109. data/node_modules/playwright/NOTICE +5 -0
  110. data/node_modules/playwright/README.md +169 -0
  111. data/node_modules/playwright/ThirdPartyNotices.txt +4356 -0
  112. data/node_modules/playwright/cli.js +19 -0
  113. data/node_modules/playwright/index.d.ts +17 -0
  114. data/node_modules/playwright/index.js +17 -0
  115. data/node_modules/playwright/index.mjs +18 -0
  116. data/node_modules/playwright/jsx-runtime.js +41 -0
  117. data/node_modules/playwright/jsx-runtime.mjs +21 -0
  118. data/node_modules/playwright/lib/common/config.js +256 -0
  119. data/node_modules/playwright/lib/common/configLoader.js +321 -0
  120. data/node_modules/playwright/lib/common/esmLoaderHost.js +93 -0
  121. data/node_modules/playwright/lib/common/expectBundle.js +27 -0
  122. data/node_modules/playwright/lib/common/expectBundleImpl.js +389 -0
  123. data/node_modules/playwright/lib/common/fixtures.js +323 -0
  124. data/node_modules/playwright/lib/common/globals.js +48 -0
  125. data/node_modules/playwright/lib/common/ipc.js +48 -0
  126. data/node_modules/playwright/lib/common/poolBuilder.js +79 -0
  127. data/node_modules/playwright/lib/common/process.js +140 -0
  128. data/node_modules/playwright/lib/common/suiteUtils.js +133 -0
  129. data/node_modules/playwright/lib/common/test.js +311 -0
  130. data/node_modules/playwright/lib/common/testLoader.js +102 -0
  131. data/node_modules/playwright/lib/common/testType.js +284 -0
  132. data/node_modules/playwright/lib/fsWatcher.js +69 -0
  133. data/node_modules/playwright/lib/index.js +888 -0
  134. data/node_modules/playwright/lib/internalsForTest.js +28 -0
  135. data/node_modules/playwright/lib/isomorphic/events.js +72 -0
  136. data/node_modules/playwright/lib/isomorphic/folders.js +25 -0
  137. data/node_modules/playwright/lib/isomorphic/stringInternPool.js +58 -0
  138. data/node_modules/playwright/lib/isomorphic/teleReceiver.js +504 -0
  139. data/node_modules/playwright/lib/isomorphic/teleSuiteUpdater.js +149 -0
  140. data/node_modules/playwright/lib/isomorphic/testServerConnection.js +210 -0
  141. data/node_modules/playwright/lib/isomorphic/testServerInterface.js +5 -0
  142. data/node_modules/playwright/lib/isomorphic/testTree.js +272 -0
  143. data/node_modules/playwright/lib/loader/loaderMain.js +58 -0
  144. data/node_modules/playwright/lib/matchers/expect.js +297 -0
  145. data/node_modules/playwright/lib/matchers/matcherHint.js +50 -0
  146. data/node_modules/playwright/lib/matchers/matchers.js +449 -0
  147. data/node_modules/playwright/lib/matchers/toBeTruthy.js +55 -0
  148. data/node_modules/playwright/lib/matchers/toEqual.js +57 -0
  149. data/node_modules/playwright/lib/matchers/toMatchSnapshot.js +383 -0
  150. data/node_modules/playwright/lib/matchers/toMatchText.js +76 -0
  151. data/node_modules/playwright/lib/plugins/gitCommitInfoPlugin.js +78 -0
  152. data/node_modules/playwright/lib/plugins/index.js +19 -0
  153. data/node_modules/playwright/lib/plugins/webServerPlugin.js +187 -0
  154. data/node_modules/playwright/lib/program.js +346 -0
  155. data/node_modules/playwright/lib/reporters/base.js +553 -0
  156. data/node_modules/playwright/lib/reporters/blob.js +133 -0
  157. data/node_modules/playwright/lib/reporters/dot.js +82 -0
  158. data/node_modules/playwright/lib/reporters/empty.js +42 -0
  159. data/node_modules/playwright/lib/reporters/github.js +115 -0
  160. data/node_modules/playwright/lib/reporters/html.js +623 -0
  161. data/node_modules/playwright/lib/reporters/internalReporter.js +123 -0
  162. data/node_modules/playwright/lib/reporters/json.js +243 -0
  163. data/node_modules/playwright/lib/reporters/junit.js +233 -0
  164. data/node_modules/playwright/lib/reporters/line.js +108 -0
  165. data/node_modules/playwright/lib/reporters/list.js +222 -0
  166. data/node_modules/playwright/lib/reporters/markdown.js +76 -0
  167. data/node_modules/playwright/lib/reporters/merge.js +477 -0
  168. data/node_modules/playwright/lib/reporters/multiplexer.js +90 -0
  169. data/node_modules/playwright/lib/reporters/reporterV2.js +118 -0
  170. data/node_modules/playwright/lib/reporters/teleEmitter.js +268 -0
  171. data/node_modules/playwright/lib/reporters/versions/blobV1.js +5 -0
  172. data/node_modules/playwright/lib/runner/dispatcher.js +532 -0
  173. data/node_modules/playwright/lib/runner/failureTracker.js +60 -0
  174. data/node_modules/playwright/lib/runner/loadUtils.js +308 -0
  175. data/node_modules/playwright/lib/runner/loaderHost.js +85 -0
  176. data/node_modules/playwright/lib/runner/processHost.js +175 -0
  177. data/node_modules/playwright/lib/runner/projectUtils.js +203 -0
  178. data/node_modules/playwright/lib/runner/reporters.js +151 -0
  179. data/node_modules/playwright/lib/runner/runner.js +179 -0
  180. data/node_modules/playwright/lib/runner/sigIntWatcher.js +100 -0
  181. data/node_modules/playwright/lib/runner/taskRunner.js +147 -0
  182. data/node_modules/playwright/lib/runner/tasks.js +407 -0
  183. data/node_modules/playwright/lib/runner/testGroups.js +136 -0
  184. data/node_modules/playwright/lib/runner/testServer.js +605 -0
  185. data/node_modules/playwright/lib/runner/uiModeReporter.js +31 -0
  186. data/node_modules/playwright/lib/runner/vcs.js +55 -0
  187. data/node_modules/playwright/lib/runner/watchMode.js +398 -0
  188. data/node_modules/playwright/lib/runner/workerHost.js +85 -0
  189. data/node_modules/playwright/lib/third_party/tsconfig-loader.js +134 -0
  190. data/node_modules/playwright/lib/transform/babelBundle.js +28 -0
  191. data/node_modules/playwright/lib/transform/babelBundleImpl.js +2032 -0
  192. data/node_modules/playwright/lib/transform/compilationCache.js +254 -0
  193. data/node_modules/playwright/lib/transform/esmLoader.js +117 -0
  194. data/node_modules/playwright/lib/transform/esmUtils.js +32 -0
  195. data/node_modules/playwright/lib/transform/portTransport.js +81 -0
  196. data/node_modules/playwright/lib/transform/transform.js +267 -0
  197. data/node_modules/playwright/lib/util.js +356 -0
  198. data/node_modules/playwright/lib/utilsBundle.js +28 -0
  199. data/node_modules/playwright/lib/utilsBundleImpl.js +102 -0
  200. data/node_modules/playwright/lib/worker/fixtureRunner.js +279 -0
  201. data/node_modules/playwright/lib/worker/testInfo.js +397 -0
  202. data/node_modules/playwright/lib/worker/testTracing.js +314 -0
  203. data/node_modules/playwright/lib/worker/timeoutManager.js +153 -0
  204. data/node_modules/playwright/lib/worker/workerMain.js +637 -0
  205. data/node_modules/playwright/node_modules/.bin/playwright-core +1 -0
  206. data/node_modules/playwright/package.json +66 -0
  207. data/node_modules/playwright/test.d.ts +18 -0
  208. data/node_modules/playwright/test.js +24 -0
  209. data/node_modules/playwright/test.mjs +33 -0
  210. data/node_modules/playwright/types/test.d.ts +8444 -0
  211. data/node_modules/playwright/types/testReporter.d.ts +749 -0
  212. data/node_modules/playwright-core/LICENSE +202 -0
  213. data/node_modules/playwright-core/NOTICE +5 -0
  214. data/node_modules/playwright-core/README.md +3 -0
  215. data/node_modules/playwright-core/ThirdPartyNotices.txt +1548 -0
  216. data/node_modules/playwright-core/bin/PrintDeps.exe +0 -0
  217. data/node_modules/playwright-core/bin/README.md +2 -0
  218. data/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  219. data/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +40 -0
  220. data/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  221. data/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  222. data/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +40 -0
  223. data/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  224. data/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  225. data/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +40 -0
  226. data/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  227. data/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  228. data/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +40 -0
  229. data/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  230. data/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  231. data/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +40 -0
  232. data/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  233. data/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  234. data/node_modules/playwright-core/browsers.json +53 -0
  235. data/node_modules/playwright-core/cli.js +18 -0
  236. data/node_modules/playwright-core/index.d.ts +17 -0
  237. data/node_modules/playwright-core/index.js +33 -0
  238. data/node_modules/playwright-core/index.mjs +28 -0
  239. data/node_modules/playwright-core/lib/androidServerImpl.js +69 -0
  240. data/node_modules/playwright-core/lib/browserServerImpl.js +92 -0
  241. data/node_modules/playwright-core/lib/cli/driver.js +95 -0
  242. data/node_modules/playwright-core/lib/cli/program.js +577 -0
  243. data/node_modules/playwright-core/lib/cli/programWithTestStub.js +67 -0
  244. data/node_modules/playwright-core/lib/client/accessibility.js +50 -0
  245. data/node_modules/playwright-core/lib/client/android.js +473 -0
  246. data/node_modules/playwright-core/lib/client/api.js +279 -0
  247. data/node_modules/playwright-core/lib/client/artifact.js +79 -0
  248. data/node_modules/playwright-core/lib/client/browser.js +145 -0
  249. data/node_modules/playwright-core/lib/client/browserContext.js +541 -0
  250. data/node_modules/playwright-core/lib/client/browserType.js +241 -0
  251. data/node_modules/playwright-core/lib/client/cdpSession.js +53 -0
  252. data/node_modules/playwright-core/lib/client/channelOwner.js +231 -0
  253. data/node_modules/playwright-core/lib/client/clientHelper.js +57 -0
  254. data/node_modules/playwright-core/lib/client/clientInstrumentation.js +50 -0
  255. data/node_modules/playwright-core/lib/client/clock.js +68 -0
  256. data/node_modules/playwright-core/lib/client/connection.js +330 -0
  257. data/node_modules/playwright-core/lib/client/consoleMessage.js +55 -0
  258. data/node_modules/playwright-core/lib/client/coverage.js +41 -0
  259. data/node_modules/playwright-core/lib/client/dialog.js +57 -0
  260. data/node_modules/playwright-core/lib/client/download.js +62 -0
  261. data/node_modules/playwright-core/lib/client/electron.js +135 -0
  262. data/node_modules/playwright-core/lib/client/elementHandle.js +321 -0
  263. data/node_modules/playwright-core/lib/client/errors.js +77 -0
  264. data/node_modules/playwright-core/lib/client/eventEmitter.js +314 -0
  265. data/node_modules/playwright-core/lib/client/events.js +94 -0
  266. data/node_modules/playwright-core/lib/client/fetch.js +396 -0
  267. data/node_modules/playwright-core/lib/client/fileChooser.js +45 -0
  268. data/node_modules/playwright-core/lib/client/frame.js +504 -0
  269. data/node_modules/playwright-core/lib/client/harRouter.js +99 -0
  270. data/node_modules/playwright-core/lib/client/input.js +111 -0
  271. data/node_modules/playwright-core/lib/client/jsHandle.js +129 -0
  272. data/node_modules/playwright-core/lib/client/jsonPipe.js +35 -0
  273. data/node_modules/playwright-core/lib/client/localUtils.js +35 -0
  274. data/node_modules/playwright-core/lib/client/locator.js +441 -0
  275. data/node_modules/playwright-core/lib/client/network.js +604 -0
  276. data/node_modules/playwright-core/lib/client/page.js +725 -0
  277. data/node_modules/playwright-core/lib/client/playwright.js +77 -0
  278. data/node_modules/playwright-core/lib/client/selectors.js +67 -0
  279. data/node_modules/playwright-core/lib/client/stream.js +54 -0
  280. data/node_modules/playwright-core/lib/client/tracing.js +138 -0
  281. data/node_modules/playwright-core/lib/client/types.js +24 -0
  282. data/node_modules/playwright-core/lib/client/video.js +51 -0
  283. data/node_modules/playwright-core/lib/client/waiter.js +158 -0
  284. data/node_modules/playwright-core/lib/client/webError.js +37 -0
  285. data/node_modules/playwright-core/lib/client/worker.js +71 -0
  286. data/node_modules/playwright-core/lib/client/writableStream.js +54 -0
  287. data/node_modules/playwright-core/lib/common/socksProxy.js +569 -0
  288. data/node_modules/playwright-core/lib/common/timeoutSettings.js +73 -0
  289. data/node_modules/playwright-core/lib/common/types.js +5 -0
  290. data/node_modules/playwright-core/lib/generated/clockSource.js +7 -0
  291. data/node_modules/playwright-core/lib/generated/consoleApiSource.js +7 -0
  292. data/node_modules/playwright-core/lib/generated/injectedScriptSource.js +7 -0
  293. data/node_modules/playwright-core/lib/generated/recorderSource.js +7 -0
  294. data/node_modules/playwright-core/lib/generated/utilityScriptSource.js +7 -0
  295. data/node_modules/playwright-core/lib/image_tools/colorUtils.js +98 -0
  296. data/node_modules/playwright-core/lib/image_tools/compare.js +108 -0
  297. data/node_modules/playwright-core/lib/image_tools/imageChannel.js +70 -0
  298. data/node_modules/playwright-core/lib/image_tools/stats.js +102 -0
  299. data/node_modules/playwright-core/lib/inProcessFactory.js +54 -0
  300. data/node_modules/playwright-core/lib/inprocess.js +20 -0
  301. data/node_modules/playwright-core/lib/outofprocess.js +67 -0
  302. data/node_modules/playwright-core/lib/protocol/debug.js +27 -0
  303. data/node_modules/playwright-core/lib/protocol/serializers.js +173 -0
  304. data/node_modules/playwright-core/lib/protocol/transport.js +82 -0
  305. data/node_modules/playwright-core/lib/protocol/validator.js +2694 -0
  306. data/node_modules/playwright-core/lib/protocol/validatorPrimitives.js +139 -0
  307. data/node_modules/playwright-core/lib/remote/playwrightConnection.js +274 -0
  308. data/node_modules/playwright-core/lib/remote/playwrightServer.js +110 -0
  309. data/node_modules/playwright-core/lib/server/accessibility.js +62 -0
  310. data/node_modules/playwright-core/lib/server/android/android.js +441 -0
  311. data/node_modules/playwright-core/lib/server/android/backendAdb.js +172 -0
  312. data/node_modules/playwright-core/lib/server/artifact.js +104 -0
  313. data/node_modules/playwright-core/lib/server/bidi/bidiBrowser.js +296 -0
  314. data/node_modules/playwright-core/lib/server/bidi/bidiConnection.js +206 -0
  315. data/node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js +162 -0
  316. data/node_modules/playwright-core/lib/server/bidi/bidiFirefox.js +110 -0
  317. data/node_modules/playwright-core/lib/server/bidi/bidiInput.js +174 -0
  318. data/node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js +304 -0
  319. data/node_modules/playwright-core/lib/server/bidi/bidiPage.js +456 -0
  320. data/node_modules/playwright-core/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  321. data/node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  322. data/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  323. data/node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  324. data/node_modules/playwright-core/lib/server/browser.js +137 -0
  325. data/node_modules/playwright-core/lib/server/browserContext.js +684 -0
  326. data/node_modules/playwright-core/lib/server/browserType.js +307 -0
  327. data/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  328. data/node_modules/playwright-core/lib/server/chromium/chromium.js +362 -0
  329. data/node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js +44 -0
  330. data/node_modules/playwright-core/lib/server/chromium/crAccessibility.js +237 -0
  331. data/node_modules/playwright-core/lib/server/chromium/crBrowser.js +515 -0
  332. data/node_modules/playwright-core/lib/server/chromium/crConnection.js +228 -0
  333. data/node_modules/playwright-core/lib/server/chromium/crCoverage.js +246 -0
  334. data/node_modules/playwright-core/lib/server/chromium/crDevTools.js +104 -0
  335. data/node_modules/playwright-core/lib/server/chromium/crDragDrop.js +143 -0
  336. data/node_modules/playwright-core/lib/server/chromium/crExecutionContext.js +156 -0
  337. data/node_modules/playwright-core/lib/server/chromium/crInput.js +171 -0
  338. data/node_modules/playwright-core/lib/server/chromium/crNetworkManager.js +767 -0
  339. data/node_modules/playwright-core/lib/server/chromium/crPage.js +1128 -0
  340. data/node_modules/playwright-core/lib/server/chromium/crPdf.js +153 -0
  341. data/node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js +133 -0
  342. data/node_modules/playwright-core/lib/server/chromium/crServiceWorker.js +112 -0
  343. data/node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js +145 -0
  344. data/node_modules/playwright-core/lib/server/chromium/videoRecorder.js +155 -0
  345. data/node_modules/playwright-core/lib/server/clock.js +125 -0
  346. data/node_modules/playwright-core/lib/server/codegen/csharp.js +299 -0
  347. data/node_modules/playwright-core/lib/server/codegen/java.js +235 -0
  348. data/node_modules/playwright-core/lib/server/codegen/javascript.js +223 -0
  349. data/node_modules/playwright-core/lib/server/codegen/jsonl.js +47 -0
  350. data/node_modules/playwright-core/lib/server/codegen/language.js +76 -0
  351. data/node_modules/playwright-core/lib/server/codegen/languages.js +30 -0
  352. data/node_modules/playwright-core/lib/server/codegen/python.js +265 -0
  353. data/node_modules/playwright-core/lib/server/codegen/types.js +5 -0
  354. data/node_modules/playwright-core/lib/server/console.js +57 -0
  355. data/node_modules/playwright-core/lib/server/cookieStore.js +112 -0
  356. data/node_modules/playwright-core/lib/server/debugController.js +234 -0
  357. data/node_modules/playwright-core/lib/server/debugger.js +132 -0
  358. data/node_modules/playwright-core/lib/server/deviceDescriptors.js +26 -0
  359. data/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +1669 -0
  360. data/node_modules/playwright-core/lib/server/dialog.js +70 -0
  361. data/node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js +193 -0
  362. data/node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js +118 -0
  363. data/node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js +351 -0
  364. data/node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js +170 -0
  365. data/node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  366. data/node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  367. data/node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  368. data/node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js +44 -0
  369. data/node_modules/playwright-core/lib/server/dispatchers/dispatcher.js +395 -0
  370. data/node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js +93 -0
  371. data/node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  372. data/node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js +286 -0
  373. data/node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
  374. data/node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  375. data/node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  376. data/node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js +221 -0
  377. data/node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js +358 -0
  378. data/node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js +106 -0
  379. data/node_modules/playwright-core/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  380. data/node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js +62 -0
  381. data/node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js +54 -0
  382. data/node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  383. data/node_modules/playwright-core/lib/server/dom.js +845 -0
  384. data/node_modules/playwright-core/lib/server/download.js +53 -0
  385. data/node_modules/playwright-core/lib/server/electron/electron.js +296 -0
  386. data/node_modules/playwright-core/lib/server/electron/loader.js +57 -0
  387. data/node_modules/playwright-core/lib/server/errors.js +68 -0
  388. data/node_modules/playwright-core/lib/server/fetch.js +660 -0
  389. data/node_modules/playwright-core/lib/server/fileChooser.js +42 -0
  390. data/node_modules/playwright-core/lib/server/fileUploadUtils.js +75 -0
  391. data/node_modules/playwright-core/lib/server/firefox/ffAccessibility.js +216 -0
  392. data/node_modules/playwright-core/lib/server/firefox/ffBrowser.js +458 -0
  393. data/node_modules/playwright-core/lib/server/firefox/ffConnection.js +168 -0
  394. data/node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js +138 -0
  395. data/node_modules/playwright-core/lib/server/firefox/ffInput.js +150 -0
  396. data/node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js +233 -0
  397. data/node_modules/playwright-core/lib/server/firefox/ffPage.js +556 -0
  398. data/node_modules/playwright-core/lib/server/firefox/firefox.js +110 -0
  399. data/node_modules/playwright-core/lib/server/formData.js +75 -0
  400. data/node_modules/playwright-core/lib/server/frameSelectors.js +171 -0
  401. data/node_modules/playwright-core/lib/server/frames.js +1654 -0
  402. data/node_modules/playwright-core/lib/server/har/harRecorder.js +139 -0
  403. data/node_modules/playwright-core/lib/server/har/harTracer.js +531 -0
  404. data/node_modules/playwright-core/lib/server/helper.js +103 -0
  405. data/node_modules/playwright-core/lib/server/index.js +114 -0
  406. data/node_modules/playwright-core/lib/server/input.js +311 -0
  407. data/node_modules/playwright-core/lib/server/instrumentation.js +70 -0
  408. data/node_modules/playwright-core/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  409. data/node_modules/playwright-core/lib/server/javascript.js +306 -0
  410. data/node_modules/playwright-core/lib/server/launchApp.js +91 -0
  411. data/node_modules/playwright-core/lib/server/macEditingCommands.js +139 -0
  412. data/node_modules/playwright-core/lib/server/network.js +617 -0
  413. data/node_modules/playwright-core/lib/server/page.js +825 -0
  414. data/node_modules/playwright-core/lib/server/pipeTransport.js +85 -0
  415. data/node_modules/playwright-core/lib/server/playwright.js +85 -0
  416. data/node_modules/playwright-core/lib/server/progress.js +102 -0
  417. data/node_modules/playwright-core/lib/server/protocolError.js +49 -0
  418. data/node_modules/playwright-core/lib/server/recorder/contextRecorder.js +316 -0
  419. data/node_modules/playwright-core/lib/server/recorder/recorderActions.js +5 -0
  420. data/node_modules/playwright-core/lib/server/recorder/recorderApp.js +190 -0
  421. data/node_modules/playwright-core/lib/server/recorder/recorderCollection.js +127 -0
  422. data/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +177 -0
  423. data/node_modules/playwright-core/lib/server/recorder/recorderUtils.js +71 -0
  424. data/node_modules/playwright-core/lib/server/recorder/throttledFile.js +46 -0
  425. data/node_modules/playwright-core/lib/server/recorder.js +324 -0
  426. data/node_modules/playwright-core/lib/server/registry/browserFetcher.js +168 -0
  427. data/node_modules/playwright-core/lib/server/registry/dependencies.js +322 -0
  428. data/node_modules/playwright-core/lib/server/registry/index.js +924 -0
  429. data/node_modules/playwright-core/lib/server/registry/nativeDeps.js +490 -0
  430. data/node_modules/playwright-core/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  431. data/node_modules/playwright-core/lib/server/screenshotter.js +348 -0
  432. data/node_modules/playwright-core/lib/server/selectors.js +73 -0
  433. data/node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js +328 -0
  434. data/node_modules/playwright-core/lib/server/socksInterceptor.js +100 -0
  435. data/node_modules/playwright-core/lib/server/trace/recorder/snapshotter.js +171 -0
  436. data/node_modules/playwright-core/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  437. data/node_modules/playwright-core/lib/server/trace/recorder/tracing.js +486 -0
  438. data/node_modules/playwright-core/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  439. data/node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js +216 -0
  440. data/node_modules/playwright-core/lib/server/transport.js +191 -0
  441. data/node_modules/playwright-core/lib/server/types.js +24 -0
  442. data/node_modules/playwright-core/lib/server/usKeyboardLayout.js +555 -0
  443. data/node_modules/playwright-core/lib/server/webkit/webkit.js +87 -0
  444. data/node_modules/playwright-core/lib/server/webkit/wkAccessibility.js +194 -0
  445. data/node_modules/playwright-core/lib/server/webkit/wkBrowser.js +328 -0
  446. data/node_modules/playwright-core/lib/server/webkit/wkConnection.js +173 -0
  447. data/node_modules/playwright-core/lib/server/webkit/wkExecutionContext.js +146 -0
  448. data/node_modules/playwright-core/lib/server/webkit/wkInput.js +169 -0
  449. data/node_modules/playwright-core/lib/server/webkit/wkInterceptableRequest.js +162 -0
  450. data/node_modules/playwright-core/lib/server/webkit/wkPage.js +1216 -0
  451. data/node_modules/playwright-core/lib/server/webkit/wkProvisionalPage.js +94 -0
  452. data/node_modules/playwright-core/lib/server/webkit/wkWorkers.js +104 -0
  453. data/node_modules/playwright-core/lib/third_party/diff_match_patch.js +2222 -0
  454. data/node_modules/playwright-core/lib/third_party/pixelmatch.js +255 -0
  455. data/node_modules/playwright-core/lib/utils/ascii.js +31 -0
  456. data/node_modules/playwright-core/lib/utils/comparators.js +171 -0
  457. data/node_modules/playwright-core/lib/utils/crypto.js +174 -0
  458. data/node_modules/playwright-core/lib/utils/debug.js +46 -0
  459. data/node_modules/playwright-core/lib/utils/debugLogger.js +91 -0
  460. data/node_modules/playwright-core/lib/utils/env.js +49 -0
  461. data/node_modules/playwright-core/lib/utils/eventsHelper.js +38 -0
  462. data/node_modules/playwright-core/lib/utils/expectUtils.js +33 -0
  463. data/node_modules/playwright-core/lib/utils/fileUtils.js +205 -0
  464. data/node_modules/playwright-core/lib/utils/happy-eyeballs.js +181 -0
  465. data/node_modules/playwright-core/lib/utils/headers.js +52 -0
  466. data/node_modules/playwright-core/lib/utils/hostPlatform.js +133 -0
  467. data/node_modules/playwright-core/lib/utils/httpServer.js +236 -0
  468. data/node_modules/playwright-core/lib/utils/index.js +368 -0
  469. data/node_modules/playwright-core/lib/utils/isomorphic/cssParser.js +250 -0
  470. data/node_modules/playwright-core/lib/utils/isomorphic/cssTokenizer.js +979 -0
  471. data/node_modules/playwright-core/lib/utils/isomorphic/locatorGenerators.js +651 -0
  472. data/node_modules/playwright-core/lib/utils/isomorphic/locatorParser.js +179 -0
  473. data/node_modules/playwright-core/lib/utils/isomorphic/locatorUtils.js +62 -0
  474. data/node_modules/playwright-core/lib/utils/isomorphic/mimeType.js +29 -0
  475. data/node_modules/playwright-core/lib/utils/isomorphic/selectorParser.js +397 -0
  476. data/node_modules/playwright-core/lib/utils/isomorphic/stringUtils.js +139 -0
  477. data/node_modules/playwright-core/lib/utils/isomorphic/traceUtils.js +39 -0
  478. data/node_modules/playwright-core/lib/utils/isomorphic/urlMatch.js +120 -0
  479. data/node_modules/playwright-core/lib/utils/linuxUtils.js +78 -0
  480. data/node_modules/playwright-core/lib/utils/manualPromise.js +109 -0
  481. data/node_modules/playwright-core/lib/utils/multimap.js +75 -0
  482. data/node_modules/playwright-core/lib/utils/network.js +160 -0
  483. data/node_modules/playwright-core/lib/utils/processLauncher.js +248 -0
  484. data/node_modules/playwright-core/lib/utils/profiler.js +53 -0
  485. data/node_modules/playwright-core/lib/utils/rtti.js +44 -0
  486. data/node_modules/playwright-core/lib/utils/semaphore.js +51 -0
  487. data/node_modules/playwright-core/lib/utils/spawnAsync.js +45 -0
  488. data/node_modules/playwright-core/lib/utils/stackTrace.js +121 -0
  489. data/node_modules/playwright-core/lib/utils/task.js +58 -0
  490. data/node_modules/playwright-core/lib/utils/time.js +37 -0
  491. data/node_modules/playwright-core/lib/utils/timeoutRunner.js +66 -0
  492. data/node_modules/playwright-core/lib/utils/traceUtils.js +44 -0
  493. data/node_modules/playwright-core/lib/utils/userAgent.js +105 -0
  494. data/node_modules/playwright-core/lib/utils/wsServer.js +127 -0
  495. data/node_modules/playwright-core/lib/utils/zipFile.js +75 -0
  496. data/node_modules/playwright-core/lib/utils/zones.js +62 -0
  497. data/node_modules/playwright-core/lib/utilsBundle.js +82 -0
  498. data/node_modules/playwright-core/lib/utilsBundleImpl/index.js +53 -0
  499. data/node_modules/playwright-core/lib/utilsBundleImpl/xdg-open +1066 -0
  500. data/node_modules/playwright-core/lib/vite/htmlReport/index.html +66 -0
  501. data/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-aW6Vz3gf.js +24 -0
  502. data/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  503. data/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  504. data/node_modules/playwright-core/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
  505. data/node_modules/playwright-core/lib/vite/recorder/assets/index-DCpXOVIh.js +47 -0
  506. data/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  507. data/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  508. data/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-eFKCUIu2.js +24 -0
  509. data/node_modules/playwright-core/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  510. data/node_modules/playwright-core/lib/vite/traceViewer/assets/workbench-D0cirtfA.js +72 -0
  511. data/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  512. data/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  513. data/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  514. data/node_modules/playwright-core/lib/vite/traceViewer/embedded.BkuvsLJp.js +2 -0
  515. data/node_modules/playwright-core/lib/vite/traceViewer/embedded.html +16 -0
  516. data/node_modules/playwright-core/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  517. data/node_modules/playwright-core/lib/vite/traceViewer/index.C968kAiC.js +2 -0
  518. data/node_modules/playwright-core/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  519. data/node_modules/playwright-core/lib/vite/traceViewer/index.html +27 -0
  520. data/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  521. data/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
  522. data/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -0
  523. data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.BkFnr4V0.js +10 -0
  524. data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
  525. data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
  526. data/node_modules/playwright-core/lib/vite/traceViewer/workbench.DjbIuxix.css +1 -0
  527. data/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  528. data/node_modules/playwright-core/lib/zipBundle.js +25 -0
  529. data/node_modules/playwright-core/lib/zipBundleImpl.js +5 -0
  530. data/node_modules/playwright-core/package.json +44 -0
  531. data/node_modules/playwright-core/types/protocol.d.ts +21500 -0
  532. data/node_modules/playwright-core/types/structs.d.ts +45 -0
  533. data/node_modules/playwright-core/types/types.d.ts +21431 -0
  534. data/node_modules/undici-types/LICENSE +21 -0
  535. data/node_modules/undici-types/README.md +6 -0
  536. data/node_modules/undici-types/agent.d.ts +31 -0
  537. data/node_modules/undici-types/api.d.ts +43 -0
  538. data/node_modules/undici-types/balanced-pool.d.ts +29 -0
  539. data/node_modules/undici-types/cache.d.ts +36 -0
  540. data/node_modules/undici-types/client.d.ts +108 -0
  541. data/node_modules/undici-types/connector.d.ts +34 -0
  542. data/node_modules/undici-types/content-type.d.ts +21 -0
  543. data/node_modules/undici-types/cookies.d.ts +28 -0
  544. data/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  545. data/node_modules/undici-types/dispatcher.d.ts +255 -0
  546. data/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  547. data/node_modules/undici-types/errors.d.ts +149 -0
  548. data/node_modules/undici-types/eventsource.d.ts +63 -0
  549. data/node_modules/undici-types/fetch.d.ts +209 -0
  550. data/node_modules/undici-types/file.d.ts +39 -0
  551. data/node_modules/undici-types/filereader.d.ts +54 -0
  552. data/node_modules/undici-types/formdata.d.ts +108 -0
  553. data/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  554. data/node_modules/undici-types/global-origin.d.ts +7 -0
  555. data/node_modules/undici-types/handlers.d.ts +15 -0
  556. data/node_modules/undici-types/header.d.ts +4 -0
  557. data/node_modules/undici-types/index.d.ts +71 -0
  558. data/node_modules/undici-types/interceptors.d.ts +15 -0
  559. data/node_modules/undici-types/mock-agent.d.ts +50 -0
  560. data/node_modules/undici-types/mock-client.d.ts +25 -0
  561. data/node_modules/undici-types/mock-errors.d.ts +12 -0
  562. data/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  563. data/node_modules/undici-types/mock-pool.d.ts +25 -0
  564. data/node_modules/undici-types/package.json +55 -0
  565. data/node_modules/undici-types/patch.d.ts +71 -0
  566. data/node_modules/undici-types/pool-stats.d.ts +19 -0
  567. data/node_modules/undici-types/pool.d.ts +39 -0
  568. data/node_modules/undici-types/proxy-agent.d.ts +28 -0
  569. data/node_modules/undici-types/readable.d.ts +60 -0
  570. data/node_modules/undici-types/retry-agent.d.ts +8 -0
  571. data/node_modules/undici-types/retry-handler.d.ts +116 -0
  572. data/node_modules/undici-types/util.d.ts +18 -0
  573. data/node_modules/undici-types/webidl.d.ts +222 -0
  574. data/node_modules/undici-types/websocket.d.ts +152 -0
  575. data/pokeedex.gemspec +32 -0
  576. data/spec/fixtures/pokemon_com/responses/GET-200-bulbasaur.html +2262 -0
  577. data/spec/fixtures/pokemon_com/responses/GET-404-not-found.html +808 -0
  578. data/spec/pokeedex/configuration_spec.rb +37 -0
  579. data/spec/pokeedex/database_spec.rb +21 -0
  580. data/spec/pokeedex/exceptions_spec.rb +11 -0
  581. data/spec/pokeedex/pokemon/base_spec.rb +15 -0
  582. data/spec/pokeedex/pokemon/decorators/base_spec.rb +63 -0
  583. data/spec/pokeedex/pokemon/model/base_spec.rb +36 -0
  584. data/spec/pokeedex/pokemon/scrapper/fetchers/base_spec.rb +36 -0
  585. data/spec/pokeedex/pokemon/scrapper/parsers/base_spec.rb +49 -0
  586. data/spec/pokeedex/pokemon/scrapper/pokedex_spec.rb +71 -0
  587. data/spec/pokeedex/pokemon/searcher/base.rb +81 -0
  588. data/spec/pokeedex_spec.rb +7 -0
  589. data/spec/spec_helper.rb +42 -0
  590. data/yarn.lock +41 -0
  591. metadata +731 -0
@@ -0,0 +1,924 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Registry = void 0;
7
+ exports.browserDirectoryToMarkerFilePath = browserDirectoryToMarkerFilePath;
8
+ exports.buildPlaywrightCLICommand = buildPlaywrightCLICommand;
9
+ exports.findChromiumChannel = findChromiumChannel;
10
+ exports.installBrowsersForNpmInstall = installBrowsersForNpmInstall;
11
+ exports.installDefaultBrowsersForNpmInstall = installDefaultBrowsersForNpmInstall;
12
+ exports.registryDirectory = exports.registry = void 0;
13
+ Object.defineProperty(exports, "writeDockerVersion", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _dependencies.writeDockerVersion;
17
+ }
18
+ });
19
+ var os = _interopRequireWildcard(require("os"));
20
+ var _path = _interopRequireDefault(require("path"));
21
+ var util = _interopRequireWildcard(require("util"));
22
+ var fs = _interopRequireWildcard(require("fs"));
23
+ var _utilsBundle = require("../../utilsBundle");
24
+ var _network = require("../../utils/network");
25
+ var _userAgent = require("../../utils/userAgent");
26
+ var _utils = require("../../utils");
27
+ var _fileUtils = require("../../utils/fileUtils");
28
+ var _hostPlatform = require("../../utils/hostPlatform");
29
+ var _spawnAsync = require("../../utils/spawnAsync");
30
+ var _dependencies = require("./dependencies");
31
+ var _browserFetcher = require("./browserFetcher");
32
+ var _debugLogger = require("../../utils/debugLogger");
33
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
35
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
36
+ /**
37
+ * Copyright 2017 Google Inc. All rights reserved.
38
+ * Modifications copyright (c) Microsoft Corporation.
39
+ *
40
+ * Licensed under the Apache License, Version 2.0 (the "License");
41
+ * you may not use this file except in compliance with the License.
42
+ * You may obtain a copy of the License at
43
+ *
44
+ * http://www.apache.org/licenses/LICENSE-2.0
45
+ *
46
+ * Unless required by applicable law or agreed to in writing, software
47
+ * distributed under the License is distributed on an "AS IS" BASIS,
48
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
49
+ * See the License for the specific language governing permissions and
50
+ * limitations under the License.
51
+ */
52
+
53
+ const PACKAGE_PATH = _path.default.join(__dirname, '..', '..', '..');
54
+ const BIN_PATH = _path.default.join(__dirname, '..', '..', '..', 'bin');
55
+ const PLAYWRIGHT_CDN_MIRRORS = ['https://playwright.azureedge.net', 'https://playwright-akamai.azureedge.net', 'https://playwright-verizon.azureedge.net'];
56
+ if (process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
57
+ for (let i = 0; i < PLAYWRIGHT_CDN_MIRRORS.length; i++) {
58
+ const cdn = PLAYWRIGHT_CDN_MIRRORS[i];
59
+ if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) PLAYWRIGHT_CDN_MIRRORS[i] = cdn + '.does-not-resolve.playwright.dev';
60
+ }
61
+ }
62
+ const EXECUTABLE_PATHS = {
63
+ 'chromium': {
64
+ 'linux': ['chrome-linux', 'chrome'],
65
+ 'mac': ['chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium'],
66
+ 'win': ['chrome-win', 'chrome.exe']
67
+ },
68
+ 'firefox': {
69
+ 'linux': ['firefox', 'firefox'],
70
+ 'mac': ['firefox', 'Nightly.app', 'Contents', 'MacOS', 'firefox'],
71
+ 'win': ['firefox', 'firefox.exe']
72
+ },
73
+ 'webkit': {
74
+ 'linux': ['pw_run.sh'],
75
+ 'mac': ['pw_run.sh'],
76
+ 'win': ['Playwright.exe']
77
+ },
78
+ 'ffmpeg': {
79
+ 'linux': ['ffmpeg-linux'],
80
+ 'mac': ['ffmpeg-mac'],
81
+ 'win': ['ffmpeg-win64.exe']
82
+ }
83
+ };
84
+ const DOWNLOAD_PATHS = {
85
+ 'chromium': {
86
+ '<unknown>': undefined,
87
+ 'ubuntu18.04-x64': undefined,
88
+ 'ubuntu20.04-x64': 'builds/chromium/%s/chromium-linux.zip',
89
+ 'ubuntu22.04-x64': 'builds/chromium/%s/chromium-linux.zip',
90
+ 'ubuntu24.04-x64': 'builds/chromium/%s/chromium-linux.zip',
91
+ 'ubuntu18.04-arm64': undefined,
92
+ 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
93
+ 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
94
+ 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
95
+ 'debian11-x64': 'builds/chromium/%s/chromium-linux.zip',
96
+ 'debian11-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
97
+ 'debian12-x64': 'builds/chromium/%s/chromium-linux.zip',
98
+ 'debian12-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
99
+ 'mac10.13': 'builds/chromium/%s/chromium-mac.zip',
100
+ 'mac10.14': 'builds/chromium/%s/chromium-mac.zip',
101
+ 'mac10.15': 'builds/chromium/%s/chromium-mac.zip',
102
+ 'mac11': 'builds/chromium/%s/chromium-mac.zip',
103
+ 'mac11-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
104
+ 'mac12': 'builds/chromium/%s/chromium-mac.zip',
105
+ 'mac12-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
106
+ 'mac13': 'builds/chromium/%s/chromium-mac.zip',
107
+ 'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
108
+ 'mac14': 'builds/chromium/%s/chromium-mac.zip',
109
+ 'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
110
+ 'win64': 'builds/chromium/%s/chromium-win64.zip'
111
+ },
112
+ 'chromium-tip-of-tree': {
113
+ '<unknown>': undefined,
114
+ 'ubuntu18.04-x64': undefined,
115
+ 'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
116
+ 'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
117
+ 'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
118
+ 'ubuntu18.04-arm64': undefined,
119
+ 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
120
+ 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
121
+ 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
122
+ 'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
123
+ 'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
124
+ 'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
125
+ 'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
126
+ 'mac10.13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
127
+ 'mac10.14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
128
+ 'mac10.15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
129
+ 'mac11': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
130
+ 'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
131
+ 'mac12': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
132
+ 'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
133
+ 'mac13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
134
+ 'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
135
+ 'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
136
+ 'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
137
+ 'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip'
138
+ },
139
+ 'firefox': {
140
+ '<unknown>': undefined,
141
+ 'ubuntu18.04-x64': undefined,
142
+ 'ubuntu20.04-x64': 'builds/firefox/%s/firefox-ubuntu-20.04.zip',
143
+ 'ubuntu22.04-x64': 'builds/firefox/%s/firefox-ubuntu-22.04.zip',
144
+ 'ubuntu24.04-x64': 'builds/firefox/%s/firefox-ubuntu-24.04.zip',
145
+ 'ubuntu18.04-arm64': undefined,
146
+ 'ubuntu20.04-arm64': 'builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip',
147
+ 'ubuntu22.04-arm64': 'builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip',
148
+ 'ubuntu24.04-arm64': 'builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip',
149
+ 'debian11-x64': 'builds/firefox/%s/firefox-debian-11.zip',
150
+ 'debian11-arm64': 'builds/firefox/%s/firefox-debian-11-arm64.zip',
151
+ 'debian12-x64': 'builds/firefox/%s/firefox-debian-12.zip',
152
+ 'debian12-arm64': 'builds/firefox/%s/firefox-debian-12-arm64.zip',
153
+ 'mac10.13': 'builds/firefox/%s/firefox-mac.zip',
154
+ 'mac10.14': 'builds/firefox/%s/firefox-mac.zip',
155
+ 'mac10.15': 'builds/firefox/%s/firefox-mac.zip',
156
+ 'mac11': 'builds/firefox/%s/firefox-mac.zip',
157
+ 'mac11-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
158
+ 'mac12': 'builds/firefox/%s/firefox-mac.zip',
159
+ 'mac12-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
160
+ 'mac13': 'builds/firefox/%s/firefox-mac.zip',
161
+ 'mac13-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
162
+ 'mac14': 'builds/firefox/%s/firefox-mac.zip',
163
+ 'mac14-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip',
164
+ 'win64': 'builds/firefox/%s/firefox-win64.zip'
165
+ },
166
+ 'firefox-beta': {
167
+ '<unknown>': undefined,
168
+ 'ubuntu18.04-x64': undefined,
169
+ 'ubuntu20.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip',
170
+ 'ubuntu22.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip',
171
+ 'ubuntu24.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip',
172
+ 'ubuntu18.04-arm64': undefined,
173
+ 'ubuntu20.04-arm64': undefined,
174
+ 'ubuntu22.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04-arm64.zip',
175
+ 'ubuntu24.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04-arm64.zip',
176
+ 'debian11-x64': 'builds/firefox-beta/%s/firefox-beta-debian-11.zip',
177
+ 'debian11-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip',
178
+ 'debian12-x64': 'builds/firefox-beta/%s/firefox-beta-debian-12.zip',
179
+ 'debian12-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip',
180
+ 'mac10.13': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
181
+ 'mac10.14': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
182
+ 'mac10.15': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
183
+ 'mac11': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
184
+ 'mac11-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
185
+ 'mac12': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
186
+ 'mac12-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
187
+ 'mac13': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
188
+ 'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
189
+ 'mac14': 'builds/firefox-beta/%s/firefox-beta-mac.zip',
190
+ 'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip',
191
+ 'win64': 'builds/firefox-beta/%s/firefox-beta-win64.zip'
192
+ },
193
+ 'webkit': {
194
+ '<unknown>': undefined,
195
+ 'ubuntu18.04-x64': undefined,
196
+ 'ubuntu20.04-x64': 'builds/webkit/%s/webkit-ubuntu-20.04.zip',
197
+ 'ubuntu22.04-x64': 'builds/webkit/%s/webkit-ubuntu-22.04.zip',
198
+ 'ubuntu24.04-x64': 'builds/webkit/%s/webkit-ubuntu-24.04.zip',
199
+ 'ubuntu18.04-arm64': undefined,
200
+ 'ubuntu20.04-arm64': 'builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip',
201
+ 'ubuntu22.04-arm64': 'builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip',
202
+ 'ubuntu24.04-arm64': 'builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip',
203
+ 'debian11-x64': 'builds/webkit/%s/webkit-debian-11.zip',
204
+ 'debian11-arm64': 'builds/webkit/%s/webkit-debian-11-arm64.zip',
205
+ 'debian12-x64': 'builds/webkit/%s/webkit-debian-12.zip',
206
+ 'debian12-arm64': 'builds/webkit/%s/webkit-debian-12-arm64.zip',
207
+ 'mac10.13': undefined,
208
+ 'mac10.14': 'builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip',
209
+ 'mac10.15': 'builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip',
210
+ 'mac11': 'builds/webkit/%s/webkit-mac-11.zip',
211
+ 'mac11-arm64': 'builds/webkit/%s/webkit-mac-11-arm64.zip',
212
+ 'mac12': 'builds/webkit/%s/webkit-mac-12.zip',
213
+ 'mac12-arm64': 'builds/webkit/%s/webkit-mac-12-arm64.zip',
214
+ 'mac13': 'builds/webkit/%s/webkit-mac-13.zip',
215
+ 'mac13-arm64': 'builds/webkit/%s/webkit-mac-13-arm64.zip',
216
+ 'mac14': 'builds/webkit/%s/webkit-mac-14.zip',
217
+ 'mac14-arm64': 'builds/webkit/%s/webkit-mac-14-arm64.zip',
218
+ 'win64': 'builds/webkit/%s/webkit-win64.zip'
219
+ },
220
+ 'ffmpeg': {
221
+ '<unknown>': undefined,
222
+ 'ubuntu18.04-x64': undefined,
223
+ 'ubuntu20.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',
224
+ 'ubuntu22.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',
225
+ 'ubuntu24.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',
226
+ 'ubuntu18.04-arm64': undefined,
227
+ 'ubuntu20.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',
228
+ 'ubuntu22.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',
229
+ 'ubuntu24.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',
230
+ 'debian11-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',
231
+ 'debian11-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',
232
+ 'debian12-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip',
233
+ 'debian12-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip',
234
+ 'mac10.13': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
235
+ 'mac10.14': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
236
+ 'mac10.15': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
237
+ 'mac11': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
238
+ 'mac11-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
239
+ 'mac12': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
240
+ 'mac12-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
241
+ 'mac13': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
242
+ 'mac13-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
243
+ 'mac14': 'builds/ffmpeg/%s/ffmpeg-mac.zip',
244
+ 'mac14-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
245
+ 'win64': 'builds/ffmpeg/%s/ffmpeg-win64.zip'
246
+ },
247
+ 'android': {
248
+ '<unknown>': 'builds/android/%s/android.zip',
249
+ 'ubuntu18.04-x64': undefined,
250
+ 'ubuntu20.04-x64': 'builds/android/%s/android.zip',
251
+ 'ubuntu22.04-x64': 'builds/android/%s/android.zip',
252
+ 'ubuntu24.04-x64': 'builds/android/%s/android.zip',
253
+ 'ubuntu18.04-arm64': undefined,
254
+ 'ubuntu20.04-arm64': 'builds/android/%s/android.zip',
255
+ 'ubuntu22.04-arm64': 'builds/android/%s/android.zip',
256
+ 'ubuntu24.04-arm64': 'builds/android/%s/android.zip',
257
+ 'debian11-x64': 'builds/android/%s/android.zip',
258
+ 'debian11-arm64': 'builds/android/%s/android.zip',
259
+ 'debian12-x64': 'builds/android/%s/android.zip',
260
+ 'debian12-arm64': 'builds/android/%s/android.zip',
261
+ 'mac10.13': 'builds/android/%s/android.zip',
262
+ 'mac10.14': 'builds/android/%s/android.zip',
263
+ 'mac10.15': 'builds/android/%s/android.zip',
264
+ 'mac11': 'builds/android/%s/android.zip',
265
+ 'mac11-arm64': 'builds/android/%s/android.zip',
266
+ 'mac12': 'builds/android/%s/android.zip',
267
+ 'mac12-arm64': 'builds/android/%s/android.zip',
268
+ 'mac13': 'builds/android/%s/android.zip',
269
+ 'mac13-arm64': 'builds/android/%s/android.zip',
270
+ 'mac14': 'builds/android/%s/android.zip',
271
+ 'mac14-arm64': 'builds/android/%s/android.zip',
272
+ 'win64': 'builds/android/%s/android.zip'
273
+ },
274
+ // TODO(bidi): implement downloads.
275
+ 'bidi': {}
276
+ };
277
+ const registryDirectory = exports.registryDirectory = (() => {
278
+ let result;
279
+ const envDefined = (0, _utils.getFromENV)('PLAYWRIGHT_BROWSERS_PATH');
280
+ if (envDefined === '0') {
281
+ result = _path.default.join(__dirname, '..', '..', '..', '.local-browsers');
282
+ } else if (envDefined) {
283
+ result = envDefined;
284
+ } else {
285
+ let cacheDirectory;
286
+ if (process.platform === 'linux') cacheDirectory = process.env.XDG_CACHE_HOME || _path.default.join(os.homedir(), '.cache');else if (process.platform === 'darwin') cacheDirectory = _path.default.join(os.homedir(), 'Library', 'Caches');else if (process.platform === 'win32') cacheDirectory = process.env.LOCALAPPDATA || _path.default.join(os.homedir(), 'AppData', 'Local');else throw new Error('Unsupported platform: ' + process.platform);
287
+ result = _path.default.join(cacheDirectory, 'ms-playwright');
288
+ }
289
+ if (!_path.default.isAbsolute(result)) {
290
+ // It is important to resolve to the absolute path:
291
+ // - for unzipping to work correctly;
292
+ // - so that registry directory matches between installation and execution.
293
+ // INIT_CWD points to the root of `npm/yarn install` and is probably what
294
+ // the user meant when typing the relative path.
295
+ result = _path.default.resolve((0, _utils.getFromENV)('INIT_CWD') || process.cwd(), result);
296
+ }
297
+ return result;
298
+ })();
299
+ function isBrowserDirectory(browserDirectory) {
300
+ const baseName = _path.default.basename(browserDirectory);
301
+ for (const browserName of allDownloadable) {
302
+ if (baseName.startsWith(browserName + '-')) return true;
303
+ }
304
+ return false;
305
+ }
306
+ function readDescriptors(browsersJSON) {
307
+ return browsersJSON['browsers'].map(obj => {
308
+ const name = obj.name;
309
+ const revisionOverride = (obj.revisionOverrides || {})[_hostPlatform.hostPlatform];
310
+ const revision = revisionOverride || obj.revision;
311
+ const browserDirectoryPrefix = revisionOverride ? `${name}_${_hostPlatform.hostPlatform}_special` : `${name}`;
312
+ const descriptor = {
313
+ name,
314
+ revision,
315
+ // We only put browser version for the supported operating systems.
316
+ browserVersion: revisionOverride ? undefined : obj.browserVersion,
317
+ installByDefault: !!obj.installByDefault,
318
+ // Method `isBrowserDirectory` determines directory to be browser iff
319
+ // it starts with some browser name followed by '-'. Some browser names
320
+ // are prefixes of others, e.g. 'webkit' is a prefix of `webkit-technology-preview`.
321
+ // To avoid older registries erroneously removing 'webkit-technology-preview', we have to
322
+ // ensure that browser folders to never include dashes inside.
323
+ dir: _path.default.join(registryDirectory, browserDirectoryPrefix.replace(/-/g, '_') + '-' + revision)
324
+ };
325
+ return descriptor;
326
+ });
327
+ }
328
+ const allDownloadable = ['chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree'];
329
+ class Registry {
330
+ constructor(browsersJSON) {
331
+ this._executables = void 0;
332
+ const descriptors = readDescriptors(browsersJSON);
333
+ const findExecutablePath = (dir, name) => {
334
+ let tokens = undefined;
335
+ if (process.platform === 'linux') tokens = EXECUTABLE_PATHS[name]['linux'];else if (process.platform === 'darwin') tokens = EXECUTABLE_PATHS[name]['mac'];else if (process.platform === 'win32') tokens = EXECUTABLE_PATHS[name]['win'];
336
+ return tokens ? _path.default.join(dir, ...tokens) : undefined;
337
+ };
338
+ const executablePathOrDie = (name, e, installByDefault, sdkLanguage) => {
339
+ if (!e) throw new Error(`${name} is not supported on ${_hostPlatform.hostPlatform}`);
340
+ const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install${installByDefault ? '' : ' ' + name}`);
341
+ if (!(0, _fileUtils.canAccessFile)(e)) {
342
+ const currentDockerVersion = (0, _dependencies.readDockerVersionSync)();
343
+ const preferredDockerVersion = currentDockerVersion ? (0, _dependencies.dockerVersion)(currentDockerVersion.dockerImageNameTemplate) : null;
344
+ const isOutdatedDockerImage = currentDockerVersion && preferredDockerVersion && currentDockerVersion.dockerImageName !== preferredDockerVersion.dockerImageName;
345
+ const prettyMessage = isOutdatedDockerImage ? [`Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just updated to ${preferredDockerVersion.driverVersion}.`, `Please update docker image as well.`, `- current: ${currentDockerVersion.dockerImageName}`, `- required: ${preferredDockerVersion.dockerImageName}`, ``, `<3 Playwright Team`].join('\n') : [`Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just installed or updated.`, `Please run the following command to download new browser${installByDefault ? 's' : ''}:`, ``, ` ${installCommand}`, ``, `<3 Playwright Team`].join('\n');
346
+ throw new Error(`Executable doesn't exist at ${e}\n${(0, _utils.wrapInASCIIBox)(prettyMessage, 1)}`);
347
+ }
348
+ return e;
349
+ };
350
+ this._executables = [];
351
+ const chromium = descriptors.find(d => d.name === 'chromium');
352
+ const chromiumExecutable = findExecutablePath(chromium.dir, 'chromium');
353
+ this._executables.push({
354
+ type: 'browser',
355
+ name: 'chromium',
356
+ browserName: 'chromium',
357
+ directory: chromium.dir,
358
+ executablePath: () => chromiumExecutable,
359
+ executablePathOrDie: sdkLanguage => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage),
360
+ installType: chromium.installByDefault ? 'download-by-default' : 'download-on-demand',
361
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'chromium', chromium.dir, ['chrome-linux'], [], ['chrome-win']),
362
+ downloadURLs: this._downloadURLs(chromium),
363
+ browserVersion: chromium.browserVersion,
364
+ _install: () => this._downloadExecutable(chromium, chromiumExecutable),
365
+ _dependencyGroup: 'chromium',
366
+ _isHermeticInstallation: true
367
+ });
368
+ const chromiumTipOfTree = descriptors.find(d => d.name === 'chromium-tip-of-tree');
369
+ const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir, 'chromium');
370
+ this._executables.push({
371
+ type: 'tool',
372
+ name: 'chromium-tip-of-tree',
373
+ browserName: 'chromium',
374
+ directory: chromiumTipOfTree.dir,
375
+ executablePath: () => chromiumTipOfTreeExecutable,
376
+ executablePathOrDie: sdkLanguage => executablePathOrDie('chromium-tip-of-tree', chromiumTipOfTreeExecutable, chromiumTipOfTree.installByDefault, sdkLanguage),
377
+ installType: chromiumTipOfTree.installByDefault ? 'download-by-default' : 'download-on-demand',
378
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'chromium', chromiumTipOfTree.dir, ['chrome-linux'], [], ['chrome-win']),
379
+ downloadURLs: this._downloadURLs(chromiumTipOfTree),
380
+ browserVersion: chromiumTipOfTree.browserVersion,
381
+ _install: () => this._downloadExecutable(chromiumTipOfTree, chromiumTipOfTreeExecutable),
382
+ _dependencyGroup: 'chromium',
383
+ _isHermeticInstallation: true
384
+ });
385
+ this._executables.push(this._createChromiumChannel('chrome', {
386
+ 'linux': '/opt/google/chrome/chrome',
387
+ 'darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
388
+ 'win32': `\\Google\\Chrome\\Application\\chrome.exe`
389
+ }, () => this._installChromiumChannel('chrome', {
390
+ 'linux': 'reinstall_chrome_stable_linux.sh',
391
+ 'darwin': 'reinstall_chrome_stable_mac.sh',
392
+ 'win32': 'reinstall_chrome_stable_win.ps1'
393
+ })));
394
+ this._executables.push(this._createChromiumChannel('chrome-beta', {
395
+ 'linux': '/opt/google/chrome-beta/chrome',
396
+ 'darwin': '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta',
397
+ 'win32': `\\Google\\Chrome Beta\\Application\\chrome.exe`
398
+ }, () => this._installChromiumChannel('chrome-beta', {
399
+ 'linux': 'reinstall_chrome_beta_linux.sh',
400
+ 'darwin': 'reinstall_chrome_beta_mac.sh',
401
+ 'win32': 'reinstall_chrome_beta_win.ps1'
402
+ })));
403
+ this._executables.push(this._createChromiumChannel('chrome-dev', {
404
+ 'linux': '/opt/google/chrome-unstable/chrome',
405
+ 'darwin': '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev',
406
+ 'win32': `\\Google\\Chrome Dev\\Application\\chrome.exe`
407
+ }));
408
+ this._executables.push(this._createChromiumChannel('chrome-canary', {
409
+ 'linux': '',
410
+ 'darwin': '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
411
+ 'win32': `\\Google\\Chrome SxS\\Application\\chrome.exe`
412
+ }));
413
+ this._executables.push(this._createChromiumChannel('msedge', {
414
+ 'linux': '/opt/microsoft/msedge/msedge',
415
+ 'darwin': '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
416
+ 'win32': `\\Microsoft\\Edge\\Application\\msedge.exe`
417
+ }, () => this._installMSEdgeChannel('msedge', {
418
+ 'linux': 'reinstall_msedge_stable_linux.sh',
419
+ 'darwin': 'reinstall_msedge_stable_mac.sh',
420
+ 'win32': 'reinstall_msedge_stable_win.ps1'
421
+ })));
422
+ this._executables.push(this._createChromiumChannel('msedge-beta', {
423
+ 'linux': '/opt/microsoft/msedge-beta/msedge',
424
+ 'darwin': '/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta',
425
+ 'win32': `\\Microsoft\\Edge Beta\\Application\\msedge.exe`
426
+ }, () => this._installMSEdgeChannel('msedge-beta', {
427
+ 'darwin': 'reinstall_msedge_beta_mac.sh',
428
+ 'linux': 'reinstall_msedge_beta_linux.sh',
429
+ 'win32': 'reinstall_msedge_beta_win.ps1'
430
+ })));
431
+ this._executables.push(this._createChromiumChannel('msedge-dev', {
432
+ 'linux': '/opt/microsoft/msedge-dev/msedge',
433
+ 'darwin': '/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev',
434
+ 'win32': `\\Microsoft\\Edge Dev\\Application\\msedge.exe`
435
+ }, () => this._installMSEdgeChannel('msedge-dev', {
436
+ 'darwin': 'reinstall_msedge_dev_mac.sh',
437
+ 'linux': 'reinstall_msedge_dev_linux.sh',
438
+ 'win32': 'reinstall_msedge_dev_win.ps1'
439
+ })));
440
+ this._executables.push(this._createChromiumChannel('msedge-canary', {
441
+ 'linux': '',
442
+ 'darwin': '/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary',
443
+ 'win32': `\\Microsoft\\Edge SxS\\Application\\msedge.exe`
444
+ }));
445
+ this._executables.push(this._createBidiChannel('bidi-firefox-stable', {
446
+ 'linux': '/usr/bin/firefox',
447
+ 'darwin': '/Applications/Firefox.app/Contents/MacOS/firefox',
448
+ 'win32': '\\Mozilla Firefox\\firefox.exe'
449
+ }));
450
+ const firefox = descriptors.find(d => d.name === 'firefox');
451
+ const firefoxExecutable = findExecutablePath(firefox.dir, 'firefox');
452
+ this._executables.push({
453
+ type: 'browser',
454
+ name: 'firefox',
455
+ browserName: 'firefox',
456
+ directory: firefox.dir,
457
+ executablePath: () => firefoxExecutable,
458
+ executablePathOrDie: sdkLanguage => executablePathOrDie('firefox', firefoxExecutable, firefox.installByDefault, sdkLanguage),
459
+ installType: firefox.installByDefault ? 'download-by-default' : 'download-on-demand',
460
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'firefox', firefox.dir, ['firefox'], [], ['firefox']),
461
+ downloadURLs: this._downloadURLs(firefox),
462
+ browserVersion: firefox.browserVersion,
463
+ _install: () => this._downloadExecutable(firefox, firefoxExecutable),
464
+ _dependencyGroup: 'firefox',
465
+ _isHermeticInstallation: true
466
+ });
467
+ const firefoxBeta = descriptors.find(d => d.name === 'firefox-beta');
468
+ const firefoxBetaExecutable = findExecutablePath(firefoxBeta.dir, 'firefox');
469
+ this._executables.push({
470
+ type: 'tool',
471
+ name: 'firefox-beta',
472
+ browserName: 'firefox',
473
+ directory: firefoxBeta.dir,
474
+ executablePath: () => firefoxBetaExecutable,
475
+ executablePathOrDie: sdkLanguage => executablePathOrDie('firefox-beta', firefoxBetaExecutable, firefoxBeta.installByDefault, sdkLanguage),
476
+ installType: firefoxBeta.installByDefault ? 'download-by-default' : 'download-on-demand',
477
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'firefox', firefoxBeta.dir, ['firefox'], [], ['firefox']),
478
+ downloadURLs: this._downloadURLs(firefoxBeta),
479
+ browserVersion: firefoxBeta.browserVersion,
480
+ _install: () => this._downloadExecutable(firefoxBeta, firefoxBetaExecutable),
481
+ _dependencyGroup: 'firefox',
482
+ _isHermeticInstallation: true
483
+ });
484
+ const webkit = descriptors.find(d => d.name === 'webkit');
485
+ const webkitExecutable = findExecutablePath(webkit.dir, 'webkit');
486
+ const webkitLinuxLddDirectories = [_path.default.join('minibrowser-gtk'), _path.default.join('minibrowser-gtk', 'bin'), _path.default.join('minibrowser-gtk', 'lib'), _path.default.join('minibrowser-gtk', 'sys', 'lib'), _path.default.join('minibrowser-wpe'), _path.default.join('minibrowser-wpe', 'bin'), _path.default.join('minibrowser-wpe', 'lib'), _path.default.join('minibrowser-wpe', 'sys', 'lib')];
487
+ this._executables.push({
488
+ type: 'browser',
489
+ name: 'webkit',
490
+ browserName: 'webkit',
491
+ directory: webkit.dir,
492
+ executablePath: () => webkitExecutable,
493
+ executablePathOrDie: sdkLanguage => executablePathOrDie('webkit', webkitExecutable, webkit.installByDefault, sdkLanguage),
494
+ installType: webkit.installByDefault ? 'download-by-default' : 'download-on-demand',
495
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'webkit', webkit.dir, webkitLinuxLddDirectories, ['libGLESv2.so.2', 'libx264.so'], ['']),
496
+ downloadURLs: this._downloadURLs(webkit),
497
+ browserVersion: webkit.browserVersion,
498
+ _install: () => this._downloadExecutable(webkit, webkitExecutable),
499
+ _dependencyGroup: 'webkit',
500
+ _isHermeticInstallation: true
501
+ });
502
+ const ffmpeg = descriptors.find(d => d.name === 'ffmpeg');
503
+ const ffmpegExecutable = findExecutablePath(ffmpeg.dir, 'ffmpeg');
504
+ this._executables.push({
505
+ type: 'tool',
506
+ name: 'ffmpeg',
507
+ browserName: undefined,
508
+ directory: ffmpeg.dir,
509
+ executablePath: () => ffmpegExecutable,
510
+ executablePathOrDie: sdkLanguage => executablePathOrDie('ffmpeg', ffmpegExecutable, ffmpeg.installByDefault, sdkLanguage),
511
+ installType: ffmpeg.installByDefault ? 'download-by-default' : 'download-on-demand',
512
+ _validateHostRequirements: () => Promise.resolve(),
513
+ downloadURLs: this._downloadURLs(ffmpeg),
514
+ _install: () => this._downloadExecutable(ffmpeg, ffmpegExecutable),
515
+ _dependencyGroup: 'tools',
516
+ _isHermeticInstallation: true
517
+ });
518
+ const android = descriptors.find(d => d.name === 'android');
519
+ this._executables.push({
520
+ type: 'tool',
521
+ name: 'android',
522
+ browserName: undefined,
523
+ directory: android.dir,
524
+ executablePath: () => undefined,
525
+ executablePathOrDie: () => '',
526
+ installType: 'download-on-demand',
527
+ _validateHostRequirements: () => Promise.resolve(),
528
+ downloadURLs: this._downloadURLs(android),
529
+ _install: () => this._downloadExecutable(android),
530
+ _dependencyGroup: 'tools',
531
+ _isHermeticInstallation: true
532
+ });
533
+ this._executables.push({
534
+ type: 'browser',
535
+ name: 'bidi',
536
+ browserName: 'bidi',
537
+ directory: undefined,
538
+ executablePath: () => undefined,
539
+ executablePathOrDie: () => '',
540
+ installType: 'none',
541
+ _validateHostRequirements: () => Promise.resolve(),
542
+ downloadURLs: [],
543
+ _install: () => Promise.resolve(),
544
+ _dependencyGroup: 'tools',
545
+ _isHermeticInstallation: true
546
+ });
547
+ }
548
+ _createChromiumChannel(name, lookAt, install) {
549
+ const executablePath = (sdkLanguage, shouldThrow) => {
550
+ const suffix = lookAt[process.platform];
551
+ if (!suffix) {
552
+ if (shouldThrow) throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
553
+ return undefined;
554
+ }
555
+ const prefixes = process.platform === 'win32' ? [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']].filter(Boolean) : [''];
556
+ for (const prefix of prefixes) {
557
+ const executablePath = _path.default.join(prefix, suffix);
558
+ if ((0, _fileUtils.canAccessFile)(executablePath)) return executablePath;
559
+ }
560
+ if (!shouldThrow) return undefined;
561
+ const location = prefixes.length ? ` at ${_path.default.join(prefixes[0], suffix)}` : ``;
562
+ const installation = install ? `\nRun "${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}"` : '';
563
+ throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
564
+ };
565
+ return {
566
+ type: 'channel',
567
+ name,
568
+ browserName: 'chromium',
569
+ directory: undefined,
570
+ executablePath: sdkLanguage => executablePath(sdkLanguage, false),
571
+ executablePathOrDie: sdkLanguage => executablePath(sdkLanguage, true),
572
+ installType: install ? 'install-script' : 'none',
573
+ _validateHostRequirements: () => Promise.resolve(),
574
+ _isHermeticInstallation: false,
575
+ _install: install
576
+ };
577
+ }
578
+ _createBidiChannel(name, lookAt, install) {
579
+ const executablePath = (sdkLanguage, shouldThrow) => {
580
+ const suffix = lookAt[process.platform];
581
+ if (!suffix) {
582
+ if (shouldThrow) throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);
583
+ return undefined;
584
+ }
585
+ const prefixes = process.platform === 'win32' ? [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']].filter(Boolean) : [''];
586
+ for (const prefix of prefixes) {
587
+ const executablePath = _path.default.join(prefix, suffix);
588
+ if ((0, _fileUtils.canAccessFile)(executablePath)) return executablePath;
589
+ }
590
+ if (!shouldThrow) return undefined;
591
+ const location = prefixes.length ? ` at ${_path.default.join(prefixes[0], suffix)}` : ``;
592
+ const installation = install ? `\nRun "${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}"` : '';
593
+ throw new Error(`Firefox distribution '${name}' is not found${location}${installation}`);
594
+ };
595
+ return {
596
+ type: 'channel',
597
+ name,
598
+ browserName: 'bidi',
599
+ directory: undefined,
600
+ executablePath: sdkLanguage => executablePath(sdkLanguage, false),
601
+ executablePathOrDie: sdkLanguage => executablePath(sdkLanguage, true),
602
+ installType: install ? 'install-script' : 'none',
603
+ _validateHostRequirements: () => Promise.resolve(),
604
+ _isHermeticInstallation: false,
605
+ _install: install
606
+ };
607
+ }
608
+ executables() {
609
+ return this._executables;
610
+ }
611
+ findExecutable(name) {
612
+ return this._executables.find(b => b.name === name);
613
+ }
614
+ defaultExecutables() {
615
+ return this._executables.filter(e => e.installType === 'download-by-default');
616
+ }
617
+ _addRequirementsAndDedupe(executables) {
618
+ const set = new Set();
619
+ for (const executable of executables) {
620
+ set.add(executable);
621
+ if (executable.browserName === 'chromium') set.add(this.findExecutable('ffmpeg'));
622
+ }
623
+ return Array.from(set);
624
+ }
625
+ async _validateHostRequirements(sdkLanguage, browserName, browserDirectory, linuxLddDirectories, dlOpenLibraries, windowsExeAndDllDirectories) {
626
+ if (os.platform() === 'linux') return await (0, _dependencies.validateDependenciesLinux)(sdkLanguage, linuxLddDirectories.map(d => _path.default.join(browserDirectory, d)), dlOpenLibraries);
627
+ if (os.platform() === 'win32' && os.arch() === 'x64') return await (0, _dependencies.validateDependenciesWindows)(windowsExeAndDllDirectories.map(d => _path.default.join(browserDirectory, d)));
628
+ }
629
+ async installDeps(executablesToInstallDeps, dryRun) {
630
+ const executables = this._addRequirementsAndDedupe(executablesToInstallDeps);
631
+ const targets = new Set();
632
+ for (const executable of executables) {
633
+ if (executable._dependencyGroup) targets.add(executable._dependencyGroup);
634
+ }
635
+ targets.add('tools');
636
+ if (os.platform() === 'win32') return await (0, _dependencies.installDependenciesWindows)(targets, dryRun);
637
+ if (os.platform() === 'linux') return await (0, _dependencies.installDependenciesLinux)(targets, dryRun);
638
+ }
639
+ async install(executablesToInstall, forceReinstall) {
640
+ const executables = this._addRequirementsAndDedupe(executablesToInstall);
641
+ await fs.promises.mkdir(registryDirectory, {
642
+ recursive: true
643
+ });
644
+ const lockfilePath = _path.default.join(registryDirectory, '__dirlock');
645
+ const linksDir = _path.default.join(registryDirectory, '.links');
646
+ let releaseLock;
647
+ try {
648
+ releaseLock = await _utilsBundle.lockfile.lock(registryDirectory, {
649
+ retries: {
650
+ // Retry 20 times during 10 minutes with
651
+ // exponential back-off.
652
+ // See documentation at: https://www.npmjs.com/package/retry#retrytimeoutsoptions
653
+ retries: 20,
654
+ factor: 1.27579
655
+ },
656
+ onCompromised: err => {
657
+ throw new Error(`${err.message} Path: ${lockfilePath}`);
658
+ },
659
+ lockfilePath
660
+ });
661
+ // Create a link first, so that cache validation does not remove our own browsers.
662
+ await fs.promises.mkdir(linksDir, {
663
+ recursive: true
664
+ });
665
+ await fs.promises.writeFile(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
666
+
667
+ // Remove stale browsers.
668
+ await this._validateInstallationCache(linksDir);
669
+
670
+ // Install browsers for this package.
671
+ for (const executable of executables) {
672
+ if (!executable._install) throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);
673
+ const {
674
+ embedderName
675
+ } = (0, _userAgent.getEmbedderName)();
676
+ if (!(0, _utils.getAsBooleanFromENV)('CI') && !executable._isHermeticInstallation && !forceReinstall && executable.executablePath(embedderName)) {
677
+ const command = buildPlaywrightCLICommand(embedderName, 'install --force ' + executable.name);
678
+ throw new Error('\n' + (0, _utils.wrapInASCIIBox)([`ATTENTION: "${executable.name}" is already installed on the system!`, ``, `"${executable.name}" installation is not hermetic; installing newer version`, `requires *removal* of a current installation first.`, ``, `To *uninstall* current version and re-install latest "${executable.name}":`, ``, `- Close all running instances of "${executable.name}", if any`, `- Use "--force" to install browser:`, ``, ` ${command}`, ``, `<3 Playwright Team`].join('\n'), 1));
679
+ }
680
+ await executable._install();
681
+ }
682
+ } catch (e) {
683
+ if (e.code === 'ELOCKED') {
684
+ const rmCommand = process.platform === 'win32' ? 'rm -R' : 'rm -rf';
685
+ throw new Error('\n' + (0, _utils.wrapInASCIIBox)([`An active lockfile is found at:`, ``, ` ${lockfilePath}`, ``, `Either:`, `- wait a few minutes if other Playwright is installing browsers in parallel`, `- remove lock manually with:`, ``, ` ${rmCommand} ${lockfilePath}`, ``, `<3 Playwright Team`].join('\n'), 1));
686
+ } else {
687
+ throw e;
688
+ }
689
+ } finally {
690
+ if (releaseLock) await releaseLock();
691
+ }
692
+ }
693
+ async uninstall(all) {
694
+ const linksDir = _path.default.join(registryDirectory, '.links');
695
+ if (all) {
696
+ const links = await fs.promises.readdir(linksDir).catch(() => []);
697
+ for (const link of links) await fs.promises.unlink(_path.default.join(linksDir, link));
698
+ } else {
699
+ await fs.promises.unlink(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH))).catch(() => {});
700
+ }
701
+
702
+ // Remove stale browsers.
703
+ await this._validateInstallationCache(linksDir);
704
+ return {
705
+ numberOfBrowsersLeft: (await fs.promises.readdir(registryDirectory).catch(() => [])).filter(browserDirectory => isBrowserDirectory(browserDirectory)).length
706
+ };
707
+ }
708
+ async validateHostRequirementsForExecutablesIfNeeded(executables, sdkLanguage) {
709
+ if ((0, _utils.getAsBooleanFromENV)('PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS')) {
710
+ process.stderr.write('Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set.\n');
711
+ return;
712
+ }
713
+ for (const executable of executables) await this._validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage);
714
+ }
715
+ async _validateHostRequirementsForExecutableIfNeeded(executable, sdkLanguage) {
716
+ const kMaximumReValidationPeriod = 30 * 24 * 60 * 60 * 1000; // 30 days
717
+ // Executable does not require validation.
718
+ if (!executable.directory) return;
719
+ const markerFile = _path.default.join(executable.directory, 'DEPENDENCIES_VALIDATED');
720
+ // Executable is already validated.
721
+ if (await fs.promises.stat(markerFile).then(stat => Date.now() - stat.mtime.getTime() < kMaximumReValidationPeriod).catch(() => false)) return;
722
+ _debugLogger.debugLogger.log('install', `validating host requirements for "${executable.name}"`);
723
+ try {
724
+ await executable._validateHostRequirements(sdkLanguage);
725
+ _debugLogger.debugLogger.log('install', `validation passed for ${executable.name}`);
726
+ } catch (error) {
727
+ _debugLogger.debugLogger.log('install', `validation failed for ${executable.name}`);
728
+ throw error;
729
+ }
730
+ await fs.promises.writeFile(markerFile, '').catch(() => {});
731
+ }
732
+ _downloadURLs(descriptor) {
733
+ const paths = DOWNLOAD_PATHS[descriptor.name];
734
+ const downloadPathTemplate = paths[_hostPlatform.hostPlatform] || paths['<unknown>'];
735
+ if (!downloadPathTemplate) return [];
736
+ const downloadPath = util.format(downloadPathTemplate, descriptor.revision);
737
+ let downloadURLs = PLAYWRIGHT_CDN_MIRRORS.map(mirror => `${mirror}/${downloadPath}`);
738
+ let downloadHostEnv;
739
+ if (descriptor.name.startsWith('chromium')) downloadHostEnv = 'PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST';else if (descriptor.name.startsWith('firefox')) downloadHostEnv = 'PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST';else if (descriptor.name.startsWith('webkit')) downloadHostEnv = 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST';
740
+ const customHostOverride = downloadHostEnv && (0, _utils.getFromENV)(downloadHostEnv) || (0, _utils.getFromENV)('PLAYWRIGHT_DOWNLOAD_HOST');
741
+ if (customHostOverride) downloadURLs = [`${customHostOverride}/${downloadPath}`];
742
+ return downloadURLs;
743
+ }
744
+ async _downloadExecutable(descriptor, executablePath) {
745
+ const downloadURLs = this._downloadURLs(descriptor);
746
+ if (!downloadURLs.length) throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${_hostPlatform.hostPlatform}`);
747
+ if (!_hostPlatform.isOfficiallySupportedPlatform) (0, _browserFetcher.logPolitely)(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${_hostPlatform.hostPlatform}.`);
748
+ const displayName = descriptor.name.split('-').map(word => {
749
+ return word === 'ffmpeg' ? 'FFMPEG' : word.charAt(0).toUpperCase() + word.slice(1);
750
+ }).join(' ');
751
+ const title = descriptor.browserVersion ? `${displayName} ${descriptor.browserVersion} (playwright build v${descriptor.revision})` : `${displayName} playwright build v${descriptor.revision}`;
752
+ const downloadFileName = `playwright-download-${descriptor.name}-${_hostPlatform.hostPlatform}-${descriptor.revision}.zip`;
753
+ const downloadConnectionTimeoutEnv = (0, _utils.getFromENV)('PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT');
754
+ const downloadConnectionTimeout = +(downloadConnectionTimeoutEnv || '0') || 30_000;
755
+ await (0, _browserFetcher.downloadBrowserWithProgressBar)(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadConnectionTimeout).catch(e => {
756
+ throw new Error(`Failed to download ${title}, caused by\n${e.stack}`);
757
+ });
758
+ }
759
+ async _installMSEdgeChannel(channel, scripts) {
760
+ const scriptArgs = [];
761
+ if (process.platform !== 'linux') {
762
+ const products = lowercaseAllKeys(JSON.parse(await (0, _network.fetchData)({
763
+ url: 'https://edgeupdates.microsoft.com/api/products'
764
+ })));
765
+ const productName = {
766
+ 'msedge': 'Stable',
767
+ 'msedge-beta': 'Beta',
768
+ 'msedge-dev': 'Dev'
769
+ }[channel];
770
+ const product = products.find(product => product.product === productName);
771
+ const searchConfig = {
772
+ darwin: {
773
+ platform: 'MacOS',
774
+ arch: 'universal',
775
+ artifact: 'pkg'
776
+ },
777
+ win32: {
778
+ platform: 'Windows',
779
+ arch: 'x64',
780
+ artifact: 'msi'
781
+ }
782
+ }[process.platform];
783
+ const release = searchConfig ? product.releases.find(release => release.platform === searchConfig.platform && release.architecture === searchConfig.arch && release.artifacts.length > 0) : null;
784
+ const artifact = release ? release.artifacts.find(artifact => artifact.artifactname === searchConfig.artifact) : null;
785
+ if (artifact) scriptArgs.push(artifact.location /* url */);else throw new Error(`Cannot install ${channel} on ${process.platform}`);
786
+ }
787
+ await this._installChromiumChannel(channel, scripts, scriptArgs);
788
+ }
789
+ async _installChromiumChannel(channel, scripts, scriptArgs = []) {
790
+ const scriptName = scripts[process.platform];
791
+ if (!scriptName) throw new Error(`Cannot install ${channel} on ${process.platform}`);
792
+ const cwd = BIN_PATH;
793
+ const isPowerShell = scriptName.endsWith('.ps1');
794
+ if (isPowerShell) {
795
+ const args = ['-ExecutionPolicy', 'Bypass', '-File', _path.default.join(BIN_PATH, scriptName), ...scriptArgs];
796
+ const {
797
+ code
798
+ } = await (0, _spawnAsync.spawnAsync)('powershell.exe', args, {
799
+ cwd,
800
+ stdio: 'inherit'
801
+ });
802
+ if (code !== 0) throw new Error(`Failed to install ${channel}`);
803
+ } else {
804
+ const {
805
+ command,
806
+ args,
807
+ elevatedPermissions
808
+ } = await (0, _dependencies.transformCommandsForRoot)([`bash "${_path.default.join(BIN_PATH, scriptName)}" ${scriptArgs.join('')}`]);
809
+ if (elevatedPermissions) console.log('Switching to root user to install dependencies...'); // eslint-disable-line no-console
810
+ const {
811
+ code
812
+ } = await (0, _spawnAsync.spawnAsync)(command, args, {
813
+ cwd,
814
+ stdio: 'inherit'
815
+ });
816
+ if (code !== 0) throw new Error(`Failed to install ${channel}`);
817
+ }
818
+ }
819
+ async _validateInstallationCache(linksDir) {
820
+ // 1. Collect used downloads and package descriptors.
821
+ const usedBrowserPaths = new Set();
822
+ for (const fileName of await fs.promises.readdir(linksDir)) {
823
+ const linkPath = _path.default.join(linksDir, fileName);
824
+ let linkTarget = '';
825
+ try {
826
+ linkTarget = (await fs.promises.readFile(linkPath)).toString();
827
+ const browsersJSON = require(_path.default.join(linkTarget, 'browsers.json'));
828
+ const descriptors = readDescriptors(browsersJSON);
829
+ for (const browserName of allDownloadable) {
830
+ // We retain browsers if they are found in the descriptor.
831
+ // Note, however, that there are older versions out in the wild that rely on
832
+ // the "download" field in the browser descriptor and use its value
833
+ // to retain and download browsers.
834
+ // As of v1.10, we decided to abandon "download" field.
835
+ const descriptor = descriptors.find(d => d.name === browserName);
836
+ if (!descriptor) continue;
837
+ const usedBrowserPath = descriptor.dir;
838
+ const browserRevision = parseInt(descriptor.revision, 10);
839
+ // Old browser installations don't have marker file.
840
+ // We switched chromium from 999999 to 1000, 300000 is the new Y2K.
841
+ const shouldHaveMarkerFile = browserName === 'chromium' && (browserRevision >= 786218 || browserRevision < 300000) || browserName === 'firefox' && browserRevision >= 1128 || browserName === 'webkit' && browserRevision >= 1307 ||
842
+ // All new applications have a marker file right away.
843
+ browserName !== 'firefox' && browserName !== 'chromium' && browserName !== 'webkit';
844
+ if (!shouldHaveMarkerFile || (await (0, _fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(usedBrowserPath)))) usedBrowserPaths.add(usedBrowserPath);
845
+ }
846
+ } catch (e) {
847
+ await fs.promises.unlink(linkPath).catch(e => {});
848
+ }
849
+ }
850
+
851
+ // 2. Delete all unused browsers.
852
+ if (!(0, _utils.getAsBooleanFromENV)('PLAYWRIGHT_SKIP_BROWSER_GC')) {
853
+ let downloadedBrowsers = (await fs.promises.readdir(registryDirectory)).map(file => _path.default.join(registryDirectory, file));
854
+ downloadedBrowsers = downloadedBrowsers.filter(file => isBrowserDirectory(file));
855
+ const directories = new Set(downloadedBrowsers);
856
+ for (const browserDirectory of usedBrowserPaths) directories.delete(browserDirectory);
857
+ for (const directory of directories) (0, _browserFetcher.logPolitely)('Removing unused browser at ' + directory);
858
+ await (0, _fileUtils.removeFolders)([...directories]);
859
+ }
860
+ }
861
+ }
862
+ exports.Registry = Registry;
863
+ function browserDirectoryToMarkerFilePath(browserDirectory) {
864
+ return _path.default.join(browserDirectory, 'INSTALLATION_COMPLETE');
865
+ }
866
+ function buildPlaywrightCLICommand(sdkLanguage, parameters) {
867
+ switch (sdkLanguage) {
868
+ case 'python':
869
+ return `playwright ${parameters}`;
870
+ case 'java':
871
+ return `mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="${parameters}"`;
872
+ case 'csharp':
873
+ return `pwsh bin/Debug/netX/playwright.ps1 ${parameters}`;
874
+ default:
875
+ {
876
+ const packageManagerCommand = (0, _utils.getPackageManagerExecCommand)();
877
+ return `${packageManagerCommand} playwright ${parameters}`;
878
+ }
879
+ }
880
+ }
881
+ async function installDefaultBrowsersForNpmInstall() {
882
+ const defaultBrowserNames = registry.defaultExecutables().map(e => e.name);
883
+ return installBrowsersForNpmInstall(defaultBrowserNames);
884
+ }
885
+ async function installBrowsersForNpmInstall(browsers) {
886
+ // PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD should have a value of 0 or 1
887
+ if ((0, _utils.getAsBooleanFromENV)('PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD')) {
888
+ (0, _browserFetcher.logPolitely)('Skipping browsers download because `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` env variable is set');
889
+ return false;
890
+ }
891
+ const executables = [];
892
+ for (const browserName of browsers) {
893
+ const executable = registry.findExecutable(browserName);
894
+ if (!executable || executable.installType === 'none') throw new Error(`Cannot install ${browserName}`);
895
+ executables.push(executable);
896
+ }
897
+ await registry.install(executables, false /* forceReinstall */);
898
+ }
899
+ function findChromiumChannel(sdkLanguage) {
900
+ // Fall back to the stable channels of popular vendors to work out of the box.
901
+ // Null means no installation and no channels found.
902
+ let channel = null;
903
+ for (const name of ['chromium', 'chrome', 'msedge']) {
904
+ try {
905
+ registry.findExecutable(name).executablePathOrDie(sdkLanguage);
906
+ channel = name === 'chromium' ? undefined : name;
907
+ break;
908
+ } catch (e) {}
909
+ }
910
+ if (channel === null) {
911
+ const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install chromium`);
912
+ const prettyMessage = [`No chromium-based browser found on the system.`, `Please run the following command to download one:`, ``, ` ${installCommand}`, ``, `<3 Playwright Team`].join('\n');
913
+ throw new Error('\n' + (0, _utils.wrapInASCIIBox)(prettyMessage, 1));
914
+ }
915
+ return channel;
916
+ }
917
+ function lowercaseAllKeys(json) {
918
+ if (typeof json !== 'object' || !json) return json;
919
+ if (Array.isArray(json)) return json.map(lowercaseAllKeys);
920
+ const result = {};
921
+ for (const [key, value] of Object.entries(json)) result[key.toLowerCase()] = lowercaseAllKeys(value);
922
+ return result;
923
+ }
924
+ const registry = exports.registry = new Registry(require('../../../browsers.json'));