@remotion/renderer 4.0.61 → 4.0.63

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.
@@ -14,11 +14,11 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { LogLevel } from '../log-level';
17
- import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
18
17
  import type { Page } from './BrowserPage';
19
18
  import type { Connection } from './Connection';
20
19
  import { EventEmitter } from './EventEmitter';
21
20
  import type { Viewport } from './PuppeteerViewport';
21
+ import type { SourceMapGetter } from './source-map-getter';
22
22
  import { Target } from './Target';
23
23
  type BrowserCloseCallback = () => Promise<void> | void;
24
24
  interface WaitForTargetOptions {
@@ -51,8 +51,8 @@ export declare class HeadlessBrowser extends EventEmitter {
51
51
  rememberEventLoop: () => void;
52
52
  });
53
53
  browserContexts(): BrowserContext[];
54
- newPage(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
55
- _createPageInContext(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
54
+ newPage(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
55
+ _createPageInContext(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
56
56
  targets(): Target[];
57
57
  waitForTarget(predicate: (x: Target) => boolean | Promise<boolean>, options?: WaitForTargetOptions): Promise<Target>;
58
58
  pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
@@ -67,7 +67,7 @@ export declare class BrowserContext extends EventEmitter {
67
67
  timeout?: number;
68
68
  }): Promise<Target>;
69
69
  pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
70
- newPage(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
70
+ newPage(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
71
71
  browser(): HeadlessBrowser;
72
72
  }
73
73
  export {};
@@ -204,7 +204,7 @@ class BrowserContext extends EventEmitter_1.EventEmitter {
204
204
  async pages(logLevel, indent) {
205
205
  const pages = await Promise.all(this.targets()
206
206
  .filter((target) => target.type() === 'page')
207
- .map((target) => target.page(Promise.resolve(null), logLevel, indent)));
207
+ .map((target) => target.page(() => null, logLevel, indent)));
208
208
  return pages.filter((page) => {
209
209
  return Boolean(page);
210
210
  });
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { LogLevel } from '../log-level';
17
- import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
18
17
  import type { HeadlessBrowser } from './Browser';
19
18
  import type { CDPSession } from './Connection';
20
19
  import { ConsoleMessage } from './ConsoleMessage';
@@ -24,6 +23,7 @@ import type { Frame } from './FrameManager';
24
23
  import type { HTTPResponse } from './HTTPResponse';
25
24
  import type { JSHandle } from './JSHandle';
26
25
  import type { Viewport } from './PuppeteerViewport';
26
+ import type { SourceMapGetter } from './source-map-getter';
27
27
  import type { Target } from './Target';
28
28
  import { TaskQueue } from './TaskQueue';
29
29
  interface WaitForOptions {
@@ -42,25 +42,25 @@ interface PageEventObject {
42
42
  export declare class Page extends EventEmitter {
43
43
  #private;
44
44
  id: string;
45
- static _create({ client, target, defaultViewport, browser, sourcemapContext, logLevel, indent, }: {
45
+ static _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, }: {
46
46
  client: CDPSession;
47
47
  target: Target;
48
48
  defaultViewport: Viewport;
49
49
  browser: HeadlessBrowser;
50
- sourcemapContext: Promise<AnySourceMapConsumer | null>;
50
+ sourceMapGetter: SourceMapGetter;
51
51
  logLevel: LogLevel;
52
52
  indent: boolean;
53
53
  }): Promise<Page>;
54
54
  closed: boolean;
55
55
  browser: HeadlessBrowser;
56
56
  screenshotTaskQueue: TaskQueue;
57
- sourcemapContext: AnySourceMapConsumer | null;
57
+ sourceMapGetter: SourceMapGetter;
58
58
  logLevel: LogLevel;
59
- constructor({ client, target, browser, sourcemapContext, logLevel, indent, }: {
59
+ constructor({ client, target, browser, sourceMapGetter, logLevel, indent, }: {
60
60
  client: CDPSession;
61
61
  target: Target;
62
62
  browser: HeadlessBrowser;
63
- sourcemapContext: Promise<AnySourceMapConsumer | null>;
63
+ sourceMapGetter: SourceMapGetter;
64
64
  logLevel: LogLevel;
65
65
  indent: boolean;
66
66
  });
@@ -99,6 +99,6 @@ export declare class Page extends EventEmitter {
99
99
  close(options?: {
100
100
  runBeforeUnload?: boolean;
101
101
  }): Promise<void>;
102
- setBrowserSourceMapContext(context: Promise<AnySourceMapConsumer | null>): void;
102
+ setBrowserSourceMapGetter(context: SourceMapGetter): void;
103
103
  }
104
104
  export {};
@@ -49,12 +49,12 @@ const shouldHideWarning = (log) => {
49
49
  return false;
50
50
  };
51
51
  class Page extends EventEmitter_1.EventEmitter {
52
- static async _create({ client, target, defaultViewport, browser, sourcemapContext, logLevel, indent, }) {
52
+ static async _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, }) {
53
53
  const page = new Page({
54
54
  client,
55
55
  target,
56
56
  browser,
57
- sourcemapContext,
57
+ sourceMapGetter,
58
58
  logLevel,
59
59
  indent,
60
60
  });
@@ -62,7 +62,7 @@ class Page extends EventEmitter_1.EventEmitter {
62
62
  await page.setViewport(defaultViewport);
63
63
  return page;
64
64
  }
65
- constructor({ client, target, browser, sourcemapContext, logLevel, indent, }) {
65
+ constructor({ client, target, browser, sourceMapGetter, logLevel, indent, }) {
66
66
  super();
67
67
  _Page_instances.add(this);
68
68
  this.closed = false;
@@ -71,16 +71,13 @@ class Page extends EventEmitter_1.EventEmitter {
71
71
  _Page_timeoutSettings.set(this, new TimeoutSettings_1.TimeoutSettings());
72
72
  _Page_frameManager.set(this, void 0);
73
73
  _Page_pageBindings.set(this, new Map());
74
- this.sourcemapContext = null;
75
74
  __classPrivateFieldSet(this, _Page_client, client, "f");
76
75
  __classPrivateFieldSet(this, _Page_target, target, "f");
77
76
  __classPrivateFieldSet(this, _Page_frameManager, new FrameManager_1.FrameManager(client, this, indent, logLevel), "f");
78
77
  this.screenshotTaskQueue = new TaskQueue_1.TaskQueue();
79
78
  this.browser = browser;
80
79
  this.id = String(Math.random());
81
- sourcemapContext.then((context) => {
82
- this.sourcemapContext = context;
83
- });
80
+ this.sourceMapGetter = sourceMapGetter;
84
81
  this.logLevel = logLevel;
85
82
  client.on('Target.attachedToTarget', (event) => {
86
83
  switch (event.targetInfo.type) {
@@ -122,8 +119,8 @@ class Page extends EventEmitter_1.EventEmitter {
122
119
  }
123
120
  if ((url === null || url === void 0 ? void 0 : url.endsWith(remotion_1.Internals.bundleName)) &&
124
121
  lineNumber &&
125
- this.sourcemapContext) {
126
- const origPosition = (_a = this.sourcemapContext) === null || _a === void 0 ? void 0 : _a.originalPositionFor({
122
+ this.sourceMapGetter()) {
123
+ const origPosition = (_a = this.sourceMapGetter()) === null || _a === void 0 ? void 0 : _a.originalPositionFor({
127
124
  column: columnNumber !== null && columnNumber !== void 0 ? columnNumber : 0,
128
125
  line: lineNumber,
129
126
  });
@@ -254,10 +251,8 @@ class Page extends EventEmitter_1.EventEmitter {
254
251
  await __classPrivateFieldGet(this, _Page_target, "f")._isClosedPromise;
255
252
  }
256
253
  }
257
- setBrowserSourceMapContext(context) {
258
- context.then((ctx) => {
259
- this.sourcemapContext = ctx;
260
- });
254
+ setBrowserSourceMapGetter(context) {
255
+ this.sourceMapGetter = context;
261
256
  }
262
257
  }
263
258
  exports.Page = Page;
@@ -14,15 +14,15 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { LogLevel } from '../log-level';
17
- import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
18
17
  import type { BrowserContext, HeadlessBrowser } from './Browser';
19
18
  import { Page } from './BrowserPage';
20
19
  import type { CDPSession } from './Connection';
21
20
  import type { TargetInfo } from './devtools-types';
22
21
  import type { Viewport } from './PuppeteerViewport';
22
+ import type { SourceMapGetter } from './source-map-getter';
23
23
  export declare class Target {
24
24
  #private;
25
- _initializedPromise: Promise<boolean>;
25
+ _initializedPromise: Promise<boolean> | null;
26
26
  _initializedCallback: (x: boolean) => void;
27
27
  _isClosedPromise: Promise<void>;
28
28
  _closedCallback: () => void;
@@ -37,7 +37,7 @@ export declare class Target {
37
37
  /**
38
38
  * If the target is not of type `"page"` or `"background_page"`, returns `null`.
39
39
  */
40
- page(sourcemapContext: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page | null>;
40
+ page(sourceMapGetter: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page | null>;
41
41
  url(): string;
42
42
  /**
43
43
  * Identifies what kind of target this is.
@@ -79,7 +79,7 @@ class Target {
79
79
  /**
80
80
  * If the target is not of type `"page"` or `"background_page"`, returns `null`.
81
81
  */
82
- async page(sourcemapContext, logLevel, indent) {
82
+ async page(sourceMapGetter, logLevel, indent) {
83
83
  var _a;
84
84
  if (isPagetTarget(__classPrivateFieldGet(this, _Target_targetInfo, "f")) && !__classPrivateFieldGet(this, _Target_pagePromise, "f")) {
85
85
  __classPrivateFieldSet(this, _Target_pagePromise, __classPrivateFieldGet(this, _Target_sessionFactory, "f").call(this).then((client) => {
@@ -89,7 +89,7 @@ class Target {
89
89
  target: this,
90
90
  defaultViewport: (_a = __classPrivateFieldGet(this, _Target_defaultViewport, "f")) !== null && _a !== void 0 ? _a : null,
91
91
  browser: this.browser(),
92
- sourcemapContext,
92
+ sourceMapGetter,
93
93
  logLevel,
94
94
  indent,
95
95
  });
@@ -0,0 +1,2 @@
1
+ import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
2
+ export type SourceMapGetter = () => AnySourceMapConsumer | null;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/client.d.ts CHANGED
@@ -311,7 +311,7 @@ export declare const BrowserSafeApis: {
311
311
  cliFlag: string;
312
312
  docLink: string;
313
313
  name: string;
314
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
314
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
315
315
  ssrName: string;
316
316
  description: () => JSX.Element;
317
317
  };
@@ -3,12 +3,10 @@ import type { HeadlessBrowser } from './browser/Browser';
3
3
  import type { Page } from './browser/BrowserPage';
4
4
  import type { LogLevel } from './log-level';
5
5
  import type { ChromiumOptions } from './open-browser';
6
- import type { AnySourceMapConsumer } from './symbolicate-stacktrace';
7
- export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, context, forceDeviceScaleFactor, indent, logLevel, }: {
6
+ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, }: {
8
7
  passedInInstance: HeadlessBrowser | undefined;
9
8
  browserExecutable: BrowserExecutable | null;
10
9
  chromiumOptions: ChromiumOptions;
11
- context: AnySourceMapConsumer | null;
12
10
  indent: boolean;
13
11
  forceDeviceScaleFactor: number | undefined;
14
12
  logLevel: LogLevel;
@@ -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, context, forceDeviceScaleFactor, indent, logLevel, }) => {
6
+ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, }) => {
7
7
  if (passedInInstance) {
8
- const page = await passedInInstance.newPage(Promise.resolve(context), logLevel, indent);
8
+ const page = await passedInInstance.newPage(() => null, logLevel, indent);
9
9
  return {
10
10
  page,
11
11
  cleanup: () => {
@@ -26,7 +26,7 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
26
26
  viewport: null,
27
27
  logLevel,
28
28
  });
29
- const browserPage = await browserInstance.newPage(Promise.resolve(context), logLevel, indent);
29
+ const browserPage = await browserInstance.newPage(() => null, logLevel, indent);
30
30
  return {
31
31
  page: browserPage,
32
32
  cleanup: () => {
@@ -83,7 +83,6 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
83
83
  passedInInstance: puppeteerInstance,
84
84
  browserExecutable,
85
85
  chromiumOptions,
86
- context: null,
87
86
  forceDeviceScaleFactor: undefined,
88
87
  indent,
89
88
  logLevel,
@@ -109,7 +108,7 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
109
108
  onError,
110
109
  })
111
110
  .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
112
- page.setBrowserSourceMapContext(sourceMap);
111
+ page.setBrowserSourceMapGetter(sourceMap);
113
112
  cleanup.push(() => cleanupServer(true));
114
113
  return innerGetCompositions({
115
114
  envVariables,
package/dist/index.d.ts CHANGED
@@ -138,8 +138,8 @@ export declare const RenderInternals: {
138
138
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
139
139
  DEFAULT_BROWSER: "chrome";
140
140
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
141
- DEFAULT_OPENGL_RENDERER: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
142
- validateOpenGlRenderer: (option: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
141
+ DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
142
+ validateOpenGlRenderer: (option: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
143
143
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
144
144
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
145
145
  validateJpegQuality: (q: number | undefined) => void;
@@ -330,8 +330,8 @@ export declare const RenderInternals: {
330
330
  };
331
331
  validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
332
332
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
333
- DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
334
- DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
333
+ DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "pdf" | "webp";
334
+ DEFAULT_VIDEO_IMAGE_FORMAT: "png" | "jpeg" | "none";
335
335
  DEFAULT_JPEG_QUALITY: number;
336
336
  chalk: {
337
337
  enabled: () => boolean;
@@ -430,7 +430,7 @@ export declare const RenderInternals: {
430
430
  frame: number;
431
431
  serializedInputPropsWithCustomSchema: string;
432
432
  serializedResolvedPropsWithCustomSchema: string;
433
- imageFormat: "jpeg" | "png" | "webp" | "pdf";
433
+ imageFormat: "png" | "jpeg" | "pdf" | "webp";
434
434
  jpegQuality: number;
435
435
  puppeteerInstance: HeadlessBrowser | null;
436
436
  envVariables: Record<string, string>;
@@ -0,0 +1 @@
1
+ export declare const isIpV6Supported: () => boolean;
@@ -0,0 +1,26 @@
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.isIpV6Supported = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ let cache = null;
9
+ const calculate = () => {
10
+ const interfaces = os_1.default.networkInterfaces();
11
+ for (const iface in interfaces) {
12
+ for (const configuration of interfaces[iface]) {
13
+ if (configuration.family === 'IPv6' && !configuration.internal) {
14
+ return true;
15
+ }
16
+ }
17
+ }
18
+ return false;
19
+ };
20
+ const isIpV6Supported = () => {
21
+ if (cache === null) {
22
+ cache = calculate();
23
+ }
24
+ return cache;
25
+ };
26
+ exports.isIpV6Supported = isIpV6Supported;
@@ -4,7 +4,7 @@ export declare const glOption: {
4
4
  cliFlag: string;
5
5
  docLink: string;
6
6
  name: string;
7
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
7
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
8
8
  ssrName: string;
9
9
  description: () => JSX.Element;
10
10
  };
@@ -116,7 +116,7 @@ export declare const allOptions: {
116
116
  cliFlag: string;
117
117
  docLink: string;
118
118
  name: string;
119
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
119
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
120
120
  ssrName: string;
121
121
  description: () => JSX.Element;
122
122
  };
@@ -1,14 +1,14 @@
1
1
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
2
  import type { DownloadMap } from './assets/download-map';
3
+ import type { SourceMapGetter } from './browser/source-map-getter';
3
4
  import type { Compositor } from './compositor/compositor';
4
5
  import type { LogLevel } from './log-level';
5
- import type { AnySourceMapConsumer } from './symbolicate-stacktrace';
6
6
  export type RemotionServer = {
7
7
  serveUrl: string;
8
8
  closeServer: (force: boolean) => Promise<unknown>;
9
9
  offthreadPort: number;
10
10
  compositor: Compositor;
11
- sourceMap: Promise<AnySourceMapConsumer | null>;
11
+ sourceMap: SourceMapGetter;
12
12
  downloadMap: DownloadMap;
13
13
  };
14
14
  type PrepareServerOptions = {
@@ -28,18 +28,25 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
28
28
  indent,
29
29
  offthreadVideoCacheSizeInBytes,
30
30
  });
31
+ let remoteSourceMap = null;
32
+ (0, symbolicate_stacktrace_1.getSourceMapFromRemoteUrl)((0, get_bundle_url_from_serve_url_1.getBundleMapUrlFromServeUrl)(webpackConfigOrServeUrl))
33
+ .then((s) => {
34
+ remoteSourceMap = s;
35
+ })
36
+ .catch((err) => {
37
+ logger_1.Log.verbose({ indent, logLevel }, 'Could not fetch sourcemap for ', webpackConfigOrServeUrl, err);
38
+ });
31
39
  return Promise.resolve({
32
40
  serveUrl: webpackConfigOrServeUrl,
33
41
  closeServer: () => {
34
42
  (0, download_map_1.cleanDownloadMap)(downloadMap);
43
+ remoteSourceMap === null || remoteSourceMap === void 0 ? void 0 : remoteSourceMap.destroy();
44
+ remoteSourceMap = null;
35
45
  return closeProxy();
36
46
  },
37
47
  offthreadPort,
38
48
  compositor: comp,
39
- sourceMap: (0, symbolicate_stacktrace_1.getSourceMapFromRemoteUrl)((0, get_bundle_url_from_serve_url_1.getBundleMapUrlFromServeUrl)(webpackConfigOrServeUrl)).catch((err) => {
40
- logger_1.Log.verbose({ indent, logLevel }, 'Could not fetch sourcemap for ', webpackConfigOrServeUrl, err);
41
- return null;
42
- }),
49
+ sourceMap: () => remoteSourceMap,
43
50
  downloadMap,
44
51
  });
45
52
  }
@@ -49,7 +56,14 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
49
56
  if (!exists) {
50
57
  throw new Error(`Tried to serve the Webpack bundle on a HTTP server, but the file ${indexFile} does not exist. Is this a valid path to a Webpack bundle?`);
51
58
  }
52
- const sourceMap = (0, symbolicate_stacktrace_1.getSourceMapFromLocalFile)(node_path_1.default.join(webpackConfigOrServeUrl, remotion_1.Internals.bundleName));
59
+ let localSourceMap = null;
60
+ (0, symbolicate_stacktrace_1.getSourceMapFromLocalFile)(node_path_1.default.join(webpackConfigOrServeUrl, remotion_1.Internals.bundleName))
61
+ .then((s) => {
62
+ localSourceMap = s;
63
+ })
64
+ .catch((err) => {
65
+ logger_1.Log.verbose({ indent, logLevel }, 'Could not fetch sourcemap for ', webpackConfigOrServeUrl, err);
66
+ });
53
67
  const { port: serverPort, close, compositor, } = await (0, serve_static_1.serveStatic)(webpackConfigOrServeUrl, {
54
68
  port,
55
69
  downloadMap,
@@ -61,7 +75,8 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
61
75
  });
62
76
  return Promise.resolve({
63
77
  closeServer: async (force) => {
64
- sourceMap.then((s) => s === null || s === void 0 ? void 0 : s.destroy());
78
+ localSourceMap === null || localSourceMap === void 0 ? void 0 : localSourceMap.destroy();
79
+ localSourceMap = null;
65
80
  (0, download_map_1.cleanDownloadMap)(downloadMap);
66
81
  if (!force) {
67
82
  await (0, wait_for_symbolication_error_to_be_done_1.waitForSymbolicationToBeDone)();
@@ -71,7 +86,7 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
71
86
  serveUrl: `http://localhost:${serverPort}`,
72
87
  offthreadPort: serverPort,
73
88
  compositor,
74
- sourceMap,
89
+ sourceMap: () => localSourceMap,
75
90
  downloadMap,
76
91
  });
77
92
  };
@@ -37,7 +37,7 @@ const validate_1 = require("./validate");
37
37
  const validate_scale_1 = require("./validate-scale");
38
38
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
39
39
  const MAX_RETRIES_PER_FRAME = 1;
40
- const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourcemapContext, logLevel, indent, parallelEncodingEnabled, }) => {
40
+ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourceMapGetter, logLevel, indent, parallelEncodingEnabled, }) => {
41
41
  if (outputDir) {
42
42
  if (!node_fs_1.default.existsSync(outputDir)) {
43
43
  node_fs_1.default.mkdirSync(outputDir, {
@@ -130,7 +130,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
130
130
  countType,
131
131
  });
132
132
  let framesRendered = 0;
133
- const poolPromise = getPool(sourcemapContext);
133
+ const poolPromise = getPool(sourceMapGetter);
134
134
  onStart === null || onStart === void 0 ? void 0 : onStart({
135
135
  frameCount: framesToRender.length,
136
136
  parallelEncoding: parallelEncodingEnabled,
@@ -270,7 +270,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
270
270
  await browserReplacer.replaceBrowser(makeBrowser, async () => {
271
271
  const pages = new Array(actualConcurrency)
272
272
  .fill(true)
273
- .map(() => makePage(sourcemapContext));
273
+ .map(() => makePage(sourceMapGetter));
274
274
  const puppeteerPages = await Promise.all(pages);
275
275
  const pool = await poolPromise;
276
276
  for (const newPage of puppeteerPages) {
@@ -372,7 +372,7 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
372
372
  makeBrowser,
373
373
  browserReplacer,
374
374
  compositor,
375
- sourcemapContext: sourceMap,
375
+ sourceMapGetter: sourceMap,
376
376
  downloadMap,
377
377
  cancelSignal,
378
378
  envVariables,
@@ -51,7 +51,7 @@ const validate_1 = require("./validate");
51
51
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
52
52
  const validate_scale_1 = require("./validate-scale");
53
53
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
54
- const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, serializedInputPropsWithCustomSchema, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, logLevel, indent, serializedResolvedPropsWithCustomSchema, }) => {
54
+ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, serializedInputPropsWithCustomSchema, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapGetter, downloadMap, logLevel, indent, serializedResolvedPropsWithCustomSchema, }) => {
55
55
  (0, validate_1.validateDimension)(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
56
56
  (0, validate_1.validateDimension)(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
57
57
  (0, validate_1.validateFps)(composition.fps, 'in the `config` object of `renderStill()`', false);
@@ -95,7 +95,7 @@ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFA
95
95
  viewport: null,
96
96
  logLevel,
97
97
  }));
98
- const page = await browserInstance.newPage(Promise.resolve(sourceMapContext), logLevel, indent);
98
+ const page = await browserInstance.newPage(sourceMapGetter, logLevel, indent);
99
99
  await page.setViewport({
100
100
  width: composition.width,
101
101
  height: composition.height,
@@ -217,14 +217,14 @@ const internalRenderStillRaw = (options) => {
217
217
  })
218
218
  .then(({ server, cleanupServer }) => {
219
219
  cleanup.push(() => cleanupServer(false));
220
- const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = server;
220
+ const { serveUrl, offthreadPort, compositor, sourceMap: sourceMapGetter, downloadMap, } = server;
221
221
  return innerRenderStill({
222
222
  ...options,
223
223
  serveUrl,
224
224
  onError,
225
225
  proxyPort: offthreadPort,
226
226
  compositor,
227
- sourceMapContext: sourceMap,
227
+ sourceMapGetter,
228
228
  downloadMap,
229
229
  });
230
230
  })
@@ -97,7 +97,6 @@ const internalSelectCompositionRaw = async (options) => {
97
97
  passedInInstance: puppeteerInstance,
98
98
  browserExecutable,
99
99
  chromiumOptions,
100
- context: null,
101
100
  forceDeviceScaleFactor: undefined,
102
101
  indent,
103
102
  logLevel,
@@ -123,7 +122,7 @@ const internalSelectCompositionRaw = async (options) => {
123
122
  onError,
124
123
  })
125
124
  .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
126
- page.setBrowserSourceMapContext(sourceMap);
125
+ page.setBrowserSourceMapGetter(sourceMap);
127
126
  cleanup.push(() => cleanupServer(true));
128
127
  return innerSelectComposition({
129
128
  serveUrl,
@@ -152,17 +152,21 @@ const innerSetPropsAndEnv = async ({ serializedInputPropsWithCustomSchema, envVa
152
152
  };
153
153
  const setPropsAndEnv = async (params) => {
154
154
  let timeout = null;
155
- const result = await Promise.race([
156
- innerSetPropsAndEnv(params),
157
- new Promise((_, reject) => {
158
- timeout = setTimeout(() => {
159
- reject(new Error(`Timed out after ${params.timeoutInMilliseconds} while setting up the headless browser. This could be because the you specified takes a long time to load (or network resources that it includes like fonts) or because the browser is not responding. Optimize the site or increase the browser timeout.`));
160
- }, params.timeoutInMilliseconds);
161
- }),
162
- ]);
163
- if (timeout !== null) {
164
- clearTimeout(timeout);
155
+ try {
156
+ const result = await Promise.race([
157
+ innerSetPropsAndEnv(params),
158
+ new Promise((_, reject) => {
159
+ timeout = setTimeout(() => {
160
+ reject(new Error(`Timed out after ${params.timeoutInMilliseconds} while setting up the headless browser. This could be because the you specified takes a long time to load (or network resources that it includes like fonts) or because the browser is not responding. Optimize the site or increase the browser timeout.`));
161
+ }, params.timeoutInMilliseconds);
162
+ }),
163
+ ]);
164
+ return result;
165
+ }
166
+ finally {
167
+ if (timeout !== null) {
168
+ clearTimeout(timeout);
169
+ }
165
170
  }
166
- return result;
167
171
  };
168
172
  exports.setPropsAndEnv = setPropsAndEnv;
package/dist/test-gpu.js CHANGED
@@ -8,7 +8,6 @@ const getChromiumGpuInformation = async ({ browserExecutable, indent, logLevel,
8
8
  passedInInstance: undefined,
9
9
  browserExecutable,
10
10
  chromiumOptions,
11
- context: null,
12
11
  forceDeviceScaleFactor: undefined,
13
12
  indent,
14
13
  logLevel,
@@ -0,0 +1,4 @@
1
+ export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
2
+ export type OpenGlRenderer = (typeof validOpenGlRenderers)[number];
3
+ export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
+ export declare const validateOpenGlRenderer: (option: OpenGlRenderer | null) => OpenGlRenderer | null;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOpenGlRenderer = exports.DEFAULT_OPENGL_RENDERER = exports.validOpenGlRenderers = void 0;
4
+ exports.validOpenGlRenderers = [
5
+ 'swangle',
6
+ 'angle',
7
+ 'egl',
8
+ 'swiftshader',
9
+ ];
10
+ exports.DEFAULT_OPENGL_RENDERER = null;
11
+ const validateOpenGlRenderer = (option) => {
12
+ if (option === null) {
13
+ return null;
14
+ }
15
+ if (!exports.validOpenGlRenderers.includes(option)) {
16
+ throw new TypeError(`${option} is not a valid GL backend. Accepted values: ${exports.validOpenGlRenderers.join(', ')}`);
17
+ }
18
+ return option;
19
+ };
20
+ exports.validateOpenGlRenderer = validateOpenGlRenderer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.61",
3
+ "version": "4.0.63",
4
4
  "description": "Renderer for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "extract-zip": "2.0.1",
19
19
  "source-map": "^0.8.0-beta.0",
20
20
  "ws": "8.7.0",
21
- "remotion": "4.0.61"
21
+ "remotion": "4.0.63"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -40,13 +40,13 @@
40
40
  "vitest": "0.31.1"
41
41
  },
42
42
  "optionalDependencies": {
43
- "@remotion/compositor-darwin-arm64": "4.0.61",
44
- "@remotion/compositor-darwin-x64": "4.0.61",
45
- "@remotion/compositor-linux-arm64-musl": "4.0.61",
46
- "@remotion/compositor-linux-x64-gnu": "4.0.61",
47
- "@remotion/compositor-linux-x64-musl": "4.0.61",
48
- "@remotion/compositor-linux-arm64-gnu": "4.0.61",
49
- "@remotion/compositor-win32-x64-msvc": "4.0.61"
43
+ "@remotion/compositor-darwin-arm64": "4.0.63",
44
+ "@remotion/compositor-darwin-x64": "4.0.63",
45
+ "@remotion/compositor-linux-arm64-gnu": "4.0.63",
46
+ "@remotion/compositor-linux-arm64-musl": "4.0.63",
47
+ "@remotion/compositor-linux-x64-musl": "4.0.63",
48
+ "@remotion/compositor-linux-x64-gnu": "4.0.63",
49
+ "@remotion/compositor-win32-x64-msvc": "4.0.63"
50
50
  },
51
51
  "keywords": [
52
52
  "remotion",