@remotion/renderer 4.0.0-webhook.26 → 4.1.0-alpha1

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 (411) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +9 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +1 -0
  5. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  6. package/dist/assets/calculate-asset-positions.js +1 -0
  7. package/dist/assets/calculate-atempo.d.ts +0 -0
  8. package/dist/assets/calculate-atempo.js +0 -0
  9. package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
  10. package/dist/assets/convert-assets-to-file-urls.js +0 -0
  11. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  12. package/dist/assets/download-and-map-assets-to-file.js +49 -19
  13. package/dist/assets/download-file.d.ts +8 -5
  14. package/dist/assets/download-file.js +71 -8
  15. package/dist/assets/download-map.d.ts +8 -29
  16. package/dist/assets/download-map.js +15 -16
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +4 -3
  18. package/dist/assets/ffmpeg-volume-expression.js +5 -3
  19. package/dist/assets/flatten-volume-array.d.ts +0 -0
  20. package/dist/assets/flatten-volume-array.js +0 -0
  21. package/dist/assets/get-audio-channels.d.ts +2 -2
  22. package/dist/assets/get-audio-channels.js +14 -12
  23. package/dist/assets/read-file.d.ts +1 -1
  24. package/dist/assets/read-file.js +5 -7
  25. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  26. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  27. package/dist/assets/sanitize-filename.d.ts +0 -0
  28. package/dist/assets/sanitize-filename.js +0 -0
  29. package/dist/assets/sanitize-filepath.d.ts +0 -0
  30. package/dist/assets/sanitize-filepath.js +2 -2
  31. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  32. package/dist/assets/truncate-utf8-bytes.js +0 -0
  33. package/dist/assets/types.d.ts +5 -4
  34. package/dist/assets/types.js +0 -0
  35. package/dist/audio-codec.d.ts +28 -0
  36. package/dist/audio-codec.js +83 -0
  37. package/dist/browser/Browser.d.ts +16 -14
  38. package/dist/browser/Browser.js +69 -72
  39. package/dist/browser/BrowserConnector.d.ts +0 -0
  40. package/dist/browser/BrowserConnector.js +0 -0
  41. package/dist/browser/BrowserFetcher.d.ts +16 -64
  42. package/dist/browser/BrowserFetcher.js +147 -235
  43. package/dist/browser/BrowserPage.d.ts +21 -6
  44. package/dist/browser/BrowserPage.js +54 -22
  45. package/dist/browser/BrowserRunner.d.ts +1 -1
  46. package/dist/browser/BrowserRunner.js +32 -22
  47. package/dist/browser/Connection.d.ts +0 -0
  48. package/dist/browser/Connection.js +1 -1
  49. package/dist/browser/ConsoleMessage.d.ts +1 -1
  50. package/dist/browser/ConsoleMessage.js +0 -0
  51. package/dist/browser/DOMWorld.d.ts +5 -4
  52. package/dist/browser/DOMWorld.js +16 -9
  53. package/dist/browser/Errors.d.ts +0 -0
  54. package/dist/browser/Errors.js +0 -0
  55. package/dist/browser/EvalTypes.d.ts +7 -7
  56. package/dist/browser/EvalTypes.js +0 -0
  57. package/dist/browser/EventEmitter.d.ts +0 -0
  58. package/dist/browser/EventEmitter.js +0 -0
  59. package/dist/browser/ExecutionContext.d.ts +0 -0
  60. package/dist/browser/ExecutionContext.js +0 -0
  61. package/dist/browser/FrameManager.d.ts +0 -2
  62. package/dist/browser/FrameManager.js +13 -17
  63. package/dist/browser/HTTPRequest.d.ts +0 -0
  64. package/dist/browser/HTTPRequest.js +0 -0
  65. package/dist/browser/HTTPResponse.d.ts +0 -0
  66. package/dist/browser/HTTPResponse.js +0 -0
  67. package/dist/browser/JSHandle.d.ts +0 -0
  68. package/dist/browser/JSHandle.js +14 -14
  69. package/dist/browser/LaunchOptions.d.ts +2 -2
  70. package/dist/browser/LaunchOptions.js +0 -0
  71. package/dist/browser/Launcher.d.ts +9 -3
  72. package/dist/browser/Launcher.js +16 -29
  73. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  74. package/dist/browser/LifecycleWatcher.js +0 -0
  75. package/dist/browser/NetworkEventManager.d.ts +4 -4
  76. package/dist/browser/NetworkEventManager.js +0 -0
  77. package/dist/browser/NetworkManager.d.ts +0 -0
  78. package/dist/browser/NetworkManager.js +0 -0
  79. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  80. package/dist/browser/NodeWebSocketTransport.js +21 -21
  81. package/dist/browser/Product.d.ts +1 -1
  82. package/dist/browser/Product.js +0 -0
  83. package/dist/browser/PuppeteerNode.d.ts +2 -5
  84. package/dist/browser/PuppeteerNode.js +2 -11
  85. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  86. package/dist/browser/PuppeteerViewport.js +0 -0
  87. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  88. package/dist/browser/ScreenshotOptions.js +0 -1
  89. package/dist/browser/Target.d.ts +4 -3
  90. package/dist/browser/Target.js +8 -2
  91. package/dist/browser/TaskQueue.d.ts +0 -0
  92. package/dist/browser/TaskQueue.js +0 -0
  93. package/dist/browser/TimeoutSettings.d.ts +0 -0
  94. package/dist/browser/TimeoutSettings.js +0 -0
  95. package/dist/browser/assert.d.ts +0 -0
  96. package/dist/browser/assert.js +0 -0
  97. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  98. package/dist/browser/create-browser-fetcher.js +34 -48
  99. package/dist/browser/devtools-commands.d.ts +5 -1
  100. package/dist/browser/devtools-commands.js +0 -0
  101. package/dist/browser/devtools-types.d.ts +92 -10
  102. package/dist/browser/devtools-types.js +0 -0
  103. package/dist/browser/get-download-destination.d.ts +0 -0
  104. package/dist/browser/get-download-destination.js +8 -8
  105. package/dist/browser/is-target-closed-err.d.ts +1 -0
  106. package/dist/browser/is-target-closed-err.js +9 -0
  107. package/dist/browser/mitt/index.d.ts +6 -6
  108. package/dist/browser/mitt/index.js +0 -0
  109. package/dist/browser/node.d.ts +0 -0
  110. package/dist/browser/node.js +0 -0
  111. package/dist/browser/revisions.d.ts +1 -1
  112. package/dist/browser/revisions.js +0 -0
  113. package/dist/browser/should-log-message.d.ts +24 -0
  114. package/dist/browser/should-log-message.js +72 -0
  115. package/dist/browser/util.d.ts +2 -2
  116. package/dist/browser/util.js +0 -0
  117. package/dist/browser-executable.d.ts +1 -1
  118. package/dist/browser-executable.js +0 -0
  119. package/dist/browser-log.d.ts +1 -1
  120. package/dist/browser-log.js +0 -0
  121. package/dist/browser.d.ts +1 -1
  122. package/dist/browser.js +0 -0
  123. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  124. package/dist/calculate-ffmpeg-filters.js +1 -0
  125. package/dist/call-ffmpeg.d.ts +14 -0
  126. package/dist/call-ffmpeg.js +42 -0
  127. package/dist/can-use-parallel-encoding.d.ts +0 -0
  128. package/dist/can-use-parallel-encoding.js +0 -0
  129. package/dist/chalk/index.d.ts +54 -0
  130. package/dist/chalk/index.js +135 -0
  131. package/dist/chalk/is-color-supported.d.ts +1 -0
  132. package/dist/chalk/is-color-supported.js +37 -0
  133. package/dist/check-apple-silicon.d.ts +1 -1
  134. package/dist/check-apple-silicon.js +8 -47
  135. package/dist/chunk.d.ts +0 -0
  136. package/dist/chunk.js +0 -0
  137. package/dist/client.d.ts +204 -0
  138. package/dist/client.js +49 -0
  139. package/dist/codec-supports-media.d.ts +3 -2
  140. package/dist/codec-supports-media.js +20 -5
  141. package/dist/codec.d.ts +2 -2
  142. package/dist/codec.js +0 -0
  143. package/dist/combine-videos.d.ts +6 -2
  144. package/dist/combine-videos.js +17 -17
  145. package/dist/compositor/compose.d.ts +26 -0
  146. package/dist/compositor/compose.js +82 -0
  147. package/dist/compositor/compositor.d.ts +11 -0
  148. package/dist/compositor/compositor.js +219 -0
  149. package/dist/compositor/get-executable-path.d.ts +1 -0
  150. package/dist/compositor/get-executable-path.js +57 -0
  151. package/dist/compositor/make-nonce.d.ts +1 -0
  152. package/dist/compositor/make-nonce.js +8 -0
  153. package/dist/compositor/payloads.d.ts +68 -0
  154. package/dist/{ffmpeg-executable.js → compositor/payloads.js} +0 -0
  155. package/dist/compress-assets.d.ts +0 -0
  156. package/dist/compress-assets.js +0 -0
  157. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  158. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  159. package/dist/convert-to-positive-frame-index.d.ts +0 -0
  160. package/dist/convert-to-positive-frame-index.js +0 -0
  161. package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
  162. package/dist/create-ffmpeg-complex-filter.js +6 -4
  163. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  164. package/dist/create-ffmpeg-merge-filter.js +21 -13
  165. package/dist/create-silent-audio.d.ts +1 -3
  166. package/dist/create-silent-audio.js +3 -6
  167. package/dist/crf.d.ts +6 -2
  168. package/dist/crf.js +41 -8
  169. package/dist/cycle-browser-tabs.d.ts +2 -5
  170. package/dist/cycle-browser-tabs.js +5 -5
  171. package/dist/delay-render-embedded-stack.d.ts +0 -0
  172. package/dist/delay-render-embedded-stack.js +0 -0
  173. package/dist/delete-directory.d.ts +1 -1
  174. package/dist/delete-directory.js +43 -17
  175. package/dist/does-have-m2-bug.d.ts +3 -0
  176. package/dist/does-have-m2-bug.js +12 -0
  177. package/dist/ensure-frames-in-order.d.ts +0 -0
  178. package/dist/ensure-frames-in-order.js +0 -0
  179. package/dist/ensure-output-directory.d.ts +0 -0
  180. package/dist/ensure-output-directory.js +5 -5
  181. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  182. package/dist/error-handling/handle-javascript-exception.js +10 -0
  183. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicate-error.js +6 -3
  185. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  186. package/dist/error-handling/symbolicateable-error.js +0 -0
  187. package/dist/ffmpeg-filter-file.d.ts +6 -1
  188. package/dist/ffmpeg-filter-file.js +40 -8
  189. package/dist/ffmpeg-override.d.ts +1 -1
  190. package/dist/ffmpeg-override.js +0 -0
  191. package/dist/file-extensions.d.ts +14 -0
  192. package/dist/file-extensions.js +76 -0
  193. package/dist/find-closest-package-json.d.ts +2 -0
  194. package/dist/find-closest-package-json.js +31 -0
  195. package/dist/frame-range.d.ts +1 -1
  196. package/dist/frame-range.js +0 -0
  197. package/dist/get-browser-instance.d.ts +8 -3
  198. package/dist/get-browser-instance.js +10 -5
  199. package/dist/get-codec-name.d.ts +0 -0
  200. package/dist/get-codec-name.js +0 -0
  201. package/dist/get-compositions.d.ts +27 -14
  202. package/dist/get-compositions.js +72 -39
  203. package/dist/get-concurrency.d.ts +1 -1
  204. package/dist/get-concurrency.js +11 -4
  205. package/dist/get-duration-from-frame-range.d.ts +0 -0
  206. package/dist/get-duration-from-frame-range.js +0 -0
  207. package/dist/get-extension-from-codec.d.ts +5 -1
  208. package/dist/get-extension-from-codec.js +56 -32
  209. package/dist/get-extension-of-filename.d.ts +0 -0
  210. package/dist/get-extension-of-filename.js +5 -1
  211. package/dist/get-frame-padded-index.d.ts +3 -2
  212. package/dist/get-frame-padded-index.js +3 -2
  213. package/dist/get-frame-to-render.d.ts +0 -0
  214. package/dist/get-frame-to-render.js +1 -1
  215. package/dist/get-local-browser-executable.d.ts +0 -0
  216. package/dist/get-local-browser-executable.js +7 -15
  217. package/dist/get-port.d.ts +4 -1
  218. package/dist/get-port.js +8 -8
  219. package/dist/get-prores-profile-name.d.ts +0 -0
  220. package/dist/get-prores-profile-name.js +0 -0
  221. package/dist/get-video-threads-flag.d.ts +0 -0
  222. package/dist/get-video-threads-flag.js +3 -3
  223. package/dist/guess-extension-for-media.d.ts +3 -1
  224. package/dist/guess-extension-for-media.js +4 -7
  225. package/dist/image-format.d.ts +12 -6
  226. package/dist/image-format.js +19 -13
  227. package/dist/index.d.ts +368 -49
  228. package/dist/index.js +68 -46
  229. package/dist/is-audio-codec.d.ts +0 -0
  230. package/dist/is-audio-codec.js +0 -0
  231. package/dist/is-serve-url.d.ts +0 -0
  232. package/dist/is-serve-url.js +0 -0
  233. package/dist/jpeg-quality.d.ts +2 -0
  234. package/dist/jpeg-quality.js +22 -0
  235. package/dist/locks.d.ts +7 -0
  236. package/dist/locks.js +44 -0
  237. package/dist/log-level.d.ts +1 -1
  238. package/dist/log-level.js +0 -0
  239. package/dist/logger.d.ts +24 -0
  240. package/dist/logger.js +68 -0
  241. package/dist/make-cancel-signal.d.ts +13 -2
  242. package/dist/make-cancel-signal.js +24 -1
  243. package/dist/merge-audio-track.d.ts +4 -4
  244. package/dist/merge-audio-track.js +38 -33
  245. package/dist/mime-db.d.ts +0 -0
  246. package/dist/mime-db.js +0 -0
  247. package/dist/mime-types.d.ts +0 -0
  248. package/dist/mime-types.js +3 -3
  249. package/dist/normalize-serve-url.d.ts +0 -0
  250. package/dist/normalize-serve-url.js +0 -0
  251. package/dist/offthread-video-server.d.ts +47 -11
  252. package/dist/offthread-video-server.js +111 -58
  253. package/dist/open-browser.d.ts +21 -6
  254. package/dist/open-browser.js +37 -16
  255. package/dist/options/audio-bitrate.d.ts +2 -0
  256. package/dist/options/audio-bitrate.js +11 -0
  257. package/dist/options/crf.d.ts +2 -0
  258. package/dist/options/crf.js +11 -0
  259. package/dist/options/enforce-audio.d.ts +2 -0
  260. package/dist/options/enforce-audio.js +11 -0
  261. package/dist/options/jpeg-quality.d.ts +2 -0
  262. package/dist/options/jpeg-quality.js +11 -0
  263. package/dist/options/mute.d.ts +2 -0
  264. package/dist/options/mute.js +11 -0
  265. package/dist/options/option.d.ts +8 -0
  266. package/dist/options/option.js +2 -0
  267. package/dist/options/scale.d.ts +2 -0
  268. package/dist/options/scale.js +11 -0
  269. package/dist/options/video-bitrate.d.ts +2 -0
  270. package/dist/options/video-bitrate.js +11 -0
  271. package/dist/options/video-codec.d.ts +2 -0
  272. package/dist/options/video-codec.js +11 -0
  273. package/dist/overwrite.d.ts +0 -0
  274. package/dist/overwrite.js +0 -0
  275. package/dist/p-limit.d.ts +0 -0
  276. package/dist/p-limit.js +0 -0
  277. package/dist/parse-browser-error-stack.d.ts +1 -1
  278. package/dist/parse-browser-error-stack.js +0 -0
  279. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  280. package/dist/parse-ffmpeg-progress.js +0 -0
  281. package/dist/perf.d.ts +2 -2
  282. package/dist/perf.js +9 -7
  283. package/dist/pixel-format.d.ts +2 -2
  284. package/dist/pixel-format.js +3 -0
  285. package/dist/pool.d.ts +0 -0
  286. package/dist/pool.js +0 -0
  287. package/dist/prepare-server.d.ts +25 -10
  288. package/dist/prepare-server.js +71 -18
  289. package/dist/preprocess-audio-track.d.ts +7 -5
  290. package/dist/preprocess-audio-track.js +7 -8
  291. package/dist/prespawn-ffmpeg.d.ts +20 -10
  292. package/dist/prespawn-ffmpeg.js +67 -29
  293. package/dist/prestitcher-memory-usage.d.ts +0 -4
  294. package/dist/prestitcher-memory-usage.js +4 -5
  295. package/dist/prores-profile.d.ts +6 -4
  296. package/dist/prores-profile.js +8 -8
  297. package/dist/provide-screenshot.d.ts +8 -4
  298. package/dist/provide-screenshot.js +5 -2
  299. package/dist/puppeteer-evaluate.d.ts +0 -0
  300. package/dist/puppeteer-evaluate.js +20 -12
  301. package/dist/puppeteer-screenshot.d.ts +12 -2
  302. package/dist/puppeteer-screenshot.js +18 -45
  303. package/dist/redirect-status-codes.d.ts +1 -0
  304. package/dist/redirect-status-codes.js +6 -0
  305. package/dist/render-frames.d.ts +52 -35
  306. package/dist/render-frames.js +248 -143
  307. package/dist/render-media.d.ts +76 -29
  308. package/dist/render-media.js +324 -195
  309. package/dist/render-still.d.ts +46 -19
  310. package/dist/render-still.js +128 -69
  311. package/dist/replace-browser.d.ts +6 -0
  312. package/dist/replace-browser.js +47 -0
  313. package/dist/resolve-asset-src.d.ts +0 -0
  314. package/dist/resolve-asset-src.js +2 -2
  315. package/dist/sample-rate.d.ts +0 -0
  316. package/dist/sample-rate.js +0 -0
  317. package/dist/screenshot-dom-element.d.ts +8 -4
  318. package/dist/screenshot-dom-element.js +15 -4
  319. package/dist/screenshot-task.d.ts +11 -2
  320. package/dist/screenshot-task.js +43 -13
  321. package/dist/seek-to-frame.d.ts +1 -0
  322. package/dist/seek-to-frame.js +49 -3
  323. package/dist/select-composition.d.ts +41 -0
  324. package/dist/select-composition.js +156 -0
  325. package/dist/serve-handler/index.d.ts +1 -1
  326. package/dist/serve-handler/index.js +21 -19
  327. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  328. package/dist/serve-handler/is-path-inside.js +3 -3
  329. package/dist/serve-handler/range-parser.d.ts +0 -0
  330. package/dist/serve-handler/range-parser.js +0 -0
  331. package/dist/serve-static.d.ts +8 -6
  332. package/dist/serve-static.js +85 -59
  333. package/dist/set-props-and-env.d.ts +5 -3
  334. package/dist/set-props-and-env.js +18 -10
  335. package/dist/stitch-frames-to-video.d.ts +39 -16
  336. package/dist/stitch-frames-to-video.js +210 -121
  337. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  338. package/dist/stringify-ffmpeg-filter.js +37 -34
  339. package/dist/symbolicate-stacktrace.d.ts +16 -3
  340. package/dist/symbolicate-stacktrace.js +49 -24
  341. package/dist/take-frame-and-compose.d.ts +22 -0
  342. package/dist/take-frame-and-compose.js +103 -0
  343. package/dist/tmp-dir.d.ts +0 -0
  344. package/dist/tmp-dir.js +7 -8
  345. package/dist/truthy.d.ts +1 -1
  346. package/dist/truthy.js +0 -0
  347. package/dist/types.d.ts +2 -2
  348. package/dist/types.js +0 -0
  349. package/dist/validate-concurrency.d.ts +2 -0
  350. package/dist/validate-concurrency.js +21 -10
  351. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  352. package/dist/validate-even-dimensions-with-codec.js +0 -0
  353. package/dist/validate-every-nth-frame.d.ts +2 -1
  354. package/dist/validate-every-nth-frame.js +8 -1
  355. package/dist/validate-ffmpeg-override.d.ts +0 -0
  356. package/dist/validate-ffmpeg-override.js +0 -0
  357. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  358. package/dist/validate-number-of-gif-loops.js +24 -0
  359. package/dist/validate-opengl-renderer.d.ts +2 -3
  360. package/dist/validate-opengl-renderer.js +9 -4
  361. package/dist/validate-output-filename.d.ts +7 -2
  362. package/dist/validate-output-filename.js +20 -51
  363. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  364. package/dist/validate-puppeteer-timeout.js +1 -0
  365. package/dist/validate-scale.d.ts +0 -0
  366. package/dist/validate-scale.js +0 -0
  367. package/dist/validate-videobitrate.d.ts +1 -0
  368. package/dist/validate-videobitrate.js +20 -0
  369. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  370. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  371. package/dist/ws/ws-types.d.ts +0 -0
  372. package/dist/ws/ws-types.js +2 -1
  373. package/install-toolchain.mjs +36 -0
  374. package/package.json +70 -60
  375. package/types/ws/index.d.ts +5 -5
  376. package/.prettierrc.js +0 -14
  377. package/dist/assets/dl-browser.d.ts +0 -1
  378. package/dist/assets/dl-browser.js +0 -38
  379. package/dist/assets/get-video-stream-duration.d.ts +0 -4
  380. package/dist/assets/get-video-stream-duration.js +0 -59
  381. package/dist/calculate-sar-dar-pixels.d.ts +0 -9
  382. package/dist/calculate-sar-dar-pixels.js +0 -19
  383. package/dist/convert-to-pcm.d.ts +0 -6
  384. package/dist/convert-to-pcm.js +0 -20
  385. package/dist/ensure-presentation-timestamp.d.ts +0 -2
  386. package/dist/ensure-presentation-timestamp.js +0 -69
  387. package/dist/extract-frame-from-video.d.ts +0 -16
  388. package/dist/extract-frame-from-video.js +0 -277
  389. package/dist/ffmpeg-executable.d.ts +0 -1
  390. package/dist/ffmpeg-flags.d.ts +0 -12
  391. package/dist/ffmpeg-flags.js +0 -45
  392. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -1
  393. package/dist/frame-to-ffmpeg-timestamp.js +0 -8
  394. package/dist/get-audio-codec-name.d.ts +0 -2
  395. package/dist/get-audio-codec-name.js +0 -28
  396. package/dist/get-video-info.d.ts +0 -3
  397. package/dist/get-video-info.js +0 -49
  398. package/dist/is-beyond-last-frame.d.ts +0 -3
  399. package/dist/is-beyond-last-frame.js +0 -12
  400. package/dist/last-frame-from-video-cache.d.ts +0 -17
  401. package/dist/last-frame-from-video-cache.js +0 -55
  402. package/dist/legacy-webpack-config.d.ts +0 -9
  403. package/dist/legacy-webpack-config.js +0 -13
  404. package/dist/quality.d.ts +0 -1
  405. package/dist/quality.js +0 -21
  406. package/dist/validate-ffmpeg.d.ts +0 -2
  407. package/dist/validate-ffmpeg.js +0 -72
  408. package/dist/validate-frame.d.ts +0 -1
  409. package/dist/validate-frame.js +0 -24
  410. package/tsconfig.json +0 -10
  411. package/vitest.config.ts +0 -8
