@remotion/renderer 3.0.23 → 3.0.24

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 (313) hide show
  1. package/dist/abort.d.ts +7 -0
  2. package/dist/abort.js +20 -0
  3. package/dist/browser/Browser.d.ts +5 -159
  4. package/dist/browser/Browser.js +5 -190
  5. package/dist/browser/BrowserConnector.d.ts +1 -8
  6. package/dist/browser/BrowserConnector.js +0 -32
  7. package/dist/browser/BrowserFetcher.d.ts +1 -1
  8. package/dist/browser/BrowserFetcher.js +8 -10
  9. package/dist/browser/BrowserRunner.d.ts +2 -2
  10. package/dist/browser/BrowserRunner.js +1 -1
  11. package/dist/browser/Connection.d.ts +4 -11
  12. package/dist/browser/Connection.js +5 -25
  13. package/dist/browser/ConsoleMessage.d.ts +4 -28
  14. package/dist/browser/ConsoleMessage.js +5 -32
  15. package/dist/browser/DOMWorld.d.ts +5 -6
  16. package/dist/browser/DOMWorld.js +2 -18
  17. package/dist/browser/EvalTypes.d.ts +1 -1
  18. package/dist/browser/EventEmitter.d.ts +1 -48
  19. package/dist/browser/EventEmitter.js +0 -49
  20. package/dist/browser/ExecutionContext.d.ts +7 -8
  21. package/dist/browser/ExecutionContext.js +0 -16
  22. package/dist/browser/FrameManager.d.ts +10 -14
  23. package/dist/browser/FrameManager.js +3 -19
  24. package/dist/browser/HTTPRequest.d.ts +4 -18
  25. package/dist/browser/HTTPRequest.js +3 -48
  26. package/dist/browser/HTTPResponse.d.ts +2 -81
  27. package/dist/browser/HTTPResponse.js +3 -173
  28. package/dist/browser/JSHandle.d.ts +4 -5
  29. package/dist/browser/JSHandle.js +0 -3
  30. package/dist/browser/LaunchOptions.d.ts +2 -81
  31. package/dist/browser/Launcher.d.ts +2 -2
  32. package/dist/browser/Launcher.js +21 -119
  33. package/dist/browser/LifecycleWatcher.d.ts +4 -4
  34. package/dist/browser/LifecycleWatcher.js +4 -17
  35. package/dist/browser/NetworkEventManager.d.ts +2 -4
  36. package/dist/browser/NetworkEventManager.js +0 -47
  37. package/dist/browser/NetworkManager.d.ts +1 -3
  38. package/dist/browser/NetworkManager.js +6 -42
  39. package/dist/browser/NodeWebSocketTransport.d.ts +8 -2
  40. package/dist/browser/NodeWebSocketTransport.js +1 -1
  41. package/dist/browser/{page.d.ts → Page.d.ts} +7 -13
  42. package/dist/browser/{page.js → Page.js} +14 -9
  43. package/dist/browser/PuppeteerNode.d.ts +7 -59
  44. package/dist/browser/PuppeteerNode.js +4 -66
  45. package/dist/browser/Target.d.ts +4 -4
  46. package/dist/browser/assert.d.ts +0 -20
  47. package/dist/browser/assert.js +0 -20
  48. package/dist/browser/create-browser-fetcher.d.ts +1 -1
  49. package/dist/browser/create-browser-fetcher.js +4 -25
  50. package/dist/browser/util.d.ts +3 -3
  51. package/dist/browser/util.js +1 -1
  52. package/dist/browser-log.d.ts +1 -1
  53. package/dist/cancel.d.ts +7 -0
  54. package/dist/cancel.js +25 -0
  55. package/dist/ensure-faststart.d.ts +1 -0
  56. package/dist/ensure-faststart.js +14 -0
  57. package/dist/error-handling/handle-javascript-exception.d.ts +1 -1
  58. package/dist/error-handling/handle-javascript-exception.js +2 -2
  59. package/dist/extract-frame-from-video.d.ts +4 -2
  60. package/dist/extract-frame-from-video.js +26 -14
  61. package/dist/faststart/atom.d.ts +35 -0
  62. package/dist/faststart/atom.js +138 -0
  63. package/dist/faststart/index.d.ts +0 -0
  64. package/dist/faststart/index.js +1 -0
  65. package/dist/faststart/options.d.ts +6 -0
  66. package/dist/faststart/options.js +2 -0
  67. package/dist/faststart/qt-faststart.d.ts +18 -0
  68. package/dist/faststart/qt-faststart.js +66 -0
  69. package/dist/faststart/update-chunk-offsets.d.ts +10 -0
  70. package/dist/faststart/update-chunk-offsets.js +114 -0
  71. package/dist/faststart/util.d.ts +9 -0
  72. package/dist/faststart/util.js +34 -0
  73. package/dist/get-browser-instance.d.ts +2 -1
  74. package/dist/get-compositions.d.ts +1 -1
  75. package/dist/get-compositions.js +2 -2
  76. package/dist/get-local-browser-executable.js +7 -5
  77. package/dist/get-video-info.d.ts +8 -0
  78. package/dist/get-video-info.js +45 -0
  79. package/dist/last-frame-from-video-cache.d.ts +2 -1
  80. package/dist/offthread/index.d.ts +0 -0
  81. package/dist/offthread/index.js +1 -0
  82. package/dist/open-browser.d.ts +4 -2
  83. package/dist/open-browser.js +8 -8
  84. package/dist/provide-screenshot.d.ts +3 -3
  85. package/dist/provide-screenshot.js +0 -1
  86. package/dist/puppeteer-evaluate.d.ts +1 -1
  87. package/dist/puppeteer-evaluate.js +3 -3
  88. package/dist/puppeteer-screenshot.d.ts +3 -2
  89. package/dist/puppeteer-screenshot.js +2 -4
  90. package/dist/render-frames.d.ts +2 -2
  91. package/dist/render-frames.js +18 -10
  92. package/dist/render-gif.d.ts +2 -0
  93. package/dist/render-gif.js +242 -0
  94. package/dist/render-media.d.ts +1 -1
  95. package/dist/render-still.d.ts +1 -1
  96. package/dist/screenshot-dom-element.d.ts +5 -6
  97. package/dist/screenshot-dom-element.js +3 -6
  98. package/dist/screenshot-task.d.ts +2 -1
  99. package/dist/screenshot-task.js +3 -5
  100. package/dist/seek-to-frame.d.ts +2 -2
  101. package/dist/set-props-and-env.d.ts +1 -1
  102. package/dist/set-props-and-env.js +3 -0
  103. package/dist/should-use-vp9-decoder.d.ts +0 -0
  104. package/dist/should-use-vp9-decoder.js +1 -0
  105. package/dist/stitch-frames-to-gif.d.ts +8 -0
  106. package/dist/stitch-frames-to-gif.js +128 -0
  107. package/dist/stringify-ffmpeg-filter.d.ts +1 -1
  108. package/dist/stringify-ffmpeg-filter.js +3 -0
  109. package/dist/validate-offthreadvideo-image-format.d.ts +1 -0
  110. package/dist/validate-offthreadvideo-image-format.js +15 -0
  111. package/package.json +9 -5
  112. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  113. package/dist/assets/calculate-asset-positions.js.map +0 -1
  114. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  115. package/dist/assets/calculate-atempo.js.map +0 -1
  116. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  117. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  118. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  119. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  120. package/dist/assets/download-file.d.ts.map +0 -1
  121. package/dist/assets/download-file.js.map +0 -1
  122. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  123. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  124. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  125. package/dist/assets/flatten-volume-array.js.map +0 -1
  126. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  127. package/dist/assets/get-audio-channels.js.map +0 -1
  128. package/dist/assets/read-file.d.ts.map +0 -1
  129. package/dist/assets/read-file.js.map +0 -1
  130. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  131. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  132. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  133. package/dist/assets/sanitize-filename.js.map +0 -1
  134. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  135. package/dist/assets/sanitize-filepath.js.map +0 -1
  136. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  137. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  138. package/dist/assets/types.d.ts.map +0 -1
  139. package/dist/assets/types.js.map +0 -1
  140. package/dist/browser/Accessibility.d.ts +0 -175
  141. package/dist/browser/Accessibility.js +0 -423
  142. package/dist/browser/AriaQueryHandler.d.ts +0 -20
  143. package/dist/browser/AriaQueryHandler.js +0 -108
  144. package/dist/browser/Coverage.d.ts +0 -180
  145. package/dist/browser/Coverage.js +0 -371
  146. package/dist/browser/Debug.d.ts +0 -19
  147. package/dist/browser/Debug.js +0 -42
  148. package/dist/browser/DeviceDescriptors.d.ts +0 -40
  149. package/dist/browser/DeviceDescriptors.js +0 -1407
  150. package/dist/browser/FileChooser.d.ts +0 -56
  151. package/dist/browser/FileChooser.js +0 -86
  152. package/dist/browser/Input.d.ts +0 -355
  153. package/dist/browser/Input.js +0 -592
  154. package/dist/browser/NetworkConditions.d.ts +0 -26
  155. package/dist/browser/NetworkConditions.js +0 -33
  156. package/dist/browser/PDFOptions.d.ts +0 -165
  157. package/dist/browser/PDFOptions.js +0 -34
  158. package/dist/browser/PipeTransport.d.ts +0 -10
  159. package/dist/browser/PipeTransport.js +0 -86
  160. package/dist/browser/Puppeteer.d.ts +0 -35
  161. package/dist/browser/Puppeteer.js +0 -17
  162. package/dist/browser/QueryHandler.d.ts +0 -64
  163. package/dist/browser/QueryHandler.js +0 -183
  164. package/dist/browser/SecurityDetails.d.ts +0 -55
  165. package/dist/browser/SecurityDetails.js +0 -95
  166. package/dist/browser/Tracing.d.ts +0 -45
  167. package/dist/browser/Tracing.js +0 -136
  168. package/dist/browser/USKeyboardLayout.d.ts +0 -39
  169. package/dist/browser/USKeyboardLayout.js +0 -406
  170. package/dist/browser/WebWorker.d.ts +0 -96
  171. package/dist/browser/WebWorker.js +0 -122
  172. package/dist/browser/dialog.d.ts +0 -70
  173. package/dist/browser/dialog.js +0 -114
  174. package/dist/browser/fetch.d.ts +0 -16
  175. package/dist/browser/fetch.js +0 -46
  176. package/dist/browser/find-up.d.ts +0 -4
  177. package/dist/browser/find-up.js +0 -85
  178. package/dist/browser/pkg-dir.d.ts +0 -3
  179. package/dist/browser/pkg-dir.js +0 -13
  180. package/dist/browser-log.d.ts.map +0 -1
  181. package/dist/browser-log.js.map +0 -1
  182. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  183. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  184. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  185. package/dist/can-use-parallel-encoding.js.map +0 -1
  186. package/dist/chunk.d.ts.map +0 -1
  187. package/dist/chunk.js.map +0 -1
  188. package/dist/combine-videos.d.ts.map +0 -1
  189. package/dist/combine-videos.js.map +0 -1
  190. package/dist/convert-to-pcm.d.ts.map +0 -1
  191. package/dist/convert-to-pcm.js.map +0 -1
  192. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  193. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  194. package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
  195. package/dist/create-ffmpeg-merge-filter.js.map +0 -1
  196. package/dist/create-silent-audio.d.ts.map +0 -1
  197. package/dist/create-silent-audio.js.map +0 -1
  198. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  199. package/dist/cycle-browser-tabs.js.map +0 -1
  200. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  201. package/dist/delay-render-embedded-stack.js.map +0 -1
  202. package/dist/delete-directory.d.ts.map +0 -1
  203. package/dist/delete-directory.js.map +0 -1
  204. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  205. package/dist/ensure-frames-in-order.js.map +0 -1
  206. package/dist/ensure-output-directory.d.ts.map +0 -1
  207. package/dist/ensure-output-directory.js.map +0 -1
  208. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  209. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  210. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  211. package/dist/error-handling/symbolicate-error.js.map +0 -1
  212. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  213. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  214. package/dist/ffmpeg-filter-file.d.ts.map +0 -1
  215. package/dist/ffmpeg-filter-file.js.map +0 -1
  216. package/dist/ffmpeg-flags.d.ts.map +0 -1
  217. package/dist/ffmpeg-flags.js.map +0 -1
  218. package/dist/get-audio-codec-name.d.ts.map +0 -1
  219. package/dist/get-audio-codec-name.js.map +0 -1
  220. package/dist/get-browser-instance.d.ts.map +0 -1
  221. package/dist/get-browser-instance.js.map +0 -1
  222. package/dist/get-codec-name.d.ts.map +0 -1
  223. package/dist/get-codec-name.js.map +0 -1
  224. package/dist/get-compositions.d.ts.map +0 -1
  225. package/dist/get-compositions.js.map +0 -1
  226. package/dist/get-concurrency.d.ts.map +0 -1
  227. package/dist/get-concurrency.js.map +0 -1
  228. package/dist/get-duration-from-frame-range.d.ts.map +0 -1
  229. package/dist/get-duration-from-frame-range.js.map +0 -1
  230. package/dist/get-extension-from-codec.d.ts.map +0 -1
  231. package/dist/get-extension-from-codec.js.map +0 -1
  232. package/dist/get-frame-to-render.d.ts.map +0 -1
  233. package/dist/get-frame-to-render.js.map +0 -1
  234. package/dist/get-local-browser-executable.d.ts.map +0 -1
  235. package/dist/get-local-browser-executable.js.map +0 -1
  236. package/dist/get-port.d.ts.map +0 -1
  237. package/dist/get-port.js.map +0 -1
  238. package/dist/get-prores-profile-name.d.ts.map +0 -1
  239. package/dist/get-prores-profile-name.js.map +0 -1
  240. package/dist/image-format.d.ts.map +0 -1
  241. package/dist/image-format.js.map +0 -1
  242. package/dist/index.d.ts.map +0 -1
  243. package/dist/index.js.map +0 -1
  244. package/dist/is-serve-url.d.ts.map +0 -1
  245. package/dist/is-serve-url.js.map +0 -1
  246. package/dist/legacy-webpack-config.d.ts.map +0 -1
  247. package/dist/legacy-webpack-config.js.map +0 -1
  248. package/dist/make-assets-download-dir.d.ts.map +0 -1
  249. package/dist/make-assets-download-dir.js.map +0 -1
  250. package/dist/merge-audio-track.d.ts.map +0 -1
  251. package/dist/merge-audio-track.js.map +0 -1
  252. package/dist/normalize-serve-url.d.ts.map +0 -1
  253. package/dist/normalize-serve-url.js.map +0 -1
  254. package/dist/open-browser.d.ts.map +0 -1
  255. package/dist/open-browser.js.map +0 -1
  256. package/dist/p-limit.d.ts.map +0 -1
  257. package/dist/p-limit.js.map +0 -1
  258. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  259. package/dist/parse-browser-error-stack.js.map +0 -1
  260. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  261. package/dist/parse-ffmpeg-progress.js.map +0 -1
  262. package/dist/pool.d.ts.map +0 -1
  263. package/dist/pool.js.map +0 -1
  264. package/dist/prepare-server.d.ts.map +0 -1
  265. package/dist/prepare-server.js.map +0 -1
  266. package/dist/preprocess-audio-track.d.ts.map +0 -1
  267. package/dist/preprocess-audio-track.js.map +0 -1
  268. package/dist/prespawn-ffmpeg.d.ts.map +0 -1
  269. package/dist/prespawn-ffmpeg.js.map +0 -1
  270. package/dist/provide-screenshot.d.ts.map +0 -1
  271. package/dist/provide-screenshot.js.map +0 -1
  272. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  273. package/dist/puppeteer-evaluate.js.map +0 -1
  274. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  275. package/dist/puppeteer-screenshot.js.map +0 -1
  276. package/dist/render-frames.d.ts.map +0 -1
  277. package/dist/render-frames.js.map +0 -1
  278. package/dist/render-media.d.ts.map +0 -1
  279. package/dist/render-media.js.map +0 -1
  280. package/dist/render-still.d.ts.map +0 -1
  281. package/dist/render-still.js.map +0 -1
  282. package/dist/resolve-asset-src.d.ts.map +0 -1
  283. package/dist/resolve-asset-src.js.map +0 -1
  284. package/dist/sample-rate.d.ts.map +0 -1
  285. package/dist/sample-rate.js.map +0 -1
  286. package/dist/screenshot-dom-element.d.ts.map +0 -1
  287. package/dist/screenshot-dom-element.js.map +0 -1
  288. package/dist/screenshot-task.d.ts.map +0 -1
  289. package/dist/screenshot-task.js.map +0 -1
  290. package/dist/seek-to-frame.d.ts.map +0 -1
  291. package/dist/seek-to-frame.js.map +0 -1
  292. package/dist/serve-static.d.ts.map +0 -1
  293. package/dist/serve-static.js.map +0 -1
  294. package/dist/set-props-and-env.d.ts.map +0 -1
  295. package/dist/set-props-and-env.js.map +0 -1
  296. package/dist/stitch-frames-to-video.d.ts.map +0 -1
  297. package/dist/stitch-frames-to-video.js.map +0 -1
  298. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  299. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  300. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  301. package/dist/symbolicate-stacktrace.js.map +0 -1
  302. package/dist/tmp-dir.d.ts.map +0 -1
  303. package/dist/tmp-dir.js.map +0 -1
  304. package/dist/types.d.ts.map +0 -1
  305. package/dist/types.js.map +0 -1
  306. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  307. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  308. package/dist/validate-ffmpeg.d.ts.map +0 -1
  309. package/dist/validate-ffmpeg.js.map +0 -1
  310. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  311. package/dist/validate-puppeteer-timeout.js.map +0 -1
  312. package/dist/validate-scale.d.ts.map +0 -1
  313. package/dist/validate-scale.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { Page } from 'puppeteer-core';
