@remotion/renderer 4.0.539 → 4.0.541

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 (162) hide show
  1. package/dist/assets/download-and-map-assets-to-file.js +16 -3
  2. package/dist/assets/download-file.js +10 -6
  3. package/dist/assets/download-map.d.ts +1 -1
  4. package/dist/assets/read-file.d.ts +1 -1
  5. package/dist/assets/read-file.js +6 -5
  6. package/dist/browser/BrowserFetcher.js +4 -1
  7. package/dist/browser/BrowserPage.js +27 -8
  8. package/dist/browser/BrowserRunner.js +36 -10
  9. package/dist/browser/NetworkManager.js +6 -1
  10. package/dist/browser/devtools-commands.d.ts +6 -1
  11. package/dist/browser/get-chrome-download-url.d.ts +1 -1
  12. package/dist/browser/get-chrome-download-url.js +4 -1
  13. package/dist/check-version-requirements.js +6 -6
  14. package/dist/client.d.ts +459 -238
  15. package/dist/collect-assets.js +1 -1
  16. package/dist/esm/client.mjs +349 -310
  17. package/dist/esm/index.mjs +348 -272
  18. package/dist/get-compositions.js +6 -3
  19. package/dist/index.d.ts +113 -41
  20. package/dist/index.js +4 -2
  21. package/dist/make-page.d.ts +3 -1
  22. package/dist/make-page.js +2 -1
  23. package/dist/open-browser.js +2 -0
  24. package/dist/options/allow-html-in-canvas.d.ts +1 -1
  25. package/dist/options/api-key.d.ts +1 -1
  26. package/dist/options/ask-ai.d.ts +1 -1
  27. package/dist/options/ask-ai.js +1 -1
  28. package/dist/options/audio-bitrate.d.ts +1 -1
  29. package/dist/options/beep-on-finish.d.ts +1 -1
  30. package/dist/options/benchmark-concurrencies.d.ts +1 -1
  31. package/dist/options/binaries-directory.d.ts +1 -1
  32. package/dist/options/browser-executable.d.ts +1 -1
  33. package/dist/options/browser-executable.js +1 -1
  34. package/dist/options/browser.d.ts +1 -1
  35. package/dist/options/bundle-cache.d.ts +1 -1
  36. package/dist/options/canvas-tabs.d.ts +1 -1
  37. package/dist/options/chrome-mode.d.ts +1 -1
  38. package/dist/options/color-space.d.ts +1 -1
  39. package/dist/options/concurrency.d.ts +1 -1
  40. package/dist/options/config.d.ts +1 -1
  41. package/dist/options/crf.d.ts +1 -1
  42. package/dist/options/crf.js +1 -1
  43. package/dist/options/cross-site-isolation.d.ts +1 -1
  44. package/dist/options/cross-site-isolation.js +2 -2
  45. package/dist/options/dark-mode.d.ts +1 -1
  46. package/dist/options/default-coding-agent.d.ts +1 -1
  47. package/dist/options/default-editor.d.ts +1 -1
  48. package/dist/options/default-premount-in-seconds.d.ts +1 -1
  49. package/dist/options/delete-after.d.ts +1 -1
  50. package/dist/options/disable-git-source.d.ts +2 -2
  51. package/dist/options/disable-shared-memory-capture.d.ts +1 -1
  52. package/dist/options/disable-web-security.d.ts +1 -1
  53. package/dist/options/disallow-parallel-encoding.d.ts +1 -1
  54. package/dist/options/enable-cancellation.d.ts +1 -1
  55. package/dist/options/enable-lambda-insights.d.ts +1 -1
  56. package/dist/options/enable-lambda-insights.js +2 -2
  57. package/dist/options/enable-multiprocess-on-linux.d.ts +1 -1
  58. package/dist/options/enable-multiprocess-on-linux.js +2 -2
  59. package/dist/options/encoding-buffer-size.d.ts +1 -1
  60. package/dist/options/encoding-max-rate.d.ts +1 -1
  61. package/dist/options/enforce-audio.d.ts +1 -1
  62. package/dist/options/env-file.d.ts +1 -1
  63. package/dist/options/every-nth-frame.d.ts +1 -1
  64. package/dist/options/experimental-keep-audio-context-alive.d.ts +1 -1
  65. package/dist/options/folder-expiry.d.ts +1 -1
  66. package/dist/options/folder-expiry.js +1 -1
  67. package/dist/options/for-seamless-aac-concatenation.d.ts +1 -1
  68. package/dist/options/force-new-studio.d.ts +1 -1
  69. package/dist/options/frames.d.ts +1 -1
  70. package/dist/options/gl.d.ts +1 -1
  71. package/dist/options/gop-size.d.ts +1 -1
  72. package/dist/options/headless.d.ts +1 -1
  73. package/dist/options/ignore-certificate-errors.d.ts +1 -1
  74. package/dist/options/image-sequence-pattern.d.ts +1 -1
  75. package/dist/options/image-sequence.d.ts +1 -1
  76. package/dist/options/index.d.ts +119 -102
  77. package/dist/options/index.js +2 -0
  78. package/dist/options/interactivity.d.ts +1 -1
  79. package/dist/options/ipv4.d.ts +1 -1
  80. package/dist/options/is-production.d.ts +1 -1
  81. package/dist/options/jpeg-quality.d.ts +1 -1
  82. package/dist/options/keyboard-shortcuts.d.ts +1 -1
  83. package/dist/options/latency-hint.d.ts +1 -1
  84. package/dist/options/license-key.d.ts +1 -1
  85. package/dist/options/log-level.d.ts +1 -1
  86. package/dist/options/metadata.d.ts +1 -1
  87. package/dist/options/mute.d.ts +1 -1
  88. package/dist/options/no-open.d.ts +1 -1
  89. package/dist/options/number-of-gif-loops.d.ts +1 -1
  90. package/dist/options/number-of-shared-audio-tags.d.ts +1 -1
  91. package/dist/options/offthreadvideo-cache-size.d.ts +1 -1
  92. package/dist/options/offthreadvideo-threads.d.ts +1 -1
  93. package/dist/options/on-browser-download.d.ts +1 -1
  94. package/dist/options/options-map.d.ts +340 -136
  95. package/dist/options/options-map.js +13 -0
  96. package/dist/options/out-dir.d.ts +1 -1
  97. package/dist/options/override-duration.d.ts +1 -1
  98. package/dist/options/override-fps.d.ts +1 -1
  99. package/dist/options/override-height.d.ts +1 -1
  100. package/dist/options/override-width.d.ts +1 -1
  101. package/dist/options/overwrite.d.ts +1 -1
  102. package/dist/options/package-manager.d.ts +1 -1
  103. package/dist/options/pixel-format.d.ts +1 -1
  104. package/dist/options/port.d.ts +1 -1
  105. package/dist/options/prefer-lossless.d.ts +1 -1
  106. package/dist/options/preferred-effect-backend.d.ts +18 -0
  107. package/dist/options/preferred-effect-backend.js +28 -0
  108. package/dist/options/preserve-pitch-on-playback.d.ts +1 -1
  109. package/dist/options/preview-sample-rate.d.ts +1 -1
  110. package/dist/options/props.d.ts +1 -1
  111. package/dist/options/prores-profile.d.ts +1 -1
  112. package/dist/options/public-dir.d.ts +1 -1
  113. package/dist/options/public-license-key.d.ts +1 -1
  114. package/dist/options/public-path.d.ts +1 -1
  115. package/dist/options/repro.d.ts +1 -1
  116. package/dist/options/rspack.d.ts +1 -1
  117. package/dist/options/runs.d.ts +1 -1
  118. package/dist/options/sample-rate.d.ts +1 -1
  119. package/dist/options/scale.d.ts +1 -1
  120. package/dist/options/sequence-activity-limit.d.ts +1 -1
  121. package/dist/options/show-layer-frame-numbers.d.ts +1 -1
  122. package/dist/options/show-premounting.d.ts +1 -1
  123. package/dist/options/skip-skills.d.ts +1 -1
  124. package/dist/options/still-frame.d.ts +1 -1
  125. package/dist/options/still-image-format.d.ts +1 -1
  126. package/dist/options/throw-if-site-exists.d.ts +2 -2
  127. package/dist/options/timeout.d.ts +1 -1
  128. package/dist/options/user-agent.d.ts +1 -1
  129. package/dist/options/version-flag.d.ts +1 -1
  130. package/dist/options/video-bitrate.d.ts +1 -1
  131. package/dist/options/video-cache-size.d.ts +1 -1
  132. package/dist/options/video-codec.d.ts +1 -1
  133. package/dist/options/video-image-format.d.ts +1 -1
  134. package/dist/options/webhook-custom-data.d.ts +1 -1
  135. package/dist/options/webpack-poll.d.ts +1 -1
  136. package/dist/options/x264-preset.d.ts +1 -1
  137. package/dist/pool.js +3 -0
  138. package/dist/render-frame-and-retry-target-close.js +2 -1
  139. package/dist/render-frames.js +6 -3
  140. package/dist/render-media.d.ts +1 -1
  141. package/dist/render-media.js +4 -2
  142. package/dist/render-still.js +6 -2
  143. package/dist/select-composition.js +6 -3
  144. package/dist/set-props-and-env.d.ts +2 -0
  145. package/dist/set-props-and-env.js +8 -3
  146. package/dist/stringify-ffmpeg-filter.js +6 -2
  147. package/dist/symbolicate-stacktrace.js +1 -1
  148. package/dist/validate-selected-frames.d.ts +4 -4
  149. package/dist/validate-selected-frames.js +2 -31
  150. package/package.json +15 -15
  151. package/dist/options/experimental-client-side-rendering.d.ts +0 -16
  152. package/dist/options/experimental-client-side-rendering.js +0 -30
  153. package/dist/options/experimental-sequence-activity-limit.d.ts +0 -19
  154. package/dist/options/experimental-sequence-activity-limit.js +0 -40
  155. package/dist/options/experimental-sequence-activity.d.ts +0 -19
  156. package/dist/options/experimental-sequence-activity.js +0 -38
  157. package/dist/options/experimental-tracks.d.ts +0 -19
  158. package/dist/options/experimental-tracks.js +0 -43
  159. package/dist/prestitcher-memory-usage.d.ts +0 -13
  160. package/dist/prestitcher-memory-usage.js +0 -33
  161. package/dist/render-partitions.d.ts +0 -7
  162. package/dist/render-partitions.js +0 -50
