@remotion/cli 3.3.1 → 3.3.3

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 (65) hide show
  1. package/dist/compositions.js +2 -44
  2. package/dist/config/index.js +2 -0
  3. package/dist/config/number-of-shared-audio-tags.d.ts +2 -0
  4. package/dist/config/number-of-shared-audio-tags.js +12 -0
  5. package/dist/editor/components/RenderButton.d.ts +6 -0
  6. package/dist/editor/components/RenderButton.js +53 -0
  7. package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -0
  8. package/dist/editor/components/RenderModal/RenderModal.js +90 -0
  9. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  10. package/dist/editor/components/RenderQueue/RenderQueueItem.js +25 -0
  11. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  12. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +19 -0
  13. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  14. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +70 -0
  15. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  16. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +56 -0
  17. package/dist/editor/components/RenderQueue/context.d.ts +18 -0
  18. package/dist/editor/components/RenderQueue/context.js +49 -0
  19. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  20. package/dist/editor/components/RenderQueue/index.js +18 -0
  21. package/dist/editor/components/RendersTab.d.ts +6 -0
  22. package/dist/editor/components/RendersTab.js +40 -0
  23. package/dist/editor/components/SidebarContent.d.ts +5 -0
  24. package/dist/editor/components/SidebarContent.js +34 -0
  25. package/dist/editor/components/Tabs/index.d.ts +11 -0
  26. package/dist/editor/components/Tabs/index.js +49 -0
  27. package/dist/editor/icons/render.d.ts +6 -0
  28. package/dist/editor/icons/render.js +8 -0
  29. package/dist/get-default-out-name.d.ts +4 -0
  30. package/dist/get-default-out-name.js +8 -0
  31. package/dist/index.d.ts +4 -1
  32. package/dist/index.js +2 -0
  33. package/dist/parse-command-line.d.ts +8 -2
  34. package/dist/preview-server/live-event-listener.d.ts +0 -0
  35. package/dist/preview-server/live-event-listener.js +1 -0
  36. package/dist/preview-server/parse-body.d.ts +2 -0
  37. package/dist/preview-server/parse-body.js +16 -0
  38. package/dist/preview-server/render-queue/add-render.d.ts +2 -0
  39. package/dist/preview-server/render-queue/add-render.js +39 -0
  40. package/dist/preview-server/render-queue/index.d.ts +7 -0
  41. package/dist/preview-server/render-queue/index.js +105 -0
  42. package/dist/preview-server/render-queue/job.d.ts +29 -0
  43. package/dist/preview-server/render-queue/job.js +2 -0
  44. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  45. package/dist/preview-server/render-queue/open-directory-in-finder.js +32 -0
  46. package/dist/preview-server/render-queue/open-in-file-explorer.d.ts +2 -0
  47. package/dist/preview-server/render-queue/open-in-file-explorer.js +30 -0
  48. package/dist/preview-server/render-queue/remove-render.d.ts +2 -0
  49. package/dist/preview-server/render-queue/remove-render.js +28 -0
  50. package/dist/preview-server/routes.js +4 -0
  51. package/dist/previewEntry.js +1 -1
  52. package/dist/print-compositions.d.ts +2 -0
  53. package/dist/print-compositions.js +50 -0
  54. package/dist/progress-bar.d.ts +13 -1
  55. package/dist/progress-bar.js +41 -2
  56. package/dist/setup-cache.js +52 -5
  57. package/package.json +7 -7
  58. package/dist/deps.d.ts +0 -2
  59. package/dist/deps.js +0 -36
  60. package/dist/editor/components/KeyboardShortcutsModal.d.ts +0 -2
  61. package/dist/editor/components/KeyboardShortcutsModal.js +0 -67
  62. package/dist/editor/components/QuickSwitcher/agolia-search.d.ts +0 -2
  63. package/dist/editor/components/QuickSwitcher/agolia-search.js +0 -40
  64. package/dist/remotion-cli.d.ts +0 -1
  65. package/dist/remotion-cli.js +0 -15
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tab = exports.Tabs = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const colors_1 = require("../../helpers/colors");
7
+ const tabsContainer = {
8
+ display: 'flex',
9
+ flexDirection: 'row',
10
+ };
11
+ const Tabs = ({ children, style }) => {
12
+ const definiteStyle = (0, react_1.useMemo)(() => {
13
+ return {
14
+ ...tabsContainer,
15
+ ...style,
16
+ };
17
+ }, [style]);
18
+ return (0, jsx_runtime_1.jsx)("div", { style: definiteStyle, children: children });
19
+ };
20
+ exports.Tabs = Tabs;
21
+ const selectorButton = {
22
+ border: 'none',
23
+ flex: 1,
24
+ padding: 8,
25
+ fontSize: 13,
26
+ };
27
+ const Tab = ({ children, onClick, style, selected }) => {
28
+ const [hovered, setHovered] = (0, react_1.useState)(false);
29
+ const onPointerEnter = (0, react_1.useCallback)(() => {
30
+ setHovered(true);
31
+ }, []);
32
+ const onPointerLeave = (0, react_1.useCallback)(() => {
33
+ setHovered(false);
34
+ }, []);
35
+ const definiteStyle = (0, react_1.useMemo)(() => {
36
+ return {
37
+ ...selectorButton,
38
+ backgroundColor: selected
39
+ ? colors_1.SELECTED_BACKGROUND
40
+ : hovered
41
+ ? colors_1.CLEAR_HOVER
42
+ : 'transparent',
43
+ color: selected ? 'white' : colors_1.LIGHT_TEXT,
44
+ ...style,
45
+ };
46
+ }, [hovered, selected, style]);
47
+ return ((0, jsx_runtime_1.jsx)("button", { style: definiteStyle, type: "button", onClick: onClick, onPointerLeave: onPointerLeave, onPointerEnter: onPointerEnter, children: children }));
48
+ };
49
+ exports.Tab = Tab;
@@ -0,0 +1,6 @@
1
+ import type { SVGProps } from 'react';
2
+ import React from 'react';
3
+ export declare const RenderIcon: React.FC<{
4
+ svgProps: SVGProps<SVGSVGElement>;
5
+ color: string;
6
+ }>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderIcon = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const RenderIcon = (props) => {
6
+ return ((0, jsx_runtime_1.jsx)("svg", { ...props.svgProps, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: props.color, d: "M408 143.1C408 166.1 390.1 183.1 368 183.1C345.9 183.1 328 166.1 328 143.1C328 121.9 345.9 103.1 368 103.1C390.1 103.1 408 121.9 408 143.1zM384 312.1V394.2C384 419.7 370.6 443.2 348.7 456.2L260.2 508.6C252.8 513 243.6 513.1 236.1 508.9C228.6 504.6 224 496.6 224 488V373.3C224 350.6 215 328.1 199 312.1C183 296.1 161.4 288 138.7 288H24C15.38 288 7.414 283.4 3.146 275.9C-1.123 268.4-1.042 259.2 3.357 251.8L55.83 163.3C68.79 141.4 92.33 127.1 117.8 127.1H199.9C281.7-3.798 408.8-8.546 483.9 5.272C495.6 7.411 504.6 16.45 506.7 28.07C520.5 103.2 515.8 230.3 384 312.1V312.1zM197.9 253.9C210.8 260.2 222.6 268.7 232.1 279C243.3 289.4 251.8 301.2 258.1 314.1C363.9 284.1 414.8 234.5 439.7 188C464.7 141.3 466.1 90.47 461.7 50.33C421.5 45.02 370.7 47.34 323.1 72.33C277.5 97.16 227.9 148.1 197.9 253.9H197.9zM41.98 345.5C76.37 311.1 132.1 311.1 166.5 345.5C200.9 379.9 200.9 435.6 166.5 470C117 519.5 .4765 511.5 .4765 511.5C.4765 511.5-7.516 394.1 41.98 345.5V345.5zM64.58 447.4C64.58 447.4 103.3 450.1 119.8 433.6C131.2 422.2 131.2 403.6 119.8 392.2C108.3 380.8 89.81 380.8 78.38 392.2C61.92 408.7 64.58 447.4 64.58 447.4z" }) }));
7
+ };
8
+ exports.RenderIcon = RenderIcon;
@@ -0,0 +1,4 @@
1
+ export declare const getDefaultOutLocation: ({ compositionName, defaultExtension, }: {
2
+ compositionName: string;
3
+ defaultExtension: string;
4
+ }) => string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultOutLocation = void 0;
4
+ const getDefaultOutLocation = ({ compositionName, defaultExtension, }) => {
5
+ const defaultName = `out/${compositionName}.${defaultExtension}`;
6
+ return defaultName;
7
+ };
8
+ exports.getDefaultOutLocation = getDefaultOutLocation;
package/dist/index.d.ts CHANGED
@@ -106,7 +106,9 @@ export declare const CliInternals: {
106
106
  initializeCli: (remotionRoot: string) => Promise<void>;
107
107
  BooleanFlags: string[];
108
108
  quietFlagProvided: () => boolean;
109
- parsedCli: import("./parse-command-line").CommandLineOptions & minimist.ParsedArgs;
109
+ parsedCli: import("./parse-command-line").CommandLineOptions & {
110
+ _: string[];
111
+ };
110
112
  handleCommonError: (err: Error) => Promise<void>;
111
113
  formatBytes: (number: number, options?: Intl.NumberFormatOptions & {
112
114
  locale: string;
@@ -143,4 +145,5 @@ export declare const CliInternals: {
143
145
  reason: string;
144
146
  };
145
147
  getImageFormat: (codec: import("@remotion/renderer").CodecOrUndefined) => "png" | "jpeg" | "none";
148
+ printCompositions: (compositions: import("remotion").TCompMetadata[]) => void;
146
149
  };
package/dist/index.js CHANGED
@@ -39,6 +39,7 @@ const log_1 = require("./log");
39
39
  const make_progress_bar_1 = require("./make-progress-bar");
40
40
  const parse_command_line_1 = require("./parse-command-line");
41
41
  const preview_1 = require("./preview");
42
+ const print_compositions_1 = require("./print-compositions");
42
43
  const print_help_1 = require("./print-help");
43
44
  const progress_bar_1 = require("./progress-bar");
44
45
  const render_1 = require("./render");
@@ -133,4 +134,5 @@ exports.CliInternals = {
133
134
  selectComposition: select_composition_1.selectComposition,
134
135
  findEntryPoint: entry_point_1.findEntryPoint,
135
136
  getImageFormat: image_formats_1.getImageFormat,
137
+ printCompositions: print_compositions_1.printCompositions,
136
138
  };
@@ -1,5 +1,4 @@
1
1
  import type { BrowserExecutable, Codec, FfmpegExecutable, ImageFormat, OpenGlRenderer, PixelFormat, ProResProfile } from '@remotion/renderer';
2
- import minimist from 'minimist';
3
2
  export declare type CommandLineOptions = {
4
3
  ['browser-executable']: BrowserExecutable;
5
4
  ['ffmpeg-executable']: FfmpegExecutable;
@@ -13,11 +12,14 @@ export declare type CommandLineOptions = {
13
12
  ['disable-web-security']: string;
14
13
  ['every-nth-frame']: number;
15
14
  ['number-of-gif-loops']: number;
15
+ ['number-of-shared-audio-tags']: number;
16
16
  codec: Codec;
17
17
  concurrency: number;
18
18
  timeout: number;
19
19
  config: string;
20
20
  ['public-dir']: string;
21
+ ['audio-bitrate']: string;
22
+ ['video-bitrate']: string;
21
23
  crf: number;
22
24
  force: boolean;
23
25
  overwrite: boolean;
@@ -38,11 +40,15 @@ export declare type CommandLineOptions = {
38
40
  muted: boolean;
39
41
  height: number;
40
42
  width: number;
43
+ runs: number;
44
+ concurrencies: string;
41
45
  ['enforce-audio-track']: boolean;
42
46
  gl: OpenGlRenderer;
43
47
  ['package-manager']: string;
44
48
  };
45
49
  export declare const BooleanFlags: string[];
46
- export declare const parsedCli: CommandLineOptions & minimist.ParsedArgs;
50
+ export declare const parsedCli: CommandLineOptions & {
51
+ _: string[];
52
+ };
47
53
  export declare const parseCommandLine: () => void;
48
54
  export declare const quietFlagProvided: () => boolean;
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,2 @@
1
+ import type { IncomingMessage } from 'http';
2
+ export declare const parseRequestBody: (req: IncomingMessage) => Promise<unknown>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseRequestBody = void 0;
4
+ const parseRequestBody = async (req) => {
5
+ const body = await new Promise((_resolve) => {
6
+ let data = '';
7
+ req.on('data', (chunk) => {
8
+ data += chunk;
9
+ });
10
+ req.on('end', () => {
11
+ _resolve(data.toString());
12
+ });
13
+ });
14
+ return JSON.parse(body);
15
+ };
16
+ exports.parseRequestBody = parseRequestBody;
@@ -0,0 +1,2 @@
1
+ import type { IncomingMessage, ServerResponse } from 'http';
2
+ export declare const handleAddRender: (remotionRoot: string, req: IncomingMessage, res: ServerResponse, entryPoint: string) => Promise<void>;
@@ -0,0 +1,39 @@
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.handleAddRender = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const _1 = require(".");
9
+ const parse_body_1 = require("../parse-body");
10
+ const handleAddRender = async (remotionRoot, req, res, entryPoint) => {
11
+ if (req.method === 'OPTIONS') {
12
+ res.statusCode = 200;
13
+ res.end();
14
+ }
15
+ try {
16
+ const body = (await (0, parse_body_1.parseRequestBody)(req));
17
+ (0, _1.addJob)({
18
+ compositionId: body.compositionId,
19
+ id: String(Math.random()).replace('0.', ''),
20
+ startedAt: Date.now(),
21
+ type: 'still',
22
+ outputLocation: path_1.default.resolve(remotionRoot, body.outName),
23
+ status: 'idle',
24
+ }, entryPoint);
25
+ res.setHeader('content-type', 'application/json');
26
+ res.writeHead(200);
27
+ res.end(JSON.stringify({
28
+ success: true,
29
+ }));
30
+ }
31
+ catch (err) {
32
+ res.setHeader('content-type', 'application/json');
33
+ res.writeHead(200);
34
+ res.end(JSON.stringify({
35
+ success: false,
36
+ }));
37
+ }
38
+ };
39
+ exports.handleAddRender = handleAddRender;
@@ -0,0 +1,7 @@
1
+ import type { RenderJob } from './job';
2
+ export declare const getRenderQueue: () => RenderJob[];
3
+ export declare const notifyClientsOfJobUpdate: () => void;
4
+ export declare const processJob: (job: RenderJob, entryPoint: string) => Promise<never>;
5
+ export declare const addJob: (job: RenderJob, entryPoint: string) => void;
6
+ export declare const removeJob: (jobId: string) => void;
7
+ export declare const processJobIfPossible: (entryPoint: string) => Promise<void>;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processJobIfPossible = exports.removeJob = exports.addJob = exports.processJob = exports.notifyClientsOfJobUpdate = exports.getRenderQueue = void 0;
4
+ const bundler_1 = require("@remotion/bundler");
5
+ const renderer_1 = require("@remotion/renderer");
6
+ const live_events_1 = require("../live-events");
7
+ let jobQueue = [];
8
+ const updateJob = (id, updater) => {
9
+ jobQueue = jobQueue.map((j) => {
10
+ if (id === j.id) {
11
+ return updater(j);
12
+ }
13
+ return j;
14
+ });
15
+ (0, exports.notifyClientsOfJobUpdate)();
16
+ };
17
+ const getRenderQueue = () => {
18
+ return jobQueue;
19
+ };
20
+ exports.getRenderQueue = getRenderQueue;
21
+ const notifyClientsOfJobUpdate = () => {
22
+ (0, live_events_1.waitForLiveEventsListener)().then((listener) => {
23
+ listener.sendEventToClient({
24
+ type: 'render-queue-updated',
25
+ queue: jobQueue,
26
+ });
27
+ });
28
+ };
29
+ exports.notifyClientsOfJobUpdate = notifyClientsOfJobUpdate;
30
+ const processJob = async (job, entryPoint) => {
31
+ if (job.type === 'still') {
32
+ const serveUrl = await (0, bundler_1.bundle)({
33
+ entryPoint,
34
+ // TODO: Accept CLI options
35
+ });
36
+ const compositions = await (0, renderer_1.getCompositions)(serveUrl, {
37
+ // TODO: Accept CLI option
38
+ });
39
+ const composition = compositions.find((c) => {
40
+ return c.id === job.compositionId;
41
+ });
42
+ if (!composition) {
43
+ throw new TypeError(`Composition ${job.compositionId} not found`);
44
+ }
45
+ await (0, renderer_1.renderStill)({
46
+ composition,
47
+ output: job.outputLocation,
48
+ serveUrl,
49
+ // TODO: Accept CLI options
50
+ });
51
+ }
52
+ throw new TypeError(`Could not process job of type ${job.type}`);
53
+ };
54
+ exports.processJob = processJob;
55
+ const addJob = (job, entryPoint) => {
56
+ jobQueue.push(job);
57
+ (0, exports.processJobIfPossible)(entryPoint);
58
+ (0, exports.notifyClientsOfJobUpdate)();
59
+ };
60
+ exports.addJob = addJob;
61
+ const removeJob = (jobId) => {
62
+ jobQueue = jobQueue.filter((job) => job.id !== jobId);
63
+ (0, exports.notifyClientsOfJobUpdate)();
64
+ };
65
+ exports.removeJob = removeJob;
66
+ const processJobIfPossible = async (entryPoint) => {
67
+ const nextJob = jobQueue.find((q) => {
68
+ return q.status === 'idle';
69
+ });
70
+ if (!nextJob) {
71
+ return;
72
+ }
73
+ try {
74
+ updateJob(nextJob.id, (job) => {
75
+ return {
76
+ ...job,
77
+ status: 'running',
78
+ };
79
+ });
80
+ await (0, exports.processJob)(nextJob, entryPoint);
81
+ updateJob(nextJob.id, (job) => {
82
+ return {
83
+ ...job,
84
+ status: 'done',
85
+ };
86
+ });
87
+ }
88
+ catch (err) {
89
+ updateJob(nextJob.id, (job) => {
90
+ return {
91
+ ...job,
92
+ status: 'failed',
93
+ error: err,
94
+ };
95
+ });
96
+ (0, live_events_1.waitForLiveEventsListener)().then((listener) => {
97
+ listener.sendEventToClient({
98
+ type: 'render-job-failed',
99
+ compositionId: nextJob.compositionId,
100
+ error: err,
101
+ });
102
+ });
103
+ }
104
+ };
105
+ exports.processJobIfPossible = processJobIfPossible;
@@ -0,0 +1,29 @@
1
+ declare type RenderJobDynamicStatus = {
2
+ status: 'done';
3
+ } | {
4
+ status: 'running';
5
+ } | {
6
+ status: 'idle';
7
+ } | {
8
+ status: 'failed';
9
+ error: Error;
10
+ };
11
+ export declare type RenderJob = {
12
+ startedAt: number;
13
+ compositionId: string;
14
+ type: 'still' | 'composition';
15
+ id: string;
16
+ outputLocation: string;
17
+ } & RenderJobDynamicStatus;
18
+ export declare type AddRenderRequest = {
19
+ compositionId: string;
20
+ type: 'still' | 'composition';
21
+ outName: string;
22
+ };
23
+ export declare type RemoveRenderRequest = {
24
+ jobId: string;
25
+ };
26
+ export declare type OpenInFileExplorerRequest = {
27
+ directory: string;
28
+ };
29
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare const openDirectoryInFinder: (dirToOpen: string) => Promise<void>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openDirectoryInFinder = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const os_1 = require("os");
6
+ const openDirectoryInFinder = (dirToOpen) => {
7
+ const command = (0, os_1.platform)() === 'darwin'
8
+ ? 'open'
9
+ : (0, os_1.platform)() === 'linux'
10
+ ? 'xdg-open'
11
+ : 'explorer';
12
+ // TODO: What if file was deleted in the meanwhile?
13
+ // TODO: '-R' only works on macOS
14
+ const p = (0, child_process_1.spawn)(command, ['-R', dirToOpen]);
15
+ return new Promise((resolve, reject) => {
16
+ p.on('exit', (code) => {
17
+ if (code === 0) {
18
+ resolve();
19
+ }
20
+ else {
21
+ reject(new Error(`Exited with code ${code}`));
22
+ }
23
+ });
24
+ p.on('error', (err) => {
25
+ p.kill();
26
+ if (err) {
27
+ reject(err);
28
+ }
29
+ });
30
+ });
31
+ };
32
+ exports.openDirectoryInFinder = openDirectoryInFinder;
@@ -0,0 +1,2 @@
1
+ import type { IncomingMessage, ServerResponse } from 'http';
2
+ export declare const handleOpenInFileExplorer: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleOpenInFileExplorer = void 0;
4
+ const parse_body_1 = require("../parse-body");
5
+ const open_directory_in_finder_1 = require("./open-directory-in-finder");
6
+ const handleOpenInFileExplorer = async (req, res) => {
7
+ if (req.method === 'OPTIONS') {
8
+ res.statusCode = 200;
9
+ res.end();
10
+ }
11
+ try {
12
+ const body = (await (0, parse_body_1.parseRequestBody)(req));
13
+ // TODO: Disallow opening file that is not in Remotion CWD
14
+ await (0, open_directory_in_finder_1.openDirectoryInFinder)(body.directory);
15
+ res.setHeader('content-type', 'application/json');
16
+ res.writeHead(200);
17
+ res.end(JSON.stringify({
18
+ success: true,
19
+ }));
20
+ }
21
+ catch (err) {
22
+ res.setHeader('content-type', 'application/json');
23
+ res.writeHead(200);
24
+ res.end(JSON.stringify({
25
+ success: false,
26
+ error: err.message,
27
+ }));
28
+ }
29
+ };
30
+ exports.handleOpenInFileExplorer = handleOpenInFileExplorer;
@@ -0,0 +1,2 @@
1
+ import type { IncomingMessage, ServerResponse } from 'http';
2
+ export declare const handleRemoveRender: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRemoveRender = void 0;
4
+ const _1 = require(".");
5
+ const parse_body_1 = require("../parse-body");
6
+ const handleRemoveRender = async (req, res) => {
7
+ if (req.method === 'OPTIONS') {
8
+ res.statusCode = 200;
9
+ res.end();
10
+ }
11
+ try {
12
+ const body = (await (0, parse_body_1.parseRequestBody)(req));
13
+ (0, _1.removeJob)(body.jobId);
14
+ res.setHeader('content-type', 'application/json');
15
+ res.writeHead(200);
16
+ res.end(JSON.stringify({
17
+ success: true,
18
+ }));
19
+ }
20
+ catch (err) {
21
+ res.setHeader('content-type', 'application/json');
22
+ res.writeHead(200);
23
+ res.end(JSON.stringify({
24
+ success: false,
25
+ }));
26
+ }
27
+ };
28
+ exports.handleRemoveRender = handleRemoveRender;
@@ -8,6 +8,8 @@ const bundler_1 = require("@remotion/bundler");
8
8
  const fs_1 = require("fs");
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const url_1 = require("url");
11
+ const number_of_shared_audio_tags_1 = require("../config/number-of-shared-audio-tags");
12
+ const parse_command_line_1 = require("../parse-command-line");
11
13
  const get_file_source_1 = require("./error-overlay/react-overlay/utils/get-file-source");
12
14
  const open_in_editor_1 = require("./error-overlay/react-overlay/utils/open-in-editor");
13
15
  const get_package_manager_1 = require("./get-package-manager");
@@ -26,6 +28,7 @@ const static404 = (response) => {
26
28
  response.end('The static/ prefix has been changed, this URL is no longer valid.');
27
29
  };
28
30
  const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputProps, getEnvVariables, }) => {
31
+ var _a;
29
32
  const [edit] = await editorGuess;
30
33
  const displayName = (0, open_in_editor_1.getDisplayNameForEditor)(edit ? edit.command : null);
31
34
  response.setHeader('content-type', 'text/html');
@@ -39,6 +42,7 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
39
42
  inputProps: getCurrentInputProps(),
40
43
  remotionRoot,
41
44
  previewServerCommand: packageManager === 'unknown' ? null : packageManager.startCommand,
45
+ numberOfAudioTags: (_a = parse_command_line_1.parsedCli['number-of-shared-audio-tags']) !== null && _a !== void 0 ? _a : (0, number_of_shared_audio_tags_1.getNumberOfSharedAudioTags)(),
42
46
  }));