1
+ import type { Page } from './browser/Page';
2
2
  export declare function puppeteerEvaluateWithCatch<ReturnType>({ page, pageFunction, frame, args, }: {
3
3
  page: Page;
4
4
  pageFunction: Function | string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.puppeteerEvaluateWithCatch = void 0;
4
- const puppeteer_core_1 = require("puppeteer-core");
4
+ const JSHandle_1 = require("./browser/JSHandle");
5
5
  const symbolicateable_error_1 = require("./error-handling/symbolicateable-error");
6
6
  const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
7
7
  const EVALUATION_SCRIPT_URL = '__puppeteer_evaluation_script__';
@@ -32,7 +32,7 @@ function isString(obj) {
32
32
  async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, }) {
33
33
  var _a, _b, _c, _d, _e, _f, _g;
34
34
  const contextId = (await page.mainFrame().executionContext())._contextId;
35
- const client = page._client;
35
+ const client = page._client();
36
36
  const suffix = `//# sourceURL=${EVALUATION_SCRIPT_URL}`;
37
37
  if (isString(pageFunction)) {
38
38
  const expression = pageFunction;
@@ -139,7 +139,7 @@ function convertArgument(arg) {
139
139
  return { unserializableValue: '-Infinity' };
140
140
  if (Object.is(arg, NaN))
141
141
  return { unserializableValue: 'NaN' };
142
- const objectHandle = arg && arg instanceof puppeteer_core_1.JSHandle ? arg : null;
142
+ const objectHandle = arg && arg instanceof JSHandle_1.JSHandle ? arg : null;
143
143
  if (objectHandle) {
144
144
  if (objectHandle._disposed)
145
145
  throw new Error('JSHandle is disposed!');
@@ -1,2 +1,3 @@
1
- import type { Page, ScreenshotOptions } from 'puppeteer-core';
2
- export declare const screenshot: (page: Page, options?: ScreenshotOptions) => Promise<Buffer | string | void>;
1
+ import type { Page } from './browser/Page';
2
+ import type { ScreenshotOptions } from './browser/ScreenshotOptions';
3
+ export declare const screenshot: (page: Page, options: ScreenshotOptions) => Promise<Buffer | string | void>;
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.screenshot = void 0;
27
27
  const assert = __importStar(require("assert"));
28
28
  const screenshot_task_1 = require("./screenshot-task");
29
- const screenshot = (page, options = {}) => {
29
+ const screenshot = (page, options) => {
30
30
  let screenshotType = null;
31
31
  // options.type takes precedence over inferring the type from options.path
32
32
  // because it may be a 0-length file with no extension created beforehand
@@ -58,7 +58,6 @@ const screenshot = (page, options = {}) => {
58
58
  assert.ok(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' +
59
59
  options.quality);
60
60
  }
61
- assert.ok(!options.clip || !options.fullPage, 'options.clip and options.fullPage are exclusive');
62
61
  if (options.clip) {
63
62
  assert.ok(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' +
64
63
  typeof options.clip.x);
@@ -71,7 +70,6 @@ const screenshot = (page, options = {}) => {
71
70
  assert.ok(options.clip.width !== 0, 'Expected options.clip.width not to be 0.');
72
71
  assert.ok(options.clip.height !== 0, 'Expected options.clip.height not to be 0.');
73
72
  }
74
- // @ts-expect-error
75
- return page._screenshotTaskQueue.postTask(() => (0, screenshot_task_1._screenshotTask)(page, screenshotType, options));
73
+ return page.screenshotTaskQueue.postTask(() => (0, screenshot_task_1._screenshotTask)(page, screenshotType, options));
76
74
  };
77
75
  exports.screenshot = screenshot;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="node" />
2
- import type { Browser as PuppeteerBrowser } from 'puppeteer-core';
3
2
  import type { BrowserExecutable, FfmpegExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
4
3
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
5
4
  import type { BrowserLog } from './browser-log';
5
+ import type { Browser } from './browser/Browser';
6
6
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
7
7
  import type { CancelSignal } from './make-cancel-signal';
8
8
  import type { ChromiumOptions } from './open-browser';
@@ -26,7 +26,7 @@ declare type RenderFramesOptions = {
26
26
  quality?: number;
27
27
  frameRange?: FrameRange | null;
28
28
  dumpBrowserLogs?: boolean;
29
- puppeteerInstance?: PuppeteerBrowser;
29
+ puppeteerInstance?: Browser;
30
30
  browserExecutable?: BrowserExecutable;
31
31
  onBrowserLog?: (log: BrowserLog) => void;
32
32
  onFrameBuffer?: (buffer: Buffer, frame: number) => void;
@@ -49,6 +49,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
49
49
  });
50
50
  }
51
51
  }
52
+ const downloadPromises = [];
52
53
  const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
53
54
  const frameCount = (0, get_duration_from_frame_range_1.getDurationFromFrameRange)(realFrameRange, composition.durationInFrames);
54
55
  const pages = new Array(actualParallelism).fill(true).map(async () => {
@@ -62,8 +63,8 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
62
63
  const logCallback = (log) => {
63
64
  onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
64
65
  stackTrace: log.stackTrace(),
65
- text: log.text(),
66
- type: log.type(),
66
+ text: log.text,
67
+ type: log.type,
67
68
  });
68
69
  };
69
70
  if (onBrowserLog) {
@@ -142,7 +143,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
142
143
  quality,
143
144
  options: {
144
145
  frame,
145
- output: undefined,
146
+ output: null,
146
147
  },
147
148
  });
148
149
  remotion_1.Internals.perf.stopPerfMeasure(id);
@@ -175,13 +176,13 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
175
176
  const compressedAssets = collectedAssets.map((asset) => remotion_1.Internals.AssetCompression.compressAsset(assets.filter(remotion_1.Internals.truthy).flat(1), asset));
176
177
  assets[index] = compressedAssets;
177
178
  compressedAssets.forEach((asset) => {
178
- (0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
179
+ downloadPromises.push((0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
179
180
  asset,
180
181
  downloadDir,
181
182
  onDownload,
182
183
  }).catch((err) => {
183
184
  onError(new Error(`Error while downloading asset: ${err.stack}`));
184
- });
185
+ }));
185
186
  });
186
187
  pool.release(freePage);
187
188
  framesRendered++;
@@ -203,7 +204,11 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
203
204
  return returnValue;
204
205
  });