@@ -1,9 +1,55 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.seekToFrame = void 0;
3
+ exports.seekToFrame = exports.waitForReady = void 0;
4
+ const symbolicateable_error_1 = require("./error-handling/symbolicateable-error");
5
+ const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
4
6
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
7
+ const waitForReady = (page) => {
8
+ return Promise.race([
9
+ new Promise((_, reject) => {
10
+ page.on("disposed" /* PageEmittedEvents.Disposed */, () => {
11
+ reject(new Error('Target closed (page disposed)'));
12
+ });
13
+ }),
14
+ new Promise((_, reject) => {
15
+ page.browser.on("closed-silent" /* BrowserEmittedEvents.ClosedSilent */, () => {
16
+ reject(new Error('Target closed'));
17
+ });
18
+ }),
19
+ page
20
+ .mainFrame()
21
+ ._mainWorld.waitForFunction(page.browser, 'window.remotion_renderReady === true')
22
+ .catch((err) => {
23
+ throw err;
24
+ }),
25
+ page
26
+ .mainFrame()
27
+ ._mainWorld.waitForFunction(page.browser, 'window.remotion_cancelledError !== undefined')
28
+ .then(() => {
29
+ return (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
30
+ pageFunction: () => window.remotion_cancelledError,
31
+ args: [],
32
+ frame: null,
33
+ page,
34
+ });
35
+ })
36
+ .then((val) => {
37
+ if (typeof val !== 'string') {
38
+ throw val;
39
+ }
40
+ throw new symbolicateable_error_1.SymbolicateableError({
41
+ frame: null,
42
+ stack: val,
43
+ name: 'CancelledError',
44
+ message: val.split('\n')[0],
45
+ stackFrame: (0, parse_browser_error_stack_1.parseStack)(val.split('\n')),
46
+ });
47
+ }),
48
+ ]);
49
+ };
50
+ exports.waitForReady = waitForReady;
5
51
  const seekToFrame = async ({ frame, page, }) => {
6
- await page.waitForFunction(page.browser, 'window.ready === true');
52
+ await (0, exports.waitForReady)(page);
7
53
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
8
54
  pageFunction: (f) => {
9
55
  window.remotion_setFrame(f);
@@ -12,7 +58,7 @@ const seekToFrame = async ({ frame, page, }) => {
12
58
  frame,
13
59
  page,
14
60
  });
15
- await page.waitForFunction(page.browser, 'window.ready === true');
61
+ await (0, exports.waitForReady)(page);
16
62
  await page.evaluateHandle('document.fonts.ready');
17
63
  };
