@remotion/renderer 4.0.357 → 4.0.360

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 (654) hide show
  1. package/dist/render-frames.js +1 -1
  2. package/dist/test/actual-concurrency.test.d.ts +1 -0
  3. package/dist/test/artifacts.test.d.ts +1 -0
  4. package/dist/test/asset-calculation.test.d.ts +1 -0
  5. package/dist/test/asset-compression.test.d.ts +1 -0
  6. package/dist/test/avoid-ffmpeg-stackoverflow.test.d.ts +1 -0
  7. package/dist/test/browser-log-message.test.d.ts +1 -0
  8. package/dist/test/calculate-atempo.test.d.ts +1 -0
  9. package/dist/test/compositor-rust.test.d.ts +1 -0
  10. package/dist/test/crf.test.d.ts +1 -0
  11. package/dist/test/derive-codec-from-file-extension.test.d.ts +1 -0
  12. package/dist/test/dont-skip-assets.test.d.ts +1 -0
  13. package/dist/test/download-file.test.d.ts +1 -0
  14. package/dist/test/even-dimensions.test.d.ts +1 -0
  15. package/dist/test/extra-frames-to-capture.test.d.ts +1 -0
  16. package/dist/test/extract-audio.test.d.ts +1 -0
  17. package/dist/test/extract-frame-rust.test.d.ts +1 -0
  18. package/dist/test/ffmpeg-filters.test.d.ts +1 -0
  19. package/dist/test/ffmpeg-merge-filter.test.d.ts +1 -0
  20. package/dist/test/ffmpeg-volume-expression.test.d.ts +1 -0
  21. package/dist/test/file-extension.test.d.ts +1 -0
  22. package/dist/test/find-closest-package-json.test.d.ts +1 -0
  23. package/dist/test/flatten-volume-array.test.d.ts +1 -0
  24. package/dist/test/format-logs.test.d.ts +1 -0
  25. package/dist/test/frame-padded-index.test.d.ts +1 -0
  26. package/dist/test/frame.test.d.ts +1 -0
  27. package/dist/test/get-assets-for-markup.d.ts +8 -0
  28. package/dist/test/get-audio-channels.test.d.ts +1 -0
  29. package/dist/test/get-bundle-url-from-serve-url.test.d.ts +1 -0
  30. package/dist/test/get-silent-parts.test.d.ts +1 -0
  31. package/dist/test/guess-extension-for-media.test.d.ts +1 -0
  32. package/dist/test/handle-weird-file-names.test.d.ts +1 -0
  33. package/dist/test/log-level.test.d.ts +1 -0
  34. package/dist/test/mime-types.test.d.ts +1 -0
  35. package/dist/test/offthread-extract-url.test.d.ts +1 -0
  36. package/dist/test/parse-ffmpeg-progress.test.d.ts +1 -0
  37. package/dist/test/partitions.test.d.ts +1 -0
  38. package/dist/test/pixel-format.test.d.ts +1 -0
  39. package/dist/test/port-config.test.d.ts +1 -0
  40. package/dist/test/port-selection.test.d.ts +1 -0
  41. package/dist/test/prores-profile.test.d.ts +1 -0
  42. package/dist/test/render-still.test.d.ts +1 -0
  43. package/dist/test/rust-errors.test.d.ts +1 -0
  44. package/dist/test/rust-get-video-metadata.test.d.ts +1 -0
  45. package/dist/test/rust-memory-usage.test.d.ts +1 -0
  46. package/dist/test/sanitize-file-path.test.d.ts +1 -0
  47. package/dist/test/serve-url.test.d.ts +1 -0
  48. package/dist/test/symbolicate-remote-stack.test.d.ts +1 -0
  49. package/dist/test/validate-concurrency.test.d.ts +1 -0
  50. package/dist/test/validate-config-stitcher.test.d.ts +1 -0
  51. package/dist/test/validate-config.test.d.ts +1 -0
  52. package/dist/test/validate-even-dimensions-with-codec.test.d.ts +1 -0
  53. package/dist/test/validate-image-format.test.d.ts +1 -0
  54. package/dist/test/webpack-to-serve-url.test.d.ts +1 -0
  55. package/ensure-browser.mjs +18 -18
  56. package/package/dist/assets/apply-tone-frequency.d.ts +11 -0
  57. package/package/dist/assets/apply-tone-frequency.js +34 -0
  58. package/package/dist/assets/calculate-asset-positions.d.ts +3 -0
  59. package/package/dist/assets/calculate-asset-positions.js +72 -0
  60. package/package/dist/assets/calculate-atempo.d.ts +1 -0
  61. package/package/dist/assets/calculate-atempo.js +16 -0
  62. package/package/dist/assets/convert-assets-to-file-urls.d.ts +13 -0
  63. package/package/dist/assets/convert-assets-to-file-urls.js +36 -0
  64. package/package/dist/assets/download-and-map-assets-to-file.d.ts +37 -0
  65. package/package/dist/assets/download-and-map-assets-to-file.js +312 -0
  66. package/package/dist/assets/download-file.d.ts +18 -0
  67. package/package/dist/assets/download-file.js +135 -0
  68. package/package/dist/assets/download-map.d.ts +55 -0
  69. package/package/dist/assets/download-map.js +63 -0
  70. package/package/dist/assets/ffmpeg-volume-expression.d.ts +12 -0
  71. package/package/dist/assets/ffmpeg-volume-expression.js +96 -0
  72. package/package/dist/assets/flatten-volume-array.d.ts +3 -0
  73. package/package/dist/assets/flatten-volume-array.js +26 -0
  74. package/package/dist/assets/get-audio-channels.d.ts +20 -0
  75. package/package/dist/assets/get-audio-channels.js +78 -0
  76. package/package/dist/assets/inline-audio-mixing.d.ts +22 -0
  77. package/package/dist/assets/inline-audio-mixing.js +189 -0
  78. package/package/dist/assets/read-file.d.ts +7 -0
  79. package/package/dist/assets/read-file.js +97 -0
  80. package/package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +1 -0
  81. package/package/dist/assets/round-volume-to-avoid-stack-overflow.js +17 -0
  82. package/package/dist/assets/sanitize-filename.d.ts +1 -0
  83. package/package/dist/assets/sanitize-filename.js +58 -0
  84. package/package/dist/assets/sanitize-filepath.d.ts +1 -0
  85. package/package/dist/assets/sanitize-filepath.js +16 -0
  86. package/package/dist/assets/truncate-utf8-bytes.d.ts +1 -0
  87. package/package/dist/assets/truncate-utf8-bytes.js +36 -0
  88. package/package/dist/assets/types.d.ts +18 -0
  89. package/package/dist/assets/types.js +21 -0
  90. package/package/dist/browser/Browser.d.ts +97 -0
  91. package/package/dist/browser/Browser.js +246 -0
  92. package/package/dist/browser/BrowserFetcher.d.ts +33 -0
  93. package/package/dist/browser/BrowserFetcher.js +215 -0
  94. package/package/dist/browser/BrowserPage.d.ts +104 -0
  95. package/package/dist/browser/BrowserPage.js +436 -0
  96. package/package/dist/browser/BrowserRunner.d.ts +33 -0
  97. package/package/dist/browser/BrowserRunner.js +303 -0
  98. package/package/dist/browser/Connection.d.ts +49 -0
  99. package/package/dist/browser/Connection.js +258 -0
  100. package/package/dist/browser/ConsoleMessage.d.ts +42 -0
  101. package/package/dist/browser/ConsoleMessage.js +47 -0
  102. package/package/dist/browser/DOMWorld.d.ts +56 -0
  103. package/package/dist/browser/DOMWorld.js +272 -0
  104. package/package/dist/browser/Errors.d.ts +25 -0
  105. package/package/dist/browser/Errors.js +35 -0
  106. package/package/dist/browser/EvalTypes.d.ts +27 -0
  107. package/package/dist/browser/EvalTypes.js +17 -0
  108. package/package/dist/browser/EventEmitter.d.ts +23 -0
  109. package/package/dist/browser/EventEmitter.js +53 -0
  110. package/package/dist/browser/ExecutionContext.d.ts +34 -0
  111. package/package/dist/browser/ExecutionContext.js +174 -0
  112. package/package/dist/browser/FrameManager.d.ts +89 -0
  113. package/package/dist/browser/FrameManager.js +487 -0
  114. package/package/dist/browser/HTTPRequest.d.ts +29 -0
  115. package/package/dist/browser/HTTPRequest.js +39 -0
  116. package/package/dist/browser/HTTPResponse.d.ts +21 -0
  117. package/package/dist/browser/HTTPResponse.js +41 -0
  118. package/package/dist/browser/JSHandle.d.ts +35 -0
  119. package/package/dist/browser/JSHandle.js +90 -0
  120. package/package/dist/browser/LaunchOptions.d.ts +26 -0
  121. package/package/dist/browser/LaunchOptions.js +17 -0
  122. package/package/dist/browser/Launcher.d.ts +18 -0
  123. package/package/dist/browser/Launcher.js +41 -0
  124. package/package/dist/browser/LifecycleWatcher.d.ts +29 -0
  125. package/package/dist/browser/LifecycleWatcher.js +180 -0
  126. package/package/dist/browser/NetworkEventManager.d.ts +34 -0
  127. package/package/dist/browser/NetworkEventManager.js +85 -0
  128. package/package/dist/browser/NetworkManager.d.ts +37 -0
  129. package/package/dist/browser/NetworkManager.js +246 -0
  130. package/package/dist/browser/NodeWebSocketTransport.d.ts +19 -0
  131. package/package/dist/browser/NodeWebSocketTransport.js +81 -0
  132. package/package/dist/browser/PuppeteerViewport.d.ts +5 -0
  133. package/package/dist/browser/PuppeteerViewport.js +2 -0
  134. package/package/dist/browser/ScreenshotOptions.d.ts +0 -0
  135. package/package/dist/browser/ScreenshotOptions.js +1 -0
  136. package/package/dist/browser/Target.d.ts +72 -0
  137. package/package/dist/browser/Target.js +161 -0
  138. package/package/dist/browser/TaskQueue.d.ts +20 -0
  139. package/package/dist/browser/TaskQueue.js +47 -0
  140. package/package/dist/browser/TimeoutSettings.d.ts +24 -0
  141. package/package/dist/browser/TimeoutSettings.js +62 -0
  142. package/package/dist/browser/assert.d.ts +1 -0
  143. package/package/dist/browser/assert.js +9 -0
  144. package/package/dist/browser/browser-download-progress-bar.d.ts +7 -0
  145. package/package/dist/browser/browser-download-progress-bar.js +31 -0
  146. package/package/dist/browser/devtools-commands.d.ts +274 -0
  147. package/package/dist/browser/devtools-commands.js +2 -0
  148. package/package/dist/browser/devtools-types.d.ts +1263 -0
  149. package/package/dist/browser/devtools-types.js +2 -0
  150. package/package/dist/browser/flaky-errors.d.ts +2 -0
  151. package/package/dist/browser/flaky-errors.js +20 -0
  152. package/package/dist/browser/get-download-destination.d.ts +1 -0
  153. package/package/dist/browser/get-download-destination.js +38 -0
  154. package/package/dist/browser/handle-failed-resource.d.ts +10 -0
  155. package/package/dist/browser/handle-failed-resource.js +21 -0
  156. package/package/dist/browser/mitt/index.d.ts +22 -0
  157. package/package/dist/browser/mitt/index.js +49 -0
  158. package/package/dist/browser/should-log-message.d.ts +24 -0
  159. package/package/dist/browser/should-log-message.js +104 -0
  160. package/package/dist/browser/source-map-getter.d.ts +2 -0
  161. package/package/dist/browser/source-map-getter.js +2 -0
  162. package/package/dist/browser/util.d.ts +37 -0
  163. package/package/dist/browser/util.js +169 -0
  164. package/package/dist/browser-executable.d.ts +1 -0
  165. package/package/dist/browser-executable.js +2 -0
  166. package/package/dist/browser-log.d.ts +6 -0
  167. package/package/dist/browser-log.js +2 -0
  168. package/package/dist/browser.d.ts +2 -0
  169. package/package/dist/browser.js +4 -0
  170. package/package/dist/call-ffmpeg.d.ts +22 -0
  171. package/package/dist/call-ffmpeg.js +53 -0
  172. package/package/dist/can-concat-seamlessly.d.ts +4 -0
  173. package/package/dist/can-concat-seamlessly.js +17 -0
  174. package/package/dist/can-use-parallel-encoding.d.ts +3 -0
  175. package/package/dist/can-use-parallel-encoding.js +19 -0
  176. package/package/dist/chalk/index.d.ts +55 -0
  177. package/package/dist/chalk/index.js +130 -0
  178. package/package/dist/chalk/is-color-supported.d.ts +1 -0
  179. package/package/dist/chalk/is-color-supported.js +55 -0
  180. package/package/dist/check-version-requirements.d.ts +3 -0
  181. package/package/dist/check-version-requirements.js +82 -0
  182. package/package/dist/chunk.d.ts +1 -0
  183. package/package/dist/chunk.js +11 -0
  184. package/package/dist/client.d.ts +3016 -0
  185. package/package/dist/client.js +57 -0
  186. package/package/dist/codec-supports-media.d.ts +9 -0
  187. package/package/dist/codec-supports-media.js +76 -0
  188. package/package/dist/codec.d.ts +4 -0
  189. package/package/dist/codec.js +17 -0
  190. package/package/dist/collect-assets.d.ts +7 -0
  191. package/package/dist/collect-assets.js +38 -0
  192. package/package/dist/combine-audio.d.ts +21 -0
  193. package/package/dist/combine-audio.js +183 -0
  194. package/package/dist/combine-chunks.d.ts +39 -0
  195. package/package/dist/combine-chunks.js +171 -0
  196. package/package/dist/combine-video-streams-seamlessly.d.ts +3 -0
  197. package/package/dist/combine-video-streams-seamlessly.js +8 -0
  198. package/package/dist/combine-video-streams.d.ts +17 -0
  199. package/package/dist/combine-video-streams.js +75 -0
  200. package/package/dist/compositor/compositor.d.ts +22 -0
  201. package/package/dist/compositor/compositor.js +182 -0
  202. package/package/dist/compositor/get-executable-path.d.ts +12 -0
  203. package/package/dist/compositor/get-executable-path.js +95 -0
  204. package/package/dist/compositor/get-explicit-env.d.ts +3 -0
  205. package/package/dist/compositor/get-explicit-env.js +13 -0
  206. package/package/dist/compositor/make-file-executable.d.ts +1 -0
  207. package/package/dist/compositor/make-file-executable.js +44 -0
  208. package/package/dist/compositor/make-nonce.d.ts +1 -0
  209. package/package/dist/compositor/make-nonce.js +8 -0
  210. package/package/dist/compositor/payloads.d.ts +73 -0
  211. package/package/dist/compositor/payloads.js +2 -0
  212. package/package/dist/compositor/serialize-command.d.ts +2 -0
  213. package/package/dist/compositor/serialize-command.js +14 -0
  214. package/package/dist/compress-assets.d.ts +7 -0
  215. package/package/dist/compress-assets.js +25 -0
  216. package/package/dist/compress-audio.d.ts +16 -0
  217. package/package/dist/compress-audio.js +44 -0
  218. package/package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
  219. package/package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
  220. package/package/dist/convert-to-positive-frame-index.d.ts +4 -0
  221. package/package/dist/convert-to-positive-frame-index.js +8 -0
  222. package/package/dist/create-audio.d.ts +29 -0
  223. package/package/dist/create-audio.js +127 -0
  224. package/package/dist/create-ffmpeg-complex-filter.d.ts +10 -0
  225. package/package/dist/create-ffmpeg-complex-filter.js +24 -0
  226. package/package/dist/create-ffmpeg-merge-filter.d.ts +5 -0
  227. package/package/dist/create-ffmpeg-merge-filter.js +25 -0
  228. package/package/dist/create-silent-audio.d.ts +10 -0
  229. package/package/dist/create-silent-audio.js +28 -0
  230. package/package/dist/crf.d.ts +13 -0
  231. package/package/dist/crf.js +103 -0
  232. package/package/dist/cycle-browser-tabs.d.ts +10 -0
  233. package/package/dist/cycle-browser-tabs.js +50 -0
  234. package/package/dist/default-on-log.d.ts +2 -0
  235. package/package/dist/default-on-log.js +8 -0
  236. package/package/dist/delay-render-embedded-stack.d.ts +2 -0
  237. package/package/dist/delay-render-embedded-stack.js +17 -0
  238. package/package/dist/delete-directory.d.ts +1 -0
  239. package/package/dist/delete-directory.js +68 -0
  240. package/package/dist/ensure-browser.d.ts +24 -0
  241. package/package/dist/ensure-browser.js +58 -0
  242. package/package/dist/ensure-frames-in-order.d.ts +5 -0
  243. package/package/dist/ensure-frames-in-order.js +39 -0
  244. package/package/dist/ensure-output-directory.d.ts +1 -0
  245. package/package/dist/ensure-output-directory.js +17 -0
  246. package/package/dist/error-handling/handle-javascript-exception.d.ts +23 -0
  247. package/package/dist/error-handling/handle-javascript-exception.js +86 -0
  248. package/package/dist/error-handling/symbolicate-error.d.ts +3 -0
  249. package/package/dist/error-handling/symbolicate-error.js +26 -0
  250. package/package/dist/error-handling/symbolicateable-error.d.ts +18 -0
  251. package/package/dist/error-handling/symbolicateable-error.js +19 -0
  252. package/package/dist/error-handling.d.ts +1 -0
  253. package/package/dist/error-handling.js +5 -0
  254. package/package/dist/esm/client.mjs +3270 -0
  255. package/package/dist/esm/error-handling.mjs +363 -0
  256. package/package/dist/esm/index.mjs +23201 -0
  257. package/package/dist/esm/pure.mjs +526 -0
  258. package/package/dist/extract-audio.d.ts +7 -0
  259. package/package/dist/extract-audio.js +25 -0
  260. package/package/dist/ffmpeg-args.d.ts +21 -0
  261. package/package/dist/ffmpeg-args.js +96 -0
  262. package/package/dist/ffmpeg-filter-file.d.ts +13 -0
  263. package/package/dist/ffmpeg-filter-file.js +70 -0
  264. package/package/dist/ffmpeg-override.d.ts +4 -0
  265. package/package/dist/ffmpeg-override.js +2 -0
  266. package/package/dist/file-extensions.d.ts +14 -0
  267. package/package/dist/file-extensions.js +85 -0
  268. package/package/dist/filter-asset-types.d.ts +8 -0
  269. package/package/dist/filter-asset-types.js +44 -0
  270. package/package/dist/find-closest-package-json.d.ts +2 -0
  271. package/package/dist/find-closest-package-json.js +31 -0
  272. package/package/dist/format-logs.d.ts +3 -0
  273. package/package/dist/format-logs.js +214 -0
  274. package/package/dist/frame-range.d.ts +2 -0
  275. package/package/dist/frame-range.js +49 -0
  276. package/package/dist/get-browser-instance.d.ts +24 -0
  277. package/package/dist/get-browser-instance.js +63 -0
  278. package/package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
  279. package/package/dist/get-bundle-url-from-serve-url.js +30 -0
  280. package/package/dist/get-codec-name.d.ts +21 -0
  281. package/package/dist/get-codec-name.js +87 -0
  282. package/package/dist/get-compositions.d.ts +34 -0
  283. package/package/dist/get-compositions.js +196 -0
  284. package/package/dist/get-concurrency.d.ts +1 -0
  285. package/package/dist/get-concurrency.js +27 -0
  286. package/package/dist/get-cpu-count.d.ts +2 -0
  287. package/package/dist/get-cpu-count.js +33 -0
  288. package/package/dist/get-duration-from-frame-range.d.ts +1 -0
  289. package/package/dist/get-duration-from-frame-range.js +17 -0
  290. package/package/dist/get-extension-from-codec.d.ts +6 -0
  291. package/package/dist/get-extension-from-codec.js +61 -0
  292. package/package/dist/get-extension-of-filename.d.ts +1 -0
  293. package/package/dist/get-extension-of-filename.js +15 -0
  294. package/package/dist/get-extra-frames-to-capture.d.ts +14 -0
  295. package/package/dist/get-extra-frames-to-capture.js +62 -0
  296. package/package/dist/get-frame-padded-index.d.ts +21 -0
  297. package/package/dist/get-frame-padded-index.js +43 -0
  298. package/package/dist/get-frame-to-render.d.ts +2 -0
  299. package/package/dist/get-frame-to-render.js +19 -0
  300. package/package/dist/get-local-browser-executable.d.ts +9 -0
  301. package/package/dist/get-local-browser-executable.js +36 -0
  302. package/package/dist/get-port.d.ts +15 -0
  303. package/package/dist/get-port.js +86 -0
  304. package/package/dist/get-prores-profile-name.d.ts +3 -0
  305. package/package/dist/get-prores-profile-name.js +25 -0
  306. package/package/dist/get-silent-parts.d.ts +10 -0
  307. package/package/dist/get-silent-parts.js +66 -0
  308. package/package/dist/get-video-metadata.d.ts +10 -0
  309. package/package/dist/get-video-metadata.js +25 -0
  310. package/package/dist/get-video-threads-flag.d.ts +2 -0
  311. package/package/dist/get-video-threads-flag.js +16 -0
  312. package/package/dist/goto-page-or-throw.d.ts +3 -0
  313. package/package/dist/goto-page-or-throw.js +16 -0
  314. package/package/dist/guess-extension-for-media.d.ts +9 -0
  315. package/package/dist/guess-extension-for-media.js +31 -0
  316. package/package/dist/image-format.d.ts +13 -0
  317. package/package/dist/image-format.js +37 -0
  318. package/package/dist/index.d.ts +1256 -0
  319. package/package/dist/index.js +227 -0
  320. package/package/dist/is-audio-codec.d.ts +2 -0
  321. package/package/dist/is-audio-codec.js +7 -0
  322. package/package/dist/is-delay-render-error-with-retry.d.ts +1 -0
  323. package/package/dist/is-delay-render-error-with-retry.js +28 -0
  324. package/package/dist/is-serve-url.d.ts +1 -0
  325. package/package/dist/is-serve-url.js +15 -0
  326. package/package/dist/jpeg-quality.d.ts +2 -0
  327. package/package/dist/jpeg-quality.js +22 -0
  328. package/package/dist/locks.d.ts +7 -0
  329. package/package/dist/locks.js +47 -0
  330. package/package/dist/log-level.d.ts +4 -0
  331. package/package/dist/log-level.js +15 -0
  332. package/package/dist/logger.d.ts +20 -0
  333. package/package/dist/logger.js +89 -0
  334. package/package/dist/make-cancel-signal.d.ts +14 -0
  335. package/package/dist/make-cancel-signal.js +48 -0
  336. package/package/dist/make-metadata-args.d.ts +2 -0
  337. package/package/dist/make-metadata-args.js +22 -0
  338. package/package/dist/make-page.d.ts +30 -0
  339. package/package/dist/make-page.js +70 -0
  340. package/package/dist/memory/from-docker-cgroup.d.ts +1 -0
  341. package/package/dist/memory/from-docker-cgroup.js +66 -0
  342. package/package/dist/memory/from-lambda-env.d.ts +1 -0
  343. package/package/dist/memory/from-lambda-env.js +10 -0
  344. package/package/dist/memory/from-proc-meminfo.d.ts +2 -0
  345. package/package/dist/memory/from-proc-meminfo.js +44 -0
  346. package/package/dist/memory/get-available-memory.d.ts +2 -0
  347. package/package/dist/memory/get-available-memory.js +44 -0
  348. package/package/dist/merge-audio-track.d.ts +19 -0
  349. package/package/dist/merge-audio-track.js +133 -0
  350. package/package/dist/mime-db.d.ts +6 -0
  351. package/package/dist/mime-db.js +8636 -0
  352. package/package/dist/mime-types.d.ts +3 -0
  353. package/package/dist/mime-types.js +94 -0
  354. package/package/dist/mux-video-and-audio.d.ts +15 -0
  355. package/package/dist/mux-video-and-audio.js +54 -0
  356. package/package/dist/next-frame-to-render.d.ts +11 -0
  357. package/package/dist/next-frame-to-render.js +41 -0
  358. package/package/dist/normalize-serve-url.d.ts +1 -0
  359. package/package/dist/normalize-serve-url.js +19 -0
  360. package/package/dist/offthread-video-server.d.ts +51 -0
  361. package/package/dist/offthread-video-server.js +217 -0
  362. package/package/dist/open-browser.d.ts +47 -0
  363. package/package/dist/open-browser.js +200 -0
  364. package/package/dist/options/api-key.d.ts +15 -0
  365. package/package/dist/options/api-key.js +29 -0
  366. package/package/dist/options/audio-bitrate.d.ts +18 -0
  367. package/package/dist/options/audio-bitrate.js +35 -0
  368. package/package/dist/options/audio-codec.d.ts +55 -0
  369. package/package/dist/options/audio-codec.js +188 -0
  370. package/package/dist/options/beep-on-finish.d.ts +15 -0
  371. package/package/dist/options/beep-on-finish.js +35 -0
  372. package/package/dist/options/binaries-directory.d.ts +15 -0
  373. package/package/dist/options/binaries-directory.js +35 -0
  374. package/package/dist/options/chrome-mode.d.ts +17 -0
  375. package/package/dist/options/chrome-mode.js +46 -0
  376. package/package/dist/options/color-space.d.ts +23 -0
  377. package/package/dist/options/color-space.js +49 -0
  378. package/package/dist/options/crf.d.ts +17 -0
  379. package/package/dist/options/crf.js +43 -0
  380. package/package/dist/options/cross-site-isolation.d.ts +15 -0
  381. package/package/dist/options/cross-site-isolation.js +29 -0
  382. package/package/dist/options/delete-after.d.ts +19 -0
  383. package/package/dist/options/delete-after.js +37 -0
  384. package/package/dist/options/disable-git-source.d.ts +15 -0
  385. package/package/dist/options/disable-git-source.js +28 -0
  386. package/package/dist/options/disallow-parallel-encoding.d.ts +15 -0
  387. package/package/dist/options/disallow-parallel-encoding.js +35 -0
  388. package/package/dist/options/enable-lambda-insights.d.ts +15 -0
  389. package/package/dist/options/enable-lambda-insights.js +35 -0
  390. package/package/dist/options/enable-multiprocess-on-linux.d.ts +15 -0
  391. package/package/dist/options/enable-multiprocess-on-linux.js +36 -0
  392. package/package/dist/options/encoding-buffer-size.d.ts +18 -0
  393. package/package/dist/options/encoding-buffer-size.js +39 -0
  394. package/package/dist/options/encoding-max-rate.d.ts +18 -0
  395. package/package/dist/options/encoding-max-rate.js +35 -0
  396. package/package/dist/options/enforce-audio.d.ts +18 -0
  397. package/package/dist/options/enforce-audio.js +36 -0
  398. package/package/dist/options/folder-expiry.d.ts +15 -0
  399. package/package/dist/options/folder-expiry.js +37 -0
  400. package/package/dist/options/for-seamless-aac-concatenation.d.ts +19 -0
  401. package/package/dist/options/for-seamless-aac-concatenation.js +40 -0
  402. package/package/dist/options/gl.d.ts +24 -0
  403. package/package/dist/options/gl.js +68 -0
  404. package/package/dist/options/hardware-acceleration.d.ts +18 -0
  405. package/package/dist/options/hardware-acceleration.js +56 -0
  406. package/package/dist/options/headless.d.ts +15 -0
  407. package/package/dist/options/headless.js +36 -0
  408. package/package/dist/options/image-sequence-pattern.d.ts +15 -0
  409. package/package/dist/options/image-sequence-pattern.js +30 -0
  410. package/package/dist/options/index.d.ts +747 -0
  411. package/package/dist/options/index.js +97 -0
  412. package/package/dist/options/jpeg-quality.d.ts +17 -0
  413. package/package/dist/options/jpeg-quality.js +47 -0
  414. package/package/dist/options/latency-hint.d.ts +18 -0
  415. package/package/dist/options/latency-hint.js +27 -0
  416. package/package/dist/options/log-level.d.ts +16 -0
  417. package/package/dist/options/log-level.js +32 -0
  418. package/package/dist/options/metadata.d.ts +18 -0
  419. package/package/dist/options/metadata.js +47 -0
  420. package/package/dist/options/mute.d.ts +15 -0
  421. package/package/dist/options/mute.js +37 -0
  422. package/package/dist/options/number-of-gif-loops.d.ts +19 -0
  423. package/package/dist/options/number-of-gif-loops.js +44 -0
  424. package/package/dist/options/offthreadvideo-cache-size.d.ts +20 -0
  425. package/package/dist/options/offthreadvideo-cache-size.js +60 -0
  426. package/package/dist/options/offthreadvideo-threads.d.ts +20 -0
  427. package/package/dist/options/offthreadvideo-threads.js +40 -0
  428. package/package/dist/options/on-browser-download.d.ts +22 -0
  429. package/package/dist/options/on-browser-download.js +19 -0
  430. package/package/dist/options/option.d.ts +20 -0
  431. package/package/dist/options/option.js +2 -0
  432. package/package/dist/options/options-map.d.ts +2040 -0
  433. package/package/dist/options/options-map.js +192 -0
  434. package/package/dist/options/overwrite.d.ts +15 -0
  435. package/package/dist/options/overwrite.js +42 -0
  436. package/package/dist/options/prefer-lossless.d.ts +18 -0
  437. package/package/dist/options/prefer-lossless.js +26 -0
  438. package/package/dist/options/public-dir.d.ts +18 -0
  439. package/package/dist/options/public-dir.js +37 -0
  440. package/package/dist/options/public-path.d.ts +18 -0
  441. package/package/dist/options/public-path.js +37 -0
  442. package/package/dist/options/repro.d.ts +15 -0
  443. package/package/dist/options/repro.js +36 -0
  444. package/package/dist/options/scale.d.ts +15 -0
  445. package/package/dist/options/scale.js +41 -0
  446. package/package/dist/options/separate-audio.d.ts +18 -0
  447. package/package/dist/options/separate-audio.js +28 -0
  448. package/package/dist/options/throw-if-site-exists.d.ts +15 -0
  449. package/package/dist/options/throw-if-site-exists.js +28 -0
  450. package/package/dist/options/timeout.d.ts +15 -0
  451. package/package/dist/options/timeout.js +44 -0
  452. package/package/dist/options/video-bitrate.d.ts +15 -0
  453. package/package/dist/options/video-bitrate.js +35 -0
  454. package/package/dist/options/video-cache-size.d.ts +19 -0
  455. package/package/dist/options/video-cache-size.js +39 -0
  456. package/package/dist/options/video-codec.d.ts +23 -0
  457. package/package/dist/options/video-codec.js +104 -0
  458. package/package/dist/options/webhook-custom-data.d.ts +10 -0
  459. package/package/dist/options/webhook-custom-data.js +21 -0
  460. package/package/dist/options/x264-preset.d.ts +25 -0
  461. package/package/dist/options/x264-preset.js +55 -0
  462. package/package/dist/overwrite.d.ts +1 -0
  463. package/package/dist/overwrite.js +4 -0
  464. package/package/dist/p-limit.d.ts +1 -0
  465. package/package/dist/p-limit.js +57 -0
  466. package/package/dist/parse-browser-error-stack.d.ts +7 -0
  467. package/package/dist/parse-browser-error-stack.js +87 -0
  468. package/package/dist/parse-ffmpeg-progress.d.ts +1 -0
  469. package/package/dist/parse-ffmpeg-progress.js +18 -0
  470. package/package/dist/path-normalize.d.ts +1 -0
  471. package/package/dist/path-normalize.js +132 -0
  472. package/package/dist/perf.d.ts +5 -0
  473. package/package/dist/perf.js +37 -0
  474. package/package/dist/pixel-format.d.ts +6 -0
  475. package/package/dist/pixel-format.js +37 -0
  476. package/package/dist/pool.d.ts +8 -0
  477. package/package/dist/pool.js +30 -0
  478. package/package/dist/port-config.d.ts +14 -0
  479. package/package/dist/port-config.js +79 -0
  480. package/package/dist/prepare-server.d.ts +32 -0
  481. package/package/dist/prepare-server.js +123 -0
  482. package/package/dist/preprocess-audio-track.d.ts +27 -0
  483. package/package/dist/preprocess-audio-track.js +82 -0
  484. package/package/dist/prespawn-ffmpeg.d.ts +49 -0
  485. package/package/dist/prespawn-ffmpeg.js +112 -0
  486. package/package/dist/prestitcher-memory-usage.d.ts +10 -0
  487. package/package/dist/prestitcher-memory-usage.js +26 -0
  488. package/package/dist/print-useful-error-message.d.ts +2 -0
  489. package/package/dist/print-useful-error-message.js +110 -0
  490. package/package/dist/prores-profile.d.ts +7 -0
  491. package/package/dist/prores-profile.js +23 -0
  492. package/package/dist/puppeteer-evaluate.d.ts +17 -0
  493. package/package/dist/puppeteer-evaluate.js +162 -0
  494. package/package/dist/puppeteer-screenshot.d.ts +12 -0
  495. package/package/dist/puppeteer-screenshot.js +58 -0
  496. package/package/dist/pure.d.ts +17 -0
  497. package/package/dist/pure.js +17 -0
  498. package/package/dist/redirect-status-codes.d.ts +1 -0
  499. package/package/dist/redirect-status-codes.js +6 -0
  500. package/package/dist/render-frame-and-retry-target-close.d.ts +54 -0
  501. package/package/dist/render-frame-and-retry-target-close.js +179 -0
  502. package/package/dist/render-frame-with-option-to-reject.d.ts +48 -0
  503. package/package/dist/render-frame-with-option-to-reject.js +156 -0
  504. package/package/dist/render-frame.d.ts +47 -0
  505. package/package/dist/render-frame.js +51 -0
  506. package/package/dist/render-frames.d.ts +97 -0
  507. package/package/dist/render-frames.js +413 -0
  508. package/package/dist/render-has-audio.d.ts +8 -0
  509. package/package/dist/render-has-audio.js +20 -0
  510. package/package/dist/render-media.d.ts +135 -0
  511. package/package/dist/render-media.js +621 -0
  512. package/package/dist/render-partitions.d.ts +7 -0
  513. package/package/dist/render-partitions.js +50 -0
  514. package/package/dist/render-still.d.ts +74 -0
  515. package/package/dist/render-still.js +356 -0
  516. package/package/dist/replace-browser.d.ts +7 -0
  517. package/package/dist/replace-browser.js +48 -0
  518. package/package/dist/repro.d.ts +25 -0
  519. package/package/dist/repro.js +184 -0
  520. package/package/dist/resolve-asset-src.d.ts +1 -0
  521. package/package/dist/resolve-asset-src.js +17 -0
  522. package/package/dist/sample-rate.d.ts +1 -0
  523. package/package/dist/sample-rate.js +4 -0
  524. package/package/dist/screenshot-task.d.ts +12 -0
  525. package/package/dist/screenshot-task.js +86 -0
  526. package/package/dist/seamless-aac-trim.d.ts +12 -0
  527. package/package/dist/seamless-aac-trim.js +24 -0
  528. package/package/dist/seek-to-frame.d.ts +18 -0
  529. package/package/dist/seek-to-frame.js +148 -0
  530. package/package/dist/select-composition.d.ts +45 -0
  531. package/package/dist/select-composition.js +219 -0
  532. package/package/dist/serialize-artifact.d.ts +7 -0
  533. package/package/dist/serialize-artifact.js +2 -0
  534. package/package/dist/serve-handler/index.d.ts +4 -0
  535. package/package/dist/serve-handler/index.js +208 -0
  536. package/package/dist/serve-handler/is-path-inside.d.ts +1 -0
  537. package/package/dist/serve-handler/is-path-inside.js +27 -0
  538. package/package/dist/serve-handler/range-parser.d.ts +13 -0
  539. package/package/dist/serve-handler/range-parser.js +57 -0
  540. package/package/dist/serve-static.d.ts +18 -0
  541. package/package/dist/serve-static.js +141 -0
  542. package/package/dist/set-props-and-env.d.ts +22 -0
  543. package/package/dist/set-props-and-env.js +219 -0
  544. package/package/dist/stitch-frames-to-video.d.ts +77 -0
  545. package/package/dist/stitch-frames-to-video.js +350 -0
  546. package/package/dist/stringify-ffmpeg-filter.d.ts +24 -0
  547. package/package/dist/stringify-ffmpeg-filter.js +140 -0
  548. package/package/dist/succeed-or-cancel.d.ts +6 -0
  549. package/package/dist/succeed-or-cancel.js +23 -0
  550. package/package/dist/symbolicate-stacktrace.d.ts +29 -0
  551. package/package/dist/symbolicate-stacktrace.js +155 -0
  552. package/package/dist/take-frame.d.ts +13 -0
  553. package/package/dist/take-frame.js +47 -0
  554. package/package/dist/test/actual-concurrency.test.d.ts +1 -0
  555. package/package/dist/test/artifacts.test.d.ts +1 -0
  556. package/package/dist/test/asset-calculation.test.d.ts +1 -0
  557. package/package/dist/test/asset-compression.test.d.ts +1 -0
  558. package/package/dist/test/avoid-ffmpeg-stackoverflow.test.d.ts +1 -0
  559. package/package/dist/test/browser-log-message.test.d.ts +1 -0
  560. package/package/dist/test/calculate-atempo.test.d.ts +1 -0
  561. package/package/dist/test/compositor-rust.test.d.ts +1 -0
  562. package/package/dist/test/crf.test.d.ts +1 -0
  563. package/package/dist/test/derive-codec-from-file-extension.test.d.ts +1 -0
  564. package/package/dist/test/dont-skip-assets.test.d.ts +1 -0
  565. package/package/dist/test/download-file.test.d.ts +1 -0
  566. package/package/dist/test/even-dimensions.test.d.ts +1 -0
  567. package/package/dist/test/extra-frames-to-capture.test.d.ts +1 -0
  568. package/package/dist/test/extract-audio.test.d.ts +1 -0
  569. package/package/dist/test/extract-frame-rust.test.d.ts +1 -0
  570. package/package/dist/test/ffmpeg-filters.test.d.ts +1 -0
  571. package/package/dist/test/ffmpeg-merge-filter.test.d.ts +1 -0
  572. package/package/dist/test/ffmpeg-volume-expression.test.d.ts +1 -0
  573. package/package/dist/test/file-extension.test.d.ts +1 -0
  574. package/package/dist/test/find-closest-package-json.test.d.ts +1 -0
  575. package/package/dist/test/flatten-volume-array.test.d.ts +1 -0
  576. package/package/dist/test/format-logs.test.d.ts +1 -0
  577. package/package/dist/test/frame-padded-index.test.d.ts +1 -0
  578. package/package/dist/test/frame.test.d.ts +1 -0
  579. package/package/dist/test/get-assets-for-markup.d.ts +8 -0
  580. package/package/dist/test/get-audio-channels.test.d.ts +1 -0
  581. package/package/dist/test/get-bundle-url-from-serve-url.test.d.ts +1 -0
  582. package/package/dist/test/get-silent-parts.test.d.ts +1 -0
  583. package/package/dist/test/guess-extension-for-media.test.d.ts +1 -0
  584. package/package/dist/test/handle-weird-file-names.test.d.ts +1 -0
  585. package/package/dist/test/log-level.test.d.ts +1 -0
  586. package/package/dist/test/mime-types.test.d.ts +1 -0
  587. package/package/dist/test/offthread-extract-url.test.d.ts +1 -0
  588. package/package/dist/test/parse-ffmpeg-progress.test.d.ts +1 -0
  589. package/package/dist/test/partitions.test.d.ts +1 -0
  590. package/package/dist/test/pixel-format.test.d.ts +1 -0
  591. package/package/dist/test/port-config.test.d.ts +1 -0
  592. package/package/dist/test/port-selection.test.d.ts +1 -0
  593. package/package/dist/test/prores-profile.test.d.ts +1 -0
  594. package/package/dist/test/render-still.test.d.ts +1 -0
  595. package/package/dist/test/rust-errors.test.d.ts +1 -0
  596. package/package/dist/test/rust-get-video-metadata.test.d.ts +1 -0
  597. package/package/dist/test/rust-memory-usage.test.d.ts +1 -0
  598. package/package/dist/test/sanitize-file-path.test.d.ts +1 -0
  599. package/package/dist/test/serve-url.test.d.ts +1 -0
  600. package/package/dist/test/symbolicate-remote-stack.test.d.ts +1 -0
  601. package/package/dist/test/validate-concurrency.test.d.ts +1 -0
  602. package/package/dist/test/validate-config-stitcher.test.d.ts +1 -0
  603. package/package/dist/test/validate-config.test.d.ts +1 -0
  604. package/package/dist/test/validate-even-dimensions-with-codec.test.d.ts +1 -0
  605. package/package/dist/test/validate-image-format.test.d.ts +1 -0
  606. package/package/dist/test/webpack-to-serve-url.test.d.ts +1 -0
  607. package/package/dist/test-gpu.d.ts +21 -0
  608. package/package/dist/test-gpu.js +45 -0
  609. package/package/dist/tmp-dir.d.ts +1 -0
  610. package/package/dist/tmp-dir.js +63 -0
  611. package/package/dist/to-megabytes.d.ts +1 -0
  612. package/package/dist/to-megabytes.js +7 -0
  613. package/package/dist/truthy.d.ts +3 -0
  614. package/package/dist/truthy.js +6 -0
  615. package/package/dist/types.d.ts +10 -0
  616. package/package/dist/types.js +2 -0
  617. package/package/dist/v5-required-input-props.d.ts +6 -0
  618. package/package/dist/v5-required-input-props.js +2 -0
  619. package/package/dist/validate-concurrency.d.ts +7 -0
  620. package/package/dist/validate-concurrency.js +38 -0
  621. package/package/dist/validate-even-dimensions-with-codec.d.ts +14 -0
  622. package/package/dist/validate-even-dimensions-with-codec.js +40 -0
  623. package/package/dist/validate-every-nth-frame.d.ts +1 -0
  624. package/package/dist/validate-every-nth-frame.js +24 -0
  625. package/package/dist/validate-ffmpeg-override.d.ts +2 -0
  626. package/package/dist/validate-ffmpeg-override.js +12 -0
  627. package/package/dist/validate-number-of-gif-loops.d.ts +2 -0
  628. package/package/dist/validate-number-of-gif-loops.js +24 -0
  629. package/package/dist/validate-output-filename.d.ts +9 -0
  630. package/package/dist/validate-output-filename.js +32 -0
  631. package/package/dist/validate-puppeteer-timeout.d.ts +1 -0
  632. package/package/dist/validate-puppeteer-timeout.js +25 -0
  633. package/package/dist/validate-scale.d.ts +1 -0
  634. package/package/dist/validate-scale.js +26 -0
  635. package/package/dist/validate-videobitrate.d.ts +1 -0
  636. package/package/dist/validate-videobitrate.js +20 -0
  637. package/package/dist/validate.d.ts +4 -0
  638. package/package/dist/validate.js +8 -0
  639. package/package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
  640. package/package/dist/wait-for-symbolication-error-to-be-done.js +8 -0
  641. package/package/dist/wrap-with-error-handling.d.ts +8 -0
  642. package/package/dist/wrap-with-error-handling.js +18 -0
  643. package/package/dist/ws/ws-types.d.ts +15 -0
  644. package/package/dist/ws/ws-types.js +8 -0
  645. package/package/ensure-browser.mjs +3337 -0
  646. package/package.json +105 -104
  647. package/LICENSE.md +0 -49
  648. package/bunfig.toml +0 -2
  649. package/dist/assets/change-tempo.d.ts +0 -34
  650. package/dist/assets/change-tempo.js +0 -287
  651. package/dist/assets/change-tonefrequency.d.ts +0 -2
  652. package/dist/assets/change-tonefrequency.js +0 -28
  653. package/dist/assets/resample-audiodata.d.ts +0 -6
  654. package/dist/assets/resample-audiodata.js +0 -54
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ // Example is here https://ffmpeg.org/ffmpeg-filters.html#volume
3
+ // Allowed syntax is here: https://ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.ffmpegVolumeExpression = void 0;
6
+ // If once, ffmpeg evaluates volume expression once.
7
+ // If frame, it evaluates it for each frame
8
+ const round_volume_to_avoid_stack_overflow_1 = require("./round-volume-to-avoid-stack-overflow");
9
+ // In FFMPEG expressions, the current time is represented by 't'
10
+ // the `n` for the timestamp variable is buggy
11
+ const FFMPEG_TIME_VARIABLE = 't';
12
+ const ffmpegIfOrElse = (condition, then, elseDo) => {
13
+ return `if(${condition},${then},${elseDo})`;
14
+ };
15
+ const ffmpegIsOneOfFrames = ({ frames, trimLeft, fps, }) => {
16
+ const consecutiveArrays = [];
17
+ for (let i = 0; i < frames.length; i++) {
18
+ const previousFrame = frames[i - 1];
19
+ const frame = frames[i];
20
+ if (previousFrame === undefined || frame !== previousFrame + 1) {
21
+ consecutiveArrays.push([]);
22
+ }
23
+ consecutiveArrays[consecutiveArrays.length - 1].push(frame);
24
+ }
25
+ return consecutiveArrays
26
+ .map((f) => {
27
+ const firstFrame = f[0];
28
+ const lastFrame = f[f.length - 1];
29
+ const before = (firstFrame - 0.5) / fps;
30
+ const after = (lastFrame + 0.5) / fps;
31
+ return `between(${FFMPEG_TIME_VARIABLE},${(before + trimLeft).toFixed(4)},${(after + trimLeft).toFixed(4)})`;
32
+ })
33
+ .join('+');
34
+ };
35
+ const ffmpegBuildVolumeExpression = ({ arr, delay, fps, }) => {
36
+ if (arr.length === 0) {
37
+ throw new Error('Volume array expression should never have length 0');
38
+ }
39
+ if (arr.length === 1) {
40
+ return String(arr[0][0]);
41
+ }
42
+ const [first, ...rest] = arr;
43
+ const [volume, frames] = first;
44
+ return ffmpegIfOrElse(ffmpegIsOneOfFrames({ frames, trimLeft: delay, fps }), String(volume), ffmpegBuildVolumeExpression({ arr: rest, delay, fps }));
45
+ };
46
+ const ffmpegVolumeExpression = ({ volume, fps, trimLeft, }) => {
47
+ // If it's a static volume, we return it and tell
48
+ // FFMPEG it only has to evaluate it once
49
+ if (typeof volume === 'number') {
50
+ return {
51
+ eval: 'once',
52
+ value: String(volume),
53
+ };
54
+ }
55
+ if ([...new Set(volume)].length === 1) {
56
+ return (0, exports.ffmpegVolumeExpression)({
57
+ volume: volume[0],
58
+ fps,
59
+ trimLeft,
60
+ });
61
+ }
62
+ // A 1 sec video with frames 0-29 would mean that
63
+ // frame 29 corresponds to timestamp 0.966666...
64
+ // but the audio is actually 1 sec long. For that reason we pad the last
65
+ // timestamp.
66
+ const paddedVolume = [...volume, volume[volume.length - 1]];
67
+ // Otherwise, we construct an FFMPEG expression. First step:
68
+ // Make a map of all possible volumes
69
+ // {possibleVolume1} => [frame1, frame2]
70
+ // {possibleVolume2} => [frame3, frame4]
71
+ const volumeMap = {};
72
+ paddedVolume.forEach((baseVolume, frame) => {
73
+ // Adjust volume based on how many other tracks have not yet finished
74
+ const actualVolume = (0, round_volume_to_avoid_stack_overflow_1.roundVolumeToAvoidStackOverflow)(baseVolume);
75
+ if (!volumeMap[actualVolume]) {
76
+ volumeMap[actualVolume] = [];
77
+ }
78
+ volumeMap[actualVolume].push(frame);
79
+ });
80
+ // Sort the map so that the most common volume is last
81
+ // this is going to be the else statement so the expression is short
82
+ const volumeArray = Object.keys(volumeMap)
83
+ .map((key) => [Number(key), volumeMap[key]])
84
+ .sort((a, b) => a[1].length - b[1].length);
85
+ // Construct and tell FFMPEG it has to evaluate expression on each frame
86
+ const expression = ffmpegBuildVolumeExpression({
87
+ arr: volumeArray,
88
+ delay: trimLeft,
89
+ fps,
90
+ });
91
+ return {
92
+ eval: 'frame',
93
+ value: `'${expression}'`,
94
+ };
95
+ };
96
+ exports.ffmpegVolumeExpression = ffmpegVolumeExpression;
@@ -0,0 +1,3 @@
1
+ import type { AssetVolume, MediaAsset } from './types';
2
+ export declare const flattenVolumeArray: (volume: AssetVolume) => AssetVolume;
3
+ export declare const convertAssetToFlattenedVolume: (asset: MediaAsset) => MediaAsset;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // An input is an array with volume levels for each frame, like
3
+ // [1, 1, 1, 1, 1, ...].
4
+ // If all elements are the same, we flatten it to `1`, otherwise we leave it as an array.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.convertAssetToFlattenedVolume = exports.flattenVolumeArray = void 0;
7
+ const flattenVolumeArray = (volume) => {
8
+ if (typeof volume === 'number') {
9
+ return volume;
10
+ }
11
+ if (volume.length === 0) {
12
+ throw new TypeError('Volume array must have at least 1 number');
13
+ }
14
+ if (new Set(volume).size === 1) {
15
+ return volume[0];
16
+ }
17
+ return volume;
18
+ };
19
+ exports.flattenVolumeArray = flattenVolumeArray;
20
+ const convertAssetToFlattenedVolume = (asset) => {
21
+ return {
22
+ ...asset,
23
+ volume: (0, exports.flattenVolumeArray)(asset.volume),
24
+ };
25
+ };
26
+ exports.convertAssetToFlattenedVolume = convertAssetToFlattenedVolume;
@@ -0,0 +1,20 @@
1
+ import type { LogLevel } from '../log-level';
2
+ import type { CancelSignal } from '../make-cancel-signal';
3
+ import type { AudioChannelsAndDurationResultCache, DownloadMap } from './download-map';
4
+ export declare const getAudioChannelsAndDurationWithoutCache: ({ src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }: {
5
+ src: string;
6
+ indent: boolean;
7
+ logLevel: LogLevel;
8
+ binariesDirectory: string | null;
9
+ cancelSignal: CancelSignal | undefined;
10
+ audioStreamIndex: number | undefined;
11
+ }) => Promise<AudioChannelsAndDurationResultCache>;
12
+ export declare const getAudioChannelsAndDuration: ({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }: {
13
+ downloadMap: DownloadMap;
14
+ src: string;
15
+ indent: boolean;
16
+ logLevel: LogLevel;
17
+ binariesDirectory: string | null;
18
+ cancelSignal: CancelSignal | undefined;
19
+ audioStreamIndex: number | undefined;
20
+ }) => Promise<AudioChannelsAndDurationResultCache>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAudioChannelsAndDuration = exports.getAudioChannelsAndDurationWithoutCache = void 0;
4
+ const call_ffmpeg_1 = require("../call-ffmpeg");
5
+ const p_limit_1 = require("../p-limit");
6
+ const limit = (0, p_limit_1.pLimit)(1);
7
+ const getAudioChannelsAndDurationWithoutCache = async ({ src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) => {
8
+ const args = [
9
+ ['-v', 'error'],
10
+ ['-select_streams', audioStreamIndex ? `a:${audioStreamIndex}` : 'a:0'],
11
+ [
12
+ '-show_entries',
13
+ 'stream=channels:stream=start_time:format=duration:format=format_name',
14
+ ],
15
+ ['-of', 'default=nw=1'],
16
+ [src],
17
+ ]
18
+ .reduce((acc, val) => acc.concat(val), [])
19
+ .filter(Boolean);
20
+ try {
21
+ const task = await (0, call_ffmpeg_1.callFf)({
22
+ bin: 'ffprobe',
23
+ args,
24
+ indent,
25
+ logLevel,
26
+ binariesDirectory,
27
+ cancelSignal,
28
+ });
29
+ const channels = task.stdout.match(/channels=([0-9]+)/);
30
+ const duration = task.stdout.match(/duration=([0-9.]+)/);
31
+ const startTime = task.stdout.match(/start_time=([0-9.]+)/);
32
+ const container = task.stdout.match(/format_name=([a-zA-Z0-9.]+)/);
33
+ const isMP3 = container ? container[1] === 'mp3' : false;
34
+ const result = {
35
+ channels: channels ? parseInt(channels[1], 10) : 0,
36
+ duration: duration ? parseFloat(duration[1]) : null,
37
+ // We ignore the start time for MP3 because that is an inherent encoder thing
38
+ // not in the sense that we want
39
+ startTime: startTime ? (isMP3 ? 0 : parseFloat(startTime[1])) : null,
40
+ };
41
+ return result;
42
+ }
43
+ catch (err) {
44
+ if (err.message.includes('This file cannot be read by `ffprobe`. Is it a valid multimedia file?')) {
45
+ throw new Error('This file cannot be read by `ffprobe`. Is it a valid multimedia file?');
46
+ }
47
+ throw err;
48
+ }
49
+ };
50
+ exports.getAudioChannelsAndDurationWithoutCache = getAudioChannelsAndDurationWithoutCache;
51
+ async function getAudioChannelsAndDurationUnlimited({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) {
52
+ const cacheKey = audioStreamIndex ? `${src}-${audioStreamIndex}` : src;
53
+ if (downloadMap.durationOfAssetCache[cacheKey]) {
54
+ return downloadMap.durationOfAssetCache[cacheKey];
55
+ }
56
+ const result = await (0, exports.getAudioChannelsAndDurationWithoutCache)({
57
+ src,
58
+ indent,
59
+ logLevel,
60
+ binariesDirectory,
61
+ cancelSignal,
62
+ audioStreamIndex,
63
+ });
64
+ downloadMap.durationOfAssetCache[cacheKey] = result;
65
+ return result;
66
+ }
67
+ const getAudioChannelsAndDuration = ({ downloadMap, src, indent, logLevel, binariesDirectory, cancelSignal, audioStreamIndex, }) => {
68
+ return limit(() => getAudioChannelsAndDurationUnlimited({
69
+ downloadMap,
70
+ src,
71
+ indent,
72
+ logLevel,
73
+ binariesDirectory,
74
+ cancelSignal,
75
+ audioStreamIndex,
76
+ }));
77
+ };
78
+ exports.getAudioChannelsAndDuration = getAudioChannelsAndDuration;
@@ -0,0 +1,22 @@
1
+ import type { InlineAudioAsset } from 'remotion/no-react';
2
+ import type { LogLevel } from '../log-level';
3
+ import type { CancelSignal } from '../make-cancel-signal';
4
+ export declare const makeInlineAudioMixing: (dir: string) => {
5
+ cleanup: () => void;
6
+ addAsset: ({ asset, fps, totalNumberOfFrames, firstFrame, trimLeftOffset, trimRightOffset, }: {
7
+ asset: InlineAudioAsset;
8
+ fps: number;
9
+ totalNumberOfFrames: number;
10
+ firstFrame: number;
11
+ trimLeftOffset: number;
12
+ trimRightOffset: number;
13
+ }) => void;
14
+ getListOfAssets: () => string[];
15
+ finish: ({ binariesDirectory, indent, logLevel, cancelSignal, }: {
16
+ indent: boolean;
17
+ logLevel: LogLevel;
18
+ binariesDirectory: string | null;
19
+ cancelSignal: CancelSignal | undefined;
20
+ }) => Promise<void>;
21
+ };
22
+ export type InlineAudioMixing = ReturnType<typeof makeInlineAudioMixing>;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.makeInlineAudioMixing = void 0;
40
+ const node_fs_1 = __importStar(require("node:fs"));
41
+ const node_path_1 = __importDefault(require("node:path"));
42
+ const delete_directory_1 = require("../delete-directory");
43
+ const sample_rate_1 = require("../sample-rate");
44
+ const apply_tone_frequency_1 = require("./apply-tone-frequency");
45
+ const download_map_1 = require("./download-map");
46
+ const numberTo32BiIntLittleEndian = (num) => {
47
+ return new Uint8Array([
48
+ num & 0xff,
49
+ (num >> 8) & 0xff,
50
+ (num >> 16) & 0xff,
51
+ (num >> 24) & 0xff,
52
+ ]);
53
+ };
54
+ const numberTo16BitLittleEndian = (num) => {
55
+ return new Uint8Array([num & 0xff, (num >> 8) & 0xff]);
56
+ };
57
+ const BIT_DEPTH = 16;
58
+ const BYTES_PER_SAMPLE = BIT_DEPTH / 8;
59
+ const NUMBER_OF_CHANNELS = 2;
60
+ const makeInlineAudioMixing = (dir) => {
61
+ const folderToAdd = (0, download_map_1.makeAndReturn)(dir, 'remotion-inline-audio-mixing');
62
+ // asset id -> file descriptor
63
+ const openFiles = {};
64
+ const writtenHeaders = {};
65
+ const toneFrequencies = {};
66
+ const cleanup = () => {
67
+ for (const fd of Object.values(openFiles)) {
68
+ try {
69
+ node_fs_1.default.closeSync(fd);
70
+ }
71
+ catch (_a) { }
72
+ }
73
+ (0, delete_directory_1.deleteDirectory)(folderToAdd);
74
+ };
75
+ const getListOfAssets = () => {
76
+ return Object.keys(openFiles);
77
+ };
78
+ const getFilePath = (asset) => {
79
+ return node_path_1.default.join(folderToAdd, `${asset.id}.wav`);
80
+ };
81
+ const ensureAsset = ({ asset, fps, totalNumberOfFrames, trimLeftOffset, trimRightOffset, }) => {
82
+ const filePath = getFilePath(asset);
83
+ if (!openFiles[filePath]) {
84
+ openFiles[filePath] = node_fs_1.default.openSync(filePath, 'w');
85
+ }
86
+ if (writtenHeaders[filePath]) {
87
+ return;
88
+ }
89
+ writtenHeaders[filePath] = true;
90
+ const expectedDataSize = Math.round((totalNumberOfFrames / fps - trimLeftOffset + trimRightOffset) *
91
+ NUMBER_OF_CHANNELS *
92
+ sample_rate_1.DEFAULT_SAMPLE_RATE *
93
+ BYTES_PER_SAMPLE);
94
+ const expectedSize = 40 + expectedDataSize;
95
+ const fd = openFiles[filePath];
96
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([0x52, 0x49, 0x46, 0x46]), 0, 4, 0); // "RIFF"
97
+ (0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(expectedSize)), 0, 4, 4); // Remaining size
98
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([0x57, 0x41, 0x56, 0x45]), 0, 4, 8); // "WAVE"
99
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([0x66, 0x6d, 0x74, 0x20]), 0, 4, 12); // "fmt "
100
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([BIT_DEPTH, 0x00, 0x00, 0x00]), 0, 4, 16); // fmt chunk size = 16
101
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([0x01, 0x00]), 0, 2, 20); // Audio format (PCM) = 1, set 3 if float32 would be true
102
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([NUMBER_OF_CHANNELS, 0x00]), 0, 2, 22); // Number of channels
103
+ (0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(sample_rate_1.DEFAULT_SAMPLE_RATE)), 0, 4, 24); // Sample rate
104
+ (0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(sample_rate_1.DEFAULT_SAMPLE_RATE * NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE)), 0, 4, 28); // Byte rate
105
+ (0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo16BitLittleEndian(NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE)), 0, 2, 32); // Block align
106
+ (0, node_fs_1.writeSync)(fd, numberTo16BitLittleEndian(BIT_DEPTH), 0, 2, 34); // Bits per sample
107
+ (0, node_fs_1.writeSync)(fd, new Uint8Array([0x64, 0x61, 0x74, 0x61]), 0, 4, 36); // "data"
108
+ (0, node_fs_1.writeSync)(fd, new Uint8Array(numberTo32BiIntLittleEndian(expectedDataSize)), 0, 4, 40); // Remaining size
109
+ };
110
+ const finish = async ({ binariesDirectory, indent, logLevel, cancelSignal, }) => {
111
+ for (const fd of Object.keys(openFiles)) {
112
+ const frequency = toneFrequencies[fd];
113
+ if (frequency !== 1) {
114
+ const tmpFile = fd.replace(/.wav$/, '-tmp.wav');
115
+ await (0, apply_tone_frequency_1.applyToneFrequencyUsingFfmpeg)({
116
+ input: fd,
117
+ output: tmpFile,
118
+ toneFrequency: frequency,
119
+ indent,
120
+ logLevel,
121
+ binariesDirectory,
122
+ cancelSignal,
123
+ });
124
+ node_fs_1.default.renameSync(tmpFile, fd);
125
+ }
126
+ }
127
+ };
128
+ const addAsset = ({ asset, fps, totalNumberOfFrames, firstFrame, trimLeftOffset, trimRightOffset, }) => {
129
+ ensureAsset({
130
+ asset,
131
+ fps,
132
+ totalNumberOfFrames,
133
+ trimLeftOffset,
134
+ trimRightOffset,
135
+ });
136
+ const filePath = getFilePath(asset);
137
+ if (toneFrequencies[filePath] !== undefined &&
138
+ toneFrequencies[filePath] !== asset.toneFrequency) {
139
+ throw new Error(`toneFrequency must be the same across the entire audio, got ${asset.toneFrequency}, but before it was ${toneFrequencies[filePath]}`);
140
+ }
141
+ const fileDescriptor = openFiles[filePath];
142
+ toneFrequencies[filePath] = asset.toneFrequency;
143
+ let arr = new Int16Array(asset.audio);
144
+ const isFirst = asset.frame === firstFrame;
145
+ const isLast = asset.frame === totalNumberOfFrames + firstFrame - 1;
146
+ const samplesToShaveFromStart = trimLeftOffset * sample_rate_1.DEFAULT_SAMPLE_RATE;
147
+ const samplesToShaveFromEnd = trimRightOffset * sample_rate_1.DEFAULT_SAMPLE_RATE;
148
+ if (Math.abs(Math.round(samplesToShaveFromEnd) - samplesToShaveFromEnd) >
149
+ 0.0000001) {
150
+ throw new Error(`samplesToShaveFromEnd should be approximately an integer, is${samplesToShaveFromEnd}`);
151
+ }
152
+ if (Math.abs(Math.round(samplesToShaveFromStart) - samplesToShaveFromStart) >
153
+ 0.0000001) {
154
+ throw new Error(`samplesToShaveFromStart should be approximately an integer, is ${samplesToShaveFromStart}`);
155
+ }
156
+ if (isFirst) {
157
+ arr = arr.slice(Math.round(samplesToShaveFromStart) * NUMBER_OF_CHANNELS);
158
+ }
159
+ if (isLast) {
160
+ arr = arr.slice(0, arr.length + Math.round(samplesToShaveFromEnd) * NUMBER_OF_CHANNELS);
161
+ }
162
+ const positionInSeconds = (asset.frame - firstFrame) / fps - (isFirst ? 0 : trimLeftOffset);
163
+ // Always rounding down to ensure there are no gaps when the samples don't align
164
+ // In @remotion/media, we also round down the sample start timestamp and round up the end timestamp
165
+ // This might lead to overlapping, hopefully aligning perfectly!
166
+ // Test case: https://github.com/remotion-dev/remotion/issues/5758
167
+ const position = Math.floor(positionInSeconds * sample_rate_1.DEFAULT_SAMPLE_RATE) *
168
+ NUMBER_OF_CHANNELS *
169
+ BYTES_PER_SAMPLE;
170
+ (0, node_fs_1.writeSync)(
171
+ // fs
172
+ fileDescriptor,
173
+ // data
174
+ arr,
175
+ // offset of data
176
+ 0,
177
+ // length
178
+ arr.byteLength,
179
+ // position
180
+ 44 + position);
181
+ };
182
+ return {
183
+ cleanup,
184
+ addAsset,
185
+ getListOfAssets,
186
+ finish,
187
+ };
188
+ };
189
+ exports.makeInlineAudioMixing = makeInlineAudioMixing;
@@ -0,0 +1,7 @@
1
+ import http from 'node:http';
2
+ type NodeRequestAndResponse = {
3
+ request: http.ClientRequest;
4
+ response: http.IncomingMessage;
5
+ };
6
+ export declare const readFile: (url: string, redirectsSoFar?: number) => Promise<NodeRequestAndResponse>;
7
+ export {};
@@ -0,0 +1,97 @@
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.readFile = void 0;
7
+ const https_1 = __importDefault(require("https"));
8
+ const node_http_1 = __importDefault(require("node:http"));
9
+ const redirect_status_codes_1 = require("../redirect-status-codes");
10
+ const truthy_1 = require("../truthy");
11
+ const getClient = (url) => {
12
+ if (url.startsWith('https://')) {
13
+ return https_1.default.get;
14
+ }
15
+ if (url.startsWith('http://')) {
16
+ return node_http_1.default.get;
17
+ }
18
+ throw new Error(`Can only download URLs starting with http:// or https://, got "${url}"`);
19
+ };
20
+ const readFileWithoutRedirect = (url) => {
21
+ return new Promise((resolve, reject) => {
22
+ const client = getClient(url);
23
+ const req = client(url,
24
+ // Bun 1.1.16 does not support the `headers` option
25
+ typeof Bun === 'undefined'
26
+ ? {
27
+ headers: {
28
+ 'user-agent': 'Mozilla/5.0 (@remotion/renderer - https://remotion.dev)',
29
+ },
30
+ }
31
+ : {}, (res) => {
32
+ resolve({ request: req, response: res });
33
+ });
34
+ req.on('error', (err) => {
35
+ req.destroy();
36
+ return reject(err);
37
+ });
38
+ });
39
+ };
40
+ const readFile = async (url, redirectsSoFar = 0) => {
41
+ if (redirectsSoFar > 10) {
42
+ throw new Error(`Too many redirects while downloading ${url}`);
43
+ }
44
+ const { request, response } = await readFileWithoutRedirect(url);
45
+ if (redirect_status_codes_1.redirectStatusCodes.includes(response.statusCode)) {
46
+ if (!response.headers.location) {
47
+ throw new Error(`Received a status code ${response.statusCode} but no "Location" header while calling ${response.headers.location}`);
48
+ }
49
+ const { origin } = new URL(url);
50
+ const redirectUrl = new URL(response.headers.location, origin).toString();
51
+ request.destroy();
52
+ response.destroy();
53
+ return (0, exports.readFile)(redirectUrl, redirectsSoFar + 1);
54
+ }
55
+ if (response.statusCode >= 400) {
56
+ const body = await tryToObtainBody(response);
57
+ request.destroy();
58
+ response.destroy();
59
+ throw new Error([
60
+ `Received a status code of ${response.statusCode} while downloading file ${url}.`,
61
+ body ? `The response body was:` : null,
62
+ body ? `---` : null,
63
+ body ? body : null,
64
+ body ? `---` : null,
65
+ ]
66
+ .filter(truthy_1.truthy)
67
+ .join('\n'));
68
+ }
69
+ return { request, response };
70
+ };
71
+ exports.readFile = readFile;
72
+ const tryToObtainBody = async (file) => {
73
+ const success = new Promise((resolve) => {
74
+ let data = '';
75
+ file.on('data', (chunk) => {
76
+ data += chunk;
77
+ });
78
+ file.on('end', () => {
79
+ resolve(data);
80
+ });
81
+ // OK even when getting an error, this is just a best effort
82
+ file.on('error', () => resolve(data));
83
+ });
84
+ let timeout = null;
85
+ const body = await Promise.race([
86
+ success,
87
+ new Promise((resolve) => {
88
+ timeout = setTimeout(() => {
89
+ resolve(null);
90
+ }, 5000);
91
+ }),
92
+ ]);
93
+ if (timeout) {
94
+ clearTimeout(timeout);
95
+ }
96
+ return body;
97
+ };
@@ -0,0 +1 @@
1
+ export declare const roundVolumeToAvoidStackOverflow: (volume: number) => number;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ // FFMPEG allows expressions to have a maximum depth of 100.
3
+ // As defined here: https://github.com/FFmpeg/FFmpeg/blob/2014b0135293c41d261757bfa1aaba51653bab8e/libavutil/eval.c#L706
4
+ // With one depth added by the if/else statement,
5
+ // this means we can have a maximum of 99 different volumes.
6
+ // Therefore we round the volumes (which can only be between 0 and 1)
7
+ // so that there are only 99 possible values.
8
+ // We then subtract 1 again because FFMPEG is not precise and queries out of range
9
+ // values, for which we have to provide a default
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.roundVolumeToAvoidStackOverflow = void 0;
12
+ const MAX_FFMPEG_STACK_DEPTH = 98;
13
+ const roundVolumeToAvoidStackOverflow = (volume) => {
14
+ return Number((Math.round(volume * (MAX_FFMPEG_STACK_DEPTH - 1)) /
15
+ (MAX_FFMPEG_STACK_DEPTH - 1)).toFixed(3));
16
+ };
17
+ exports.roundVolumeToAvoidStackOverflow = roundVolumeToAvoidStackOverflow;
@@ -0,0 +1 @@
1
+ export declare const sanitizeFilename: (input: string) => string;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ // Inlined from https://github.com/parshap/node-sanitize-filename/blob/master/index.js
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.sanitizeFilename = void 0;
5
+ const truncate_utf8_bytes_1 = require("./truncate-utf8-bytes");
6
+ /**
7
+ * Replaces characters in strings that are illegal/unsafe for filenames.
8
+ * Unsafe characters are either removed or replaced by a substitute set
9
+ * in the optional `options` object.
10
+ *
11
+ * Illegal Characters on Various Operating Systems
12
+ * / ? < > \ : * | "
13
+ * https://kb.acronis.com/content/39790
14
+ *
15
+ * Unicode Control codes
16
+ * C0 0x00-0x1f & C1 (0x80-0x9f)
17
+ * http://en.wikipedia.org/wiki/C0_and_C1_control_codes
18
+ *
19
+ * Reserved filenames on Unix-based systems (".", "..")
20
+ * Reserved filenames in Windows ("CON", "PRN", "AUX", "NUL", "COM1",
21
+ * "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
22
+ * "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", and
23
+ * "LPT9") case-insesitively and with or without filename extensions.
24
+ *
25
+ * Capped at 255 characters in length.
26
+ * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs
27
+ *
28
+ * @param {String} input Original filename
29
+ * @param {Object} options {replacement: String | Function }
30
+ * @return {String} Sanitized filename
31
+ */
32
+ const illegalRe = /[/?<>\\:*|"]/g;
33
+ // eslint-disable-next-line no-control-regex
34
+ const controlRe = /[\x00-\x1f\x80-\x9f]/g;
35
+ const reservedRe = /^\.+$/;
36
+ const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
37
+ const windowsTrailingRe = /[. ]+$/;
38
+ function sanitize(input, replacement) {
39
+ if (typeof input !== 'string') {
40
+ throw new Error('Input must be string');
41
+ }
42
+ const sanitized = input
43
+ .replace(illegalRe, replacement)
44
+ .replace(controlRe, replacement)
45
+ .replace(reservedRe, replacement)
46
+ .replace(windowsReservedRe, replacement)
47
+ .replace(windowsTrailingRe, replacement);
48
+ return (0, truncate_utf8_bytes_1.truncateUtf8Bytes)(sanitized, 255);
49
+ }
50
+ const sanitizeFilename = (input) => {
51
+ const replacement = '';
52
+ const output = sanitize(input, replacement);
53
+ if (replacement === '') {
54
+ return output;
55
+ }
56
+ return sanitize(output, '');
57
+ };
58
+ exports.sanitizeFilename = sanitizeFilename;
@@ -0,0 +1 @@
1
+ export declare const sanitizeFilePath: (pathToSanitize: string) => string;
@@ -0,0 +1,16 @@
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.sanitizeFilePath = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const sanitize_filename_1 = require("./sanitize-filename");
9
+ const pathSeparators = /[/\\]/;
10
+ const sanitizeFilePath = (pathToSanitize) => {
11
+ return pathToSanitize
12
+ .split(pathSeparators)
13
+ .map((s) => (0, sanitize_filename_1.sanitizeFilename)(s))
14
+ .join(node_path_1.default.sep);
15
+ };
16
+ exports.sanitizeFilePath = sanitizeFilePath;
@@ -0,0 +1 @@
1
+ export declare function truncateUtf8Bytes(string: string, byteLength: number): string;