205
206
  return Promise.race([
206
- happyPath,
207
+ happyPath
208
+ .then(() => {
209
+ return Promise.all(downloadPromises);
210
+ })
211
+ .then(() => happyPath),
207
212
  new Promise((_resolve, reject) => {
208
213
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
209
214
  reject(new Error('renderFrames() got cancelled'));
@@ -240,7 +245,9 @@ const renderFrames = (options) => {
240
245
  return new Promise((resolve, reject) => {
241
246
  var _a, _b, _c;
242
247
  const cleanup = [];
243
- const onError = (err) => reject(err);
248
+ const onError = (err) => {
249
+ reject(err);
250
+ };
244
251
  Promise.all([
245
252
  (0, prepare_server_1.prepareServer)({
246
253
  webpackConfigOrServeUrl: selectedServeUrl,
@@ -262,7 +269,7 @@ const renderFrames = (options) => {
262
269
  closeServer();
263
270
  });
264
271
  cleanup.push(closeServer);
265
- const renderFramesProm = innerRenderFrames({
272
+ return innerRenderFrames({
266
273
  ...options,
267
274
  puppeteerInstance,
268
275
  onError,
@@ -274,9 +281,10 @@ const renderFrames = (options) => {
274
281
  downloadDir,
275
282
  proxyPort: offthreadPort,
276
283
  });
277
- return renderFramesProm;
278
284
  })
279
- .then((res) => resolve(res))
285
+ .then((res) => {
286
+ return resolve(res);
287
+ })
280
288
  .catch((err) => reject(err))
281
289
  .finally(() => {
282
290
  // If browser instance was passed in, we close all the pages
@@ -0,0 +1,2 @@
1
+ import { RenderMediaOptions } from './render-media';
2
+ export declare const renderGif: ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, loop, skipNFrames, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, ...options }: RenderMediaOptions) => Promise<void>;
@@ -0,0 +1,242 @@
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.renderGif = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const remotion_1 = require("remotion");
11
+ const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
12
+ const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
13
+ const ensure_output_directory_1 = require("./ensure-output-directory");
14
+ const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
15
+ const get_extension_from_codec_1 = require("./get-extension-from-codec");
16
+ const get_extension_of_filename_1 = require("./get-extension-of-filename");
17
+ const get_frame_to_render_1 = require("./get-frame-to-render");
18
+ const legacy_webpack_config_1 = require("./legacy-webpack-config");
19
+ const make_cancel_signal_1 = require("./make-cancel-signal");
20
+ const prespawn_ffmpeg_1 = require("./prespawn-ffmpeg");
21
+ const render_frames_1 = require("./render-frames");
22
+ const stitch_frames_to_gif_1 = require("./stitch-frames-to-gif");
23
+ const tmp_dir_1 = require("./tmp-dir");
24
+ const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
25
+ const validate_output_filename_1 = require("./validate-output-filename");
26
+ const validate_scale_1 = require("./validate-scale");
27
+ const renderGif = ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, loop, skipNFrames, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, ...options }) => {
28
+ remotion_1.Internals.validateQuality(quality);
29
+ if (typeof crf !== 'undefined' && crf !== null) {
30
+ remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
31
+ }
32
+ (0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
33
+ (0, validate_scale_1.validateScale)(scale);
34
+ const serveUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
35
+ let stitchStage = 'encoding';
36
+ let stitcherFfmpeg;
37
+ let preStitcher = null;
38
+ let encodedFrames = 0;
39
+ let renderedFrames = 0;
40
+ let renderedDoneIn = null;
41
+ let encodedDoneIn = null;
42
+ let cancelled = false;
43
+ const renderStart = Date.now();
44
+ const tmpdir = (0, tmp_dir_1.tmpDir)('pre-encode');
45
+ const parallelEncoding = (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
46
+ const actualImageFormat = imageFormat !== null && imageFormat !== void 0 ? imageFormat : 'jpeg';
47
+ const preEncodedFileLocation = parallelEncoding
48
+ ? path_1.default.join(tmpdir, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
49
+ : null;
50
+ const outputDir = parallelEncoding
51
+ ? null
52
+ : fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
53
+ (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
54
+ codec,
55
+ height: composition.height,
56
+ scale: scale !== null && scale !== void 0 ? scale : 1,
57
+ width: composition.width,
58
+ });
59
+ const callUpdate = () => {
60
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
61
+ encodedDoneIn,
62
+ encodedFrames,
63
+ renderedDoneIn,
64
+ renderedFrames,
65
+ stitchStage,
66
+ });
67
+ };
68
+ const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
69
+ const cancelRenderFrames = (0, make_cancel_signal_1.makeCancelSignal)();
70
+ const cancelPrestitcher = (0, make_cancel_signal_1.makeCancelSignal)();
71
+ const cancelStitcher = (0, make_cancel_signal_1.makeCancelSignal)();
72
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
73
+ cancelRenderFrames.cancel();
74
+ });
75
+ const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
76
+ const actualGifFps = Math.floor(composition.fps / (skipNFrames + 1));
77
+ const createPrestitcherIfNecessary = async () => {
78
+ if (preEncodedFileLocation) {
79
+ preStitcher = await (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
80
+ width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
81
+ height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
82
+ fps: actualGifFps,
83
+ outputLocation: preEncodedFileLocation,
84
+ pixelFormat,
85
+ codec,
86
+ proResProfile,
87
+ crf,
88
+ onProgress: (frame) => {
89
+ encodedFrames = frame;
90
+ callUpdate();
91
+ },
92
+ verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
93
+ ffmpegExecutable,
94
+ imageFormat: actualImageFormat,
95
+ signal: cancelPrestitcher.cancelSignal,
96
+ });
97
+ stitcherFfmpeg = preStitcher.task;
98
+ }
99
+ };
100
+ const waitForPrestitcherIfNecessary = async () => {
101
+ var _a;
102
+ if (stitcherFfmpeg) {
103
+ await waitForFinish();
104
+ (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.end();
105
+ try {
106
+ await stitcherFfmpeg;
107
+ }
108
+ catch (err) {
109
+ throw new Error(preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getLogs());
110
+ }
111
+ }
112
+ };
113
+ const happyPath = createPrestitcherIfNecessary()
114
+ .then(() => {
115
+ const renderFramesProc = (0, render_frames_1.renderFrames)({
116
+ config: composition,
117
+ onFrameUpdate: (frame) => {
118
+ stitchStage = 'gif';
119
+ renderedFrames = frame;
120
+ callUpdate();
121
+ },
122
+ parallelism,
123
+ outputDir,
124
+ skipNFrames,
125
+ onStart: (data) => {
126
+ renderedFrames = 0;
127
+ callUpdate();
128
+ onStart === null || onStart === void 0 ? void 0 : onStart(data);
129
+ },
130
+ inputProps,
131
+ envVariables,
132
+ imageFormat: actualImageFormat,
133
+ quality,
134
+ frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
135
+ puppeteerInstance,
136
+ onFrameBuffer: parallelEncoding
137
+ ? async (buffer, frame) => {
138
+ var _a;
139
+ await waitForRightTimeOfFrameToBeInserted(frame);
140
+ if (cancelled) {
141
+ return;
142
+ }
143
+ (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.write(buffer);
144
+ setFrameToStitch(frame + 1);
145
+ }
146
+ : undefined,
147
+ serveUrl,
148
+ dumpBrowserLogs,
149
+ onBrowserLog,
150
+ onDownload,
151
+ timeoutInMilliseconds,
152
+ chromiumOptions,
153
+ scale,
154
+ ffmpegExecutable,
155
+ browserExecutable,
156
+ port,
157
+ cancelSignal: cancelRenderFrames.cancelSignal,
158
+ });
159
+ return renderFramesProc;
160
+ })
161
+ .then((renderFramesReturn) => {
162
+ return Promise.all([renderFramesReturn, waitForPrestitcherIfNecessary()]);
163
+ })
164
+ .then(([{ assetsInfo }]) => {
165
+ renderedDoneIn = Date.now() - renderStart;
166
+ callUpdate();
167
+ (0, ensure_output_directory_1.ensureOutputDirectory)(outputLocation);
168
+ const stitchStart = Date.now();
169
+ return Promise.all([
170
+ (0, stitch_frames_to_gif_1.stitchFramesToGif)({
171
+ width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
172
+ height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
173
+ fps: actualGifFps,
174
+ outputLocation,
175
+ internalOptions: {
176
+ preEncodedFileLocation,
177
+ imageFormat: actualImageFormat,
178
+ },
179
+ force: overwrite !== null && overwrite !== void 0 ? overwrite : remotion_1.Internals.DEFAULT_OVERWRITE,
180
+ pixelFormat,
181
+ codec,
182
+ proResProfile,
183
+ crf,
184
+ loop,
185
+ assetsInfo,
186
+ ffmpegExecutable,
187
+ onProgress: (frame) => {
188
+ stitchStage = 'gif';
189
+ encodedFrames = frame;
190
+ callUpdate();
191
+ },
192
+ verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
193
+ dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
194
+ cancelSignal: cancelStitcher.cancelSignal,
195
+ }),
196
+ stitchStart,
197
+ ]);
198
+ })
199
+ .then(([, stitchStart]) => {
200
+ encodedFrames = (0, get_duration_from_frame_range_1.getDurationFromFrameRange)(frameRange !== null && frameRange !== void 0 ? frameRange : null, composition.durationInFrames, skipNFrames);
201
+ encodedDoneIn = Date.now() - stitchStart;
202
+ callUpdate();
203
+ })
204
+ .catch((err) => {
205
+ /**
206
+ * When an error is thrown in renderFrames(...) (e.g., when delayRender() is used incorrectly), fs.unlinkSync(...) throws an error that the file is locked because ffmpeg is still running, and renderMedia returns it.
207
+ * Therefore we first kill the FFMPEG process before deleting the file
208
+ */
209
+ cancelled = true;
210
+ cancelRenderFrames.cancel();
211
+ cancelStitcher.cancel();
212
+ cancelPrestitcher.cancel();
213
+ if (stitcherFfmpeg !== undefined && stitcherFfmpeg.exitCode === null) {
214
+ const promise = new Promise((resolve) => {
215
+ setTimeout(() => {
216
+ resolve();
217
+ }, 2000);
218
+ stitcherFfmpeg.on('close', resolve);
219
+ });
220
+ stitcherFfmpeg.kill();
221
+ return promise.then(() => {
222
+ throw err;
223
+ });
224
+ }
225
+ throw err;
226
+ })
227
+ .finally(() => {
228
+ if (preEncodedFileLocation !== null &&
229
+ fs_1.default.existsSync(preEncodedFileLocation)) {
230
+ fs_1.default.unlinkSync(preEncodedFileLocation);
231
+ }
232
+ });
233
+ return Promise.race([
234
+ happyPath,
235
+ new Promise((_resolve, reject) => {
236
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
237
+ reject(new Error('renderMedia() got cancelled'));
238
+ });
239
+ }),
240
+ ]);
241
+ };
242
+ exports.renderGif = renderGif;
@@ -1,7 +1,7 @@
1
- import type { Browser as PuppeteerBrowser } from 'puppeteer-core';
2
1
  import type { BrowserExecutable, Codec, FfmpegExecutable, FrameRange, PixelFormat, ProResProfile, SmallTCompMetadata } from 'remotion';
3
2
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
3
  import type { BrowserLog } from './browser-log';
4
+ import type { Browser as PuppeteerBrowser } from './browser/Browser';
5
5
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
6
6
  import type { CancelSignal } from './make-cancel-signal';
7
7
  import type { ChromiumOptions } from './open-browser';
@@ -1,6 +1,6 @@
1
- import type { Browser as PuppeteerBrowser } from 'puppeteer-core';
2
1
  import type { BrowserExecutable, FfmpegExecutable, SmallTCompMetadata, StillImageFormat } from 'remotion';
3
2
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
+ import type { Browser as PuppeteerBrowser } from './browser/Browser';
4
4
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
5
5
  import type { CancelSignal } from './make-cancel-signal';
6
6
  import type { ChromiumOptions } from './open-browser';
@@ -1,11 +1,10 @@
1
- import type puppeteer from 'puppeteer-core';
2
1
  import type { ImageFormat } from 'remotion';
2
+ import type { Page } from './browser/Page';
3
3
  export declare const screenshotDOMElement: ({ page, imageFormat, quality, opts, }: {
4
- page: puppeteer.Page;
4
+ page: Page;
5
5
  imageFormat: ImageFormat;
6
6
  quality: number | undefined;
7
- opts?: {
8
- path?: string | undefined;
9
- selector?: string | undefined;
10
- } | undefined;
7
+ opts: {
8
+ path: string | null;
9
+ };
11
10
  }) => Promise<Buffer>;
@@ -3,11 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.screenshotDOMElement = void 0;
4
4
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
5
5
  const puppeteer_screenshot_1 = require("./puppeteer-screenshot");
6
- const screenshotDOMElement = async ({ page, imageFormat, quality, opts = {}, }) => {
7
- const path = 'path' in opts ? opts.path : undefined;
8
- const { selector } = opts;
9
- if (!selector)
10
- throw Error('Please provide a selector.');
6
+ const screenshotDOMElement = async ({ page, imageFormat, quality, opts, }) => {
7
+ const { path } = opts;
11
8
  if (imageFormat === 'png') {
12
9
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
13
10
  pageFunction: () => {
@@ -33,7 +30,7 @@ const screenshotDOMElement = async ({ page, imageFormat, quality, opts = {}, })
33
30
  }
34
31
  return (0, puppeteer_screenshot_1.screenshot)(page, {
35
32
  omitBackground: imageFormat === 'png',
36
- path,
33
+ path: path !== null && path !== void 0 ? path : undefined,
37
34
  type: imageFormat,
38
35
  quality,
39
36
  });
@@ -1,3 +1,4 @@
1
- import type { Page, ScreenshotOptions } from 'puppeteer-core';
2
1
  import type { StillImageFormat } from 'remotion';
2
+ import type { Page } from './browser/Page';
3
+ import type { ScreenshotOptions } from './browser/ScreenshotOptions';
3
4
  export declare const _screenshotTask: (page: Page, format: StillImageFormat, options: ScreenshotOptions) => Promise<Buffer | string>;
@@ -7,8 +7,8 @@ exports._screenshotTask = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const remotion_1 = require("remotion");
9
9
  const _screenshotTask = async (page, format, options) => {
10
- const client = page._client;
11
- const target = page._target;
10
+ const client = page._client();
11
+ const target = page.target();
12
12
  const perfTarget = remotion_1.Internals.perf.startPerfMeasure('activate-target');
13
13
  await client.send('Target.activateTarget', {
14
14
  targetId: target._targetId,
@@ -30,9 +30,7 @@ const _screenshotTask = async (page, format, options) => {
30
30
  if (shouldSetDefaultBackground)
31
31
  await client.send('Emulation.setDefaultBackgroundColorOverride');
32
32
  const saveMarker = remotion_1.Internals.perf.startPerfMeasure('save');
33
- const buffer = options.encoding === 'base64'
34
- ? result.data
35
- : Buffer.from(result.data, 'base64');
33
+ const buffer = Buffer.from(result.data, 'base64');
36
34
  if (options.path)
37
35
  await fs_1.default.promises.writeFile(options.path, buffer);
38
36
  remotion_1.Internals.perf.stopPerfMeasure(saveMarker);
@@ -1,5 +1,5 @@
1
- import type puppeteer from 'puppeteer-core';
1
+ import type { Page } from './browser/Page';
2
2
  export declare const seekToFrame: ({ frame, page, }: {
3
3
  frame: number;
4
- page: puppeteer.Page;
4
+ page: Page;
5
5
  }) => Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { Page } from 'puppeteer-core';
1
+ import type { Page } from './browser/Page';
2
2
  export declare const setPropsAndEnv: ({ inputProps, envVariables, page, serveUrl, initialFrame, timeoutInMilliseconds, proxyPort, retriesRemaining, }: {
3
3
  inputProps: unknown;
4
4
  envVariables: Record<string, string> | undefined;
@@ -31,6 +31,9 @@ const setPropsAndEnv = async ({ inputProps, envVariables, page, serveUrl, initia
31
31
  window.remotion_proxyPort = port;
32
32
  }, [proxyPort]);
33
33
  const pageRes = await page.goto(urlToVisit);
34
+ if (pageRes === null) {
35
+ throw new Error(`Visited "${urlToVisit}" but got no response.`);
36
+ }
34
37
  const status = pageRes.status();
35
38
  // S3 in rare occasions returns a 500 or 503 error code for GET operations.
36
39
  // Usually it is fixed by retrying.
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,8 @@
1
+ import { StitcherOptions } from './stitch-frames-to-video';
2
+ declare type ReturnType = {
3
+ task: Promise<unknown>;
4
+ getLogs: () => string;
5
+ };
6
+ export declare const spawnFfmpeg: (options: StitcherOptions) => Promise<ReturnType>;
7
+ export declare const stitchFramesToGif: (options: StitcherOptions) => Promise<void>;
8
+ export {};