18
64
  exports.seekToFrame = seekToFrame;
@@ -0,0 +1,41 @@
1
+ import type { AnyCompMetadata } from 'remotion';
2
+ import type { BrowserExecutable } from './browser-executable';
3
+ import type { BrowserLog } from './browser-log';
4
+ import type { HeadlessBrowser } from './browser/Browser';
5
+ import type { ChromiumOptions } from './open-browser';
6
+ import type { RemotionServer } from './prepare-server';
7
+ type InternalSelectCompositionsConfig = {
8
+ inputProps: Record<string, unknown>;
9
+ envVariables: Record<string, string>;
10
+ puppeteerInstance: HeadlessBrowser | undefined;
11
+ onBrowserLog: null | ((log: BrowserLog) => void);
12
+ browserExecutable: BrowserExecutable | null;
13
+ timeoutInMilliseconds: number;
14
+ chromiumOptions: ChromiumOptions;
15
+ port: number | null;
16
+ indent: boolean;
17
+ server: RemotionServer | undefined;
18
+ verbose: boolean;
19
+ serveUrl: string;
20
+ id: string;
21
+ };
22
+ export type SelectCompositionOptions = {
23
+ inputProps?: Record<string, unknown> | null;
24
+ envVariables?: Record<string, string>;
25
+ puppeteerInstance?: HeadlessBrowser;
26
+ onBrowserLog?: (log: BrowserLog) => void;
27
+ browserExecutable?: BrowserExecutable;
28
+ timeoutInMilliseconds?: number;
29
+ chromiumOptions?: ChromiumOptions;
30
+ port?: number | null;
31
+ verbose?: boolean;
32
+ serveUrl: string;
33
+ id: string;
34
+ };
35
+ export declare const internalSelectComposition: (options: InternalSelectCompositionsConfig) => Promise<AnyCompMetadata>;
36
+ /**
37
+ * @description Gets a composition defined in a Remotion project based on a Webpack bundle.
38
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
39
+ */
40
+ export declare const selectComposition: (options: SelectCompositionOptions) => Promise<AnyCompMetadata>;
41
+ export {};
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.selectComposition = exports.internalSelectComposition = void 0;
4
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
5
+ const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
6
+ const find_closest_package_json_1 = require("./find-closest-package-json");
7
+ const get_browser_instance_1 = require("./get-browser-instance");
8
+ const logger_1 = require("./logger");
9
+ const prepare_server_1 = require("./prepare-server");
10
+ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
11
+ const seek_to_frame_1 = require("./seek-to-frame");
12
+ const set_props_and_env_1 = require("./set-props-and-env");
13
+ const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
14
+ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, indent, verbose, }) => {
15
+ if (onBrowserLog) {
16
+ page.on('console', (log) => {
17
+ onBrowserLog({
18
+ stackTrace: log.stackTrace(),
19
+ text: log.text,
20
+ type: log.type,
21
+ });
22
+ });
23
+ }
24
+ (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
25
+ await (0, set_props_and_env_1.setPropsAndEnv)({
26
+ inputProps,
27
+ envVariables,
28
+ page,
29
+ serveUrl,
30
+ initialFrame: 0,
31
+ timeoutInMilliseconds,
32
+ proxyPort: port,
33
+ retriesRemaining: 2,
34
+ audioEnabled: false,
35
+ videoEnabled: false,
36
+ });
37
+ await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
38
+ page,
39
+ pageFunction: () => {
40
+ window.remotion_setBundleMode({
41
+ type: 'evaluation',
42
+ });
43
+ },
44
+ frame: null,
45
+ args: [],
46
+ });
47
+ await (0, seek_to_frame_1.waitForReady)(page);
48
+ logger_1.Log.verboseAdvanced({
49
+ indent,
50
+ tag: 'selectComposition()',
51
+ logLevel: verbose ? 'verbose' : 'info',
52
+ }, 'Running calculateMetadata()...');
53
+ const time = Date.now();
54
+ const result = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
55
+ pageFunction: (_id) => {
56
+ return window.remotion_calculateComposition(_id);
57
+ },
58
+ frame: null,
59
+ page,
60
+ args: [id],
61
+ });
62
+ logger_1.Log.verboseAdvanced({
63
+ indent,
64
+ tag: 'selectComposition()',
65
+ logLevel: verbose ? 'verbose' : 'info',
66
+ }, `calculateMetadata() took ${Date.now() - time}ms`);
67
+ return result;
68
+ };
69
+ const internalSelectComposition = async (options) => {
70
+ const cleanup = [];
71
+ const { puppeteerInstance, browserExecutable, chromiumOptions, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, envVariables, id, inputProps, onBrowserLog, server, timeoutInMilliseconds, } = options;
72
+ const { page, cleanup: cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
73
+ passedInInstance: puppeteerInstance,
74
+ browserExecutable,
75
+ chromiumOptions,
76
+ context: null,
77
+ forceDeviceScaleFactor: undefined,
78
+ indent,
79
+ shouldDumpIo: verbose,
80
+ });
81
+ cleanup.push(() => cleanupPage());
82
+ return new Promise((resolve, reject) => {
83
+ const onError = (err) => reject(err);
84
+ cleanup.push((0, handle_javascript_exception_1.handleJavascriptException)({
85
+ page,
86
+ frame: null,
87
+ onError,
88
+ }));
89
+ (0, prepare_server_1.makeOrReuseServer)(options.server, {
90
+ webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
91
+ port,
92
+ remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
93
+ concurrency: 1,
94
+ verbose,
95
+ indent,
96
+ }, {
97
+ onDownload: () => undefined,
98
+ onError,
99
+ })
100
+ .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
101
+ page.setBrowserSourceMapContext(sourceMap);
102
+ cleanup.push(() => cleanupServer(true));
103
+ return innerSelectComposition({
104
+ serveUrl,
105
+ page,
106
+ port: offthreadPort,
107
+ browserExecutable,
108
+ chromiumOptions,
109
+ envVariables,
110
+ id,
111
+ inputProps,
112
+ onBrowserLog,
113
+ timeoutInMilliseconds,
114
+ verbose,
115
+ indent,
116
+ puppeteerInstance,
117
+ server,
118
+ });
119
+ })
120
+ .then((comp) => {
121
+ return resolve(comp);
122
+ })
123
+ .catch((err) => {
124
+ reject(err);
125
+ })
126
+ .finally(() => {
127
+ cleanup.forEach((c) => {
128
+ c();
129
+ });
130
+ });
131
+ });
132
+ };
133
+ exports.internalSelectComposition = internalSelectComposition;
134
+ /**
135
+ * @description Gets a composition defined in a Remotion project based on a Webpack bundle.
136
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
137
+ */
138
+ const selectComposition = (options) => {
139
+ const { id, serveUrl, browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, verbose, } = options;
140
+ return (0, exports.internalSelectComposition)({
141
+ id,
142
+ serveUrl,
143
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
144
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
145
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
146
+ inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
147
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
148
+ port: port !== null && port !== void 0 ? port : null,
149
+ puppeteerInstance,
150
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
151
+ verbose: verbose !== null && verbose !== void 0 ? verbose : false,
152
+ indent: false,
153
+ server: undefined,
154
+ });
155
+ };
156
+ exports.selectComposition = selectComposition;
@@ -1,4 +1,4 @@
1
- import type { IncomingMessage, ServerResponse } from 'http';
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
2
  export declare const serveHandler: (request: IncomingMessage, response: ServerResponse, config: {
3
3
  public: string;
4
4
  }) => Promise<void>;
