@remotion/renderer 4.0.0-alpha.217 → 4.0.0-alpha10

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 (126) hide show
  1. package/README.md +5 -37
  2. package/dist/assets/download-and-map-assets-to-file.js +6 -6
  3. package/dist/assets/download-file.d.ts +3 -2
  4. package/dist/assets/download-file.js +18 -3
  5. package/dist/assets/download-map.d.ts +0 -26
  6. package/dist/assets/download-map.js +7 -12
  7. package/dist/assets/get-video-stream-duration.d.ts +5 -2
  8. package/dist/assets/get-video-stream-duration.js +12 -6
  9. package/dist/assets/read-file.d.ts +1 -1
  10. package/dist/assets/read-file.js +2 -2
  11. package/dist/assets/sanitize-filepath.js +2 -2
  12. package/dist/browser/Browser.d.ts +4 -4
  13. package/dist/browser/Browser.js +38 -38
  14. package/dist/browser/BrowserFetcher.d.ts +15 -63
  15. package/dist/browser/BrowserFetcher.js +138 -226
  16. package/dist/browser/BrowserPage.d.ts +4 -4
  17. package/dist/browser/BrowserRunner.d.ts +1 -1
  18. package/dist/browser/BrowserRunner.js +9 -22
  19. package/dist/browser/DOMWorld.d.ts +3 -3
  20. package/dist/browser/LaunchOptions.d.ts +1 -2
  21. package/dist/browser/Launcher.d.ts +3 -3
  22. package/dist/browser/Launcher.js +10 -23
  23. package/dist/browser/NodeWebSocketTransport.js +4 -4
  24. package/dist/browser/PuppeteerNode.d.ts +2 -5
  25. package/dist/browser/PuppeteerNode.js +0 -5
  26. package/dist/browser/Target.d.ts +2 -2
  27. package/dist/browser/create-browser-fetcher.js +34 -48
  28. package/dist/browser/get-download-destination.js +8 -8
  29. package/dist/browser/util.d.ts +2 -2
  30. package/dist/call-ffmpeg.d.ts +4 -7
  31. package/dist/call-ffmpeg.js +24 -16
  32. package/dist/chalk/index.d.ts +54 -0
  33. package/dist/chalk/index.js +135 -0
  34. package/dist/chalk/is-color-supported.d.ts +1 -0
  35. package/dist/chalk/is-color-supported.js +37 -0
  36. package/dist/client.d.ts +1 -0
  37. package/dist/client.js +1 -0
  38. package/dist/codec-supports-media.d.ts +1 -0
  39. package/dist/codec-supports-media.js +20 -5
  40. package/dist/combine-videos.js +6 -6
  41. package/dist/compositor/compose.d.ts +6 -2
  42. package/dist/compositor/compose.js +43 -20
  43. package/dist/compositor/compositor.d.ts +4 -8
  44. package/dist/compositor/compositor.js +67 -53
  45. package/dist/compositor/get-executable-path.js +3 -0
  46. package/dist/compositor/payloads.d.ts +34 -7
  47. package/dist/crf.js +8 -2
  48. package/dist/delete-directory.js +3 -3
  49. package/dist/does-have-m2-bug.js +2 -2
  50. package/dist/ensure-output-directory.js +5 -5
  51. package/dist/ensure-presentation-timestamp.d.ts +9 -2
  52. package/dist/ensure-presentation-timestamp.js +13 -5
  53. package/dist/extract-frame-from-video.d.ts +3 -1
  54. package/dist/extract-frame-from-video.js +29 -7
  55. package/dist/ffmpeg-filter-file.js +7 -7
  56. package/dist/find-closest-package-json.js +6 -6
  57. package/dist/get-browser-instance.d.ts +2 -2
  58. package/dist/get-can-extract-frames-fast.d.ts +4 -1
  59. package/dist/get-can-extract-frames-fast.js +12 -1
  60. package/dist/get-compositions.d.ts +8 -3
  61. package/dist/get-compositions.js +6 -2
  62. package/dist/get-concurrency.js +3 -3
  63. package/dist/get-extension-of-filename.js +2 -2
  64. package/dist/get-frame-of-video-slow.d.ts +8 -3
  65. package/dist/get-frame-of-video-slow.js +11 -3
  66. package/dist/get-local-browser-executable.js +6 -15
  67. package/dist/get-video-info.d.ts +5 -2
  68. package/dist/get-video-info.js +12 -6
  69. package/dist/get-video-threads-flag.js +3 -3
  70. package/dist/index.d.ts +92 -16
  71. package/dist/index.js +15 -6
  72. package/dist/last-frame-from-video-cache.d.ts +4 -1
  73. package/dist/last-frame-from-video-cache.js +1 -0
  74. package/dist/logger.d.ts +22 -0
  75. package/dist/logger.js +61 -0
  76. package/dist/merge-audio-track.js +2 -2
  77. package/dist/mime-types.js +2 -2
  78. package/dist/offthread-video-server.d.ts +12 -6
  79. package/dist/offthread-video-server.js +66 -56
  80. package/dist/open-browser.d.ts +3 -3
  81. package/dist/open-browser.js +1 -1
  82. package/dist/options/jpeg-quality.js +1 -1
  83. package/dist/options/video-codec.js +1 -1
  84. package/dist/prepare-server.d.ts +6 -1
  85. package/dist/prepare-server.js +15 -7
  86. package/dist/prespawn-ffmpeg.d.ts +1 -0
  87. package/dist/prespawn-ffmpeg.js +37 -14
  88. package/dist/prestitcher-memory-usage.js +2 -2
  89. package/dist/puppeteer-evaluate.js +2 -2
  90. package/dist/puppeteer-screenshot.js +1 -1
  91. package/dist/render-frames.d.ts +9 -4
  92. package/dist/render-frames.js +28 -12
  93. package/dist/render-media.d.ts +7 -4
  94. package/dist/render-media.js +49 -26
  95. package/dist/render-still.d.ts +10 -3
  96. package/dist/render-still.js +26 -9
  97. package/dist/replace-browser.d.ts +4 -4
  98. package/dist/resolve-asset-src.js +2 -2
  99. package/dist/screenshot-task.js +2 -2
  100. package/dist/select-composition.d.ts +33 -0
  101. package/dist/select-composition.js +119 -0
  102. package/dist/serve-handler/index.d.ts +1 -1
  103. package/dist/serve-handler/index.js +15 -15
  104. package/dist/serve-handler/is-path-inside.js +3 -3
  105. package/dist/serve-static.d.ts +5 -0
  106. package/dist/serve-static.js +25 -20
  107. package/dist/set-props-and-env.d.ts +5 -3
  108. package/dist/set-props-and-env.js +13 -3
  109. package/dist/stitch-frames-to-video.d.ts +1 -0
  110. package/dist/stitch-frames-to-video.js +76 -53
  111. package/dist/take-frame-and-compose.d.ts +3 -1
  112. package/dist/take-frame-and-compose.js +8 -7
  113. package/dist/tmp-dir.js +7 -7
  114. package/dist/try-to-extract-frame-of-video-fast.d.ts +4 -2
  115. package/dist/try-to-extract-frame-of-video-fast.js +7 -3
  116. package/install-toolchain.mjs +3 -9
  117. package/package.json +70 -71
  118. package/types/ws/index.d.ts +5 -5
  119. package/ffmpeg/SOURCE.md +0 -1
  120. package/ffmpeg/linux-arm-musl.gz +0 -0
  121. package/ffmpeg/linux-arm.gz +0 -0
  122. package/ffmpeg/linux-x64-musl.gz +0 -0
  123. package/ffmpeg/linux-x64.gz +0 -0
  124. package/ffmpeg/macos-arm.gz +0 -0
  125. package/ffmpeg/macos-x64.gz +0 -0
  126. package/ffmpeg/windows.gz +0 -0
