@remotion/cli
Version:
Control Remotion features using the `npx remotion` command
117 lines (116 loc) • 6 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.versionsCommand = exports.validateVersionsBeforeCommand = exports.VERSIONS_COMMAND = void 0;
const renderer_1 = require("@remotion/renderer");
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const chalk_1 = require("./chalk");
const list_of_remotion_packages_1 = require("./list-of-remotion-packages");
const log_1 = require("./log");
const parse_command_line_1 = require("./parse-command-line");
const resolve_from_1 = require("./resolve-from");
const getVersion = async (remotionRoot, p) => {
try {
const remotionPkgJson = (0, resolve_from_1.resolveFrom)(remotionRoot, `${p}/package.json`);
const file = await node_fs_1.default.promises.readFile(remotionPkgJson, 'utf-8');
const packageJson = JSON.parse(file);
return { version: packageJson.version, path: remotionPkgJson };
}
catch (_a) {
return null;
}
};
const groupBy = (vals) => {
const groups = {};
for (const [pkg, version] of vals) {
if (!groups[version.version]) {
groups[version.version] = [];
}
groups[version.version].push({
pkg,
versionAndPath: version,
});
}
return groups;
};
const getAllVersions = async (remotionRoot) => {
return (await Promise.all(list_of_remotion_packages_1.listOfRemotionPackages.map(async (p) => [p, await getVersion(remotionRoot, p)]))).filter(([, version]) => version);
};
exports.VERSIONS_COMMAND = 'versions';
const validateVersionsBeforeCommand = async (remotionRoot, logLevel) => {
var _a;
const versions = await getAllVersions(remotionRoot);
const grouped = groupBy(versions);
const installedVersions = Object.keys(grouped);
if (installedVersions.length === 1) {
return;
}
// Could be a global install of @remotion/cli.
// If you render a bundle with a different version, it will give a warning accordingly.
if (installedVersions.length === 0) {
return;
}
const logOptions = { indent: false, logLevel };
log_1.Log.warn(logOptions, '-------------');
log_1.Log.warn(logOptions, 'Version mismatch:');
for (const version of installedVersions) {
log_1.Log.warn(logOptions, `- On version: ${version}`);
for (const pkg of (_a = grouped[version]) !== null && _a !== void 0 ? _a : []) {
log_1.Log.warn(logOptions, ` - ${pkg.pkg} ${chalk_1.chalk.gray(node_path_1.default.relative(remotionRoot, pkg.versionAndPath.path))}`);
}
log_1.Log.info({ indent: false, logLevel });
}
log_1.Log.warn(logOptions, 'You may experience breakages such as:');
log_1.Log.warn(logOptions, '- React context and hooks not working');
log_1.Log.warn(logOptions, '- Type errors and feature incompatibilities');
log_1.Log.warn(logOptions, '- Failed renders and unclear errors');
log_1.Log.warn(logOptions);
log_1.Log.warn(logOptions, 'To resolve:');
log_1.Log.warn(logOptions, '- Make sure your package.json has all Remotion packages pointing to the same version.');
log_1.Log.warn(logOptions, '- Remove the `^` character in front of a version to pin a package.');
if (!renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose')) {
log_1.Log.warn(logOptions, '- Run `npx remotion versions --log=verbose` to see the path of the modules resolved.');
}
log_1.Log.warn(logOptions, '-------------');
log_1.Log.info({ indent: false, logLevel });
};
exports.validateVersionsBeforeCommand = validateVersionsBeforeCommand;
const versionsCommand = async (remotionRoot, logLevel) => {
var _a;
(0, parse_command_line_1.parseCommandLine)();
const versions = await getAllVersions(remotionRoot);
const grouped = groupBy(versions);
const installedVersions = Object.keys(grouped);
log_1.Log.info({ indent: false, logLevel }, `Node.JS = ${process.version}, OS = ${process.platform}`);
log_1.Log.info({ indent: false, logLevel });
for (const version of installedVersions) {
log_1.Log.info({ indent: false, logLevel }, `On version: ${version}`);
for (const pkg of (_a = grouped[version]) !== null && _a !== void 0 ? _a : []) {
log_1.Log.info({ indent: false, logLevel }, `- ${pkg.pkg}`);
log_1.Log.verbose({ indent: false, logLevel }, ` ${(0, resolve_from_1.resolveFrom)(remotionRoot, `${pkg.pkg}/package.json`)}`);
}
log_1.Log.info({ indent: false, logLevel });
}
if (installedVersions.length === 0) {
log_1.Log.info({ indent: false, logLevel }, 'No Remotion packages found.');
log_1.Log.info({ indent: false, logLevel }, 'Maybe @remotion/cli is installed globally.');
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.');
process.exit(1);
}
if (installedVersions.length === 1) {
log_1.Log.info({ indent: false, logLevel }, `✅ Great! All packages have the same version.`);
}
else {
log_1.Log.error({ indent: false, logLevel }, 'Version mismatch: Not all Remotion packages have the same version.');
log_1.Log.info({ indent: false, logLevel }, '- Make sure your package.json has all Remotion packages pointing to the same version.');
log_1.Log.info({ indent: false, logLevel }, '- Remove the `^` character in front of a version to pin a package.');
if (!renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose')) {
log_1.Log.info({ indent: false, logLevel }, '- Rerun this command with --log=verbose to see the path of the modules resolved.');
}
process.exit(1);
}
};
exports.versionsCommand = versionsCommand;