@remotion/cli 4.0.409 → 4.0.410
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.
- package/dist/add.js +90 -24
- package/dist/benchmark.js +1 -0
- package/dist/extra-packages.d.ts +2 -0
- package/dist/extra-packages.js +11 -0
- package/dist/index.js +8 -5
- package/dist/parsed-cli.js +1 -0
- package/dist/print-help.js +3 -0
- package/dist/render-flows/render.js +1 -1
- package/dist/render-flows/still.js +1 -1
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +53 -0
- package/dist/upgrade.js +39 -6
- package/dist/versions.js +87 -11
- package/package.json +14 -14
package/dist/add.js
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.addCommand = void 0;
|
|
4
7
|
const renderer_1 = require("@remotion/renderer");
|
|
5
8
|
const studio_server_1 = require("@remotion/studio-server");
|
|
6
9
|
const node_child_process_1 = require("node:child_process");
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
11
|
const chalk_1 = require("./chalk");
|
|
12
|
+
const extra_packages_1 = require("./extra-packages");
|
|
8
13
|
const list_of_remotion_packages_1 = require("./list-of-remotion-packages");
|
|
9
14
|
const log_1 = require("./log");
|
|
15
|
+
const resolve_from_1 = require("./resolve-from");
|
|
16
|
+
const getInstalledVersion = (remotionRoot, pkg) => {
|
|
17
|
+
try {
|
|
18
|
+
const pkgJsonPath = (0, resolve_from_1.resolveFrom)(remotionRoot, `${pkg}/package.json`);
|
|
19
|
+
const file = node_fs_1.default.readFileSync(pkgJsonPath, 'utf-8');
|
|
20
|
+
const packageJson = JSON.parse(file);
|
|
21
|
+
return packageJson.version;
|
|
22
|
+
}
|
|
23
|
+
catch (_a) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
10
27
|
const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel, args, }) => {
|
|
11
28
|
// Validate that all package names are Remotion packages
|
|
12
|
-
const invalidPackages = packageNames.filter((pkg) => !list_of_remotion_packages_1.listOfRemotionPackages.includes(pkg));
|
|
29
|
+
const invalidPackages = packageNames.filter((pkg) => !list_of_remotion_packages_1.listOfRemotionPackages.includes(pkg) && !extra_packages_1.EXTRA_PACKAGES[pkg]);
|
|
13
30
|
if (invalidPackages.length > 0) {
|
|
14
|
-
throw new Error(`The following packages are not Remotion packages: ${invalidPackages.join(', ')}. Must be one of the Remotion packages.`);
|
|
31
|
+
throw new Error(`The following packages are not Remotion packages: ${invalidPackages.join(', ')}. Must be one of the Remotion packages or one of the supported extra packages: ${Object.keys(extra_packages_1.EXTRA_PACKAGES).join(', ')}.`);
|
|
15
32
|
}
|
|
16
33
|
const { dependencies, devDependencies, optionalDependencies, peerDependencies, } = studio_server_1.StudioServerInternals.getInstalledDependencies(remotionRoot);
|
|
17
34
|
// Check if packages are already installed
|
|
@@ -21,34 +38,69 @@ const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel
|
|
|
21
38
|
...optionalDependencies,
|
|
22
39
|
...peerDependencies,
|
|
23
40
|
];
|
|
24
|
-
const alreadyInstalled =
|
|
25
|
-
const toInstall =
|
|
41
|
+
const alreadyInstalled = [];
|
|
42
|
+
const toInstall = [];
|
|
43
|
+
const toUpgrade = [];
|
|
44
|
+
for (const pkg of packageNames) {
|
|
45
|
+
const isInstalled = allDeps.includes(pkg);
|
|
46
|
+
const requiredVersion = extra_packages_1.EXTRA_PACKAGES[pkg];
|
|
47
|
+
if (!isInstalled) {
|
|
48
|
+
toInstall.push(pkg);
|
|
49
|
+
}
|
|
50
|
+
else if (requiredVersion) {
|
|
51
|
+
// For extra packages, check if the version is correct
|
|
52
|
+
const installedVersion = getInstalledVersion(remotionRoot, pkg);
|
|
53
|
+
if (installedVersion !== requiredVersion) {
|
|
54
|
+
toUpgrade.push({
|
|
55
|
+
pkg,
|
|
56
|
+
from: installedVersion !== null && installedVersion !== void 0 ? installedVersion : 'unknown',
|
|
57
|
+
to: requiredVersion,
|
|
58
|
+
});
|
|
59
|
+
toInstall.push(pkg);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
alreadyInstalled.push(pkg);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
alreadyInstalled.push(pkg);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
26
69
|
// Log already installed packages
|
|
27
70
|
for (const pkg of alreadyInstalled) {
|
|
28
71
|
log_1.Log.info({ indent: false, logLevel }, `○ ${pkg} ${chalk_1.chalk.gray('(already installed)')}`);
|
|
29
72
|
}
|
|
73
|
+
// Log packages that will be upgraded
|
|
74
|
+
for (const { pkg, from, to } of toUpgrade) {
|
|
75
|
+
log_1.Log.info({ indent: false, logLevel }, `↑ ${pkg} ${chalk_1.chalk.yellow(`${from} → ${to}`)}`);
|
|
76
|
+
}
|
|
30
77
|
// If nothing to install, return early
|
|
31
78
|
if (toInstall.length === 0) {
|
|
32
79
|
return;
|
|
33
80
|
}
|
|
34
|
-
// Find the version of installed Remotion packages
|
|
35
81
|
const installedRemotionPackages = list_of_remotion_packages_1.listOfRemotionPackages.filter((pkg) => allDeps.includes(pkg));
|
|
36
|
-
if (installedRemotionPackages.length === 0) {
|
|
37
|
-
throw new Error('No Remotion packages found in your project. Install Remotion first.');
|
|
38
|
-
}
|
|
39
82
|
// Get the version from the first installed Remotion package
|
|
40
83
|
const packageJsonPath = `${remotionRoot}/node_modules/${installedRemotionPackages[0]}/package.json`;
|
|
41
|
-
let targetVersion;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
84
|
+
let targetVersion = null;
|
|
85
|
+
if (installedRemotionPackages.length > 0) {
|
|
86
|
+
try {
|
|
87
|
+
const packageJson = require(packageJsonPath);
|
|
88
|
+
targetVersion = packageJson.version;
|
|
89
|
+
const packageList = toInstall.length === 1
|
|
90
|
+
? toInstall[0]
|
|
91
|
+
: `${toInstall.length} packages (${toInstall.join(', ')})`;
|
|
92
|
+
log_1.Log.info({ indent: false, logLevel }, `Installing ${packageList}`);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
throw new Error(`Could not determine version of installed Remotion packages: ${err.message}`);
|
|
96
|
+
}
|
|
49
97
|
}
|
|
50
|
-
|
|
51
|
-
|
|
98
|
+
else {
|
|
99
|
+
// If no Remotion packages are installed, we can only install extra packages
|
|
100
|
+
const notExtraPackages = toInstall.filter((pkg) => !extra_packages_1.EXTRA_PACKAGES[pkg]);
|
|
101
|
+
if (notExtraPackages.length > 0) {
|
|
102
|
+
throw new Error('No Remotion packages found in your project. Install Remotion first.');
|
|
103
|
+
}
|
|
52
104
|
}
|
|
53
105
|
const manager = studio_server_1.StudioServerInternals.getPackageManager(remotionRoot, packageManager, 0);
|
|
54
106
|
if (manager === 'unknown') {
|
|
@@ -56,10 +108,16 @@ const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel
|
|
|
56
108
|
.map((p) => p.path)
|
|
57
109
|
.join(', ')}). Install dependencies using your favorite manager!`);
|
|
58
110
|
}
|
|
111
|
+
const packagesWithVersions = toInstall.map((pkg) => {
|
|
112
|
+
if (extra_packages_1.EXTRA_PACKAGES[pkg]) {
|
|
113
|
+
return `${pkg}@${extra_packages_1.EXTRA_PACKAGES[pkg]}`;
|
|
114
|
+
}
|
|
115
|
+
return `${pkg}@${targetVersion}`;
|
|
116
|
+
});
|
|
59
117
|
const command = studio_server_1.StudioServerInternals.getInstallCommand({
|
|
60
118
|
manager: manager.manager,
|
|
61
|
-
packages:
|
|
62
|
-
version:
|
|
119
|
+
packages: packagesWithVersions,
|
|
120
|
+
version: '',
|
|
63
121
|
additionalArgs: args,
|
|
64
122
|
});
|
|
65
123
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray(`$ ${manager.manager} ${command.join(' ')}`));
|
|
@@ -68,6 +126,7 @@ const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel
|
|
|
68
126
|
...process.env,
|
|
69
127
|
ADBLOCK: '1',
|
|
70
128
|
DISABLE_OPENCOLLECTIVE: '1',
|
|
129
|
+
npm_config_loglevel: 'error',
|
|
71
130
|
},
|
|
72
131
|
stdio: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'info')
|
|
73
132
|
? 'inherit'
|
|
@@ -86,11 +145,18 @@ const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel
|
|
|
86
145
|
}
|
|
87
146
|
});
|
|
88
147
|
});
|
|
89
|
-
|
|
90
|
-
log_1.Log.info({ indent: false, logLevel }, `○ ${pkg}@${targetVersion} ${chalk_1.chalk.gray('(already installed)')}`);
|
|
91
|
-
}
|
|
148
|
+
const upgradedPkgs = new Set(toUpgrade.map((u) => u.pkg));
|
|
92
149
|
for (const pkg of toInstall) {
|
|
93
|
-
|
|
150
|
+
if (upgradedPkgs.has(pkg)) {
|
|
151
|
+
// Already logged as upgrade
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (extra_packages_1.EXTRA_PACKAGES[pkg]) {
|
|
155
|
+
log_1.Log.info({ indent: false, logLevel }, `+ ${pkg}@${extra_packages_1.EXTRA_PACKAGES[pkg]}`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
log_1.Log.info({ indent: false, logLevel }, `+ ${pkg}@${targetVersion}`);
|
|
159
|
+
}
|
|
94
160
|
}
|
|
95
161
|
};
|
|
96
162
|
exports.addCommand = addCommand;
|
package/dist/benchmark.js
CHANGED
|
@@ -382,6 +382,7 @@ const benchmarkCommand = async (remotionRoot, args, logLevel) => {
|
|
|
382
382
|
}).value,
|
|
383
383
|
onLog: renderer_1.RenderInternals.defaultOnLog,
|
|
384
384
|
licenseKey: null,
|
|
385
|
+
isProduction: null,
|
|
385
386
|
}, (run, progress) => {
|
|
386
387
|
benchmarkProgress.update(makeBenchmarkProgressBar({
|
|
387
388
|
totalRuns: runs,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EXTRA_PACKAGES_DOCS = exports.EXTRA_PACKAGES = void 0;
|
|
4
|
+
exports.EXTRA_PACKAGES = {
|
|
5
|
+
zod: '3.22.3',
|
|
6
|
+
mediabunny: '1.29.0',
|
|
7
|
+
};
|
|
8
|
+
exports.EXTRA_PACKAGES_DOCS = {
|
|
9
|
+
zod: 'https://www.remotion.dev/docs/schemas#prerequisites',
|
|
10
|
+
mediabunny: 'https://www.remotion.dev/docs/mediabunny/version',
|
|
11
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -41,18 +41,15 @@ const print_help_1 = require("./print-help");
|
|
|
41
41
|
const progress_bar_1 = require("./progress-bar");
|
|
42
42
|
const render_1 = require("./render");
|
|
43
43
|
const should_use_non_overlaying_logger_1 = require("./should-use-non-overlaying-logger");
|
|
44
|
+
const skills_1 = require("./skills");
|
|
44
45
|
const still_1 = require("./still");
|
|
45
46
|
const studio_1 = require("./studio");
|
|
46
47
|
const upgrade_1 = require("./upgrade");
|
|
47
48
|
const versions_1 = require("./versions");
|
|
48
49
|
const cli = async () => {
|
|
49
50
|
const [command, ...args] = parsed_cli_1.parsedCli._;
|
|
50
|
-
if (parsed_cli_1.parsedCli.help) {
|
|
51
|
-
(0, print_help_1.printHelp)('info');
|
|
52
|
-
process.exit(0);
|
|
53
|
-
}
|
|
54
51
|
const remotionRoot = renderer_1.RenderInternals.findRemotionRoot();
|
|
55
|
-
if (command !== versions_1.VERSIONS_COMMAND) {
|
|
52
|
+
if (command !== versions_1.VERSIONS_COMMAND && !parsed_cli_1.parsedCli.help) {
|
|
56
53
|
await (0, versions_1.validateVersionsBeforeCommand)(remotionRoot, 'info');
|
|
57
54
|
}
|
|
58
55
|
const logLevel = await (0, initialize_cli_1.initializeCli)(remotionRoot);
|
|
@@ -131,6 +128,9 @@ const cli = async () => {
|
|
|
131
128
|
args: additionalArgs,
|
|
132
129
|
});
|
|
133
130
|
}
|
|
131
|
+
else if (command === 'skills') {
|
|
132
|
+
await (0, skills_1.skillsCommand)(args, logLevel);
|
|
133
|
+
}
|
|
134
134
|
else if (command === versions_1.VERSIONS_COMMAND) {
|
|
135
135
|
await (0, versions_1.versionsCommand)(remotionRoot, logLevel);
|
|
136
136
|
}
|
|
@@ -144,6 +144,9 @@ const cli = async () => {
|
|
|
144
144
|
(0, print_help_1.printHelp)(logLevel);
|
|
145
145
|
process.exit(0);
|
|
146
146
|
}
|
|
147
|
+
else if (parsed_cli_1.parsedCli.help) {
|
|
148
|
+
(0, print_help_1.printHelp)(logLevel);
|
|
149
|
+
}
|
|
147
150
|
else {
|
|
148
151
|
if (command) {
|
|
149
152
|
log_1.Log.error({ indent: false, logLevel }, `Command ${command} not found.`);
|
package/dist/parsed-cli.js
CHANGED
|
@@ -39,6 +39,7 @@ exports.BooleanFlags = [
|
|
|
39
39
|
'compatible-only',
|
|
40
40
|
'force-path-style',
|
|
41
41
|
'onlyAllocateCpuDuringRequestProcessing',
|
|
42
|
+
client_1.BrowserSafeApis.options.isProductionOption.cliFlag,
|
|
42
43
|
];
|
|
43
44
|
exports.parsedCli = (0, minimist_1.default)(process.argv.slice(2), {
|
|
44
45
|
boolean: exports.BooleanFlags,
|
package/dist/print-help.js
CHANGED
|
@@ -56,6 +56,9 @@ const printHelp = (logLevel) => {
|
|
|
56
56
|
log_1.Log.info({ indent: false, logLevel }, 'Add Remotion packages with the correct version.');
|
|
57
57
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/add'));
|
|
58
58
|
log_1.Log.info({ indent: false, logLevel });
|
|
59
|
+
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue('remotion skills ') + chalk_1.chalk.gray('<add | update>'));
|
|
60
|
+
log_1.Log.info({ indent: false, logLevel }, 'Install or update skills from remotion-dev/skills.');
|
|
61
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
59
62
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue(`remotion ${browser_1.BROWSER_COMMAND}`));
|
|
60
63
|
log_1.Log.info({ indent: false, logLevel }, 'Ensure Remotion has a browser it can use for rendering.');
|
|
61
64
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray('https://www.remotion.dev/docs/cli/browser'));
|
|
@@ -500,8 +500,8 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
|
|
|
500
500
|
chromeMode,
|
|
501
501
|
mediaCacheSizeInBytes,
|
|
502
502
|
onLog,
|
|
503
|
-
apiKey: null,
|
|
504
503
|
licenseKey: null,
|
|
504
|
+
isProduction: null,
|
|
505
505
|
});
|
|
506
506
|
if (!updatesDontOverwrite) {
|
|
507
507
|
updateRenderProgress({ newline: true, printToConsole: true });
|
package/dist/skills.d.ts
ADDED
package/dist/skills.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.skillsCommand = exports.printSkillsHelp = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const chalk_1 = require("./chalk");
|
|
6
|
+
const log_1 = require("./log");
|
|
7
|
+
const printSkillsHelp = (logLevel) => {
|
|
8
|
+
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue('remotion skills'));
|
|
9
|
+
log_1.Log.info({ indent: false, logLevel }, 'Install or update skills from remotion-dev/skills.');
|
|
10
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
11
|
+
log_1.Log.info({ indent: false, logLevel }, 'Available subcommands:');
|
|
12
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
13
|
+
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue('remotion skills add'));
|
|
14
|
+
log_1.Log.info({ indent: false, logLevel }, 'Install skills from remotion-dev/skills.');
|
|
15
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
16
|
+
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue('remotion skills update'));
|
|
17
|
+
log_1.Log.info({ indent: false, logLevel }, 'Update skills from remotion-dev/skills.');
|
|
18
|
+
};
|
|
19
|
+
exports.printSkillsHelp = printSkillsHelp;
|
|
20
|
+
const skillsCommand = (args, logLevel) => {
|
|
21
|
+
const subcommand = args[0];
|
|
22
|
+
const restArgs = args.slice(1);
|
|
23
|
+
if (!subcommand || !['add', 'update'].includes(subcommand)) {
|
|
24
|
+
(0, exports.printSkillsHelp)(logLevel);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const command = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
28
|
+
const fullArgs = [
|
|
29
|
+
'-y',
|
|
30
|
+
'--loglevel=error',
|
|
31
|
+
'skills',
|
|
32
|
+
subcommand,
|
|
33
|
+
'remotion-dev/skills',
|
|
34
|
+
...restArgs,
|
|
35
|
+
];
|
|
36
|
+
const child = (0, node_child_process_1.spawn)(command, fullArgs, {
|
|
37
|
+
stdio: 'inherit',
|
|
38
|
+
});
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
child.on('exit', (code) => {
|
|
41
|
+
if (code === 0) {
|
|
42
|
+
resolve();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
reject(new Error(`The skills command failed with exit code ${code}`));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
child.on('error', (err) => {
|
|
49
|
+
reject(err);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
exports.skillsCommand = skillsCommand;
|
package/dist/upgrade.js
CHANGED
|
@@ -5,8 +5,26 @@ const renderer_1 = require("@remotion/renderer");
|
|
|
5
5
|
const studio_server_1 = require("@remotion/studio-server");
|
|
6
6
|
const node_child_process_1 = require("node:child_process");
|
|
7
7
|
const chalk_1 = require("./chalk");
|
|
8
|
+
const extra_packages_1 = require("./extra-packages");
|
|
8
9
|
const list_of_remotion_packages_1 = require("./list-of-remotion-packages");
|
|
9
10
|
const log_1 = require("./log");
|
|
11
|
+
const getExtraPackageVersionsForRemotionVersion = (remotionVersion) => {
|
|
12
|
+
try {
|
|
13
|
+
const output = (0, node_child_process_1.execSync)(`npm view @remotion/studio@${remotionVersion} dependencies --json`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
14
|
+
const dependencies = JSON.parse(output);
|
|
15
|
+
const extraVersions = {};
|
|
16
|
+
for (const pkg of Object.keys(extra_packages_1.EXTRA_PACKAGES)) {
|
|
17
|
+
if (dependencies[pkg]) {
|
|
18
|
+
extraVersions[pkg] = dependencies[pkg];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return extraVersions;
|
|
22
|
+
}
|
|
23
|
+
catch (_a) {
|
|
24
|
+
// If we can't fetch the versions, return the default versions from EXTRA_PACKAGES
|
|
25
|
+
return extra_packages_1.EXTRA_PACKAGES;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
10
28
|
const upgradeCommand = async ({ remotionRoot, packageManager, version, logLevel, args, }) => {
|
|
11
29
|
const { dependencies, devDependencies, optionalDependencies, peerDependencies, } = studio_server_1.StudioServerInternals.getInstalledDependencies(remotionRoot);
|
|
12
30
|
let targetVersion;
|
|
@@ -24,14 +42,29 @@ const upgradeCommand = async ({ remotionRoot, packageManager, version, logLevel,
|
|
|
24
42
|
.map((p) => p.path)
|
|
25
43
|
.join(', ')}). Install dependencies using your favorite manager!`);
|
|
26
44
|
}
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
45
|
+
const allDeps = [
|
|
46
|
+
...dependencies,
|
|
47
|
+
...devDependencies,
|
|
48
|
+
...optionalDependencies,
|
|
49
|
+
...peerDependencies,
|
|
50
|
+
];
|
|
51
|
+
const remotionToUpgrade = list_of_remotion_packages_1.listOfRemotionPackages.filter((u) => allDeps.includes(u));
|
|
52
|
+
// Check if extra packages (zod, mediabunny) are installed
|
|
53
|
+
const installedExtraPackages = Object.keys(extra_packages_1.EXTRA_PACKAGES).filter((pkg) => allDeps.includes(pkg));
|
|
54
|
+
// Get the correct versions for extra packages for this Remotion version
|
|
55
|
+
const extraPackageVersions = getExtraPackageVersionsForRemotionVersion(targetVersion);
|
|
56
|
+
// Build the list of packages to upgrade
|
|
57
|
+
const packagesWithVersions = [
|
|
58
|
+
...remotionToUpgrade.map((pkg) => `${pkg}@${targetVersion}`),
|
|
59
|
+
...installedExtraPackages.map((pkg) => `${pkg}@${extraPackageVersions[pkg]}`),
|
|
60
|
+
];
|
|
61
|
+
if (installedExtraPackages.length > 0) {
|
|
62
|
+
log_1.Log.info({ indent: false, logLevel }, `Also upgrading extra packages: ${installedExtraPackages.map((pkg) => `${pkg}@${extraPackageVersions[pkg]}`).join(', ')}`);
|
|
63
|
+
}
|
|
31
64
|
const command = studio_server_1.StudioServerInternals.getInstallCommand({
|
|
32
65
|
manager: manager.manager,
|
|
33
|
-
packages:
|
|
34
|
-
version:
|
|
66
|
+
packages: packagesWithVersions,
|
|
67
|
+
version: '',
|
|
35
68
|
additionalArgs: args,
|
|
36
69
|
});
|
|
37
70
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray(`$ ${manager.manager} ${command.join(' ')}`));
|
package/dist/versions.js
CHANGED
|
@@ -8,6 +8,7 @@ const renderer_1 = require("@remotion/renderer");
|
|
|
8
8
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
10
10
|
const chalk_1 = require("./chalk");
|
|
11
|
+
const extra_packages_1 = require("./extra-packages");
|
|
11
12
|
const list_of_remotion_packages_1 = require("./list-of-remotion-packages");
|
|
12
13
|
const log_1 = require("./log");
|
|
13
14
|
const parse_command_line_1 = require("./parse-command-line");
|
|
@@ -39,27 +40,69 @@ const groupBy = (vals) => {
|
|
|
39
40
|
const getAllVersions = async (remotionRoot) => {
|
|
40
41
|
return (await Promise.all(list_of_remotion_packages_1.listOfRemotionPackages.map(async (p) => [p, await getVersion(remotionRoot, p)]))).filter(([, version]) => version);
|
|
41
42
|
};
|
|
43
|
+
const getExtraPackagesStatus = async (remotionRoot) => {
|
|
44
|
+
const results = [];
|
|
45
|
+
for (const [pkg, requiredVersion] of Object.entries(extra_packages_1.EXTRA_PACKAGES)) {
|
|
46
|
+
const versionAndPath = await getVersion(remotionRoot, pkg);
|
|
47
|
+
if (versionAndPath) {
|
|
48
|
+
results.push({
|
|
49
|
+
pkg,
|
|
50
|
+
requiredVersion,
|
|
51
|
+
installedVersion: versionAndPath.version,
|
|
52
|
+
path: versionAndPath.path,
|
|
53
|
+
isCorrect: versionAndPath.version === requiredVersion,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
results.push({
|
|
58
|
+
pkg,
|
|
59
|
+
requiredVersion,
|
|
60
|
+
installedVersion: null,
|
|
61
|
+
path: null,
|
|
62
|
+
isCorrect: true, // Not installed is fine - only validate if installed
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results;
|
|
67
|
+
};
|
|
42
68
|
exports.VERSIONS_COMMAND = 'versions';
|
|
43
69
|
const validateVersionsBeforeCommand = async (remotionRoot, logLevel) => {
|
|
44
70
|
var _a;
|
|
45
71
|
const versions = await getAllVersions(remotionRoot);
|
|
46
72
|
const grouped = groupBy(versions);
|
|
47
73
|
const installedVersions = Object.keys(grouped);
|
|
48
|
-
|
|
74
|
+
const hasRemotionMismatch = installedVersions.length > 1 && installedVersions.length !== 0;
|
|
75
|
+
// Check extra packages
|
|
76
|
+
const extraPackagesStatus = await getExtraPackagesStatus(remotionRoot);
|
|
77
|
+
const incorrectExtraPackages = extraPackagesStatus.filter((status) => !status.isCorrect);
|
|
78
|
+
if (!hasRemotionMismatch && incorrectExtraPackages.length === 0) {
|
|
49
79
|
return;
|
|
50
80
|
}
|
|
51
81
|
// Could be a global install of @remotion/cli.
|
|
52
82
|
// If you render a bundle with a different version, it will give a warning accordingly.
|
|
53
|
-
if (installedVersions.length === 0) {
|
|
83
|
+
if (installedVersions.length === 0 && incorrectExtraPackages.length === 0) {
|
|
54
84
|
return;
|
|
55
85
|
}
|
|
56
86
|
const logOptions = { indent: false, logLevel };
|
|
57
87
|
log_1.Log.warn(logOptions, '-------------');
|
|
58
88
|
log_1.Log.warn(logOptions, 'Version mismatch:');
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
89
|
+
if (hasRemotionMismatch) {
|
|
90
|
+
for (const version of installedVersions) {
|
|
91
|
+
log_1.Log.warn(logOptions, `- On version: ${version}`);
|
|
92
|
+
for (const pkg of (_a = grouped[version]) !== null && _a !== void 0 ? _a : []) {
|
|
93
|
+
log_1.Log.warn(logOptions, ` - ${pkg.pkg} ${chalk_1.chalk.gray(node_path_1.default.relative(remotionRoot, pkg.versionAndPath.path))}`);
|
|
94
|
+
}
|
|
95
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (incorrectExtraPackages.length > 0) {
|
|
99
|
+
log_1.Log.warn(logOptions, 'Extra packages with wrong versions:');
|
|
100
|
+
for (const status of incorrectExtraPackages) {
|
|
101
|
+
const docLink = extra_packages_1.EXTRA_PACKAGES_DOCS[status.pkg];
|
|
102
|
+
log_1.Log.warn(logOptions, ` - ${status.pkg}: installed ${status.installedVersion}, required ${status.requiredVersion}`);
|
|
103
|
+
if (docLink) {
|
|
104
|
+
log_1.Log.warn(logOptions, ` See: ${docLink}`);
|
|
105
|
+
}
|
|
63
106
|
}
|
|
64
107
|
log_1.Log.info({ indent: false, logLevel });
|
|
65
108
|
}
|
|
@@ -71,6 +114,9 @@ const validateVersionsBeforeCommand = async (remotionRoot, logLevel) => {
|
|
|
71
114
|
log_1.Log.warn(logOptions, 'To resolve:');
|
|
72
115
|
log_1.Log.warn(logOptions, '- Make sure your package.json has all Remotion packages pointing to the same version.');
|
|
73
116
|
log_1.Log.warn(logOptions, '- Remove the `^` character in front of a version to pin a package.');
|
|
117
|
+
for (const incorrectPkg of incorrectExtraPackages) {
|
|
118
|
+
log_1.Log.warn(logOptions, `- For ${incorrectPkg.pkg}, install exact version ${incorrectPkg.requiredVersion} (run: npx remotion add ${incorrectPkg.pkg}).`);
|
|
119
|
+
}
|
|
74
120
|
if (!renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose')) {
|
|
75
121
|
log_1.Log.warn(logOptions, '- Run `npx remotion versions --log=verbose` to see the path of the modules resolved.');
|
|
76
122
|
}
|
|
@@ -94,19 +140,49 @@ const versionsCommand = async (remotionRoot, logLevel) => {
|
|
|
94
140
|
}
|
|
95
141
|
log_1.Log.info({ indent: false, logLevel });
|
|
96
142
|
}
|
|
143
|
+
// Check extra packages
|
|
144
|
+
const extraPackagesStatus = await getExtraPackagesStatus(remotionRoot);
|
|
145
|
+
const installedExtraPackages = extraPackagesStatus.filter((status) => status.installedVersion !== null);
|
|
146
|
+
if (installedExtraPackages.length > 0) {
|
|
147
|
+
log_1.Log.info({ indent: false, logLevel }, 'Extra packages:');
|
|
148
|
+
for (const status of installedExtraPackages) {
|
|
149
|
+
const versionStatus = status.isCorrect
|
|
150
|
+
? chalk_1.chalk.green(`${status.installedVersion}`)
|
|
151
|
+
: chalk_1.chalk.red(`${status.installedVersion} (required: ${status.requiredVersion})`);
|
|
152
|
+
log_1.Log.info({ indent: false, logLevel }, `- ${status.pkg}@${versionStatus}`);
|
|
153
|
+
if (status.path) {
|
|
154
|
+
log_1.Log.verbose({ indent: false, logLevel }, ` ${status.path}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
log_1.Log.info({ indent: false, logLevel });
|
|
158
|
+
}
|
|
97
159
|
if (installedVersions.length === 0) {
|
|
98
160
|
log_1.Log.info({ indent: false, logLevel }, 'No Remotion packages found.');
|
|
99
161
|
log_1.Log.info({ indent: false, logLevel }, 'Maybe @remotion/cli is installed globally.');
|
|
100
162
|
log_1.Log.info({ indent: false, logLevel }, 'If you try to render a video that was bundled with a different version, you will get a warning.');
|
|
101
163
|
process.exit(1);
|
|
102
164
|
}
|
|
103
|
-
|
|
104
|
-
|
|
165
|
+
const incorrectExtraPackages = extraPackagesStatus.filter((status) => !status.isCorrect);
|
|
166
|
+
if (installedVersions.length === 1 && incorrectExtraPackages.length === 0) {
|
|
167
|
+
log_1.Log.info({ indent: false, logLevel }, `All packages have the correct version.`);
|
|
105
168
|
}
|
|
106
169
|
else {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
170
|
+
if (installedVersions.length !== 1) {
|
|
171
|
+
log_1.Log.error({ indent: false, logLevel }, 'Version mismatch: Not all Remotion packages have the same version.');
|
|
172
|
+
log_1.Log.info({ indent: false, logLevel }, '- Make sure your package.json has all Remotion packages pointing to the same version.');
|
|
173
|
+
log_1.Log.info({ indent: false, logLevel }, '- Remove the `^` character in front of a version to pin a package.');
|
|
174
|
+
}
|
|
175
|
+
if (incorrectExtraPackages.length > 0) {
|
|
176
|
+
log_1.Log.error({ indent: false, logLevel }, 'Extra packages have incorrect versions:');
|
|
177
|
+
for (const status of incorrectExtraPackages) {
|
|
178
|
+
const docLink = extra_packages_1.EXTRA_PACKAGES_DOCS[status.pkg];
|
|
179
|
+
log_1.Log.info({ indent: false, logLevel }, `- ${status.pkg}: installed ${status.installedVersion}, required ${status.requiredVersion}`);
|
|
180
|
+
if (docLink) {
|
|
181
|
+
log_1.Log.info({ indent: false, logLevel }, ` See: ${docLink}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
log_1.Log.info({ indent: false, logLevel }, `To fix, run: npx remotion add ${incorrectExtraPackages.map((s) => s.pkg).join(' ')}`);
|
|
185
|
+
}
|
|
110
186
|
if (!renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose')) {
|
|
111
187
|
log_1.Log.info({ indent: false, logLevel }, '- Rerun this command with --log=verbose to see the path of the modules resolved.');
|
|
112
188
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/cli"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/cli",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.410",
|
|
7
7
|
"description": "Control Remotion features using the `npx remotion` command",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"sideEffects": false,
|
|
@@ -36,17 +36,17 @@
|
|
|
36
36
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
37
37
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@remotion/bundler": "4.0.
|
|
40
|
-
"@remotion/media-utils": "4.0.
|
|
41
|
-
"@remotion/player": "4.0.
|
|
42
|
-
"@remotion/renderer": "4.0.
|
|
43
|
-
"@remotion/studio-shared": "4.0.
|
|
44
|
-
"@remotion/studio-server": "4.0.
|
|
45
|
-
"@remotion/studio": "4.0.
|
|
39
|
+
"@remotion/bundler": "4.0.410",
|
|
40
|
+
"@remotion/media-utils": "4.0.410",
|
|
41
|
+
"@remotion/player": "4.0.410",
|
|
42
|
+
"@remotion/renderer": "4.0.410",
|
|
43
|
+
"@remotion/studio-shared": "4.0.410",
|
|
44
|
+
"@remotion/studio-server": "4.0.410",
|
|
45
|
+
"@remotion/studio": "4.0.410",
|
|
46
46
|
"dotenv": "9.0.2",
|
|
47
47
|
"minimist": "1.2.6",
|
|
48
48
|
"prompts": "2.4.2",
|
|
49
|
-
"remotion": "4.0.
|
|
49
|
+
"remotion": "4.0.410"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
52
|
"react": ">=16.8.0",
|
|
@@ -57,14 +57,14 @@
|
|
|
57
57
|
"@types/prompts": "^2.4.1",
|
|
58
58
|
"@types/prettier": "^2.7.2",
|
|
59
59
|
"@types/node": "20.12.14",
|
|
60
|
-
"@remotion/zod-types": "4.0.
|
|
61
|
-
"@remotion/tailwind-v4": "4.0.
|
|
62
|
-
"@remotion/enable-scss": "4.0.
|
|
63
|
-
"@remotion/skia": "4.0.
|
|
60
|
+
"@remotion/zod-types": "4.0.410",
|
|
61
|
+
"@remotion/tailwind-v4": "4.0.410",
|
|
62
|
+
"@remotion/enable-scss": "4.0.410",
|
|
63
|
+
"@remotion/skia": "4.0.410",
|
|
64
64
|
"react": "19.2.3",
|
|
65
65
|
"react-dom": "19.2.3",
|
|
66
66
|
"zod": "3.22.3",
|
|
67
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
67
|
+
"@remotion/eslint-config-internal": "4.0.410",
|
|
68
68
|
"eslint": "9.19.0"
|
|
69
69
|
},
|
|
70
70
|
"keywords": [
|