43
47
  };
44
48
  const handleProjectInfo = async (remotionRoot, _, response) => {
@@ -16,7 +16,7 @@ remotion_1.Internals.CSSUtils.injectCSS(remotion_1.Internals.CSSUtils.makeDefaul
16
16
  const getServerDisconnectedDomElement = () => {
17
17
  return document.getElementById('server-disconnected-overlay');
18
18
  };
19
- const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(EditorContexts_1.EditorContexts, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }) }));
19
+ const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { numberOfAudioTags: window.remotion_numberOfAudioTags, children: (0, jsx_runtime_1.jsx)(EditorContexts_1.EditorContexts, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }) }));
20
20
  if (client_1.default.createRoot) {
21
21
  client_1.default.createRoot(remotion_1.Internals.getPreviewDomElement()).render(content);
22
22
  client_1.default.createRoot(getServerDisconnectedDomElement()).render((0, jsx_runtime_1.jsx)(ServerDisconnected_1.ServerDisconnected, {}));
@@ -0,0 +1,2 @@
1
+ import type { TCompMetadata } from 'remotion';
2
+ export declare const printCompositions: (compositions: TCompMetadata[]) => void;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printCompositions = void 0;
4
+ const log_1 = require("./log");
5
+ const parse_command_line_1 = require("./parse-command-line");
6
+ const max = (arr) => {
7
+ if (arr.length === 0) {
8
+ throw new Error('Array of 0 length');
9
+ }
10
+ let biggest = arr[0];
11
+ for (let i = 0; i < arr.length; i++) {
12
+ const elem = arr[i];
13
+ if (elem > biggest) {
14
+ biggest = elem;
15
+ }
16
+ }
17
+ return biggest;
18
+ };
19
+ const printCompositions = (compositions) => {
20
+ if (!(0, parse_command_line_1.quietFlagProvided)()) {
21
+ log_1.Log.info();
22
+ log_1.Log.info('The following compositions are available:');
23
+ log_1.Log.info();
24
+ }
25
+ if ((0, parse_command_line_1.quietFlagProvided)()) {
26
+ log_1.Log.info(compositions.map((c) => c.id).join(' '));
27
+ return;
28
+ }
29
+ const firstColumnLength = max(compositions.map(({ id }) => id.length)) + 4;
30
+ const secondColumnLength = 8;
31
+ const thirdColumnLength = 15;
32
+ log_1.Log.info(compositions
33
+ .map((comp) => {
34
+ const isStill = comp.durationInFrames === 1;
35
+ const dimensions = `${comp.width}x${comp.height}`;
36
+ const fps = isStill ? '' : comp.fps.toString();
37
+ const durationInSeconds = (comp.durationInFrames / comp.fps).toFixed(2);
38
+ const formattedDuration = isStill
39
+ ? 'Still'
40
+ : `${comp.durationInFrames} (${durationInSeconds} sec)`;
41
+ return [
42
+ comp.id.padEnd(firstColumnLength, ' '),
43
+ fps.padEnd(secondColumnLength, ' '),
44
+ dimensions.padEnd(thirdColumnLength, ' '),
45
+ formattedDuration,
46
+ ].join('');
47
+ })
48
+ .join('\n'));
49
+ };
50
+ exports.printCompositions = printCompositions;
@@ -6,10 +6,22 @@ export declare const createProgressBar: (quiet: boolean) => {
6
6
  export declare const createOverwriteableCliOutput: (quiet: boolean) => {
7
7
  update: (up: string) => boolean;
8
8
  };
9
- export declare const makeBundlingProgress: ({ progress, steps, doneIn, }: {
9
+ export declare type CopyingState = {
10
+ bytes: number;
11
+ doneIn: number | null;
12
+ };
13
+ export declare type BundlingState = {
10
14
  progress: number;
11
15
  steps: RenderStep[];
12
16
  doneIn: number | null;
17
+ };
18
+ export declare type SymbolicLinksState = {
19
+ symlinks: string[];
20
+ };
21
+ export declare const makeBundlingAndCopyProgress: ({ bundling, copying, symLinks, }: {
22
+ bundling: BundlingState;
23
+ copying: CopyingState;
24
+ symLinks: SymbolicLinksState;
13
25
  }) => string;
14
26
  declare type RenderingProgressInput = {
15
27
  frames: number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeRenderingAndStitchingProgress = exports.makeStitchingProgress = exports.makeRenderingProgress = exports.makeBundlingProgress = exports.createOverwriteableCliOutput = exports.createProgressBar = void 0;
3
+ exports.makeRenderingAndStitchingProgress = exports.makeStitchingProgress = exports.makeRenderingProgress = exports.makeBundlingAndCopyProgress = exports.createOverwriteableCliOutput = exports.createProgressBar = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const ansi_diff_1 = require("./ansi/ansi-diff");
6
6
  const chalk_1 = require("./chalk");
@@ -37,7 +37,46 @@ const makeBundlingProgress = ({ progress, steps, doneIn, }) => [
37
37
  ]
38
38
  .filter(truthy_1.truthy)
39
39
  .join(' ');
40
- exports.makeBundlingProgress = makeBundlingProgress;
40
+ const makeCopyingProgress = (options) => {
41
+ // Don't show copy progress lower than 200MB
42
+ if (options.bytes < 1000 * 1000 * 200) {
43
+ return null;
44
+ }
45
+ return [
46
+ ' +',
47
+ options.doneIn ? (0, make_progress_bar_1.makeProgressBar)(1) : (0, download_progress_1.getFileSizeDownloadBar)(options.bytes),
48
+ 'Copying public dir',
49
+ options.doneIn === null ? null : chalk_1.chalk.gray(`${options.doneIn}ms`),
50
+ ]
51
+ .filter(truthy_1.truthy)
52
+ .join(' ');
53
+ };
54
+ const makeSymlinkProgress = (options) => {
55
+ if (options.symlinks.length === 0) {
56
+ return null;
57
+ }
58
+ if (options.symlinks.length === 1) {
59
+ return [
60
+ chalk_1.chalk.gray(` Found a symbolic link in the public folder:`),
61
+ chalk_1.chalk.gray(' ' + options.symlinks[0]),
62
+ chalk_1.chalk.gray(' The symlink will be forwarded in to the bundle.'),
63
+ ].join('\n');
64
+ }
65
+ return [
66
+ chalk_1.chalk.gray(` Found ${options.symlinks.length} symbolic links in the public folder.`),
67
+ chalk_1.chalk.gray(' The symlinks will be forwarded in to the bundle.'),
68
+ ].join('\n');
69
+ };
70
+ const makeBundlingAndCopyProgress = ({ bundling, copying, symLinks, }) => {
71
+ return [
72
+ makeBundlingProgress(bundling),
73
+ makeCopyingProgress(copying),
74
+ makeSymlinkProgress(symLinks),
75
+ ]
76
+ .filter(truthy_1.truthy)
77
+ .join('\n');
78
+ };
79
+ exports.makeBundlingAndCopyProgress = makeBundlingAndCopyProgress;
41
80
  const makeRenderingProgress = ({ frames, totalFrames, steps, concurrency, doneIn, }) => {
42
81
  const progress = frames / totalFrames;
43
82
  return [