@@ -28,8 +28,8 @@ exports.NodeWebSocketTransport = void 0;
28
28
  * See the License for the specific language governing permissions and
29
29
  * limitations under the License.
30
30
  */
31
- const dns_1 = require("dns");
32
- const url_1 = require("url");
31
+ const node_dns_1 = require("node:dns");
32
+ const node_url_1 = require("node:url");
33
33
  const ws_types_1 = require("../ws/ws-types");
34
34
  class NodeWebSocketTransport {
35
35
  constructor(ws) {
@@ -56,9 +56,9 @@ class NodeWebSocketTransport {
56
56
  // manually with the previous behavior according to:
57
57
  // - https://nodejs.org/api/dns.html#dnslookuphostname-options-callback
58
58
  // because of https://bugzilla.mozilla.org/show_bug.cgi?id=1769994.
59
- const url = new url_1.URL(urlString);
59
+ const url = new node_url_1.URL(urlString);
60
60
  if (url.hostname === 'localhost') {
61
- const { address } = await dns_1.promises.lookup(url.hostname, { verbatim: false });
61
+ const { address } = await node_dns_1.promises.lookup(url.hostname, { verbatim: false });
62
62
  url.hostname = address;
63
63
  }
64
64
  return new Promise((resolve, reject) => {
@@ -13,10 +13,8 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import type { Browser } from './Browser';
16
+ import type { HeadlessBrowser } from './Browser';
17
17
  import type { BrowserConnectOptions } from './BrowserConnector';
18
- import type { BrowserFetcherOptions } from './BrowserFetcher';
19
- import { BrowserFetcher } from './BrowserFetcher';
20
18
  import type { ProductLauncher } from './Launcher';
21
19
  import type { BrowserLaunchArgumentOptions, LaunchOptions } from './LaunchOptions';
22
20
  import type { Product } from './Product';
@@ -31,10 +29,9 @@ export declare class PuppeteerNode {
31
29
  preferredRevision: string;
32
30
  productName?: Product;
33
31
  });
34
- launch(options: PuppeteerLaunchOptions): Promise<Browser>;
32
+ launch(options: PuppeteerLaunchOptions): Promise<HeadlessBrowser>;
35
33
  executablePath(channel?: string): string;
36
34
  get _launcher(): ProductLauncher;
37
35
  get product(): string;
38
- createBrowserFetcher(options: BrowserFetcherOptions): BrowserFetcher;
39
36
  }
40
37
  export {};
@@ -28,7 +28,6 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
28
28
  var _PuppeteerNode_lazyLauncher, _PuppeteerNode_productName;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.PuppeteerNode = void 0;
31
- const BrowserFetcher_1 = require("./BrowserFetcher");
32
31
  const Launcher_1 = require("./Launcher");
33
32
  const revisions_1 = require("./revisions");
34
33
  class PuppeteerNode {
@@ -40,7 +39,6 @@ class PuppeteerNode {
40
39
  this._preferredRevision = preferredRevision;
41
40
  this.launch = this.launch.bind(this);
42
41
  this.executablePath = this.executablePath.bind(this);
43
- this.createBrowserFetcher = this.createBrowserFetcher.bind(this);
44
42
  }
45
43
  launch(options) {
46
44
  if (options.product) {
@@ -66,9 +64,6 @@ class PuppeteerNode {
66
64
  get product() {
67
65
  return this._launcher.product;
68
66
  }
69
- createBrowserFetcher(options) {
70
- return new BrowserFetcher_1.BrowserFetcher(options);
71
- }
72
67
  }
73
68
  exports.PuppeteerNode = PuppeteerNode;
74
69
  _PuppeteerNode_lazyLauncher = new WeakMap(), _PuppeteerNode_productName = new WeakMap();
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import type { Browser, BrowserContext } from './Browser';
16
+ import type { BrowserContext, HeadlessBrowser } from './Browser';
17
17
  import { Page } from './BrowserPage';
18
18
  import type { CDPSession } from './Connection';
19
19
  import type { TargetInfo } from './devtools-types';
@@ -48,7 +48,7 @@ export declare class Target {
48
48
  /**
49
49
  * Get the browser the target belongs to.
50
50
  */
51
- browser(): Browser;
51
+ browser(): HeadlessBrowser;
52
52
  /**
53
53
  * Get the browser context the target belongs to.
54
54
  */
@@ -16,62 +16,48 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.downloadBrowser = void 0;
19
- const node_1 = require("./node");
19
+ const BrowserFetcher_1 = require("./BrowserFetcher");
20
20
  const revisions_1 = require("./revisions");
21
21
  const supportedProducts = {
22
22
  chrome: 'Chromium',
23
23
  firefox: 'Firefox Nightly',
24
24
  };
25
- async function downloadBrowser(product) {
26
- const browserFetcher = node_1.puppeteer.createBrowserFetcher({
27
- product,
28
- path: null,
29
- platform: null,
30
- });
31
- const revision = await getRevision();
32
- await fetchBinary(revision);
33
- function getRevision() {
34
- if (product === 'chrome') {
35
- return revisions_1.PUPPETEER_REVISIONS.chromium;
36
- }
37
- throw new Error(`Unsupported product ${product}`);
25
+ function getRevision(product) {
26
+ if (product === 'chrome') {
27
+ return revisions_1.PUPPETEER_REVISIONS.chromium;
38
28
  }
39
- function fetchBinary(_revision) {
40
- const revisionInfo = browserFetcher.revisionInfo(_revision);
41
- // Do nothing if the revision is already downloaded.
42
- if (revisionInfo.local) {
43
- console.log(`${supportedProducts[product]} is already in ${revisionInfo.folderPath}; skipping download.`);
44
- return;
45
- }
46
- function onSuccess(localRevisions) {
47
- console.log(`${supportedProducts[product]} (${revisionInfo.revision}) downloaded to ${revisionInfo.folderPath}`);
48
- localRevisions = localRevisions.filter((__revision) => {
49
- return __revision !== revisionInfo.revision;
50
- });
51
- const cleanupOldVersions = localRevisions.map((__revision) => {
52
- return browserFetcher.remove(__revision);
53
- });
54
- Promise.all([...cleanupOldVersions]);
55
- }
56
- function onError(error) {
57
- console.error(`ERROR: Failed to set up ${supportedProducts[product]} r${_revision}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`);
58
- console.error(error);
59
- process.exit(1);
60
- }
61
- function onProgress(downloadedBytes, totalBytes) {
62
- console.log('Downloading', supportedProducts[product], toMegabytes(downloadedBytes) + '/' + toMegabytes(totalBytes));
63
- }
64
- return browserFetcher
65
- .download(revisionInfo.revision, onProgress)
66
- .then(() => {
67
- return browserFetcher.localRevisions();
29
+ throw new Error(`Unsupported product ${product}`);
30
+ }
31
+ async function downloadBrowser(product) {
32
+ const revision = getRevision(product);
33
+ const revisionInfo = (0, BrowserFetcher_1.getRevisionInfo)(revision, product);
34
+ try {
35
+ await (0, BrowserFetcher_1.download)({
36
+ revision: revisionInfo.revision,
37
+ progressCallback: (downloadedBytes, totalBytes) => {
38
+ console.log('Downloading', supportedProducts[product], toMegabytes(downloadedBytes) + '/' + toMegabytes(totalBytes));
39
+ },
40
+ product,
41
+ platform: (0, BrowserFetcher_1.getPlatform)(product),
42
+ downloadHost: (0, BrowserFetcher_1.getDownloadHost)(product),
43
+ downloadsFolder: (0, BrowserFetcher_1.getDownloadsFolder)(product),
44
+ });
45
+ const _localRevisions = await (0, BrowserFetcher_1.localRevisions)((0, BrowserFetcher_1.getDownloadsFolder)(product), product, (0, BrowserFetcher_1.getPlatform)(product));
46
+ console.log(`${supportedProducts[product]} (${revisionInfo.revision}) downloaded to ${revisionInfo.folderPath}`);
47
+ await Promise.all(_localRevisions
48
+ .filter((__revision) => {
49
+ return __revision !== revisionInfo.revision;
68
50
  })
69
- .then(onSuccess)
70
- .catch(onError);
51
+ .map((__revision) => {
52
+ return (0, BrowserFetcher_1.removeBrowser)(__revision, (0, BrowserFetcher_1.getFolderPath)(revision, (0, BrowserFetcher_1.getDownloadsFolder)(product), (0, BrowserFetcher_1.getPlatform)(product)));
53
+ }));
71
54
  }
72
- function toMegabytes(bytes) {
73
- const mb = bytes / 1024 / 1024;
74
- return `${Math.round(mb * 10) / 10} Mb`;
55
+ catch (err) {
56
+ throw new Error(`Failed to set up ${supportedProducts[product]} r${revision}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`);
75
57
  }
76
58
  }
77
59
  exports.downloadBrowser = downloadBrowser;
60
+ function toMegabytes(bytes) {
61
+ const mb = bytes / 1024 / 1024;
62
+ return `${Math.round(mb * 10) / 10} Mb`;
63
+ }
@@ -4,20 +4,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getDownloadsCacheDir = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
9
  const getDownloadsCacheDir = () => {
10
10
  const cwd = process.cwd();
11
11
  let dir = cwd;
12
12
  for (;;) {
13
13
  try {
14
- if (fs_1.default.statSync(path_1.default.join(dir, 'package.json')).isFile()) {
14
+ if (node_fs_1.default.statSync(node_path_1.default.join(dir, 'package.json')).isFile()) {
15
15
  break;
16
16
  }
17
17
  // eslint-disable-next-line no-empty
18
18
  }
19
19
  catch (e) { }
20
- const parent = path_1.default.dirname(dir);
20
+ const parent = node_path_1.default.dirname(dir);
21
21
  if (dir === parent) {
22
22
  dir = undefined;
23
23
  break;
@@ -25,14 +25,14 @@ const getDownloadsCacheDir = () => {
25
25
  dir = parent;
26
26
  }
27
27
  if (!dir) {
28
- return path_1.default.resolve(cwd, '.remotion');
28
+ return node_path_1.default.resolve(cwd, '.remotion');
29
29
  }
30
30
  if (process.versions.pnp === '1') {
31
- return path_1.default.resolve(dir, '.pnp/.remotion');
31
+ return node_path_1.default.resolve(dir, '.pnp/.remotion');
32
32
  }
33
33
  if (process.versions.pnp === '3') {
34
- return path_1.default.resolve(dir, '.yarn/.remotion');
34
+ return node_path_1.default.resolve(dir, '.yarn/.remotion');
35
35
  }
36
- return path_1.default.resolve(dir, 'node_modules/.remotion');
36
+ return node_path_1.default.resolve(dir, 'node_modules/.remotion');
37
37
  };
38
38
  exports.getDownloadsCacheDir = getDownloadsCacheDir;
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  /// <reference types="node" />
17
- import type { Browser } from './Browser';
17
+ import type { HeadlessBrowser } from './Browser';
18
18
  import type { CDPSession } from './Connection';
19
19
  import type { DevtoolsRemoteObject, ExceptionDetails } from './devtools-types';
20
20
  import type { CommonEventEmitter } from './EventEmitter';
@@ -37,7 +37,7 @@ export declare function evaluationString(fun: Function | string, ...args: unknow
37
37
  export declare function pageBindingDeliverResultString(name: string, seq: number, result: unknown): string;
38
38
  export declare function pageBindingDeliverErrorString(name: string, seq: number, message: string, stack?: string): string;
39
39
  export declare function pageBindingDeliverErrorValueString(name: string, seq: number, value: unknown): string;
40
- export declare function waitWithTimeout<T>(promise: Promise<T>, taskName: string, timeout: number, browser: Browser): Promise<T>;
40
+ export declare function waitWithTimeout<T>(promise: Promise<T>, taskName: string, timeout: number, browser: HeadlessBrowser): Promise<T>;
41
41
  interface ErrorLike extends Error {
42
42
  name: string;
43
43
  message: string;
@@ -1,17 +1,14 @@
1
1
  import execa from 'execa';
2
- export declare const callFfExtraOptions: () => {
2
+ export declare const dynamicLibraryPathOptions: () => {
3
3
  env: {
4
4
  DYLD_LIBRARY_PATH: string;
5
- PATH?: undefined;
6
- LD_LIBRARY_PATH?: undefined;
5
+ RUST_BACKTRACE: string;
7
6
  } | {
8
7
  PATH: string;
9
- DYLD_LIBRARY_PATH?: undefined;
10
- LD_LIBRARY_PATH?: undefined;
8
+ RUST_BACKTRACE: string;
11
9
  } | {
12
10
  LD_LIBRARY_PATH: string;
13
- DYLD_LIBRARY_PATH?: undefined;
14
- PATH?: undefined;
11
+ RUST_BACKTRACE: string;
15
12
  };
16
13
  };
17
14
  export declare const callFf: (bin: 'ffmpeg' | 'ffprobe', args: (string | null)[], options?: execa.Options<string>) => execa.ExecaChildProcess<string>;
@@ -3,31 +3,39 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.callFf = exports.callFfExtraOptions = void 0;
6
+ exports.callFf = exports.dynamicLibraryPathOptions = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
- const path_1 = __importDefault(require("path"));
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
9
10
  const get_executable_path_1 = require("./compositor/get-executable-path");
10
11
  const truthy_1 = require("./truthy");
11
- const callFfExtraOptions = () => {
12
- const lib = path_1.default.join((0, get_executable_path_1.getExecutablePath)('ffmpeg-cwd'), 'remotion', 'lib');
12
+ const dynamicLibraryPathOptions = () => {
13
+ const lib = node_path_1.default.join((0, get_executable_path_1.getExecutablePath)('ffmpeg-cwd'), 'remotion', 'lib');
13
14
  return {
14
- env: process.platform === 'darwin'
15
- ? {
16
- DYLD_LIBRARY_PATH: lib,
17
- }
18
- : process.platform === 'win32'
15
+ env: {
16
+ RUST_BACKTRACE: 'full',
17
+ ...(process.platform === 'darwin'
19
18
  ? {
20
- PATH: `${process.env.PATH};${lib}`,
19
+ DYLD_LIBRARY_PATH: lib,
21
20
  }
22
- : {
23
- LD_LIBRARY_PATH: lib,
24
- },
21
+ : process.platform === 'win32'
22
+ ? {
23
+ PATH: `${process.env.PATH};${lib}`,
24
+ }
25
+ : {
26
+ LD_LIBRARY_PATH: lib,
27
+ }),
28
+ },
25
29
  };
26
30
  };
27
- exports.callFfExtraOptions = callFfExtraOptions;
31
+ exports.dynamicLibraryPathOptions = dynamicLibraryPathOptions;
28
32
  const callFf = (bin, args, options) => {
29
- return (0, execa_1.default)((0, get_executable_path_1.getExecutablePath)(bin), args.filter(truthy_1.truthy), {
30
- ...(0, exports.callFfExtraOptions)(),
33
+ const executablePath = (0, get_executable_path_1.getExecutablePath)(bin);
34
+ if (!process.env.READ_ONLY_FS) {
35
+ (0, node_fs_1.chmodSync)(executablePath, 0o755);
36
+ }
37
+ return (0, execa_1.default)(executablePath, args.filter(truthy_1.truthy), {
38
+ ...(0, exports.dynamicLibraryPathOptions)(),
31
39
  ...options,
32
40
  });
33
41
  };
@@ -0,0 +1,54 @@
1
+ declare type Style = {
2
+ codes: [number, number];
3
+ name: string;
4
+ wrap?: (input: string, newline: boolean) => string;
5
+ };
6
+ declare type Method = (str: string) => string;
7
+ declare type Colors = {
8
+ enabled: boolean;
9
+ visible: boolean;
10
+ styles: Record<string, Style>;
11
+ keys: Record<string, string[]>;
12
+ alias?: (name: string, col: string) => void;
13
+ };
14
+ declare type ColorsWithMethods = Colors & {
15
+ reset: Method;
16
+ bold: Method;
17
+ dim: Method;
18
+ italic: Method;
19
+ underline: Method;
20
+ inverse: Method;
21
+ hidden: Method;
22
+ strikethrough: Method;
23
+ black: Method;
24
+ red: Method;
25
+ green: Method;
26
+ yellow: Method;
27
+ blue: Method;
28
+ magenta: Method;
29
+ white: Method;
30
+ gray: Method;
31
+ bgBlack: Method;
32
+ bgRed: Method;
33
+ bgGreen: Method;
34
+ bgYellow: Method;
35
+ bgBlue: Method;
36
+ bgMagenta: Method;
37
+ bgWhite: Method;
38
+ blackBright: Method;
39
+ redBright: Method;
40
+ greenBright: Method;
41
+ yellowBright: Method;
42
+ blueBright: Method;
43
+ magentaBright: Method;
44
+ whiteBright: Method;
45
+ bgBlackBright: Method;
46
+ bgRedBright: Method;
47
+ bgGreenBright: Method;
48
+ bgYellowBright: Method;
49
+ bgBlueBright: Method;
50
+ bgMagentaBright: Method;
51
+ bgWhiteBright: Method;
52
+ };
53
+ export declare const chalk: ColorsWithMethods;
54
+ export {};
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chalk = void 0;
4
+ const is_color_supported_1 = require("./is-color-supported");
5
+ const hasColor = () => {
6
+ if (typeof process !== 'undefined' && process.env.FORCE_COLOR) {
7
+ return true;
8
+ }
9
+ return is_color_supported_1.isColorSupported;
10
+ };
11
+ exports.chalk = (() => {
12
+ const colors = {
13
+ enabled: hasColor(),
14
+ visible: true,
15
+ styles: {},
16
+ keys: {},
17
+ };
18
+ const ansi = (st) => {
19
+ const open = `\u001b[${st.codes[0]}m`;
20
+ const close = `\u001b[${st.codes[1]}m`;
21
+ const regex = new RegExp(`\\u001b\\[${st.codes[1]}m`, 'g');
22
+ st.wrap = (input, newline) => {
23
+ if (input.includes(close))
24
+ input = input.replace(regex, close + open);
25
+ const output = open + input + close;
26
+ // see https://github.com/chalk/chalk/pull/92, thanks to the
27
+ // chalk contributors for this fix. However, we've confirmed that
28
+ // this issue is also present in Windows terminals
29
+ return newline ? output.replace(/\r*\n/g, `${close}$&${open}`) : output;
30
+ };
31
+ return st;
32
+ };
33
+ const wrap = (sty, input, newline) => {
34
+ var _a;
35
+ return (_a = sty.wrap) === null || _a === void 0 ? void 0 : _a.call(sty, input, newline);
36
+ };
37
+ const style = (input, stack) => {
38
+ if (input === '' || input === null || input === undefined)
39
+ return '';
40
+ if (colors.enabled === false)
41
+ return input;
42
+ if (colors.visible === false)
43
+ return '';
44
+ let str = String(input);
45
+ const nl = str.includes('\n');
46
+ let n = stack.length;
47
+ while (n-- > 0)
48
+ str = wrap(colors.styles[stack[n]], str, nl);
49
+ return str;
50
+ };
51
+ const define = (name, codes, type) => {
52
+ colors.styles[name] = ansi({ name, codes });
53
+ const keys = colors.keys[type] || (colors.keys[type] = []);
54
+ keys.push(name);
55
+ Reflect.defineProperty(colors, name, {
56
+ configurable: true,
57
+ enumerable: true,
58
+ set(value) {
59
+ var _a;
60
+ (_a = colors.alias) === null || _a === void 0 ? void 0 : _a.call(colors, name, value);
61
+ },
62
+ get() {
63
+ const color = (input) => style(input, color.stack);
64
+ Reflect.setPrototypeOf(color, colors);
65
+ color.stack = this.stack ? this.stack.concat(name) : [name];
66
+ return color;
67
+ },
68
+ });
69
+ };
70
+ define('reset', [0, 0], 'modifier');
71
+ define('bold', [1, 22], 'modifier');
72
+ define('dim', [2, 22], 'modifier');
73
+ define('italic', [3, 23], 'modifier');
74
+ define('underline', [4, 24], 'modifier');
75
+ define('inverse', [7, 27], 'modifier');
76
+ define('hidden', [8, 28], 'modifier');
77
+ define('strikethrough', [9, 29], 'modifier');
78
+ define('black', [30, 39], 'color');
79
+ define('red', [31, 39], 'color');
80
+ define('green', [32, 39], 'color');
81
+ define('yellow', [33, 39], 'color');
82
+ define('blue', [34, 39], 'color');
83
+ define('magenta', [35, 39], 'color');
84
+ define('white', [37, 39], 'color');
85
+ define('gray', [90, 39], 'color');
86
+ define('grey', [90, 39], 'color');
87
+ define('bgBlack', [40, 49], 'bg');
88
+ define('bgRed', [41, 49], 'bg');
89
+ define('bgGreen', [42, 49], 'bg');
90
+ define('bgYellow', [43, 49], 'bg');
91
+ define('bgBlue', [44, 49], 'bg');
92
+ define('bgMagenta', [45, 49], 'bg');
93
+ define('bgWhite', [47, 49], 'bg');
94
+ define('blackBright', [90, 39], 'bright');
95
+ define('redBright', [91, 39], 'bright');
96
+ define('greenBright', [92, 39], 'bright');
97
+ define('yellowBright', [93, 39], 'bright');
98
+ define('blueBright', [94, 39], 'bright');
99
+ define('magentaBright', [95, 39], 'bright');
100
+ define('whiteBright', [97, 39], 'bright');
101
+ define('bgBlackBright', [100, 49], 'bgBright');
102
+ define('bgRedBright', [101, 49], 'bgBright');
103
+ define('bgGreenBright', [102, 49], 'bgBright');
104
+ define('bgYellowBright', [103, 49], 'bgBright');
105
+ define('bgBlueBright', [104, 49], 'bgBright');
106
+ define('bgMagentaBright', [105, 49], 'bgBright');
107
+ define('bgWhiteBright', [107, 49], 'bgBright');
108
+ colors.alias = (name, color) => {
109
+ // @ts-expect-error
110
+ const fn = colors[color];
111
+ if (typeof fn !== 'function') {
112
+ throw new TypeError('Expected alias to be the name of an existing color (string) or a function');
113
+ }
114
+ if (!fn.stack) {
115
+ Reflect.defineProperty(fn, 'name', { value: name });
116
+ colors.styles[name] = fn;
117
+ fn.stack = [name];
118
+ }
119
+ Reflect.defineProperty(colors, name, {
120
+ configurable: true,
121
+ enumerable: true,
122
+ set(value) {
123
+ var _a;
124
+ (_a = colors.alias) === null || _a === void 0 ? void 0 : _a.call(colors, name, value);
125
+ },
126
+ get() {
127
+ const col = (input) => style(input, col.stack);
128
+ Reflect.setPrototypeOf(col, colors);
129
+ col.stack = this.stack ? this.stack.concat(fn.stack) : fn.stack;
130
+ return col;
131
+ },
132
+ });
133
+ };
134
+ return colors;
135
+ })();
@@ -0,0 +1 @@
1
+ export declare const isColorSupported: boolean;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var _a;
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.isColorSupported = void 0;
28
+ const tty = __importStar(require("tty"));
29
+ const argv = process.argv || [];
30
+ const env = process.env || {};
31
+ const isDisabled = 'NO_COLOR' in env || argv.includes('--no-color');
32
+ const isForced = 'FORCE_COLOR' in env || argv.includes('--color');
33
+ const isWindows = process.platform === 'win32';
34
+ const isCompatibleTerminal = ((_a = tty === null || tty === void 0 ? void 0 : tty.isatty) === null || _a === void 0 ? void 0 : _a.call(tty, 1)) && env.TERM && env.TERM !== 'dumb';
35
+ const isCI = 'CI' in env &&
36
+ ('GITHUB_ACTIONS' in env || 'GITLAB_CI' in env || 'CIRCLECI' in env);
37
+ exports.isColorSupported = !isDisabled && (isForced || isWindows || isCompatibleTerminal || isCI);
package/dist/client.d.ts CHANGED
@@ -200,4 +200,5 @@ export declare const BrowserSafeApis: {
200
200
  videoCodecOption: import(".").RemotionOption;
201
201
  };
202
202
  codecSupportsCrf: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => boolean;
203
+ codecSupportsVideoBitrate: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => boolean;
203
204
  };
package/dist/client.js CHANGED
@@ -45,4 +45,5 @@ exports.BrowserSafeApis = {
45
45
  videoCodecOption: video_codec_1.videoCodecOption,
46
46
  },
47
47
  codecSupportsCrf: codec_supports_media_1.codecSupportsCrf,
48
+ codecSupportsVideoBitrate: codec_supports_media_1.codecSupportsVideoBitrate,
48
49
  };
@@ -5,4 +5,5 @@ declare type MediaSupport = {
5
5
  };
6
6
  export declare const codecSupportsMedia: (codec: Codec) => MediaSupport;
7
7
  export declare const codecSupportsCrf: (codec: Codec) => boolean;
8
+ export declare const codecSupportsVideoBitrate: (codec: Codec) => boolean;
8
9
  export {};
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.codecSupportsCrf = exports.codecSupportsMedia = void 0;
4
- const get_codec_name_1 = require("./get-codec-name");
3
+ exports.codecSupportsVideoBitrate = exports.codecSupportsCrf = exports.codecSupportsMedia = void 0;
4
+ const crf_1 = require("./crf");
5
5
  const support = {
6
6
  'h264-mkv': {
7
7
  audio: true,
@@ -48,9 +48,24 @@ const codecSupportsMedia = (codec) => {
48
48
  return support[codec];
49
49
  };
50
50
  exports.codecSupportsMedia = codecSupportsMedia;
51
+ const codecSupportsVideoBitrateMap = {
52
+ 'h264-mkv': true,
53
+ aac: false,
54
+ gif: false,
55
+ h264: true,
56
+ h265: true,
57
+ mp3: false,
58
+ prores: false,
59
+ vp8: true,
60
+ vp9: true,
61
+ wav: false,
62
+ };
51
63
  const codecSupportsCrf = (codec) => {
52
- const encoderName = (0, get_codec_name_1.getCodecName)(codec);
53
- const supportsCrf = Boolean(encoderName) && codec !== 'prores';
54
- return supportsCrf;
64
+ const range = (0, crf_1.getValidCrfRanges)(codec);
65
+ return range[0] !== range[1];
55
66
  };
56
67
  exports.codecSupportsCrf = codecSupportsCrf;
68
+ const codecSupportsVideoBitrate = (codec) => {
69
+ return codecSupportsVideoBitrateMap[codec];
70
+ };
71
+ exports.codecSupportsVideoBitrate = codecSupportsVideoBitrate;