@remotion/renderer 4.0.0-imgloading.2 → 4.0.0-lambda.1

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 (357) hide show
  1. package/dist/assets/calculate-asset-positions.d.ts.map +1 -0
  2. package/dist/assets/calculate-asset-positions.js.map +1 -0
  3. package/dist/assets/calculate-atempo.d.ts.map +1 -0
  4. package/dist/assets/calculate-atempo.js.map +1 -0
  5. package/dist/assets/cleanup-assets.d.ts +2 -0
  6. package/dist/assets/cleanup-assets.js +2 -0
  7. package/dist/assets/convert-assets-to-file-urls.d.ts.map +1 -0
  8. package/dist/assets/convert-assets-to-file-urls.js.map +1 -0
  9. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -0
  10. package/dist/assets/download-and-map-assets-to-file.d.ts.map +1 -0
  11. package/dist/assets/download-and-map-assets-to-file.js +46 -19
  12. package/dist/assets/download-and-map-assets-to-file.js.map +1 -0
  13. package/dist/assets/download-file.d.ts.map +1 -0
  14. package/dist/assets/download-file.js.map +1 -0
  15. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -1
  16. package/dist/assets/ffmpeg-volume-expression.d.ts.map +1 -0
  17. package/dist/assets/ffmpeg-volume-expression.js +15 -12
  18. package/dist/assets/ffmpeg-volume-expression.js.map +1 -0
  19. package/dist/assets/flatten-volume-array.d.ts.map +1 -0
  20. package/dist/assets/flatten-volume-array.js.map +1 -0
  21. package/dist/assets/get-audio-channels.d.ts +5 -2
  22. package/dist/assets/get-audio-channels.d.ts.map +1 -0
  23. package/dist/assets/get-audio-channels.js +15 -4
  24. package/dist/assets/get-audio-channels.js.map +1 -0
  25. package/dist/assets/read-file.d.ts.map +1 -0
  26. package/dist/assets/read-file.js.map +1 -0
  27. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +1 -0
  28. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +1 -0
  29. package/dist/assets/sanitize-filename.d.ts.map +1 -0
  30. package/dist/assets/sanitize-filename.js.map +1 -0
  31. package/dist/assets/sanitize-filepath.d.ts.map +1 -0
  32. package/dist/assets/sanitize-filepath.js.map +1 -0
  33. package/dist/assets/truncate-utf8-bytes.d.ts.map +1 -0
  34. package/dist/assets/truncate-utf8-bytes.js.map +1 -0
  35. package/dist/assets/types.d.ts.map +1 -0
  36. package/dist/assets/types.js.map +1 -0
  37. package/dist/browser/Accessibility.d.ts +175 -0
  38. package/dist/browser/Accessibility.js +423 -0
  39. package/dist/browser/AriaQueryHandler.d.ts +20 -0
  40. package/dist/browser/AriaQueryHandler.js +108 -0
  41. package/dist/browser/Browser.d.ts +209 -0
  42. package/dist/browser/Browser.js +402 -0
  43. package/dist/browser/BrowserConnector.d.ts +26 -0
  44. package/dist/browser/BrowserConnector.js +49 -0
  45. package/dist/browser/BrowserFetcher.d.ts +89 -0
  46. package/dist/browser/BrowserFetcher.js +512 -0
  47. package/dist/browser/BrowserRunner.d.ts +39 -0
  48. package/dist/browser/BrowserRunner.js +308 -0
  49. package/dist/browser/Connection.d.ts +49 -0
  50. package/dist/browser/Connection.js +262 -0
  51. package/dist/browser/ConnectionTransport.d.ts +21 -0
  52. package/dist/browser/ConnectionTransport.js +17 -0
  53. package/dist/browser/ConsoleMessage.d.ts +55 -0
  54. package/dist/browser/ConsoleMessage.js +75 -0
  55. package/dist/browser/Coverage.d.ts +180 -0
  56. package/dist/browser/Coverage.js +371 -0
  57. package/dist/browser/DOMWorld.d.ts +50 -0
  58. package/dist/browser/DOMWorld.js +280 -0
  59. package/dist/browser/Debug.d.ts +19 -0
  60. package/dist/browser/Debug.js +42 -0
  61. package/dist/browser/DeviceDescriptors.d.ts +40 -0
  62. package/dist/browser/DeviceDescriptors.js +1407 -0
  63. package/dist/browser/EmulationManager.d.ts +7 -0
  64. package/dist/browser/EmulationManager.js +40 -0
  65. package/dist/browser/Errors.d.ts +25 -0
  66. package/dist/browser/Errors.js +35 -0
  67. package/dist/browser/EvalTypes.d.ts +27 -0
  68. package/dist/browser/EvalTypes.js +17 -0
  69. package/dist/browser/EventEmitter.d.ts +70 -0
  70. package/dist/browser/EventEmitter.js +102 -0
  71. package/dist/browser/ExecutionContext.d.ts +35 -0
  72. package/dist/browser/ExecutionContext.js +190 -0
  73. package/dist/browser/FileChooser.d.ts +56 -0
  74. package/dist/browser/FileChooser.js +86 -0
  75. package/dist/browser/FrameManager.d.ts +96 -0
  76. package/dist/browser/FrameManager.js +512 -0
  77. package/dist/browser/HTTPRequest.d.ts +42 -0
  78. package/dist/browser/HTTPRequest.js +82 -0
  79. package/dist/browser/HTTPResponse.d.ts +100 -0
  80. package/dist/browser/HTTPResponse.js +196 -0
  81. package/dist/browser/Input.d.ts +355 -0
  82. package/dist/browser/Input.js +592 -0
  83. package/dist/browser/JSHandle.d.ts +36 -0
  84. package/dist/browser/JSHandle.js +93 -0
  85. package/dist/browser/LaunchOptions.d.ts +117 -0
  86. package/dist/browser/LaunchOptions.js +17 -0
  87. package/dist/browser/Launcher.d.ts +9 -0
  88. package/dist/browser/Launcher.js +602 -0
  89. package/dist/browser/LifecycleWatcher.d.ts +29 -0
  90. package/dist/browser/LifecycleWatcher.js +193 -0
  91. package/dist/browser/NetworkConditions.d.ts +26 -0
  92. package/dist/browser/NetworkConditions.js +33 -0
  93. package/dist/browser/NetworkEventManager.d.ts +35 -0
  94. package/dist/browser/NetworkEventManager.js +128 -0
  95. package/dist/browser/NetworkManager.d.ts +36 -0
  96. package/dist/browser/NetworkManager.js +284 -0
  97. package/dist/browser/NodeWebSocketTransport.d.ts +11 -0
  98. package/dist/browser/NodeWebSocketTransport.js +90 -0
  99. package/dist/browser/PDFOptions.d.ts +165 -0
  100. package/dist/browser/PDFOptions.js +34 -0
  101. package/dist/browser/PipeTransport.d.ts +10 -0
  102. package/dist/browser/PipeTransport.js +86 -0
  103. package/dist/browser/Product.d.ts +16 -0
  104. package/dist/browser/Product.js +17 -0
  105. package/dist/browser/Puppeteer.d.ts +35 -0
  106. package/dist/browser/Puppeteer.js +17 -0
  107. package/dist/browser/PuppeteerNode.d.ts +92 -0
  108. package/dist/browser/PuppeteerNode.js +143 -0
  109. package/dist/browser/PuppeteerViewport.d.ts +5 -0
  110. package/dist/browser/PuppeteerViewport.js +2 -0
  111. package/dist/browser/QueryHandler.d.ts +64 -0
  112. package/dist/browser/QueryHandler.js +183 -0
  113. package/dist/browser/ScreenshotOptions.d.ts +14 -0
  114. package/dist/browser/ScreenshotOptions.js +2 -0
  115. package/dist/browser/SecurityDetails.d.ts +55 -0
  116. package/dist/browser/SecurityDetails.js +95 -0
  117. package/dist/browser/Target.d.ts +61 -0
  118. package/dist/browser/Target.js +146 -0
  119. package/dist/browser/TaskQueue.d.ts +20 -0
  120. package/dist/browser/TaskQueue.js +47 -0
  121. package/dist/browser/TimeoutSettings.d.ts +23 -0
  122. package/dist/browser/TimeoutSettings.js +62 -0
  123. package/dist/browser/Tracing.d.ts +45 -0
  124. package/dist/browser/Tracing.js +136 -0
  125. package/dist/browser/USKeyboardLayout.d.ts +39 -0
  126. package/dist/browser/USKeyboardLayout.js +406 -0
  127. package/dist/browser/WebWorker.d.ts +96 -0
  128. package/dist/browser/WebWorker.js +122 -0
  129. package/dist/browser/assert.d.ts +21 -0
  130. package/dist/browser/assert.js +29 -0
  131. package/dist/browser/compat.d.ts +2 -0
  132. package/dist/browser/compat.js +17 -0
  133. package/dist/browser/create-browser-fetcher.d.ts +17 -0
  134. package/dist/browser/create-browser-fetcher.js +140 -0
  135. package/dist/browser/dialog.d.ts +70 -0
  136. package/dist/browser/dialog.js +114 -0
  137. package/dist/browser/environment.d.ts +16 -0
  138. package/dist/browser/environment.js +19 -0
  139. package/dist/browser/fetch.d.ts +16 -0
  140. package/dist/browser/fetch.js +46 -0
  141. package/dist/browser/find-up.d.ts +4 -0
  142. package/dist/browser/find-up.js +85 -0
  143. package/dist/browser/get-download-destination.d.ts +1 -0
  144. package/dist/browser/get-download-destination.js +38 -0
  145. package/dist/browser/mitt/index.d.ts +22 -0
  146. package/dist/browser/mitt/index.js +49 -0
  147. package/dist/browser/node.d.ts +2 -0
  148. package/dist/browser/node.js +9 -0
  149. package/dist/browser/page.d.ts +78 -0
  150. package/dist/browser/page.js +277 -0
  151. package/dist/browser/pkg-dir.d.ts +3 -0
  152. package/dist/browser/pkg-dir.js +13 -0
  153. package/dist/browser/revisions.d.ts +21 -0
  154. package/dist/browser/revisions.js +22 -0
  155. package/dist/browser/util.d.ts +46 -0
  156. package/dist/browser/util.js +161 -0
  157. package/dist/browser-log.d.ts.map +1 -0
  158. package/dist/browser-log.js.map +1 -0
  159. package/dist/calculate-ffmpeg-filters.d.ts.map +1 -0
  160. package/dist/calculate-ffmpeg-filters.js +2 -2
  161. package/dist/calculate-ffmpeg-filters.js.map +1 -0
  162. package/dist/can-use-parallel-encoding.d.ts.map +1 -0
  163. package/dist/can-use-parallel-encoding.js.map +1 -0
  164. package/dist/chunk.d.ts.map +1 -0
  165. package/dist/chunk.js.map +1 -0
  166. package/dist/combine-videos.d.ts +2 -1
  167. package/dist/combine-videos.d.ts.map +1 -0
  168. package/dist/combine-videos.js +8 -1
  169. package/dist/combine-videos.js.map +1 -0
  170. package/dist/convert-to-pcm.d.ts.map +1 -0
  171. package/dist/convert-to-pcm.js.map +1 -0
  172. package/dist/create-ffmpeg-complex-filter.d.ts.map +1 -0
  173. package/dist/create-ffmpeg-complex-filter.js.map +1 -0
  174. package/dist/create-ffmpeg-merge-filter.d.ts.map +1 -0
  175. package/dist/create-ffmpeg-merge-filter.js.map +1 -0
  176. package/dist/create-silent-audio.d.ts.map +1 -0
  177. package/dist/create-silent-audio.js.map +1 -0
  178. package/dist/cycle-browser-tabs.d.ts +2 -1
  179. package/dist/cycle-browser-tabs.d.ts.map +1 -0
  180. package/dist/cycle-browser-tabs.js +9 -2
  181. package/dist/cycle-browser-tabs.js.map +1 -0
  182. package/dist/delay-render-embedded-stack.d.ts.map +1 -0
  183. package/dist/delay-render-embedded-stack.js.map +1 -0
  184. package/dist/delete-directory.d.ts.map +1 -0
  185. package/dist/delete-directory.js.map +1 -0
  186. package/dist/ensure-frames-in-order.d.ts.map +1 -0
  187. package/dist/ensure-frames-in-order.js.map +1 -0
  188. package/dist/ensure-output-directory.d.ts.map +1 -0
  189. package/dist/ensure-output-directory.js.map +1 -0
  190. package/dist/ensure-presentation-timestamp.d.ts +1 -0
  191. package/dist/ensure-presentation-timestamp.js +57 -0
  192. package/dist/error-handling/handle-javascript-exception.d.ts.map +1 -0
  193. package/dist/error-handling/handle-javascript-exception.js.map +1 -0
  194. package/dist/error-handling/symbolicate-error.d.ts.map +1 -0
  195. package/dist/error-handling/symbolicate-error.js.map +1 -0
  196. package/dist/error-handling/symbolicateable-error.d.ts.map +1 -0
  197. package/dist/error-handling/symbolicateable-error.js.map +1 -0
  198. package/dist/extract-frame-from-video.d.ts +11 -0
  199. package/dist/extract-frame-from-video.js +197 -0
  200. package/dist/ffmpeg-filter-file.d.ts.map +1 -0
  201. package/dist/ffmpeg-filter-file.js.map +1 -0
  202. package/dist/ffmpeg-flags.d.ts.map +1 -0
  203. package/dist/ffmpeg-flags.js.map +1 -0
  204. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  205. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  206. package/dist/get-audio-codec-name.d.ts.map +1 -0
  207. package/dist/get-audio-codec-name.js.map +1 -0
  208. package/dist/get-browser-instance.d.ts.map +1 -0
  209. package/dist/get-browser-instance.js.map +1 -0
  210. package/dist/get-codec-name.d.ts.map +1 -0
  211. package/dist/get-codec-name.js.map +1 -0
  212. package/dist/get-compositions.d.ts +5 -2
  213. package/dist/get-compositions.d.ts.map +1 -0
  214. package/dist/get-compositions.js +23 -5
  215. package/dist/get-compositions.js.map +1 -0
  216. package/dist/get-concurrency.d.ts.map +1 -0
  217. package/dist/get-concurrency.js.map +1 -0
  218. package/dist/get-duration-from-frame-range.d.ts.map +1 -0
  219. package/dist/get-duration-from-frame-range.js.map +1 -0
  220. package/dist/get-duration-of-asset.d.ts +7 -0
  221. package/dist/get-duration-of-asset.js +36 -0
  222. package/dist/get-extension-from-codec.d.ts.map +1 -0
  223. package/dist/get-extension-from-codec.js.map +1 -0
  224. package/dist/get-frame-to-render.d.ts.map +1 -0
  225. package/dist/get-frame-to-render.js.map +1 -0
  226. package/dist/get-local-browser-executable.d.ts.map +1 -0
  227. package/dist/get-local-browser-executable.js.map +1 -0
  228. package/dist/get-port.d.ts.map +1 -0
  229. package/dist/get-port.js +26 -24
  230. package/dist/get-port.js.map +1 -0
  231. package/dist/get-prores-profile-name.d.ts.map +1 -0
  232. package/dist/get-prores-profile-name.js.map +1 -0
  233. package/dist/image-format.d.ts.map +1 -0
  234. package/dist/image-format.js.map +1 -0
  235. package/dist/index.d.ts +34 -9
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +14 -5
  238. package/dist/index.js.map +1 -0
  239. package/dist/is-beyond-last-frame.d.ts +2 -0
  240. package/dist/is-beyond-last-frame.js +12 -0
  241. package/dist/is-serve-url.d.ts.map +1 -0
  242. package/dist/is-serve-url.js.map +1 -0
  243. package/dist/last-frame-from-video-cache.d.ts +10 -0
  244. package/dist/last-frame-from-video-cache.js +50 -0
  245. package/dist/legacy-webpack-config.d.ts.map +1 -0
  246. package/dist/legacy-webpack-config.js.map +1 -0
  247. package/dist/make-assets-download-dir.d.ts.map +1 -0
  248. package/dist/make-assets-download-dir.js +6 -1
  249. package/dist/make-assets-download-dir.js.map +1 -0
  250. package/dist/make-cancel-signal.d.ts +7 -0
  251. package/dist/make-cancel-signal.js +25 -0
  252. package/dist/merge-audio-track.d.ts.map +1 -0
  253. package/dist/merge-audio-track.js +2 -2
  254. package/dist/merge-audio-track.js.map +1 -0
  255. package/dist/normalize-serve-url.d.ts.map +1 -0
  256. package/dist/normalize-serve-url.js.map +1 -0
  257. package/dist/offthread-video-server.d.ts +14 -0
  258. package/dist/offthread-video-server.js +67 -0
  259. package/dist/open-browser.d.ts +5 -5
  260. package/dist/open-browser.d.ts.map +1 -0
  261. package/dist/open-browser.js +3 -3
  262. package/dist/open-browser.js.map +1 -0
  263. package/dist/p-limit.d.ts.map +1 -0
  264. package/dist/p-limit.js.map +1 -0
  265. package/dist/parse-browser-error-stack.d.ts.map +1 -0
  266. package/dist/parse-browser-error-stack.js.map +1 -0
  267. package/dist/parse-ffmpeg-progress.d.ts.map +1 -0
  268. package/dist/parse-ffmpeg-progress.js.map +1 -0
  269. package/dist/pool.d.ts.map +1 -0
  270. package/dist/pool.js.map +1 -0
  271. package/dist/prepare-server.d.ts +13 -2
  272. package/dist/prepare-server.d.ts.map +1 -0
  273. package/dist/prepare-server.js +35 -5
  274. package/dist/prepare-server.js.map +1 -0
  275. package/dist/preprocess-audio-track.d.ts +1 -0
  276. package/dist/preprocess-audio-track.d.ts.map +1 -0
  277. package/dist/preprocess-audio-track.js +2 -2
  278. package/dist/preprocess-audio-track.js.map +1 -0
  279. package/dist/prespawn-ffmpeg.d.ts +2 -0
  280. package/dist/prespawn-ffmpeg.d.ts.map +1 -0
  281. package/dist/prespawn-ffmpeg.js +10 -9
  282. package/dist/prespawn-ffmpeg.js.map +1 -0
  283. package/dist/provide-screenshot.d.ts +0 -1
  284. package/dist/provide-screenshot.d.ts.map +1 -0
  285. package/dist/provide-screenshot.js +1 -1
  286. package/dist/provide-screenshot.js.map +1 -0
  287. package/dist/puppeteer-evaluate.d.ts.map +1 -0
  288. package/dist/puppeteer-evaluate.js.map +1 -0
  289. package/dist/puppeteer-screenshot.d.ts +0 -1
  290. package/dist/puppeteer-screenshot.d.ts.map +1 -0
  291. package/dist/puppeteer-screenshot.js +5 -1
  292. package/dist/puppeteer-screenshot.js.map +1 -0
  293. package/dist/render-frames.d.ts +6 -1
  294. package/dist/render-frames.d.ts.map +1 -0
  295. package/dist/render-frames.js +96 -37
  296. package/dist/render-frames.js.map +1 -0
  297. package/dist/render-media.d.ts +12 -2
  298. package/dist/render-media.d.ts.map +1 -0
  299. package/dist/render-media.js +127 -54
  300. package/dist/render-media.js.map +1 -0
  301. package/dist/render-still.d.ts +14 -4
  302. package/dist/render-still.d.ts.map +1 -0
  303. package/dist/render-still.js +58 -19
  304. package/dist/render-still.js.map +1 -0
  305. package/dist/resolve-asset-src.d.ts.map +1 -0
  306. package/dist/resolve-asset-src.js.map +1 -0
  307. package/dist/sample-rate.d.ts.map +1 -0
  308. package/dist/sample-rate.js.map +1 -0
  309. package/dist/screenshot-dom-element.d.ts +0 -1
  310. package/dist/screenshot-dom-element.d.ts.map +1 -0
  311. package/dist/screenshot-dom-element.js.map +1 -0
  312. package/dist/screenshot-task.d.ts +0 -1
  313. package/dist/screenshot-task.d.ts.map +1 -0
  314. package/dist/screenshot-task.js.map +1 -0
  315. package/dist/seek-to-frame.d.ts.map +1 -0
  316. package/dist/seek-to-frame.js.map +1 -0
  317. package/dist/serve-handler/glob-slash.d.ts +1 -0
  318. package/dist/serve-handler/glob-slash.js +12 -0
  319. package/dist/serve-handler/index.d.ts +4 -0
  320. package/dist/serve-handler/index.js +205 -0
  321. package/dist/serve-handler/is-path-inside.d.ts +1 -0
  322. package/dist/serve-handler/is-path-inside.js +27 -0
  323. package/dist/serve-handler/range-parser.d.ts +13 -0
  324. package/dist/serve-handler/range-parser.js +57 -0
  325. package/dist/serve-static.d.ts +10 -3
  326. package/dist/serve-static.d.ts.map +1 -0
  327. package/dist/serve-static.js +22 -4
  328. package/dist/serve-static.js.map +1 -0
  329. package/dist/set-props-and-env.d.ts +3 -1
  330. package/dist/set-props-and-env.d.ts.map +1 -0
  331. package/dist/set-props-and-env.js +25 -3
  332. package/dist/set-props-and-env.js.map +1 -0
  333. package/dist/stitch-frames-to-video.d.ts +4 -1
  334. package/dist/stitch-frames-to-video.d.ts.map +1 -0
  335. package/dist/stitch-frames-to-video.js +36 -15
  336. package/dist/stitch-frames-to-video.js.map +1 -0
  337. package/dist/stringify-ffmpeg-filter.d.ts.map +1 -0
  338. package/dist/stringify-ffmpeg-filter.js +3 -0
  339. package/dist/stringify-ffmpeg-filter.js.map +1 -0
  340. package/dist/symbolicate-stacktrace.d.ts.map +1 -0
  341. package/dist/symbolicate-stacktrace.js.map +1 -0
  342. package/dist/tmp-dir.d.ts.map +1 -0
  343. package/dist/tmp-dir.js +5 -1
  344. package/dist/tmp-dir.js.map +1 -0
  345. package/dist/types.d.ts.map +1 -0
  346. package/dist/types.js.map +1 -0
  347. package/dist/validate-even-dimensions-with-codec.d.ts.map +1 -0
  348. package/dist/validate-even-dimensions-with-codec.js.map +1 -0
  349. package/dist/validate-ffmpeg.d.ts.map +1 -0
  350. package/dist/validate-ffmpeg.js.map +1 -0
  351. package/dist/validate-fps-for-gif.d.ts +2 -0
  352. package/dist/validate-fps-for-gif.js +9 -0
  353. package/dist/validate-puppeteer-timeout.d.ts.map +1 -0
  354. package/dist/validate-puppeteer-timeout.js.map +1 -0
  355. package/dist/validate-scale.d.ts.map +1 -0
  356. package/dist/validate-scale.js.map +1 -0
  357. package/package.json +6 -7
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Copyright 2017 Google Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Product } from './Product';
17
+ declare type Platform = 'linux' | 'mac' | 'mac_arm' | 'win32' | 'win64';
18
+ export interface BrowserFetcherOptions {
19
+ platform: Platform | null;
20
+ product: Product;
21
+ path: string | null;
22
+ }
23
+ interface BrowserFetcherRevisionInfo {
24
+ folderPath: string;
25
+ executablePath: string;
26
+ url: string;
27
+ local: boolean;
28
+ revision: string;
29
+ product: string;
30
+ }
31
+ export declare class BrowserFetcher {
32
+ #private;
33
+ constructor(options: BrowserFetcherOptions);
34
+ /**
35
+ * @returns Returns the current `Platform`, which is one of `mac`, `linux`,
36
+ * `win32` or `win64`.
37
+ */
38
+ platform(): Platform;
39
+ /**
40
+ * @returns Returns the current `Product`, which is one of `chrome` or
41
+ * `firefox`.
42
+ */
43
+ product(): Product;
44
+ /**
45
+ * @returns The download host being used.
46
+ */
47
+ host(): string;
48
+ /**
49
+ * Initiates a HEAD request to check if the revision is available.
50
+ * @remarks
51
+ * This method is affected by the current `product`.
52
+ * @param revision - The revision to check availability for.
53
+ * @returns A promise that resolves to `true` if the revision could be downloaded
54
+ * from the host.
55
+ */
56
+ canDownload(revision: string): Promise<boolean>;
57
+ /**
58
+ * Initiates a GET request to download the revision from the host.
59
+ * @remarks
60
+ * This method is affected by the current `product`.
61
+ * @param revision - The revision to download.
62
+ * @param progressCallback - A function that will be called with two arguments:
63
+ * How many bytes have been downloaded and the total number of bytes of the download.
64
+ * @returns A promise with revision information when the revision is downloaded
65
+ * and extracted.
66
+ */
67
+ download(revision: string, progressCallback?: (x: number, y: number) => void): Promise<BrowserFetcherRevisionInfo | undefined>;
68
+ /**
69
+ * @remarks
70
+ * This method is affected by the current `product`.
71
+ * @returns A promise with a list of all revision strings (for the current `product`)
72
+ * available locally on disk.
73
+ */
74
+ localRevisions(): Promise<string[]>;
75
+ /**
76
+ * @remarks
77
+ * This method is affected by the current `product`.
78
+ * @param revision - A revision to remove for the current `product`.
79
+ * @returns A promise that resolves when the revision has been removes or
80
+ * throws if the revision has not been downloaded.
81
+ */
82
+ remove(revision: string): Promise<void>;
83
+ /**
84
+ * @param revision - The revision to get info for.
85
+ * @returns The revision info for the given revision.
86
+ */
87
+ revisionInfo(revision: string): BrowserFetcherRevisionInfo;
88
+ }
89
+ export {};
@@ -0,0 +1,512 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2017 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
41
+ if (kind === "m") throw new TypeError("Private method is not writable");
42
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
43
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
44
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
45
+ };
46
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
47
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
48
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
49
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
50
+ };
51
+ var __importDefault = (this && this.__importDefault) || function (mod) {
52
+ return (mod && mod.__esModule) ? mod : { "default": mod };
53
+ };
54
+ var _BrowserFetcher_instances, _BrowserFetcher_product, _BrowserFetcher_downloadsFolder, _BrowserFetcher_downloadHost, _BrowserFetcher_platform, _BrowserFetcher_getFolderPath;
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.BrowserFetcher = void 0;
57
+ const childProcess = __importStar(require("child_process"));
58
+ const fs = __importStar(require("fs"));
59
+ const http = __importStar(require("http"));
60
+ const https = __importStar(require("https"));
61
+ const os = __importStar(require("os"));
62
+ const path = __importStar(require("path"));
63
+ const util = __importStar(require("util"));
64
+ const extract_zip_1 = __importDefault(require("extract-zip"));
65
+ const URL = __importStar(require("url"));
66
+ const util_1 = require("util");
67
+ const assert_1 = require("./assert");
68
+ const delete_directory_1 = require("../delete-directory");
69
+ const get_download_destination_1 = require("./get-download-destination");
70
+ const { PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM } = process.env;
71
+ const downloadURLs = {
72
+ chrome: {
73
+ linux: '%s/chromium-browser-snapshots/Linux_x64/%d/%s.zip',
74
+ mac: '%s/chromium-browser-snapshots/Mac/%d/%s.zip',
75
+ mac_arm: '%s/chromium-browser-snapshots/Mac_Arm/%d/%s.zip',
76
+ win32: '%s/chromium-browser-snapshots/Win/%d/%s.zip',
77
+ win64: '%s/chromium-browser-snapshots/Win_x64/%d/%s.zip',
78
+ },
79
+ firefox: {
80
+ linux: '%s/firefox-%s.en-US.%s-x86_64.tar.bz2',
81
+ mac: '%s/firefox-%s.en-US.%s.dmg',
82
+ win32: '%s/firefox-%s.en-US.%s.zip',
83
+ win64: '%s/firefox-%s.en-US.%s.zip',
84
+ },
85
+ };
86
+ const browserConfig = {
87
+ chrome: {
88
+ host: 'https://storage.googleapis.com',
89
+ destination: '.chromium',
90
+ },
91
+ firefox: {
92
+ host: 'https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central',
93
+ destination: '.firefox',
94
+ },
95
+ };
96
+ function archiveName(product, platform, revision) {
97
+ switch (product) {
98
+ case 'chrome':
99
+ switch (platform) {
100
+ case 'linux':
101
+ return 'chrome-linux';
102
+ case 'mac_arm':
103
+ case 'mac':
104
+ return 'chrome-mac';
105
+ case 'win32':
106
+ case 'win64':
107
+ // Windows archive name changed at r591479.
108
+ return parseInt(revision, 10) > 591479
109
+ ? 'chrome-win'
110
+ : 'chrome-win32';
111
+ default:
112
+ throw new Error('unknown browser');
113
+ }
114
+ case 'firefox':
115
+ return platform;
116
+ default:
117
+ throw new Error('unknown browser');
118
+ }
119
+ }
120
+ function _downloadURL(product, platform, host, revision) {
121
+ const url = util.format(downloadURLs[product][platform], host, revision, archiveName(product, platform, revision));
122
+ return url;
123
+ }
124
+ function handleArm64() {
125
+ let exists = fs.existsSync('/usr/bin/chromium-browser');
126
+ if (exists) {
127
+ return;
128
+ }
129
+ exists = fs.existsSync('/usr/bin/chromium');
130
+ if (exists) {
131
+ return;
132
+ }
133
+ console.error('The chromium binary is not available for arm64.' +
134
+ '\nIf you are on Ubuntu, you can install with: ' +
135
+ '\n\n sudo apt install chromium\n' +
136
+ '\n\n sudo apt install chromium-browser\n');
137
+ throw new Error();
138
+ }
139
+ const readdirAsync = (0, util_1.promisify)(fs.readdir.bind(fs));
140
+ const mkdirAsync = (0, util_1.promisify)(fs.mkdir.bind(fs));
141
+ const unlinkAsync = (0, util_1.promisify)(fs.unlink.bind(fs));
142
+ const chmodAsync = (0, util_1.promisify)(fs.chmod.bind(fs));
143
+ function existsAsync(filePath) {
144
+ return new Promise((resolve) => {
145
+ fs.access(filePath, (err) => {
146
+ return resolve(!err);
147
+ });
148
+ });
149
+ }
150
+ class BrowserFetcher {
151
+ constructor(options) {
152
+ _BrowserFetcher_instances.add(this);
153
+ _BrowserFetcher_product.set(this, void 0);
154
+ _BrowserFetcher_downloadsFolder.set(this, void 0);
155
+ _BrowserFetcher_downloadHost.set(this, void 0);
156
+ _BrowserFetcher_platform.set(this, void 0);
157
+ __classPrivateFieldSet(this, _BrowserFetcher_product, options.product.toLowerCase(), "f");
158
+ (0, assert_1.assert)(__classPrivateFieldGet(this, _BrowserFetcher_product, "f") === 'chrome' || __classPrivateFieldGet(this, _BrowserFetcher_product, "f") === 'firefox', `Unknown product: "${options.product}"`);
159
+ __classPrivateFieldSet(this, _BrowserFetcher_downloadsFolder, options.path ||
160
+ path.join((0, get_download_destination_1.getDownloadsCacheDir)(), browserConfig[__classPrivateFieldGet(this, _BrowserFetcher_product, "f")].destination), "f");
161
+ __classPrivateFieldSet(this, _BrowserFetcher_downloadHost, browserConfig[__classPrivateFieldGet(this, _BrowserFetcher_product, "f")].host, "f");
162
+ if (options.platform) {
163
+ __classPrivateFieldSet(this, _BrowserFetcher_platform, options.platform, "f");
164
+ }
165
+ else {
166
+ const platform = os.platform();
167
+ switch (platform) {
168
+ case 'darwin':
169
+ switch (__classPrivateFieldGet(this, _BrowserFetcher_product, "f")) {
170
+ case 'chrome':
171
+ __classPrivateFieldSet(this, _BrowserFetcher_platform, os.arch() === 'arm64' && PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM
172
+ ? 'mac_arm'
173
+ : 'mac', "f");
174
+ break;
175
+ case 'firefox':
176
+ __classPrivateFieldSet(this, _BrowserFetcher_platform, 'mac', "f");
177
+ break;
178
+ default:
179
+ throw new Error('unknown browser');
180
+ }
181
+ break;
182
+ case 'linux':
183
+ __classPrivateFieldSet(this, _BrowserFetcher_platform, 'linux', "f");
184
+ break;
185
+ case 'win32':
186
+ __classPrivateFieldSet(this, _BrowserFetcher_platform, os.arch() === 'x64' ? 'win64' : 'win32', "f");
187
+ return;
188
+ default:
189
+ (0, assert_1.assert)(false, 'Unsupported platform: ' + platform);
190
+ }
191
+ }
192
+ (0, assert_1.assert)(downloadURLs[__classPrivateFieldGet(this, _BrowserFetcher_product, "f")][__classPrivateFieldGet(this, _BrowserFetcher_platform, "f")], 'Unsupported platform: ' + __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"));
193
+ }
194
+ /**
195
+ * @returns Returns the current `Platform`, which is one of `mac`, `linux`,
196
+ * `win32` or `win64`.
197
+ */
198
+ platform() {
199
+ return __classPrivateFieldGet(this, _BrowserFetcher_platform, "f");
200
+ }
201
+ /**
202
+ * @returns Returns the current `Product`, which is one of `chrome` or
203
+ * `firefox`.
204
+ */
205
+ product() {
206
+ return __classPrivateFieldGet(this, _BrowserFetcher_product, "f");
207
+ }
208
+ /**
209
+ * @returns The download host being used.
210
+ */
211
+ host() {
212
+ return __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f");
213
+ }
214
+ /**
215
+ * Initiates a HEAD request to check if the revision is available.
216
+ * @remarks
217
+ * This method is affected by the current `product`.
218
+ * @param revision - The revision to check availability for.
219
+ * @returns A promise that resolves to `true` if the revision could be downloaded
220
+ * from the host.
221
+ */
222
+ canDownload(revision) {
223
+ const url = _downloadURL(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f"), revision);
224
+ return new Promise((resolve) => {
225
+ const request = httpRequest(url, 'HEAD', (response) => {
226
+ resolve(response.statusCode === 200);
227
+ }, false);
228
+ request.on('error', (error) => {
229
+ console.error(error);
230
+ resolve(false);
231
+ });
232
+ });
233
+ }
234
+ /**
235
+ * Initiates a GET request to download the revision from the host.
236
+ * @remarks
237
+ * This method is affected by the current `product`.
238
+ * @param revision - The revision to download.
239
+ * @param progressCallback - A function that will be called with two arguments:
240
+ * How many bytes have been downloaded and the total number of bytes of the download.
241
+ * @returns A promise with revision information when the revision is downloaded
242
+ * and extracted.
243
+ */
244
+ async download(revision, progressCallback = () => undefined) {
245
+ const url = _downloadURL(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f"), revision);
246
+ const fileName = url.split('/').pop();
247
+ (0, assert_1.assert)(fileName, `A malformed download URL was found: ${url}.`);
248
+ const archivePath = path.join(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"), fileName);
249
+ const outputPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
250
+ if (await existsAsync(outputPath)) {
251
+ return this.revisionInfo(revision);
252
+ }
253
+ if (!(await existsAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f")))) {
254
+ await mkdirAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"));
255
+ }
256
+ // Use system Chromium builds on Linux ARM devices
257
+ if (os.platform() !== 'darwin' && os.arch() === 'arm64') {
258
+ handleArm64();
259
+ return;
260
+ }
261
+ try {
262
+ await _downloadFile(url, archivePath, progressCallback);
263
+ await install(archivePath, outputPath);
264
+ }
265
+ finally {
266
+ if (await existsAsync(archivePath)) {
267
+ await unlinkAsync(archivePath);
268
+ }
269
+ }
270
+ const revisionInfo = this.revisionInfo(revision);
271
+ if (revisionInfo) {
272
+ await chmodAsync(revisionInfo.executablePath, 0o755);
273
+ }
274
+ return revisionInfo;
275
+ }
276
+ /**
277
+ * @remarks
278
+ * This method is affected by the current `product`.
279
+ * @returns A promise with a list of all revision strings (for the current `product`)
280
+ * available locally on disk.
281
+ */
282
+ async localRevisions() {
283
+ if (!(await existsAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f")))) {
284
+ return [];
285
+ }
286
+ const fileNames = await readdirAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"));
287
+ return fileNames
288
+ .map((fileName) => {
289
+ return parseFolderPath(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), fileName);
290
+ })
291
+ .filter((entry) => {
292
+ var _a;
293
+ return (_a = (entry && entry.platform === __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"))) !== null && _a !== void 0 ? _a : false;
294
+ })
295
+ .map((entry) => {
296
+ return entry.revision;
297
+ });
298
+ }
299
+ /**
300
+ * @remarks
301
+ * This method is affected by the current `product`.
302
+ * @param revision - A revision to remove for the current `product`.
303
+ * @returns A promise that resolves when the revision has been removes or
304
+ * throws if the revision has not been downloaded.
305
+ */
306
+ async remove(revision) {
307
+ const folderPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
308
+ (0, assert_1.assert)(await existsAsync(folderPath), `Failed to remove: revision ${revision} is not downloaded`);
309
+ await (0, delete_directory_1.deleteDirectory)(folderPath);
310
+ }
311
+ /**
312
+ * @param revision - The revision to get info for.
313
+ * @returns The revision info for the given revision.
314
+ */
315
+ revisionInfo(revision) {
316
+ const folderPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
317
+ let executablePath = '';
318
+ if (__classPrivateFieldGet(this, _BrowserFetcher_product, "f") === 'chrome') {
319
+ if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac_arm') {
320
+ executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
321
+ }
322
+ else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'linux') {
323
+ executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'chrome');
324
+ }
325
+ else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win32' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win64') {
326
+ executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'chrome.exe');
327
+ }
328
+ else {
329
+ throw new Error('Unsupported platform: ' + __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"));
330
+ }
331
+ }
332
+ else if (__classPrivateFieldGet(this, _BrowserFetcher_product, "f") === 'firefox') {
333
+ if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac_arm') {
334
+ executablePath = path.join(folderPath, 'Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
335
+ }
336
+ else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'linux') {
337
+ executablePath = path.join(folderPath, 'firefox', 'firefox');
338
+ }
339
+ else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win32' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win64') {
340
+ executablePath = path.join(folderPath, 'firefox', 'firefox.exe');
341
+ }
342
+ else {
343
+ throw new Error('Unsupported platform: ' + __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"));
344
+ }
345
+ }
346
+ else {
347
+ throw new Error('Unsupported product: ' + __classPrivateFieldGet(this, _BrowserFetcher_product, "f"));
348
+ }
349
+ const url = _downloadURL(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f"), revision);
350
+ const local = fs.existsSync(folderPath);
351
+ console.log({
352
+ revision,
353
+ executablePath,
354
+ folderPath,
355
+ local,
356
+ url,
357
+ product: __classPrivateFieldGet(this, _BrowserFetcher_product, "f"),
358
+ });
359
+ return {
360
+ revision,
361
+ executablePath,
362
+ folderPath,
363
+ local,
364
+ url,
365
+ product: __classPrivateFieldGet(this, _BrowserFetcher_product, "f"),
366
+ };
367
+ }
368
+ }
369
+ exports.BrowserFetcher = BrowserFetcher;
370
+ _BrowserFetcher_product = new WeakMap(), _BrowserFetcher_downloadsFolder = new WeakMap(), _BrowserFetcher_downloadHost = new WeakMap(), _BrowserFetcher_platform = new WeakMap(), _BrowserFetcher_instances = new WeakSet(), _BrowserFetcher_getFolderPath = function _BrowserFetcher_getFolderPath(revision) {
371
+ return path.resolve(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"), `${__classPrivateFieldGet(this, _BrowserFetcher_platform, "f")}-${revision}`);
372
+ };
373
+ function parseFolderPath(product, folderPath) {
374
+ const name = path.basename(folderPath);
375
+ const splits = name.split('-');
376
+ if (splits.length !== 2) {
377
+ return;
378
+ }
379
+ const [platform, revision] = splits;
380
+ if (!revision || !platform || !(platform in downloadURLs[product])) {
381
+ return;
382
+ }
383
+ return { product, platform, revision };
384
+ }
385
+ function _downloadFile(url, destinationPath, progressCallback) {
386
+ let fulfill;
387
+ let reject;
388
+ const promise = new Promise((x, y) => {
389
+ fulfill = x;
390
+ reject = y;
391
+ });
392
+ let downloadedBytes = 0;
393
+ let totalBytes = 0;
394
+ const request = httpRequest(url, 'GET', (response) => {
395
+ if (response.statusCode !== 200) {
396
+ const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`);
397
+ // consume response data to free up memory
398
+ response.resume();
399
+ reject(error);
400
+ return;
401
+ }
402
+ const file = fs.createWriteStream(destinationPath);
403
+ file.on('finish', () => {
404
+ return fulfill();
405
+ });
406
+ file.on('error', (error) => {
407
+ return reject(error);
408
+ });
409
+ response.pipe(file);
410
+ totalBytes = parseInt(response.headers['content-length'], 10);
411
+ response.on('data', onData);
412
+ });
413
+ request.on('error', (error) => {
414
+ return reject(error);
415
+ });
416
+ return promise;
417
+ function onData(chunk) {
418
+ downloadedBytes += chunk.length;
419
+ progressCallback(downloadedBytes, totalBytes);
420
+ }
421
+ }
422
+ function install(archivePath, folderPath) {
423
+ if (archivePath.endsWith('.zip')) {
424
+ return (0, extract_zip_1.default)(archivePath, { dir: folderPath });
425
+ }
426
+ if (archivePath.endsWith('.tar.bz2')) {
427
+ throw new Error('bz2 currently not implemented');
428
+ }
429
+ if (archivePath.endsWith('.dmg')) {
430
+ return mkdirAsync(folderPath).then(() => {
431
+ return _installDMG(archivePath, folderPath);
432
+ });
433
+ }
434
+ throw new Error(`Unsupported archive format: ${archivePath}`);
435
+ }
436
+ function _installDMG(dmgPath, folderPath) {
437
+ let mountPath;
438
+ return new Promise((fulfill, reject) => {
439
+ const mountCommand = `hdiutil attach -nobrowse -noautoopen "${dmgPath}"`;
440
+ childProcess.exec(mountCommand, (err, stdout) => {
441
+ if (err) {
442
+ return reject(err);
443
+ }
444
+ const volumes = stdout.match(/\/Volumes\/(.*)/m);
445
+ if (!volumes) {
446
+ return reject(new Error(`Could not find volume path in ${stdout}`));
447
+ }
448
+ mountPath = volumes[0];
449
+ readdirAsync(mountPath)
450
+ .then((fileNames) => {
451
+ const appName = fileNames.find((item) => {
452
+ return typeof item === 'string' && item.endsWith('.app');
453
+ });
454
+ if (!appName) {
455
+ return reject(new Error(`Cannot find app in ${mountPath}`));
456
+ }
457
+ const copyPath = path.join(mountPath, appName);
458
+ childProcess.exec(`cp -R "${copyPath}" "${folderPath}"`, (_err) => {
459
+ if (_err) {
460
+ reject(_err);
461
+ }
462
+ else {
463
+ fulfill();
464
+ }
465
+ });
466
+ })
467
+ .catch(reject);
468
+ });
469
+ })
470
+ .catch((error) => {
471
+ console.error(error);
472
+ })
473
+ .finally(() => {
474
+ if (!mountPath) {
475
+ return;
476
+ }
477
+ const unmountCommand = `hdiutil detach "${mountPath}" -quiet`;
478
+ childProcess.exec(unmountCommand, (err) => {
479
+ if (err) {
480
+ console.error(`Error unmounting dmg: ${err}`);
481
+ }
482
+ });
483
+ });
484
+ }
485
+ function httpRequest(url, method, response, keepAlive = true) {
486
+ const urlParsed = URL.parse(url);
487
+ const options = {
488
+ ...urlParsed,
489
+ method,
490
+ headers: keepAlive
491
+ ? {
492
+ Connection: 'keep-alive',
493
+ }
494
+ : undefined,
495
+ };
496
+ const requestCallback = (res) => {
497
+ if (res.statusCode &&
498
+ res.statusCode >= 300 &&
499
+ res.statusCode < 400 &&
500
+ res.headers.location) {
501
+ httpRequest(res.headers.location, method, response);
502
+ }
503
+ else {
504
+ response(res);
505
+ }
506
+ };
507
+ const request = options.protocol === 'https:'
508
+ ? https.request(options, requestCallback)
509
+ : http.request(options, requestCallback);
510
+ request.end();
511
+ return request;
512
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright 2020 Google Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /// <reference types="node" />
17
+ import * as childProcess from 'child_process';
18
+ import { Connection } from './Connection';
19
+ import { LaunchOptions } from './LaunchOptions';
20
+ import { Product } from './Product';
21
+ export declare class BrowserRunner {
22
+ #private;
23
+ proc?: childProcess.ChildProcess;
24
+ connection?: Connection;
25
+ constructor({ product, executablePath, processArguments, userDataDir, isTempUserDataDir, }: {
26
+ product: Product;
27
+ executablePath: string;
28
+ processArguments: string[];
29
+ userDataDir: string;
30
+ isTempUserDataDir?: boolean;
31
+ });
32
+ start(options: LaunchOptions): void;
33
+ close(): Promise<void>;
34
+ kill(): void;
35
+ setupConnection(options: {
36
+ timeout: number;
37
+ preferredRevision: string;
38
+ }): Promise<Connection>;
39
+ }