@remotion/renderer 4.0.0-alpha13 → 4.0.0-alpha16

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 (103) hide show
  1. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  2. package/dist/assets/download-and-map-assets-to-file.js +30 -6
  3. package/dist/assets/download-file.d.ts +2 -2
  4. package/dist/assets/download-map.d.ts +3 -3
  5. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -2
  6. package/dist/assets/get-audio-channels.d.ts +1 -0
  7. package/dist/assets/get-audio-channels.js +10 -5
  8. package/dist/assets/read-file.js +1 -1
  9. package/dist/assets/types.d.ts +4 -4
  10. package/dist/audio-codec.d.ts +2 -2
  11. package/dist/browser/Browser.d.ts +9 -9
  12. package/dist/browser/Browser.js +26 -32
  13. package/dist/browser/BrowserFetcher.d.ts +1 -1
  14. package/dist/browser/BrowserPage.d.ts +11 -2
  15. package/dist/browser/BrowserPage.js +47 -12
  16. package/dist/browser/BrowserRunner.js +19 -2
  17. package/dist/browser/ConsoleMessage.d.ts +1 -1
  18. package/dist/browser/DOMWorld.js +8 -8
  19. package/dist/browser/EvalTypes.d.ts +7 -7
  20. package/dist/browser/FrameManager.js +11 -11
  21. package/dist/browser/JSHandle.js +14 -14
  22. package/dist/browser/LaunchOptions.d.ts +1 -1
  23. package/dist/browser/Launcher.js +0 -1
  24. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  25. package/dist/browser/NetworkEventManager.d.ts +4 -4
  26. package/dist/browser/NodeWebSocketTransport.js +16 -16
  27. package/dist/browser/Product.d.ts +1 -1
  28. package/dist/browser/Target.d.ts +2 -1
  29. package/dist/browser/Target.js +8 -2
  30. package/dist/browser/devtools-types.d.ts +10 -10
  31. package/dist/browser/mitt/index.d.ts +6 -6
  32. package/dist/browser/revisions.d.ts +1 -1
  33. package/dist/browser/should-log-message.d.ts +24 -0
  34. package/dist/browser/should-log-message.js +72 -0
  35. package/dist/browser-executable.d.ts +1 -1
  36. package/dist/browser-log.d.ts +1 -1
  37. package/dist/browser.d.ts +1 -1
  38. package/dist/chalk/index.d.ts +4 -4
  39. package/dist/codec-supports-media.d.ts +1 -1
  40. package/dist/codec.d.ts +2 -2
  41. package/dist/combine-videos.d.ts +1 -1
  42. package/dist/compositor/compose.d.ts +11 -2
  43. package/dist/compositor/compose.js +15 -4
  44. package/dist/compositor/compositor.d.ts +1 -1
  45. package/dist/compositor/compositor.js +19 -7
  46. package/dist/compositor/payloads.d.ts +5 -5
  47. package/dist/crf.d.ts +1 -1
  48. package/dist/error-handling/symbolicate-error.js +4 -2
  49. package/dist/ffmpeg-override.d.ts +1 -1
  50. package/dist/file-extensions.d.ts +1 -1
  51. package/dist/frame-range.d.ts +1 -1
  52. package/dist/get-browser-instance.d.ts +6 -1
  53. package/dist/get-browser-instance.js +9 -4
  54. package/dist/get-compositions.d.ts +18 -11
  55. package/dist/get-compositions.js +66 -49
  56. package/dist/get-frame-padded-index.d.ts +1 -1
  57. package/dist/image-format.d.ts +3 -3
  58. package/dist/index.d.ts +106 -16
  59. package/dist/index.js +25 -13
  60. package/dist/jpeg-quality.d.ts +1 -0
  61. package/dist/jpeg-quality.js +2 -1
  62. package/dist/log-level.d.ts +1 -1
  63. package/dist/logger.d.ts +5 -3
  64. package/dist/logger.js +12 -5
  65. package/dist/make-cancel-signal.d.ts +2 -2
  66. package/dist/merge-audio-track.d.ts +1 -1
  67. package/dist/mime-types.js +1 -1
  68. package/dist/offthread-video-server.d.ts +36 -4
  69. package/dist/offthread-video-server.js +48 -4
  70. package/dist/open-browser.d.ts +19 -10
  71. package/dist/open-browser.js +34 -21
  72. package/dist/options/option.d.ts +1 -1
  73. package/dist/parse-browser-error-stack.d.ts +1 -1
  74. package/dist/perf.d.ts +1 -1
  75. package/dist/pixel-format.d.ts +1 -1
  76. package/dist/prepare-server.d.ts +20 -8
  77. package/dist/prepare-server.js +52 -8
  78. package/dist/preprocess-audio-track.d.ts +2 -2
  79. package/dist/prespawn-ffmpeg.d.ts +1 -1
  80. package/dist/prespawn-ffmpeg.js +7 -7
  81. package/dist/prores-profile.d.ts +1 -1
  82. package/dist/puppeteer-screenshot.js +1 -2
  83. package/dist/render-frames.d.ts +32 -11
  84. package/dist/render-frames.js +112 -77
  85. package/dist/render-media.d.ts +50 -21
  86. package/dist/render-media.js +249 -197
  87. package/dist/render-still.d.ts +33 -18
  88. package/dist/render-still.js +71 -43
  89. package/dist/replace-browser.d.ts +1 -1
  90. package/dist/select-composition.d.ts +19 -11
  91. package/dist/select-composition.js +79 -42
  92. package/dist/serve-static.d.ts +2 -3
  93. package/dist/serve-static.js +2 -4
  94. package/dist/set-props-and-env.d.ts +1 -1
  95. package/dist/stitch-frames-to-video.d.ts +32 -10
  96. package/dist/stitch-frames-to-video.js +121 -99
  97. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  98. package/dist/symbolicate-stacktrace.d.ts +16 -3
  99. package/dist/symbolicate-stacktrace.js +49 -24
  100. package/dist/truthy.d.ts +1 -1
  101. package/dist/types.d.ts +2 -2
  102. package/dist/validate-opengl-renderer.d.ts +1 -1
  103. package/package.json +11 -11
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import type { CompositorCommand } from './payloads';
3
- export declare type Compositor = {
3
+ export type Compositor = {
4
4
  finishCommands: () => void;
5
5
  executeCommand: <T extends keyof CompositorCommand>(type: T, payload: CompositorCommand[T]) => Promise<Buffer>;
6
6
  waitForDone: () => Promise<void>;
@@ -45,7 +45,7 @@ const startCompositor = (type, payload, indent) => {
45
45
  const waiters = new Map();
46
46
  const onMessage = (statusType, nonce, data) => {
47
47
  if (nonce === '0') {
48
- logger_1.Log.verboseAdvanced({ indent, logLevel: (0, logger_1.getLogLevel)(), tag: 'COMPOSITOR' }, data.toString('utf8'));
48
+ logger_1.Log.verboseAdvanced({ indent, logLevel: (0, logger_1.getLogLevel)(), tag: 'compositor' }, data.toString('utf8'));
49
49
  }
50
50
  if (waiters.has(nonce)) {
51
51
  if (statusType === 'error') {
@@ -63,7 +63,7 @@ const startCompositor = (type, payload, indent) => {
63
63
  waiters.delete(nonce);
64
64
  }
65
65
  };
66
- let quit = false;
66
+ let runningStatus = { type: 'running' };
67
67
  let missingData = null;
68
68
  const processInput = () => {
69
69
  let separatorIndex = outputBuffer.indexOf(separator);
@@ -145,9 +145,9 @@ const startCompositor = (type, payload, indent) => {
145
145
  let resolve = null;
146
146
  let reject = null;
147
147
  child.on('close', (code) => {
148
- quit = true;
149
148
  const waitersToKill = Array.from(waiters.values());
150
149
  if (code === 0) {
150
+ runningStatus = { type: 'quit-without-error' };
151
151
  resolve === null || resolve === void 0 ? void 0 : resolve();
152
152
  for (const waiter of waitersToKill) {
153
153
  waiter.reject(new Error(`Compositor already quit`));
@@ -155,7 +155,9 @@ const startCompositor = (type, payload, indent) => {
155
155
  waiters.clear();
156
156
  }
157
157
  else {
158
- const error = new Error(`Compositor panicked: ${Buffer.concat(stderrChunks).toString('utf-8')}`);
158
+ const errorMessage = Buffer.concat(stderrChunks).toString('utf-8');
159
+ runningStatus = { type: 'quit-with-error', error: errorMessage };
160
+ const error = new Error(`Compositor panicked: ${errorMessage}`);
159
161
  for (const waiter of waitersToKill) {
160
162
  waiter.reject(error);
161
163
  }
@@ -166,24 +168,34 @@ const startCompositor = (type, payload, indent) => {
166
168
  return {
167
169
  waitForDone: () => {
168
170
  return new Promise((res, rej) => {
169
- if (quit) {
171
+ if (runningStatus.type === 'quit-without-error') {
170
172
  rej(new Error('Compositor already quit'));
171
173
  return;
172
174
  }
175
+ if (runningStatus.type === 'quit-with-error') {
176
+ rej(new Error(`Compositor already quit: ${runningStatus.error}`));
177
+ return;
178
+ }
173
179
  resolve = res;
174
180
  reject = rej;
175
181
  });
176
182
  },
177
183
  finishCommands: () => {
178
- if (quit) {
184
+ if (runningStatus.type === 'quit-with-error') {
185
+ throw new Error(`Compositor already quit: ${runningStatus.error}`);
186
+ }
187
+ if (runningStatus.type === 'quit-without-error') {
179
188
  throw new Error('Compositor already quit');
180
189
  }
181
190
  child.stdin.write('EOF\n');
182
191
  },
183
192
  executeCommand: (command, params) => {
184
- if (quit) {
193
+ if (runningStatus.type === 'quit-without-error') {
185
194
  throw new Error('Compositor already quit');
186
195
  }
196
+ if (runningStatus.type === 'quit-with-error') {
197
+ throw new Error(`Compositor quit: ${runningStatus.error}`);
198
+ }
187
199
  return new Promise((_resolve, _reject) => {
188
200
  const nonce = (0, make_nonce_1.makeNonce)();
189
201
  const composed = {
@@ -1,4 +1,4 @@
1
- export declare type Layer = {
1
+ export type Layer = {
2
2
  type: 'PngImage';
3
3
  params: {
4
4
  src: string;
@@ -26,8 +26,8 @@ export declare type Layer = {
26
26
  height: number;
27
27
  };
28
28
  };
29
- export declare type CompositorImageFormat = 'Png' | 'Jpeg';
30
- export declare type CompositorCommand = {
29
+ export type CompositorImageFormat = 'Png' | 'Jpeg';
30
+ export type CompositorCommand = {
31
31
  Compose: {
32
32
  output: string;
33
33
  width: number;
@@ -55,14 +55,14 @@ export declare type CompositorCommand = {
55
55
  percent_of_memory: number;
56
56
  };
57
57
  };
58
- export declare type CompositorCommandSerialized<T extends keyof CompositorCommand> = {
58
+ export type CompositorCommandSerialized<T extends keyof CompositorCommand> = {
59
59
  nonce: string;
60
60
  payload: {
61
61
  type: T;
62
62
  params: CompositorCommand[T];
63
63
  };
64
64
  };
65
- export declare type ErrorPayload = {
65
+ export type ErrorPayload = {
66
66
  error: string;
67
67
  backtrace: string;
68
68
  };
package/dist/crf.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Codec } from './codec';
2
- export declare type Crf = number | undefined;
2
+ export type Crf = number | undefined;
3
3
  export declare const getDefaultCrfForCodec: (codec: Codec) => number;
4
4
  export declare const getValidCrfRanges: (codec: Codec) => [number, number];
5
5
  export declare const validateQualitySettings: ({ codec, crf, videoBitrate, }: {
@@ -7,8 +7,10 @@ const handle_javascript_exception_1 = require("./handle-javascript-exception");
7
7
  const symbolicateError = async (symbolicateableError) => {
8
8
  const { delayRenderCall, stackFrame } = symbolicateableError;
9
9
  const [mainErrorFrames, delayRenderFrames] = await Promise.all([
10
- stackFrame ? (0, symbolicate_stacktrace_1.symbolicateStackTrace)(stackFrame) : null,
11
- delayRenderCall ? (0, symbolicate_stacktrace_1.symbolicateStackTrace)(delayRenderCall) : null,
10
+ stackFrame ? (0, symbolicate_stacktrace_1.symbolicateStackTraceFromRemoteFrames)(stackFrame) : null,
11
+ delayRenderCall
12
+ ? (0, symbolicate_stacktrace_1.symbolicateStackTraceFromRemoteFrames)(delayRenderCall)
13
+ : null,
12
14
  ].filter(truthy_1.truthy));
13
15
  const symbolicatedErr = new handle_javascript_exception_1.ErrorWithStackFrame({
14
16
  message: symbolicateableError.message,
@@ -1,4 +1,4 @@
1
- export declare type FfmpegOverrideFn = (info: {
1
+ export type FfmpegOverrideFn = (info: {
2
2
  type: 'pre-stitcher' | 'stitcher';
3
3
  args: string[];
4
4
  }) => string[];
@@ -1,6 +1,6 @@
1
1
  import type { supportedAudioCodecs } from './audio-codec';
2
2
  import type { Codec } from './codec';
3
- export declare type FileExtension = 'aac' | '3gp' | 'm4a' | 'm4b' | 'mpg' | 'mpeg' | 'mkv' | 'mp4' | 'gif' | 'hevc' | 'mp3' | 'mov' | 'mxf' | 'wav' | 'webm';
3
+ export type FileExtension = 'aac' | '3gp' | 'm4a' | 'm4b' | 'mpg' | 'mpeg' | 'mkv' | 'mp4' | 'gif' | 'hevc' | 'mp3' | 'mov' | 'mxf' | 'wav' | 'webm';
4
4
  export declare const defaultFileExtensionMap: {
5
5
  [key in Codec]: {
6
6
  default: FileExtension;
@@ -1,2 +1,2 @@
1
- export declare type FrameRange = number | [number, number];
1
+ export type FrameRange = number | [number, number];
2
2
  export declare const validateFrameRange: (frameRange: FrameRange | null) => void;
@@ -2,10 +2,15 @@ import type { BrowserExecutable } from './browser-executable';
2
2
  import type { HeadlessBrowser } from './browser/Browser';
3
3
  import type { Page } from './browser/BrowserPage';
4
4
  import type { ChromiumOptions } from './open-browser';
5
- export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, }: {
5
+ import type { AnySourceMapConsumer } from './symbolicate-stacktrace';
6
+ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, context, forceDeviceScaleFactor, indent, shouldDumpIo, }: {
6
7
  passedInInstance: HeadlessBrowser | undefined;
7
8
  browserExecutable: BrowserExecutable | null;
8
9
  chromiumOptions: ChromiumOptions;
10
+ context: AnySourceMapConsumer | null;
11
+ indent: boolean;
12
+ forceDeviceScaleFactor: number | undefined;
13
+ shouldDumpIo: boolean;
9
14
  }) => Promise<{
10
15
  cleanup: () => void;
11
16
  page: Page;
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPageAndCleanupFn = void 0;
4
4
  const browser_1 = require("./browser");
5
5
  const open_browser_1 = require("./open-browser");
6
- const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, }) => {
6
+ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, context, forceDeviceScaleFactor, indent, shouldDumpIo, }) => {
7
7
  if (passedInInstance) {
8
- const page = await passedInInstance.newPage();
8
+ const page = await passedInInstance.newPage(context);
9
9
  return {
10
10
  page,
11
11
  cleanup: () => {
@@ -17,11 +17,16 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
17
17
  },
18
18
  };
19
19
  }
20
- const browserInstance = await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
20
+ const browserInstance = await (0, open_browser_1.internalOpenBrowser)({
21
+ browser: browser_1.DEFAULT_BROWSER,
21
22
  browserExecutable,
22
23
  chromiumOptions,
24
+ forceDeviceScaleFactor,
25
+ indent,
26
+ shouldDumpIo,
27
+ viewport: null,
23
28
  });
24
- const browserPage = await browserInstance.newPage();
29
+ const browserPage = await browserInstance.newPage(context);
25
30
  return {
26
31
  page: browserPage,
27
32
  cleanup: () => {
@@ -1,10 +1,24 @@
1
1
  import type { AnyCompMetadata } from 'remotion';
2
- import type { DownloadMap } from './assets/download-map';
3
2
  import type { BrowserExecutable } from './browser-executable';
4
3
  import type { BrowserLog } from './browser-log';
5
4
  import type { HeadlessBrowser } from './browser/Browser';
6
5
  import type { ChromiumOptions } from './open-browser';
7
- declare type GetCompositionsConfig = {
6
+ import type { RemotionServer } from './prepare-server';
7
+ type InternalGetCompositionsOptions = {
8
+ inputProps: Record<string, unknown>;
9
+ envVariables: Record<string, string>;
10
+ puppeteerInstance: HeadlessBrowser | undefined;
11
+ onBrowserLog: null | ((log: BrowserLog) => void);
12
+ browserExecutable: BrowserExecutable | null;
13
+ timeoutInMilliseconds: number;
14
+ chromiumOptions: ChromiumOptions;
15
+ port: number | null;
16
+ server: RemotionServer | undefined;
17
+ indent: boolean;
18
+ verbose: boolean;
19
+ serveUrlOrWebpackUrl: string;
20
+ };
21
+ export type GetCompositionsOptions = {
8
22
  inputProps?: Record<string, unknown> | null;
9
23
  envVariables?: Record<string, string>;
10
24
  puppeteerInstance?: HeadlessBrowser;
@@ -13,19 +27,12 @@ declare type GetCompositionsConfig = {
13
27
  timeoutInMilliseconds?: number;
14
28
  chromiumOptions?: ChromiumOptions;
15
29
  port?: number | null;
16
- /**
17
- * @deprecated Only for Remotion internal usage
18
- */
19
- downloadMap?: DownloadMap;
20
- /**
21
- * @deprecated Only for Remotion internal usage
22
- */
23
- indent?: boolean;
24
30
  verbose?: boolean;
25
31
  };
32
+ export declare const internalGetCompositions: ({ browserExecutable, chromiumOptions, envVariables, indent, inputProps, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, verbose, }: InternalGetCompositionsOptions) => Promise<AnyCompMetadata[]>;
26
33
  /**
27
34
  * @description Gets the compositions defined in a Remotion project based on a Webpack bundle.
28
35
  * @see [Documentation](https://www.remotion.dev/docs/renderer/get-compositions)
29
36
  */
30
- export declare const getCompositions: (serveUrlOrWebpackUrl: string, config?: GetCompositionsConfig) => Promise<AnyCompMetadata[]>;
37
+ export declare const getCompositions: (serveUrlOrWebpackUrl: string, config?: GetCompositionsOptions) => Promise<AnyCompMetadata[]>;
31
38
  export {};
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCompositions = void 0;
4
- const download_map_1 = require("./assets/download-map");
3
+ exports.getCompositions = exports.internalGetCompositions = void 0;
4
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
5
5
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
6
6
  const find_closest_package_json_1 = require("./find-closest-package-json");
7
7
  const get_browser_instance_1 = require("./get-browser-instance");
@@ -10,26 +10,24 @@ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
10
10
  const seek_to_frame_1 = require("./seek-to-frame");
11
11
  const set_props_and_env_1 = require("./set-props-and-env");
12
12
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
13
- const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
14
- var _a;
15
- if (config === null || config === void 0 ? void 0 : config.onBrowserLog) {
13
+ const innerGetCompositions = async ({ envVariables, inputProps, onBrowserLog, page, proxyPort, serveUrl, timeoutInMilliseconds, }) => {
14
+ if (onBrowserLog) {
16
15
  page.on('console', (log) => {
17
- var _a;
18
- (_a = config.onBrowserLog) === null || _a === void 0 ? void 0 : _a.call(config, {
16
+ onBrowserLog({
19
17
  stackTrace: log.stackTrace(),
20
18
  text: log.text,
21
19
  type: log.type,
22
20
  });
23
21
  });
24
22
  }
25
- (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(config === null || config === void 0 ? void 0 : config.timeoutInMilliseconds);
23
+ (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
26
24
  await (0, set_props_and_env_1.setPropsAndEnv)({
27
- inputProps: (_a = config === null || config === void 0 ? void 0 : config.inputProps) !== null && _a !== void 0 ? _a : {},
28
- envVariables: config === null || config === void 0 ? void 0 : config.envVariables,
25
+ inputProps,
26
+ envVariables,
29
27
  page,
30
28
  serveUrl,
31
29
  initialFrame: 0,
32
- timeoutInMilliseconds: config === null || config === void 0 ? void 0 : config.timeoutInMilliseconds,
30
+ timeoutInMilliseconds,
33
31
  proxyPort,
34
32
  retriesRemaining: 2,
35
33
  audioEnabled: false,
@@ -38,7 +36,7 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
38
36
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
39
37
  page,
40
38
  pageFunction: () => {
41
- window.setBundleMode({
39
+ window.remotion_setBundleMode({
42
40
  type: 'evaluation',
43
41
  });
44
42
  },
@@ -56,62 +54,81 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
56
54
  });
57
55
  return result;
58
56
  };
59
- /**
60
- * @description Gets the compositions defined in a Remotion project based on a Webpack bundle.
61
- * @see [Documentation](https://www.remotion.dev/docs/renderer/get-compositions)
62
- */
63
- const getCompositions = async (serveUrlOrWebpackUrl, config) => {
64
- var _a, _b, _c;
65
- const downloadMap = (_a = config === null || config === void 0 ? void 0 : config.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
66
- const { page, cleanup } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
67
- passedInInstance: config === null || config === void 0 ? void 0 : config.puppeteerInstance,
68
- browserExecutable: (_b = config === null || config === void 0 ? void 0 : config.browserExecutable) !== null && _b !== void 0 ? _b : null,
69
- chromiumOptions: (_c = config === null || config === void 0 ? void 0 : config.chromiumOptions) !== null && _c !== void 0 ? _c : {},
57
+ const internalGetCompositions = async ({ browserExecutable, chromiumOptions, envVariables, indent, inputProps, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, verbose, }) => {
58
+ const { page, cleanup: cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
59
+ passedInInstance: puppeteerInstance,
60
+ browserExecutable,
61
+ chromiumOptions,
62
+ context: null,
63
+ forceDeviceScaleFactor: undefined,
64
+ indent,
65
+ shouldDumpIo: verbose,
70
66
  });
67
+ const cleanup = [cleanupPage];
71
68
  return new Promise((resolve, reject) => {
72
- var _a, _b, _c;
73
69
  const onError = (err) => reject(err);
74
- const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
70
+ cleanup.push((0, handle_javascript_exception_1.handleJavascriptException)({
75
71
  page,
76
72
  frame: null,
77
73
  onError,
78
- });
79
- let close = null;
80
- (0, prepare_server_1.prepareServer)({
74
+ }));
75
+ (0, prepare_server_1.makeOrReuseServer)(server, {
81
76
  webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
82
- onDownload: () => undefined,
83
- onError,
84
- port: (_a = config === null || config === void 0 ? void 0 : config.port) !== null && _a !== void 0 ? _a : null,
85
- downloadMap,
77
+ port,
86
78
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
87
79
  concurrency: 1,
88
- verbose: (_b = config === null || config === void 0 ? void 0 : config.verbose) !== null && _b !== void 0 ? _b : false,
89
- indent: (_c = config === null || config === void 0 ? void 0 : config.indent) !== null && _c !== void 0 ? _c : false,
80
+ verbose,
81
+ indent,
82
+ }, {
83
+ onDownload: () => undefined,
84
+ onError,
90
85
  })
91
- .then(({ serveUrl, closeServer, offthreadPort }) => {
92
- close = closeServer;
93
- return innerGetCompositions(serveUrl, page, config !== null && config !== void 0 ? config : {}, offthreadPort);
86
+ .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
87
+ page.setBrowserSourceMapContext(sourceMap);
88
+ cleanup.push(() => cleanupServer(true));
89
+ return innerGetCompositions({
90
+ envVariables,
91
+ inputProps,
92
+ onBrowserLog,
93
+ page,
94
+ proxyPort: offthreadPort,
95
+ serveUrl,
96
+ timeoutInMilliseconds,
97
+ });
94
98
  })
95
99
  .then((comp) => {
96
- if (close) {
97
- return Promise.all([comp, close(true)]);
98
- }
99
- return Promise.resolve([comp, null]);
100
- })
101
- .then(([comp]) => {
102
100
  return resolve(comp);
103
101
  })
104
102
  .catch((err) => {
105
103
  reject(err);
106
104
  })
107
105
  .finally(() => {
108
- cleanup();
109
- cleanupPageError();
110
- // Clean download map if it was not passed in
111
- if (!(config === null || config === void 0 ? void 0 : config.downloadMap)) {
112
- (0, download_map_1.cleanDownloadMap)(downloadMap);
113
- }
106
+ cleanup.forEach((c) => {
107
+ c();
108
+ });
114
109
  });
115
110
  });
116
111
  };
112
+ exports.internalGetCompositions = internalGetCompositions;
113
+ /**
114
+ * @description Gets the compositions defined in a Remotion project based on a Webpack bundle.
115
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/get-compositions)
116
+ */
117
+ const getCompositions = (serveUrlOrWebpackUrl, config) => {
118
+ const { browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, verbose, } = config !== null && config !== void 0 ? config : {};
119
+ return (0, exports.internalGetCompositions)({
120
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
121
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
122
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
123
+ inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
124
+ indent: false,
125
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
126
+ port: port !== null && port !== void 0 ? port : null,
127
+ puppeteerInstance: puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : undefined,
128
+ serveUrlOrWebpackUrl,
129
+ server: undefined,
130
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
131
+ verbose: verbose !== null && verbose !== void 0 ? verbose : false,
132
+ });
133
+ };
117
134
  exports.getCompositions = getCompositions;
@@ -1,5 +1,5 @@
1
1
  import type { VideoImageFormat } from './image-format';
2
- export declare type CountType = 'from-zero' | 'actual-frames';
2
+ export type CountType = 'from-zero' | 'actual-frames';
3
3
  export declare const getFrameOutputFileName: ({ index, frame, imageFormat, countType, lastFrame, totalFrames, }: {
4
4
  index: number;
5
5
  frame: number;
@@ -1,12 +1,12 @@
1
1
  import type { PixelFormat } from './pixel-format';
2
2
  export declare const validVideoImageFormats: readonly ["png", "jpeg", "none"];
3
3
  export declare const validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
4
- export declare type VideoImageFormat = typeof validVideoImageFormats[number];
5
- export declare type StillImageFormat = typeof validStillImageFormats[number];
4
+ export type VideoImageFormat = typeof validVideoImageFormats[number];
5
+ export type StillImageFormat = typeof validStillImageFormats[number];
6
6
  /**
7
7
  * @deprecated Use VideoImageFormat or StillImageFormat instead
8
8
  */
9
- export declare type ImageFormat = 'This type is deprecated, use VideoImageFormat or StillImageFormat instead';
9
+ export type ImageFormat = 'This type is deprecated, use VideoImageFormat or StillImageFormat instead';
10
10
  export declare const DEFAULT_VIDEO_IMAGE_FORMAT: VideoImageFormat;
11
11
  export declare const DEFAULT_STILL_IMAGE_FORMAT: StillImageFormat;
12
12
  export declare const validateSelectedPixelFormatAndImageFormatCombination: (pixelFormat: PixelFormat | undefined, videoImageFormat: VideoImageFormat) => 'none' | 'valid';