@@ -57,8 +57,12 @@ const waitForAssetToBeDownloaded = ({ src, downloadDir, downloadMap, }) => {
57
57
  if (!downloadMap.listeners[src][downloadDir]) {
58
58
  downloadMap.listeners[src][downloadDir] = [];
59
59
  }
60
- return new Promise((resolve) => {
61
- downloadMap.listeners[src][downloadDir].push(() => {
60
+ return new Promise((resolve, reject) => {
61
+ downloadMap.listeners[src][downloadDir].push((err) => {
62
+ if (err) {
63
+ reject(err);
64
+ return;
65
+ }
62
66
  const srcMap = downloadMap.hasBeenDownloadedMap[src];
63
67
  if (!(srcMap === null || srcMap === void 0 ? void 0 : srcMap[downloadDir])) {
64
68
  throw new Error('Expected file for ' + src + 'to be available in ' + downloadDir);
@@ -82,7 +86,7 @@ const notifyAssetIsDownloaded = ({ src, downloadDir, to, downloadMap, }) => {
82
86
  downloadMap.hasBeenDownloadedMap[src] = {};
83
87
  }
84
88
  downloadMap.hasBeenDownloadedMap[src][downloadDir] = to;
85
- downloadMap.listeners[src][downloadDir].forEach((fn) => fn());
89
+ downloadMap.listeners[src][downloadDir].forEach((fn) => fn(null));
86
90
  };
87
91
  const validateMimeType = (mimeType, src) => {
88
92
  if (!mimeType.includes('/')) {
@@ -189,6 +193,15 @@ const downloadAsset = async ({ src, downloadMap, indent, logLevel, shouldAnalyze
189
193
  indent,
190
194
  logLevel,
191
195
  abortSignal: downloadMap.cleanupController.signal,
196
+ }).catch((err) => {
197
+ var _a, _b, _c;
198
+ var _d;
199
+ // https://github.com/remotion-dev/remotion/issues/12817
200
+ (_a = downloadMap.isDownloadingMap[src]) === null || _a === void 0 ? true : delete _a[downloadDir];
201
+ const listeners = (_d = (_b = downloadMap.listeners[src]) === null || _b === void 0 ? void 0 : _b[downloadDir]) !== null && _d !== void 0 ? _d : [];
202
+ (_c = downloadMap.listeners[src]) === null || _c === void 0 ? true : delete _c[downloadDir];
203
+ listeners.forEach((fn) => fn(err));
204
+ throw err;
192
205
  });
193
206
  notifyAssetIsDownloaded({ src, downloadMap, downloadDir, to });
194
207
  if (shouldAnalyzeAudioImmediately) {
@@ -38,23 +38,30 @@ const downloadFileWithoutRetries = ({ onProgress, url, to: toFn, abortSignal, })
38
38
  return;
39
39
  }
40
40
  rejectAndFlag(new Error(`Tried to download file ${url}, ${noDataSentToken} 20 seconds`));
41
+ closeConnection();
41
42
  }, 20000);
42
43
  };
43
44
  refreshTimeout();
44
45
  let finishEventSent = false;
45
- let closeConnection = () => undefined;
46
+ // Until a response arrives, closing the connection aborts the pending request
47
+ const requestController = new AbortController();
48
+ let closeConnection = () => requestController.abort();
46
49
  const onAbort = () => {
47
50
  rejectAndFlag(new Error(CANCELLED_ERROR));
48
51
  closeConnection();
49
52
  };
50
53
  abortSignal.addEventListener('abort', onAbort);
51
- (0, read_file_1.readFile)(url)
54
+ (0, read_file_1.readFile)(url, requestController.signal)
52
55
  .then(({ response, request }) => {
53
56
  var _a, _b;
54
57
  closeConnection = () => {
55
58
  request.destroy();
56
59
  response.destroy();
57
60
  };
61
+ if (rejected) {
62
+ closeConnection();
63
+ return;
64
+ }
58
65
  if (abortSignal.aborted) {
59
66
  onAbort();
60
67
  return;
@@ -132,10 +139,7 @@ const downloadFile = async (options, retries = 2, attempt = 1) => {
132
139
  message.includes(incorrectContentLengthToken) ||
133
140
  message.includes(noDataSentToken) ||
134
141
  // Try again if hitting internal errors
135
- message.includes('503') ||
136
- message.includes('502') ||
137
- message.includes('504') ||
138
- message.includes('500')) {
142
+ /^Received a status code of (500|502|503|504) while downloading file /.test(message)) {
139
143
  if (retries === 0) {
140
144
  throw err;
141
145
  }
@@ -23,7 +23,7 @@ export type DownloadMap = {
23
23
  };
24
24
  listeners: {
25
25
  [key: string]: {
26
- [downloadDir: string]: (() => void)[];
26
+ [downloadDir: string]: ((err: Error | null) => void)[];
27
27
  };
28
28
  };
29
29
  durationOfAssetCache: Record<string, AudioChannelsAndDurationResultCache>;
@@ -3,5 +3,5 @@ type NodeRequestAndResponse = {
3
3
  request: http.ClientRequest;
4
4
  response: http.IncomingMessage;
5
5
  };
6
- export declare const readFile: (url: string, redirectsSoFar?: number) => Promise<NodeRequestAndResponse>;
6
+ export declare const readFile: (url: string, signal: AbortSignal | null, redirectsSoFar?: number) => Promise<NodeRequestAndResponse>;
7
7
  export {};
@@ -17,7 +17,7 @@ const getClient = (url) => {
17
17
  }
18
18
  throw new Error(`Can only download URLs starting with http:// or https://, got "${url}"`);
19
19
  };
20
- const readFileWithoutRedirect = (url) => {
20
+ const readFileWithoutRedirect = (url, signal) => {
21
21
  return new Promise((resolve, reject) => {
22
22
  const client = getClient(url);
23
23
  const req = client(url,
@@ -27,8 +27,9 @@ const readFileWithoutRedirect = (url) => {
27
27
  headers: {
28
28
  'user-agent': 'Mozilla/5.0 (@remotion/renderer - https://remotion.dev)',
29
29
  },
30
+ signal: signal !== null && signal !== void 0 ? signal : undefined,
30
31
  }
31
- : {}, (res) => {
32
+ : { signal: signal !== null && signal !== void 0 ? signal : undefined }, (res) => {
32
33
  resolve({ request: req, response: res });
33
34
  });
34
35
  req.on('error', (err) => {
@@ -37,11 +38,11 @@ const readFileWithoutRedirect = (url) => {
37
38
  });
38
39
  });
39
40
  };
40
- const readFile = async (url, redirectsSoFar = 0) => {
41
+ const readFile = async (url, signal, redirectsSoFar = 0) => {
41
42
  if (redirectsSoFar > 10) {
42
43
  throw new Error(`Too many redirects while downloading ${url}`);
43
44
  }
44
- const { request, response } = await readFileWithoutRedirect(url);
45
+ const { request, response } = await readFileWithoutRedirect(url, signal);
45
46
  if (redirect_status_codes_1.redirectStatusCodes.includes(response.statusCode)) {
46
47
  if (!response.headers.location) {
47
48
  throw new Error(`Received a status code ${response.statusCode} but no "Location" header while calling ${response.headers.location}`);
@@ -49,7 +50,7 @@ const readFile = async (url, redirectsSoFar = 0) => {
49
50
  const redirectUrl = new URL(response.headers.location, url).toString();
50
51
  request.destroy();
51
52
  response.destroy();
52
- return (0, exports.readFile)(redirectUrl, redirectsSoFar + 1);
53
+ return (0, exports.readFile)(redirectUrl, signal, redirectsSoFar + 1);
53
54
  }
54
55
  if (response.statusCode >= 400) {
55
56
  const body = await tryToObtainBody(response);
@@ -128,9 +128,12 @@ const writeVersionFile = (chromeMode, version) => {
128
128
  fs.writeFileSync(versionFilePath, version);
129
129
  };
130
130
  const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMode, }) => {
131
+ var _a;
131
132
  const platform = (0, exports.getPlatform)();
132
133
  const downloadURL = (0, get_chrome_download_url_1.getChromeDownloadUrl)({ platform, version, chromeMode });
133
- const fileName = downloadURL.split('/').pop();
134
+ // remotion.media URLs carry a ?clear query string, and "?" is not a valid
135
+ // file name character on Windows.
136
+ const fileName = (_a = downloadURL.split('/').pop()) === null || _a === void 0 ? void 0 : _a.split('?')[0];
134
137
  if (!fileName) {
135
138
  throw new Error(`A malformed download URL was found: ${downloadURL}.`);
136
139
  }
@@ -198,6 +198,25 @@ class Page extends EventEmitter_1.EventEmitter {
198
198
  client.on('Runtime.consoleAPICalled', (event) => {
199
199
  return __classPrivateFieldGet(this, _Page_instances, "m", _Page_onConsoleAPI).call(this, event);
200
200
  });
201
+ client.on('Runtime.exceptionThrown', (event) => {
202
+ var _a;
203
+ var _b, _c;
204
+ const { exception, text, stackTrace, url, lineNumber, columnNumber } = event.exceptionDetails;
205
+ const description = exception
206
+ ? ((_b = exception.description) !== null && _b !== void 0 ? _b : String((_c = exception.unserializableValue) !== null && _c !== void 0 ? _c : exception.value))
207
+ : null;
208
+ (_a = this.onBrowserLog) === null || _a === void 0 ? void 0 : _a.call(this, {
209
+ type: 'error',
210
+ text: description === null ? text : `${text} ${description}`,
211
+ stackTrace: (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.callFrames.length)
212
+ ? stackTrace.callFrames.map((frame) => ({
213
+ url: frame.url,
214
+ lineNumber: frame.lineNumber,
215
+ columnNumber: frame.columnNumber,
216
+ }))
217
+ : [{ url, lineNumber, columnNumber }],
218
+ });
219
+ });
201
220
  client.on('Runtime.bindingCalled', (event) => {
202
221
  return __classPrivateFieldGet(this, _Page_instances, "m", _Page_onBindingCalled).call(this, event);
203
222
  });
@@ -350,8 +369,7 @@ _Page_client = new WeakMap(), _Page_target = new WeakMap(), _Page_timeoutSetting
350
369
  // This error message is being checked against in is-flaky-error.ts
351
370
  this.emit('error', new Error('Page crashed!'));
352
371
  }, _Page_onLogEntryAdded = function _Page_onLogEntryAdded(event) {
353
- var _a;
354
- const { level, text, args, source, url, lineNumber } = event.entry;
372
+ const { level, text, args, source, url, lineNumber, stackTrace } = event.entry;
355
373
  if (args) {
356
374
  args.map((arg) => {
357
375
  return (0, util_1.releaseObject)(__classPrivateFieldGet(this, _Page_client, "f"), arg);
@@ -363,16 +381,17 @@ _Page_client = new WeakMap(), _Page_target = new WeakMap(), _Page_timeoutSetting
363
381
  type: level,
364
382
  text,
365
383
  args: [],
366
- stackTraceLocations: [{ url, lineNumber }],
384
+ stackTraceLocations: (stackTrace === null || stackTrace === void 0 ? void 0 : stackTrace.callFrames.length)
385
+ ? stackTrace.callFrames.map((frame) => ({
386
+ url: frame.url,
387
+ lineNumber: frame.lineNumber,
388
+ columnNumber: frame.columnNumber,
389
+ }))
390
+ : [{ url, lineNumber }],
367
391
  previewString,
368
392
  logLevel: logLevelFromRemotionLog !== null && logLevelFromRemotionLog !== void 0 ? logLevelFromRemotionLog : logLevelFromEvent,
369
393
  tag,
370
394
  });
371
- (_a = this.onBrowserLog) === null || _a === void 0 ? void 0 : _a.call(this, {
372
- stackTrace: message.stackTrace(),
373
- text: message.text,
374
- type: message.type,
375
- });
376
395
  __classPrivateFieldGet(this, _Page_onConsole, "f").call(this, message);
377
396
  }
378
397
  }, _Page_onConsoleAPI = function _Page_onConsoleAPI(event) {
@@ -100,7 +100,7 @@ const makeBrowserRunner = async ({ executablePath, processArguments, userDataDir
100
100
  // If the process failed to launch (for example if the browser executable path
101
101
  // is invalid), then the process does not get a pid assigned. A call to
102
102
  // `proc.kill` would error, as the `pid` to-be-killed can not be found.
103
- if (proc.pid && pidExists(proc.pid)) {
103
+ if (!closed && proc.pid && pidExists(proc.pid)) {
104
104
  try {
105
105
  if (process.platform === 'win32') {
106
106
  childProcess.exec(`taskkill /pid ${proc.pid} /T /F`, (error) => {
@@ -138,17 +138,43 @@ const makeBrowserRunner = async ({ executablePath, processArguments, userDataDir
138
138
  // perform this earlier, then the previous function calls would not happen.
139
139
  (0, util_1.removeEventListeners)(listeners);
140
140
  };
141
+ let closePromise = null;
141
142
  const closeProcess = () => {
142
- if (closed) {
143
- return Promise.resolve();
143
+ if (closePromise) {
144
+ return closePromise;
144
145
  }
145
- logger_1.Log.verbose({ indent, logLevel }, 'Received SIGTERM signal. Killing browser process');
146
- killProcess();
147
- (0, delete_directory_1.deleteDirectory)(userDataDir);
148
- // Cleanup this listener last, as that makes sure the full callback runs. If we
149
- // perform this earlier, then the previous function calls would not happen.
150
- (0, util_1.removeEventListeners)(listeners);
151
- return processClosing;
146
+ closePromise = (async () => {
147
+ let timeoutId = null;
148
+ try {
149
+ if (!closed) {
150
+ // Let Chrome run its shutdown cleanup, including macOS code-sign
151
+ // clone removal. The CDP response can be lost as Chrome exits.
152
+ try {
153
+ void connection.send('Browser.close').catch(() => undefined);
154
+ }
155
+ catch (_a) { }
156
+ await Promise.race([
157
+ processClosing,
158
+ new Promise((resolve) => {
159
+ timeoutId = setTimeout(resolve, 2000);
160
+ }),
161
+ ]);
162
+ if (!closed) {
163
+ logger_1.Log.verbose({ indent, logLevel }, 'Browser did not exit gracefully. Killing browser process');
164
+ killProcess();
165
+ }
166
+ await processClosing;
167
+ }
168
+ }
169
+ finally {
170
+ if (timeoutId !== null) {
171
+ clearTimeout(timeoutId);
172
+ }
173
+ (0, delete_directory_1.deleteDirectory)(userDataDir);
174
+ (0, util_1.removeEventListeners)(listeners);
175
+ }
176
+ })();
177
+ return closePromise;
152
178
  };
153
179
  if (dumpio) {
154
180
  (_a = proc.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (d) => {
@@ -58,7 +58,12 @@ class NetworkManager extends EventEmitter_1.EventEmitter {
58
58
  __classPrivateFieldGet(this, _NetworkManager_client, "f").on('Network.responseReceivedExtraInfo', __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onResponseReceivedExtraInfo).bind(this));
59
59
  }
60
60
  async initialize() {
61
- await __classPrivateFieldGet(this, _NetworkManager_client, "f").send('Network.enable');
61
+ // We consume request events, but never read response bodies from DevTools.
62
+ // Avoid retaining frame and media responses in its per-tab body cache.
63
+ await __classPrivateFieldGet(this, _NetworkManager_client, "f").send('Network.enable', {
64
+ maxTotalBufferSize: 0,
65
+ maxResourceBufferSize: 0,
66
+ });
62
67
  }
63
68
  }
64
69
  exports.NetworkManager = NetworkManager;
@@ -241,7 +241,12 @@ export interface Commands {
241
241
  returnType: void;
242
242
  };
243
243
  'Network.enable': {
244
- paramsType: [EnableRequest?];
244
+ paramsType: [
245
+ {
246
+ maxTotalBufferSize: number;
247
+ maxResourceBufferSize: number;
248
+ }?
249
+ ];
245
250
  returnType: void;
246
251
  };
247
252
  'Target.detachFromTarget': {
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from '../log-level';
2
2
  import type { ChromeMode } from '../options/chrome-mode';
3
- export declare const TESTED_VERSION = "157.0.8080.0";
3
+ export declare const TESTED_VERSION = "158.0.8127.2";
4
4
  export type Platform = 'linux64' | 'linux-arm64' | 'mac-x64' | 'mac-arm64' | 'win64';
5
5
  export declare const isAmazonLinux2023: () => boolean;
6
6
  export declare const canUseRemotionMediaBinaries: () => boolean;
@@ -38,7 +38,7 @@ exports.getChromeDownloadUrl = getChromeDownloadUrl;
38
38
  const fs = __importStar(require("node:fs"));
39
39
  const os = __importStar(require("node:os"));
40
40
  const logger_1 = require("../logger");
41
- exports.TESTED_VERSION = '157.0.8080.0';
41
+ exports.TESTED_VERSION = '158.0.8127.2';
42
42
  const isAmazonLinux2023 = () => {
43
43
  if (os.platform() !== 'linux') {
44
44
  return false;
@@ -114,6 +114,9 @@ function getChromeDownloadUrl({ platform, version, chromeMode, }) {
114
114
  if (platform === 'mac-arm64') {
115
115
  return `https://remotion.media/chromium-headless-shell-mac-arm64-${exports.TESTED_VERSION}.zip?clear`;
116
116
  }
117
+ if (platform === 'win64') {
118
+ return `https://remotion.media/chromium-headless-shell-win-x64-${exports.TESTED_VERSION}.zip?clear`;
119
+ }
117
120
  if (platform === 'linux64' || platform === 'linux-arm64') {
118
121
  const architecture = platform === 'linux64' ? 'x64' : 'arm64';
119
122
  if ((0, exports.isAmazonLinux2023)()) {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.checkRuntimeVersion = exports.gLibCErrorMessage = void 0;
7
7
  const node_os_1 = __importDefault(require("node:os"));
8
8
  const no_react_1 = require("remotion/no-react");
9
+ const get_chrome_download_url_1 = require("./browser/get-chrome-download-url");
9
10
  const get_executable_path_1 = require("./compositor/get-executable-path");
10
11
  const logger_1 = require("./logger");
11
12
  const getRequiredLibCVersion = () => {
@@ -15,12 +16,11 @@ const getRequiredLibCVersion = () => {
15
16
  if ((0, get_executable_path_1.isMusl)({ indent: false, logLevel: 'warn' })) {
16
17
  return null;
17
18
  }
18
- // Uses Amazon Linux 2 to compile
19
- if (process.arch === 'arm64') {
20
- return [2, 26];
19
+ // Amazon Linux 2023 on ARM64 is supported with its system glibc.
20
+ if (process.arch === 'arm64' && (0, get_chrome_download_url_1.isAmazonLinux2023)()) {
21
+ return [2, 34];
21
22
  }
22
- // Uses Ubuntu 20.04 to compile
23
- return [2, 31];
23
+ return [2, 35];
24
24
  };
25
25
  const required = getRequiredLibCVersion();
26
26
  const gLibCErrorMessage = (libCString) => {
@@ -37,7 +37,7 @@ const gLibCErrorMessage = (libCString) => {
37
37
  if (Number(split[0]) > required[0]) {
38
38
  return null;
39
39
  }
40
- return `Rendering videos requires glibc ${required.join('.')} on your or higher on your OS. Your system has glibc ${libCString}.`;
40
+ return `Rendering videos requires glibc ${required.join('.')} or higher on your OS. Your system has glibc ${libCString}.`;
41
41
  };
42
42
  exports.gLibCErrorMessage = gLibCErrorMessage;
43
43
  const checkLibCRequirement = (logLevel, indent) => {