@@ -4,15 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.serveHandler = void 0;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const url_1 = __importDefault(require("url"));
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_url_1 = __importDefault(require("node:url"));
10
10
  const mime_types_1 = require("../mime-types");
11
11
  // Packages
12
12
  const is_path_inside_1 = require("./is-path-inside");
13
13
  const range_parser_1 = require("./range-parser");
14
14
  const getHeaders = (absolutePath, stats) => {
15
- const { base } = path_1.default.parse(absolutePath);
15
+ const { base } = node_path_1.default.parse(absolutePath);
16
16
  let defaultHeaders = {};
17
17
  if (stats) {
18
18
  defaultHeaders = {
@@ -28,19 +28,19 @@ const getHeaders = (absolutePath, stats) => {
28
28
  return defaultHeaders;
29
29
  };
30
30
  const getPossiblePaths = (relativePath, extension) => [
31
- path_1.default.join(relativePath, `index${extension}`),
31
+ node_path_1.default.join(relativePath, `index${extension}`),
32
32
  relativePath.endsWith('/')
33
33
  ? relativePath.replace(/\/$/g, extension)
34
34
  : relativePath + extension,
35
- ].filter((item) => path_1.default.basename(item) !== extension);
35
+ ].filter((item) => node_path_1.default.basename(item) !== extension);
36
36
  const findRelated = async (current, relativePath) => {
37
37
  const possible = getPossiblePaths(relativePath, '.html');
38
38
  let stats = null;
39
39
  for (let index = 0; index < possible.length; index++) {
40
40
  const related = possible[index];
41
- const absolutePath = path_1.default.join(current, related);
41
+ const absolutePath = node_path_1.default.join(current, related);
42
42
  try {
43
- stats = await fs_1.promises.lstat(absolutePath);
43
+ stats = await node_fs_1.promises.lstat(absolutePath);
44
44
  }
45
45
  catch (err) {
46
46
  if (err.code !== 'ENOENT' &&
@@ -59,10 +59,11 @@ const findRelated = async (current, relativePath) => {
59
59
  };
60
60
  const sendError = (absolutePath, response, spec) => {
61
61
  const { message, statusCode } = spec;
62
- response.statusCode = statusCode;
63
62
  const headers = getHeaders(absolutePath, null);
64
- response.writeHead(statusCode, headers);
65
- response.setHeader('content-type', 'application/json');
63
+ response.writeHead(statusCode, {
64
+ ...headers,
65
+ 'Content-Type': 'application/json',
66
+ });
66
67
  response.end(JSON.stringify({ statusCode, message }));
67
68
  };
68
69
  const internalError = (absolutePath, response) => {
@@ -74,10 +75,10 @@ const internalError = (absolutePath, response) => {
74
75
  };
75
76
  const serveHandler = async (request, response, config) => {
76
77
  const cwd = process.cwd();
77
- const current = path_1.default.resolve(cwd, config.public);
78
+ const current = node_path_1.default.resolve(cwd, config.public);
78
79
  let relativePath = null;
79
80
  try {
80
- relativePath = decodeURIComponent(url_1.default.parse(request.url).pathname);
81
+ relativePath = decodeURIComponent(node_url_1.default.parse(request.url).pathname);
81
82
  }
82
83
  catch (err) {
83
84
  return sendError('/', response, {
@@ -86,7 +87,7 @@ const serveHandler = async (request, response, config) => {
86
87
  message: 'Bad Request',
87
88
  });
88
89
  }
89
- let absolutePath = path_1.default.join(current, relativePath);
90
+ let absolutePath = node_path_1.default.join(current, relativePath);
90
91
  // Prevent path traversal vulnerabilities. We could do this
91
92
  // by ourselves, but using the package covers all the edge cases.
92
93
  if (!(0, is_path_inside_1.isPathInside)(absolutePath, current)) {
@@ -108,9 +109,9 @@ const serveHandler = async (request, response, config) => {
108
109
  // directory exists requires loading all the file paths and then checking if
109
110
  // one of them includes the path of the directory. As that's a very
110
111
  // performance-expensive thing to do, we need to ensure it's not happening if not really necessary.
111
- if (path_1.default.extname(relativePath) !== '') {
112
+ if (node_path_1.default.extname(relativePath) !== '') {
112
113
  try {
113
- stats = await fs_1.promises.lstat(absolutePath);
114
+ stats = await node_fs_1.promises.lstat(absolutePath);
114
115
  }
115
116
  catch (err) {
116
117
  if (err.code !== 'ENOENT' &&
@@ -123,7 +124,8 @@ const serveHandler = async (request, response, config) => {
123
124
  try {
124
125
  const related = await findRelated(current, relativePath);
125
126
  if (related) {
126
- ({ stats, absolutePath } = related);
127
+ stats = related.stats;
128
+ absolutePath = related.absolutePath;
127
129
  }
128
130
  }
129
131
  catch (err) {
@@ -133,7 +135,7 @@ const serveHandler = async (request, response, config) => {
133
135
  }
134
136
  }
135
137
  try {
136
- stats = await fs_1.promises.lstat(absolutePath);
138
+ stats = await node_fs_1.promises.lstat(absolutePath);
137
139
  }
138
140
  catch (err) {
139
141
  if (err.code !== 'ENOENT' &&
@@ -188,7 +190,7 @@ const serveHandler = async (request, response, config) => {
188
190
  }
189
191
  let stream = null;
190
192
  try {
191
- stream = (0, fs_1.createReadStream)(absolutePath, streamOpts !== null && streamOpts !== void 0 ? streamOpts : {});
193
+ stream = (0, node_fs_1.createReadStream)(absolutePath, streamOpts !== null && streamOpts !== void 0 ? streamOpts : {});
192
194
  }
193
195
  catch (err) {
194
196
  return internalError(absolutePath, response);
File without changes
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.isPathInside = void 0;
7
- const path_1 = __importDefault(require("path"));
7
+ const node_path_1 = __importDefault(require("node:path"));
8
8
  const isPathInside = function (thePath, potentialParent) {
9
9
  // For inside-directory checking, we want to allow trailing slashes, so normalize.
10
10
  thePath = stripTrailingSep(thePath);
@@ -15,12 +15,12 @@ const isPathInside = function (thePath, potentialParent) {
15
15
  potentialParent = potentialParent.toLowerCase();
16
16
  }
17
17
  return (thePath.lastIndexOf(potentialParent, 0) === 0 &&
18
- (thePath[potentialParent.length] === path_1.default.sep ||
18
+ (thePath[potentialParent.length] === node_path_1.default.sep ||
19
19
  thePath[potentialParent.length] === undefined));
20
20
  };
21
21
  exports.isPathInside = isPathInside;
22
22
  function stripTrailingSep(thePath) {
23
- if (thePath[thePath.length - 1] === path_1.default.sep) {
23
+ if (thePath[thePath.length - 1] === node_path_1.default.sep) {
24
24
  return thePath.slice(0, -1);
25
25
  }
26
26
  return thePath;
File without changes
File without changes
@@ -1,14 +1,16 @@
1
- import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
1
  import type { DownloadMap } from './assets/download-map';
3
- import type { FfmpegExecutable } from './ffmpeg-executable';
2
+ import type { Compositor } from './compositor/compositor';
3
+ import type { OffthreadVideoServerEmitter } from './offthread-video-server';
4
4
  export declare const serveStatic: (path: string | null, options: {
5
5
  port: number | null;
6
- ffmpegExecutable: FfmpegExecutable;
7
- ffprobeExecutable: FfmpegExecutable;
8
- onDownload: RenderMediaOnDownload;
9
- onError: (err: Error) => void;
10
6
  downloadMap: DownloadMap;
7
+ remotionRoot: string;
8
+ concurrency: number;
9
+ verbose: boolean;
10
+ indent: boolean;
11
11
  }) => Promise<{
12
12
  port: number;
13
13
  close: () => Promise<void>;
14
+ compositor: Compositor;
15
+ events: OffthreadVideoServerEmitter;
14
16
  }>;
@@ -4,76 +4,102 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.serveStatic = void 0;
7
- const http_1 = __importDefault(require("http"));
7
+ const node_http_1 = __importDefault(require("node:http"));
8
8
  const get_port_1 = require("./get-port");
9
9
  const offthread_video_server_1 = require("./offthread-video-server");
10
10
  const serve_handler_1 = require("./serve-handler");
11
11
  const serveStatic = async (path, options) => {
12
- var _a;
13
- const port = await (0, get_port_1.getDesiredPort)((_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : undefined, 3000, 3100);
14
- const offthreadRequest = (0, offthread_video_server_1.startOffthreadVideoServer)({
15
- ffmpegExecutable: options.ffmpegExecutable,
16
- ffprobeExecutable: options.ffprobeExecutable,
17
- onDownload: options.onDownload,
18
- onError: options.onError,
12
+ const { listener: offthreadRequest, close: closeCompositor, compositor, events, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
19
13
  downloadMap: options.downloadMap,
14
+ concurrency: options.concurrency,
15
+ verbose: options.verbose,
16
+ indent: options.indent,
20
17
  });
21
- try {
22
- const connections = {};
23
- const server = http_1.default
24
- .createServer((request, response) => {
25
- var _a;
26
- if ((_a = request.url) === null || _a === void 0 ? void 0 : _a.startsWith('/proxy')) {
27
- return offthreadRequest(request, response);
28
- }
29
- if (path === null) {
30
- response.writeHead(404);
31
- response.end('Server only supports /proxy');
32
- return;
18
+ const connections = {};
19
+ const server = node_http_1.default.createServer((request, response) => {
20
+ var _a;
21
+ if ((_a = request.url) === null || _a === void 0 ? void 0 : _a.startsWith('/proxy')) {
22
+ return offthreadRequest(request, response);
23
+ }
24
+ if (path === null) {
25
+ response.writeHead(404);
26
+ response.end('Server only supports /proxy');
27
+ return;
28
+ }
29
+ (0, serve_handler_1.serveHandler)(request, response, {
30
+ public: path,
31
+ }).catch(() => {
32
+ if (!response.headersSent) {
33
+ response.writeHead(500);
33
34
  }
34
- (0, serve_handler_1.serveHandler)(request, response, {
35
- public: path,
36
- }).catch(() => {
37
- response.statusCode = 500;
38
- response.end('Error serving file');
39
- });
40
- })
41
- .listen(port);
42
- server.on('connection', (conn) => {
43
- const key = conn.remoteAddress + ':' + conn.remotePort;
44
- connections[key] = conn;
45
- conn.on('close', () => {
46
- delete connections[key];
47
- });
35
+ response.end('Error serving file');
36
+ });
37
+ });
38
+ server.on('connection', (conn) => {
39
+ const key = conn.remoteAddress + ':' + conn.remotePort;
40
+ connections[key] = conn;
41
+ conn.on('close', () => {
42
+ delete connections[key];
48
43
  });
49
- const destroyConnections = function () {
50
- for (const key in connections)
51
- connections[key].destroy();
52
- };
53
- const close = () => {
54
- return new Promise((resolve, reject) => {
55
- destroyConnections();
56
- server.close((err) => {
57
- if (err) {
58
- if (err.code === 'ERR_SERVER_NOT_RUNNING') {
59
- return resolve();
60
- }
44
+ });
45
+ let selectedPort = null;
46
+ const maxTries = 5;
47
+ for (let i = 0; i < maxTries; i++) {
48
+ try {
49
+ selectedPort = await new Promise((resolve, reject) => {
50
+ var _a;
51
+ (0, get_port_1.getDesiredPort)((_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : undefined, 3000, 3100)
52
+ .then(({ port, didUsePort }) => {
53
+ server.listen(port);
54
+ server.on('listening', () => {
55
+ resolve(port);
56
+ return didUsePort();
57
+ });
58
+ server.on('error', (err) => {
61
59
  reject(err);
62
- }
63
- else {
64
- resolve();
65
- }
66
- });
60
+ });
61
+ })
62
+ .catch((err) => reject(err));
67
63
  });
68
- };
69
- return { port, close };
70
- }
71
- catch (err) {
72
- console.log({ err, msg: err.message });
73
- if (err.message.includes('EADDRINUSE')) {
74
- return (0, exports.serveStatic)(path, options);
64
+ const destroyConnections = function () {
65
+ for (const key in connections)
66
+ connections[key].destroy();
67
+ };
68
+ const close = async () => {
69
+ await Promise.all([
70
+ closeCompositor(),
71
+ new Promise((resolve, reject) => {
72
+ destroyConnections();
73
+ server.close((err) => {
74
+ if (err) {
75
+ if (err.code ===
76
+ 'ERR_SERVER_NOT_RUNNING') {
77
+ return resolve();
78
+ }
79
+ reject(err);
80
+ }
81
+ else {
82
+ resolve();
83
+ }
84
+ });
85
+ }),
86
+ ]);
87
+ };
88
+ return { port: selectedPort, close, compositor, events };
89
+ }
90
+ catch (err) {
91
+ if (!(err instanceof Error)) {
92
+ throw err;
93
+ }
94
+ const codedError = err;
95
+ if (codedError.code === 'EADDRINUSE') {
96
+ // Already in use, try another port
97
+ }
98
+ else {
99
+ throw err;
100
+ }
75
101
  }
76
- throw err;
77
102
  }
103
+ throw new Error(`Tried ${maxTries} times to find a free port. Giving up.`);
78
104
  };
79
105
  exports.serveStatic = serveStatic;
@@ -1,6 +1,6 @@
1
1
  import type { Page } from './browser/BrowserPage';
2
- export declare const setPropsAndEnv: ({ inputProps, envVariables, page, serveUrl, initialFrame, timeoutInMilliseconds, proxyPort, retriesRemaining, audioEnabled, videoEnabled, }: {
3
- inputProps: unknown;
2
+ type SetPropsAndEnv = {
3
+ inputProps: Record<string, unknown>;
4
4
  envVariables: Record<string, string> | undefined;
5
5
  page: Page;
6
6
  serveUrl: string;
@@ -10,4 +10,6 @@ export declare const setPropsAndEnv: ({ inputProps, envVariables, page, serveUrl
10
10
  retriesRemaining: number;
11
11
  audioEnabled: boolean;
12
12
  videoEnabled: boolean;
13
- }) => Promise<void>;
13
+ };
14
+ export declare const setPropsAndEnv: (params: SetPropsAndEnv) => Promise<unknown>;
15
+ export {};