@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,15 +1,28 @@
1
+ import type { BasicSourceMapConsumer, IndexedSourceMapConsumer } from 'source-map';
2
+ import { SourceMapConsumer } from 'source-map';
1
3
  import type { UnsymbolicatedStackFrame } from './parse-browser-error-stack';
2
- declare type ScriptLine = {
4
+ type ScriptLine = {
3
5
  lineNumber: number;
4
6
  content: string;
5
7
  highlight: boolean;
6
8
  };
7
- export declare type SymbolicatedStackFrame = {
9
+ export type SymbolicatedStackFrame = {
8
10
  originalFunctionName: string | null;
9
11
  originalFileName: string | null;
10
12
  originalLineNumber: number | null;
11
13
  originalColumnNumber: number | null;
12
14
  originalScriptCode: ScriptLine[] | null;
13
15
  };
14
- export declare const symbolicateStackTrace: (frames: UnsymbolicatedStackFrame[]) => Promise<SymbolicatedStackFrame[]>;
16
+ export declare const symbolicateStackTraceFromRemoteFrames: (frames: UnsymbolicatedStackFrame[]) => Promise<SymbolicatedStackFrame[]>;
17
+ export declare const symbolicateFromSources: (frames: UnsymbolicatedStackFrame[], mapValues: Record<string, SourceMapConsumer | null>) => SymbolicatedStackFrame[];
18
+ export declare const symbolicateStackFrame: (frame: UnsymbolicatedStackFrame, map: SourceMapConsumer) => {
19
+ originalColumnNumber: number | null;
20
+ originalFileName: string | null;
21
+ originalFunctionName: string | null;
22
+ originalLineNumber: number | null;
23
+ originalScriptCode: ScriptLine[] | null;
24
+ };
25
+ export declare const getSourceMapFromRemoteFile: (fileName: string) => Promise<IndexedSourceMapConsumer | null>;
26
+ export declare const getSourceMapFromLocalFile: (fileName: string) => Promise<IndexedSourceMapConsumer | null>;
27
+ export type AnySourceMapConsumer = BasicSourceMapConsumer | IndexedSourceMapConsumer;
15
28
  export {};
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.symbolicateStackTrace = void 0;
6
+ exports.getSourceMapFromLocalFile = exports.getSourceMapFromRemoteFile = exports.symbolicateStackFrame = exports.symbolicateFromSources = exports.symbolicateStackTraceFromRemoteFrames = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
4
9
  const source_map_1 = require("source-map");
5
10
  const read_file_1 = require("./assets/read-file");
6
11
  const truthy_1 = require("./truthy");
@@ -19,7 +24,7 @@ function extractSourceMapUrl(fileContents) {
19
24
  }
20
25
  return match[1].toString();
21
26
  }
22
- async function getSourceMap(fileUri, fileContents) {
27
+ const getSourceMap = async (filePath, fileContents, type) => {
23
28
  const sm = extractSourceMapUrl(fileContents);
24
29
  if (sm === null) {
25
30
  return null;
@@ -33,11 +38,16 @@ async function getSourceMap(fileUri, fileContents) {
33
38
  const converted = window.atob(sm.substring(match2[0].length));
34
39
  return new source_map_1.SourceMapConsumer(JSON.parse(converted));
35
40
  }
36
- const index = fileUri.lastIndexOf('/');
37
- const url = fileUri.substring(0, index + 1) + sm;
41
+ if (type === 'local') {
42
+ // Find adjacent file: bundle.js -> bundle.js.map
43
+ const newFilePath = path_1.default.join(path_1.default.dirname(filePath), sm);
44
+ return new source_map_1.SourceMapConsumer((0, fs_1.readFileSync)(newFilePath, 'utf8'));
45
+ }
46
+ const index = filePath.lastIndexOf('/');
47
+ const url = filePath.substring(0, index + 1) + sm;
38
48
  const obj = await fetchUrl(url);
39
49
  return new source_map_1.SourceMapConsumer(obj);
40
- }
50
+ };
41
51
  const fetchUrl = async (url) => {
42
52
  const res = await (0, read_file_1.readFile)(url);
43
53
  return new Promise((resolve, reject) => {
@@ -69,42 +79,57 @@ const getOriginalPosition = (source_map, line, column) => {
69
79
  });
70
80
  return { line: result.line, column: result.column, source: result.source };
71
81
  };
72
- const symbolicateStackTrace = async (frames) => {
82
+ const symbolicateStackTraceFromRemoteFrames = async (frames) => {
73
83
  const uniqueFileNames = [
74
84
  ...new Set(frames
75
85
  .map((f) => f.fileName)
76
86
  .filter((f) => f.startsWith('http://') || f.startsWith('https://'))
77
87
  .filter(truthy_1.truthy)),
78
88
  ];
79
- const maps = await Promise.all(uniqueFileNames.map(async (fileName) => {
80
- const fileContents = await fetchUrl(fileName);
81
- return getSourceMap(fileName, fileContents);
89
+ const maps = await Promise.all(uniqueFileNames.map((fileName) => {
90
+ return (0, exports.getSourceMapFromRemoteFile)(fileName);
82
91
  }));
83
92
  const mapValues = {};
84
93
  for (let i = 0; i < uniqueFileNames.length; i++) {
85
94
  mapValues[uniqueFileNames[i]] = maps[i];
86
95
  }
96
+ return (0, exports.symbolicateFromSources)(frames, mapValues);
97
+ };
98
+ exports.symbolicateStackTraceFromRemoteFrames = symbolicateStackTraceFromRemoteFrames;
99
+ const symbolicateFromSources = (frames, mapValues) => {
87
100
  return frames
88
101
  .map((frame) => {
89
102
  const map = mapValues[frame.fileName];
90
103
  if (!map) {
91
104
  return null;
92
105
  }
93
- const pos = getOriginalPosition(map, frame.lineNumber, frame.columnNumber);
94
- const { functionName } = frame;
95
- let hasSource = null;
96
- hasSource = pos.source ? map.sourceContentFor(pos.source, false) : null;
97
- const scriptCode = hasSource && pos.line
98
- ? getLinesAround(pos.line, 3, hasSource.split('\n'))
99
- : null;
100
- return {
101
- originalColumnNumber: pos.column,
102
- originalFileName: pos.source,
103
- originalFunctionName: functionName,
104
- originalLineNumber: pos.line ? pos.line : null,
105
- originalScriptCode: scriptCode,
106
- };
106
+ return (0, exports.symbolicateStackFrame)(frame, map);
107
107
  })
108
108
  .filter(truthy_1.truthy);
109
109
  };
110
- exports.symbolicateStackTrace = symbolicateStackTrace;
110
+ exports.symbolicateFromSources = symbolicateFromSources;
111
+ const symbolicateStackFrame = (frame, map) => {
112
+ const pos = getOriginalPosition(map, frame.lineNumber, frame.columnNumber);
113
+ const hasSource = pos.source ? map.sourceContentFor(pos.source, false) : null;
114
+ const scriptCode = hasSource && pos.line
115
+ ? getLinesAround(pos.line, 3, hasSource.split('\n'))
116
+ : null;
117
+ return {
118
+ originalColumnNumber: pos.column,
119
+ originalFileName: pos.source,
120
+ originalFunctionName: frame.functionName,
121
+ originalLineNumber: pos.line,
122
+ originalScriptCode: scriptCode,
123
+ };
124
+ };
125
+ exports.symbolicateStackFrame = symbolicateStackFrame;
126
+ const getSourceMapFromRemoteFile = async (fileName) => {
127
+ const fileContents = await fetchUrl(fileName);
128
+ return getSourceMap(fileName, fileContents, 'remote');
129
+ };
130
+ exports.getSourceMapFromRemoteFile = getSourceMapFromRemoteFile;
131
+ const getSourceMapFromLocalFile = (fileName) => {
132
+ const fileContents = (0, fs_1.readFileSync)(fileName, 'utf8');
133
+ return getSourceMap(fileName, fileContents, 'local');
134
+ };
135
+ exports.getSourceMapFromLocalFile = getSourceMapFromLocalFile;
@@ -0,0 +1,22 @@
1
+ /// <reference types="node" />
2
+ import type { TAsset } from 'remotion';
3
+ import type { DownloadMap } from './assets/download-map';
4
+ import type { Page } from './browser/BrowserPage';
5
+ import type { Compositor } from './compositor/compositor';
6
+ import type { StillImageFormat, VideoImageFormat } from './image-format';
7
+ export declare const takeFrameAndCompose: ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, compositor, }: {
8
+ freePage: Page;
9
+ imageFormat: VideoImageFormat | StillImageFormat;
10
+ jpegQuality: number | undefined;
11
+ frame: number;
12
+ height: number;
13
+ width: number;
14
+ output: string | null;
15
+ scale: number;
16
+ downloadMap: DownloadMap;
17
+ wantsBuffer: boolean;
18
+ compositor: Compositor;
19
+ }) => Promise<{
20
+ buffer: Buffer | null;
21
+ collectedAssets: TAsset[];
22
+ }>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.takeFrameAndCompose = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const compose_1 = require("./compositor/compose");
10
+ const provide_screenshot_1 = require("./provide-screenshot");
11
+ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
12
+ const truthy_1 = require("./truthy");
13
+ const takeFrameAndCompose = async ({ freePage, imageFormat, jpegQuality, frame, width, height, output, scale, downloadMap, wantsBuffer, compositor, }) => {
14
+ var _a;
15
+ const [clipRegion, collectedAssets] = await Promise.all([
16
+ (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
17
+ pageFunction: () => {
18
+ if (typeof window.remotion_getClipRegion === 'undefined') {
19
+ return null;
20
+ }
21
+ return window.remotion_getClipRegion();
22
+ },
23
+ args: [],
24
+ frame,
25
+ page: freePage,
26
+ }),
27
+ (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
28
+ pageFunction: () => {
29
+ return window.remotion_collectAssets();
30
+ },
31
+ args: [],
32
+ frame,
33
+ page: freePage,
34
+ }),
35
+ ]);
36
+ if (imageFormat === 'none') {
37
+ return { buffer: null, collectedAssets };
38
+ }
39
+ const needsComposing = clipRegion === null
40
+ ? null
41
+ : {
42
+ tmpFile: node_path_1.default.join(downloadMap.compositingDir, `${frame}.${imageFormat}`),
43
+ finalOutFile: output !== null && output !== void 0 ? output : node_path_1.default.join(downloadMap.compositingDir, `${frame}-final.${imageFormat}`),
44
+ clipRegion: clipRegion,
45
+ };
46
+ if (clipRegion !== 'hide') {
47
+ const shouldMakeBuffer = wantsBuffer && !needsComposing;
48
+ const buf = await (0, provide_screenshot_1.provideScreenshot)({
49
+ page: freePage,
50
+ imageFormat,
51
+ jpegQuality,
52
+ options: {
53
+ frame,
54
+ output: shouldMakeBuffer ? null : (_a = needsComposing === null || needsComposing === void 0 ? void 0 : needsComposing.tmpFile) !== null && _a !== void 0 ? _a : output,
55
+ },
56
+ height,
57
+ width,
58
+ clipRegion,
59
+ });
60
+ if (shouldMakeBuffer) {
61
+ return { buffer: buf, collectedAssets };
62
+ }
63
+ }
64
+ if (needsComposing) {
65
+ if (imageFormat === 'pdf') {
66
+ throw new Error("You cannot use compositor APIs (like <Clipper>) if `imageFormat` is 'pdf'.");
67
+ }
68
+ if (imageFormat === 'webp') {
69
+ throw new Error("You cannot use compositor APIs (like <Clipper>) if `imageFormat` is 'webp'.");
70
+ }
71
+ await (0, compose_1.compose)({
72
+ height: height * scale,
73
+ width: width * scale,
74
+ layers: [
75
+ needsComposing.clipRegion === 'hide'
76
+ ? null
77
+ : {
78
+ type: imageFormat === 'jpeg'
79
+ ? 'JpgImage'
80
+ : 'PngImage',
81
+ params: {
82
+ height: needsComposing.clipRegion.height * scale,
83
+ width: needsComposing.clipRegion.width * scale,
84
+ src: needsComposing.tmpFile,
85
+ x: needsComposing.clipRegion.x * scale,
86
+ y: needsComposing.clipRegion.y * scale,
87
+ },
88
+ },
89
+ ].filter(truthy_1.truthy),
90
+ output: needsComposing.finalOutFile,
91
+ downloadMap,
92
+ imageFormat: imageFormat === 'jpeg' ? 'Jpeg' : 'Png',
93
+ compositor,
94
+ });
95
+ if (wantsBuffer) {
96
+ const buffer = await node_fs_1.default.promises.readFile(needsComposing.finalOutFile);
97
+ await node_fs_1.default.promises.unlink(needsComposing.finalOutFile);
98
+ return { buffer, collectedAssets };
99
+ }
100
+ }
101
+ return { buffer: null, collectedAssets };
102
+ };
103
+ exports.takeFrameAndCompose = takeFrameAndCompose;
package/dist/tmp-dir.d.ts CHANGED
File without changes
package/dist/tmp-dir.js CHANGED
@@ -27,9 +27,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.tmpDir = void 0;
30
- const fs_1 = __importStar(require("fs"));
31
- const os_1 = __importDefault(require("os"));
32
- const path_1 = __importDefault(require("path"));
30
+ const node_fs_1 = __importStar(require("node:fs"));
31
+ const node_os_1 = __importDefault(require("node:os"));
32
+ const node_path_1 = __importDefault(require("node:path"));
33
33
  const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
34
34
  const randomHash = () => {
35
35
  return new Array(10)
@@ -40,15 +40,14 @@ const randomHash = () => {
40
40
  .join('');
41
41
  };
42
42
  const tmpDir = (str) => {
43
- var _a;
44
- const newDir = path_1.default.join(os_1.default.tmpdir(), str + randomHash());
45
- if (fs_1.default.existsSync(newDir)) {
46
- ((_a = fs_1.default.rmSync) !== null && _a !== void 0 ? _a : fs_1.default.rmdirSync)(newDir, {
43
+ const newDir = node_path_1.default.join(node_os_1.default.tmpdir(), str + randomHash());
44
+ if (node_fs_1.default.existsSync(newDir)) {
45
+ node_fs_1.default.rmSync(newDir, {
47
46
  recursive: true,
48
47
  force: true,
49
48
  });
50
49
  }
51
- (0, fs_1.mkdirSync)(newDir);
50
+ (0, node_fs_1.mkdirSync)(newDir);
52
51
  return newDir;
53
52
  };
54
53
  exports.tmpDir = tmpDir;
package/dist/truthy.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;
1
+ type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;
2
2
  export declare function truthy<T>(value: T): value is Truthy<T>;
3
3
  export {};
package/dist/truthy.js CHANGED
File without changes
package/dist/types.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import type { RenderAssetInfo } from './assets/download-map';
2
- export declare type RenderFramesOutput = {
2
+ export type RenderFramesOutput = {
3
3
  frameCount: number;
4
4
  assetsInfo: RenderAssetInfo;
5
5
  };
6
- export declare type OnStartData = {
6
+ export type OnStartData = {
7
7
  frameCount: number;
8
8
  };
package/dist/types.js CHANGED
File without changes
@@ -1 +1,3 @@
1
1
  export declare const validateConcurrency: (value: unknown, setting: string) => void;
2
+ export declare const getMaxConcurrency: () => any;
3
+ export declare const getMinConcurrency: () => number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateConcurrency = void 0;
3
+ exports.getMinConcurrency = exports.getMaxConcurrency = exports.validateConcurrency = void 0;
4
4
  const validateConcurrency = (value, setting) => {
5
5
  if (typeof value === 'undefined') {
6
6
  return;
@@ -8,17 +8,28 @@ const validateConcurrency = (value, setting) => {
8
8
  if (value === null) {
9
9
  return;
10
10
  }
11
- if (typeof value !== 'number') {
12
- throw new Error(setting + ' must be a number but is ' + value);
11
+ if (typeof value !== 'number' && typeof value !== 'string') {
12
+ throw new Error(setting + ' must a number or a string but is ' + value);
13
13
  }
14
- if (value % 1 !== 0) {
15
- throw new Error(setting + ' must be an integer, but is ' + value);
14
+ if (typeof value === 'number') {
15
+ if (value % 1 !== 0) {
16
+ throw new Error(setting + ' must be an integer, but is ' + value);
17
+ }
18
+ if (value < (0, exports.getMinConcurrency)()) {
19
+ throw new Error(`${setting} must be at least ${(0, exports.getMinConcurrency)()}, but is ${JSON.stringify(value)}`);
20
+ }
21
+ if (value > (0, exports.getMaxConcurrency)()) {
22
+ throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${(0, exports.getMaxConcurrency)()}, value set: ${value}`);
23
+ }
16
24
  }
17
- if (value < 1) {
18
- throw new Error(setting + ' must be at least 1, but is ' + value);
19
- }
20
- if (value > require('os').cpus().length) {
21
- throw new Error(`${setting} is set higher than the amount of CPU cores available. Available CPU cores: ${require('os').cpus().length}, value set: ${value}`);
25
+ else if (!/^\d+(\.\d+)?%$/.test(value)) {
26
+ throw new Error(`${setting} must be a number or percentage, but is ${JSON.stringify(value)}`);
22
27
  }
23
28
  };
24
29
  exports.validateConcurrency = validateConcurrency;
30
+ const getMaxConcurrency = () => {
31
+ return require('os').cpus().length;
32
+ };
33
+ exports.getMaxConcurrency = getMaxConcurrency;
34
+ const getMinConcurrency = () => 1;
35
+ exports.getMinConcurrency = getMinConcurrency;
File without changes
File without changes
@@ -1 +1,2 @@
1
- export declare const validateEveryNthFrame: (everyNthFrame: unknown) => void;
1
+ import type { Codec } from './codec';
2
+ export declare const validateEveryNthFrame: (everyNthFrame: unknown, codec: Codec) => 1 | undefined;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateEveryNthFrame = void 0;
4
- const validateEveryNthFrame = (everyNthFrame) => {
4
+ const validateEveryNthFrame = (everyNthFrame, codec) => {
5
5
  if (typeof everyNthFrame === 'undefined') {
6
6
  throw new TypeError(`Argument missing for parameter "everyNthFrame"`);
7
7
  }
@@ -17,5 +17,12 @@ const validateEveryNthFrame = (everyNthFrame) => {
17
17
  if (everyNthFrame % 1 !== 0) {
18
18
  throw new RangeError(`Argument for everyNthFrame must be an integer, but got ${everyNthFrame}`);
19
19
  }
20
+ if (everyNthFrame === 1) {
21
+ return everyNthFrame;
22
+ }
23
+ // h264-mkv because that is what is being used on Lambda
24
+ if (codec !== 'gif' && codec !== 'h264-mkv') {
25
+ throw new Error(`"everyNthFrame" can only be set if "codec" is set to "gif". The codec is "${codec}"`);
26
+ }
20
27
  };
21
28
  exports.validateEveryNthFrame = validateEveryNthFrame;
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ import type { Codec } from './codec';
2
+ export declare const validateNumberOfGifLoops: (numberOfGifLoops: unknown, codec: Codec) => void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateNumberOfGifLoops = void 0;
4
+ const validateNumberOfGifLoops = (numberOfGifLoops, codec) => {
5
+ if (typeof numberOfGifLoops === 'undefined' || numberOfGifLoops === null) {
6
+ return;
7
+ }
8
+ if (typeof numberOfGifLoops !== 'number') {
9
+ throw new TypeError(`Argument passed to "numberOfGifLoops" is not a number: ${numberOfGifLoops}`);
10
+ }
11
+ if (numberOfGifLoops < 0) {
12
+ throw new RangeError(`The value for "numberOfGifLoops" cannot be below 0, but is ${numberOfGifLoops}`);
13
+ }
14
+ if (!Number.isFinite(numberOfGifLoops)) {
15
+ throw new RangeError(`"numberOfGifLoops" ${numberOfGifLoops} is not finite`);
16
+ }
17
+ if (numberOfGifLoops % 1 !== 0) {
18
+ throw new RangeError(`Argument for numberOfGifLoops must be an integer, but got ${numberOfGifLoops}`);
19
+ }
20
+ if (codec !== 'gif') {
21
+ throw new Error(`"everyNthFrame" can only be set if "codec" is set to "gif". The codec is "${codec}"`);
22
+ }
23
+ };
24
+ exports.validateNumberOfGifLoops = validateNumberOfGifLoops;
@@ -1,5 +1,4 @@
1
- declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
2
- export declare type OpenGlRenderer = typeof validRenderers[number];
1
+ export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
2
+ export type OpenGlRenderer = typeof validOpenGlRenderers[number];
3
3
  export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
4
  export declare const validateOpenGlRenderer: (option: OpenGlRenderer | null) => OpenGlRenderer | null;
5
- export {};
@@ -1,14 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateOpenGlRenderer = exports.DEFAULT_OPENGL_RENDERER = void 0;
4
- const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
3
+ exports.validateOpenGlRenderer = exports.DEFAULT_OPENGL_RENDERER = exports.validOpenGlRenderers = void 0;
4
+ exports.validOpenGlRenderers = [
5
+ 'swangle',
6
+ 'angle',
7
+ 'egl',
8
+ 'swiftshader',
9
+ ];
5
10
  exports.DEFAULT_OPENGL_RENDERER = null;
6
11
  const validateOpenGlRenderer = (option) => {
7
12
  if (option === null) {
8
13
  return null;
9
14
  }
10
- if (!validRenderers.includes(option)) {
11
- throw new TypeError(`${option} is not a valid GL backend. Accepted values: ${validRenderers.join(', ')}`);
15
+ if (!exports.validOpenGlRenderers.includes(option)) {
16
+ throw new TypeError(`${option} is not a valid GL backend. Accepted values: ${exports.validOpenGlRenderers.join(', ')}`);
12
17
  }
13
18
  return option;
14
19
  };
@@ -1,2 +1,7 @@
1
- import type { Codec } from './codec';
2
- export declare const validateOutputFilename: (codec: Codec, extension: string | null) => void;
1
+ import type { AudioCodec } from './audio-codec';
2
+ export declare const validateOutputFilename: <T extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">({ codec, audioCodec, extension, preferLossless, }: {
3
+ codec: T;
4
+ audioCodec: AudioCodec | null;
5
+ extension: string;
6
+ preferLossless: boolean;
7
+ }) => void;
@@ -1,57 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateOutputFilename = void 0;
4
- const validateOutputFilename = (codec, extension) => {
5
- if (codec === 'h264') {
6
- if (extension !== 'mp4' && extension !== 'mkv') {
7
- throw new TypeError('When using the H264 codec, the output filename must end in .mp4 or .mkv.');
8
- }
9
- }
10
- if (codec === 'h264-mkv') {
11
- if (extension !== 'mkv') {
12
- throw new TypeError('When using the "h264-mkv" codec, the output filename must end in ".mkv".');
13
- }
14
- }
15
- if (codec === 'h265') {
16
- if (extension !== 'mp4' && extension !== 'hevc') {
17
- throw new TypeError('When using H265 codec, the output filename must end in .mp4 or .hevc.');
18
- }
19
- }
20
- if (codec === 'vp8' || codec === 'vp9') {
21
- if (extension !== 'webm') {
22
- throw new TypeError(`When using the ${codec.toUpperCase()} codec, the output filename must end in .webm.`);
23
- }
24
- }
25
- if (codec === 'prores') {
26
- const allowedProResExtensions = ['mov', 'mkv', 'mxf'];
27
- if (!extension || !allowedProResExtensions.includes(extension)) {
28
- throw new TypeError(`When using the 'prores' codec, the output must end in one of those extensions: ${allowedProResExtensions
29
- .map((a) => `.${a}`)
30
- .join(', ')}`);
31
- }
32
- }
33
- if (codec === 'mp3') {
34
- if (extension !== 'mp3') {
35
- throw new TypeError("When using the 'mp3' codec, the output must end in .mp3");
36
- }
37
- }
38
- if (codec === 'aac') {
39
- const allowedAacExtensions = ['aac', '3gp', 'm4a', 'm4b', 'mpg', 'mpeg'];
40
- if (!extension || !allowedAacExtensions.includes(extension)) {
41
- throw new TypeError(`When using the 'aac' codec, the output must end in one of those extensions: ${allowedAacExtensions
42
- .map((a) => `.${a}`)
43
- .join(', ')}`);
44
- }
45
- }
46
- if (codec === 'wav') {
47
- if (extension !== 'wav') {
48
- throw new TypeError("When using the 'wav' codec, the output location must end in .wav.");
49
- }
50
- }
51
- if (codec === 'gif') {
52
- if (extension !== 'gif') {
53
- throw new TypeError('When using the GIF codec, the output filename must end in .gif.');
54
- }
4
+ const audio_codec_1 = require("./audio-codec");
5
+ const file_extensions_1 = require("./file-extensions");
6
+ const validateOutputFilename = ({ codec, audioCodec, extension, preferLossless, }) => {
7
+ if (!file_extensions_1.defaultFileExtensionMap[codec]) {
8
+ throw new TypeError(`The codec "${codec}" is not supported. Supported codecs are: ${Object.keys(file_extensions_1.defaultFileExtensionMap).join(', ')}`);
9
+ }
10
+ const map = file_extensions_1.defaultFileExtensionMap[codec];
11
+ const resolvedAudioCodec = audioCodec !== null && audioCodec !== void 0 ? audioCodec : (0, audio_codec_1.getDefaultAudioCodec)({ codec, preferLossless });
12
+ if (resolvedAudioCodec === null) {
13
+ if (extension !== map.default) {
14
+ throw new TypeError(`When using the ${codec} codec, the output filename must end in .${map.default}.`);
15
+ }
16
+ return;
17
+ }
18
+ if (!(resolvedAudioCodec in map.forAudioCodec)) {
19
+ throw new Error(`Audio codec ${resolvedAudioCodec} is not supported for codec ${codec}`);
20
+ }
21
+ const acceptableExtensions = map.forAudioCodec[resolvedAudioCodec].possible;
22
+ if (!acceptableExtensions.includes(extension)) {
23
+ throw new TypeError(`When using the ${codec} codec with the ${resolvedAudioCodec} audio codec, the output filename must end in one of the following: ${acceptableExtensions.join(', ')}.`);
55
24
  }
56
25
  };
57
26
  exports.validateOutputFilename = validateOutputFilename;
File without changes
@@ -8,6 +8,7 @@ const validatePuppeteerTimeout = (timeoutInMilliseconds) => {
8
8
  if (typeof timeoutInMilliseconds !== 'number') {
9
9
  throw new TypeError(`'timeoutInMilliseconds' should be a number, but is: ${JSON.stringify(timeoutInMilliseconds)}`);
10
10
  }
11
+ // Value also appears in packages/cli/src/editor/components/RenderModal/RenderModalAdvanced.tsx
11
12
  if (timeoutInMilliseconds < 7000 && process.env.NODE_ENV !== 'test') {
12
13
  throw new TypeError(`'timeoutInMilliseconds' should be bigger or equal than 7000, but is ${timeoutInMilliseconds}`);
13
14
  }
File without changes
File without changes
@@ -0,0 +1 @@
1
+ export declare const validateBitrate: (bitrate: unknown, name: string) => void;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateBitrate = void 0;
4
+ const validateBitrate = (bitrate, name) => {
5
+ if (bitrate === null || typeof bitrate === 'undefined') {
6
+ return;
7
+ }
8
+ if (typeof bitrate === 'number') {
9
+ throw new TypeError(`"${name}" must be a string ending in "K" or "M". Got a number: ${bitrate}`);
10
+ }
11
+ if (typeof bitrate !== 'string') {
12
+ throw new TypeError(`"${name}" must be a string or null, but got ${JSON.stringify(bitrate)}`);
13
+ }
14
+ if (!bitrate.endsWith('K') &&
15
+ !bitrate.endsWith('k') &&
16
+ !bitrate.endsWith('M')) {
17
+ throw new TypeError(`"${name}" must end in "K", "k" or "M", but got ${JSON.stringify(bitrate)}`);
18
+ }
19
+ };
20
+ exports.validateBitrate = validateBitrate;
File without changes