168 lines
7.0 KiB
JavaScript
168 lines
7.0 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.addCommand = void 0;
|
|
const renderer_1 = require("@remotion/renderer");
|
|
const studio_server_1 = require("@remotion/studio-server");
|
|
const node_child_process_1 = require("node:child_process");
|
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
const chalk_1 = require("./chalk");
|
|
const extra_packages_1 = require("./extra-packages");
|
|
const list_of_remotion_packages_1 = require("./list-of-remotion-packages");
|
|
const log_1 = require("./log");
|
|
const resolve_from_1 = require("./resolve-from");
|
|
const getInstalledVersion = (remotionRoot, pkg) => {
|
|
try {
|
|
const pkgJsonPath = (0, resolve_from_1.resolveFrom)(remotionRoot, `${pkg}/package.json`);
|
|
const file = node_fs_1.default.readFileSync(pkgJsonPath, 'utf-8');
|
|
const packageJson = JSON.parse(file);
|
|
return packageJson.version;
|
|
}
|
|
catch (_a) {
|
|
return null;
|
|
}
|
|
};
|
|
const addCommand = async ({ remotionRoot, packageManager, packageNames, logLevel, args, }) => {
|
|
// Validate that all package names are Remotion packages
|
|
const invalidPackages = packageNames.filter((pkg) => !list_of_remotion_packages_1.listOfRemotionPackages.includes(pkg) && !extra_packages_1.EXTRA_PACKAGES[pkg]);
|
|
if (invalidPackages.length > 0) {
|
|
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(', ')}.`);
|
|
}
|
|
const { dependencies, devDependencies, optionalDependencies, peerDependencies, } = studio_server_1.StudioServerInternals.getInstalledDependencies(remotionRoot);
|
|
// Check if packages are already installed
|
|
const allDeps = [
|
|
...dependencies,
|
|
...devDependencies,
|
|
...optionalDependencies,
|
|
...peerDependencies,
|
|
];
|
|
const alreadyInstalled = [];
|
|
const toInstall = [];
|
|
const toUpgrade = [];
|
|
for (const pkg of packageNames) {
|
|
const isInstalled = allDeps.includes(pkg);
|
|
const requiredVersion = extra_packages_1.EXTRA_PACKAGES[pkg];
|
|
if (!isInstalled) {
|
|
toInstall.push(pkg);
|
|
}
|
|
else if (requiredVersion) {
|
|
// For extra packages, check if the version is correct
|
|
const installedVersion = getInstalledVersion(remotionRoot, pkg);
|
|
if (installedVersion !== requiredVersion) {
|
|
toUpgrade.push({
|
|
pkg,
|
|
from: installedVersion !== null && installedVersion !== void 0 ? installedVersion : 'unknown',
|
|
to: requiredVersion,
|
|
});
|
|
toInstall.push(pkg);
|
|
}
|
|
else {
|
|
alreadyInstalled.push(pkg);
|
|
}
|
|
}
|
|
else {
|
|
alreadyInstalled.push(pkg);
|
|
}
|
|
}
|
|
// Log already installed packages
|
|
for (const pkg of alreadyInstalled) {
|
|
log_1.Log.info({ indent: false, logLevel }, `○ ${pkg} ${chalk_1.chalk.gray('(already installed)')}`);
|
|
}
|
|
// Log packages that will be upgraded
|
|
for (const { pkg, from, to } of toUpgrade) {
|
|
log_1.Log.info({ indent: false, logLevel }, `↑ ${pkg} ${chalk_1.chalk.yellow(`${from} → ${to}`)}`);
|
|
}
|
|
// If nothing to install, return early
|
|
if (toInstall.length === 0) {
|
|
return;
|
|
}
|
|
const installedRemotionPackages = list_of_remotion_packages_1.listOfRemotionPackages.filter((pkg) => allDeps.includes(pkg));
|
|
// Get the version from the first installed Remotion package
|
|
const packageJsonPath = `${remotionRoot}/node_modules/${installedRemotionPackages[0]}/package.json`;
|
|
let targetVersion = null;
|
|
if (installedRemotionPackages.length > 0) {
|
|
try {
|
|
const packageJson = require(packageJsonPath);
|
|
targetVersion = packageJson.version;
|
|
const packageList = toInstall.length === 1
|
|
? toInstall[0]
|
|
: `${toInstall.length} packages (${toInstall.join(', ')})`;
|
|
log_1.Log.info({ indent: false, logLevel }, `Installing ${packageList}`);
|
|
}
|
|
catch (err) {
|
|
throw new Error(`Could not determine version of installed Remotion packages: ${err.message}`);
|
|
}
|
|
}
|
|
else {
|
|
// If no Remotion packages are installed, we can only install extra packages
|
|
const notExtraPackages = toInstall.filter((pkg) => !extra_packages_1.EXTRA_PACKAGES[pkg]);
|
|
if (notExtraPackages.length > 0) {
|
|
throw new Error('No Remotion packages found in your project. Install Remotion first.');
|
|
}
|
|
}
|
|
const manager = studio_server_1.StudioServerInternals.getPackageManager({
|
|
remotionRoot,
|
|
packageManager,
|
|
dirUp: 0,
|
|
logLevel,
|
|
});
|
|
if (manager === 'unknown') {
|
|
throw new Error(`No lockfile was found in your project (one of ${studio_server_1.StudioServerInternals.lockFilePaths
|
|
.map((p) => p.path)
|
|
.join(', ')}). Install dependencies using your favorite manager!`);
|
|
}
|
|
const packagesWithVersions = toInstall.map((pkg) => {
|
|
if (extra_packages_1.EXTRA_PACKAGES[pkg]) {
|
|
return `${pkg}@${extra_packages_1.EXTRA_PACKAGES[pkg]}`;
|
|
}
|
|
return `${pkg}@${targetVersion}`;
|
|
});
|
|
const command = studio_server_1.StudioServerInternals.getInstallCommand({
|
|
manager: manager.manager,
|
|
packages: packagesWithVersions,
|
|
version: '',
|
|
additionalArgs: args,
|
|
});
|
|
log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray(`$ ${manager.manager} ${command.join(' ')}`));
|
|
const task = (0, node_child_process_1.spawn)(manager.manager, command, {
|
|
env: {
|
|
...process.env,
|
|
ADBLOCK: '1',
|
|
DISABLE_OPENCOLLECTIVE: '1',
|
|
npm_config_loglevel: 'error',
|
|
},
|
|
stdio: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'info')
|
|
? 'inherit'
|
|
: 'ignore',
|
|
});
|
|
await new Promise((resolve) => {
|
|
task.on('close', (code) => {
|
|
if (code === 0) {
|
|
resolve();
|
|
}
|
|
else if (renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'info')) {
|
|
throw new Error(`Failed to install packages, see logs above`);
|
|
}
|
|
else {
|
|
throw new Error(`Failed to install packages, run with --log=info to see logs`);
|
|
}
|
|
});
|
|
});
|
|
const upgradedPkgs = new Set(toUpgrade.map((u) => u.pkg));
|
|
for (const pkg of toInstall) {
|
|
if (upgradedPkgs.has(pkg)) {
|
|
// Already logged as upgrade
|
|
continue;
|
|
}
|
|
if (extra_packages_1.EXTRA_PACKAGES[pkg]) {
|
|
log_1.Log.info({ indent: false, logLevel }, `+ ${pkg}@${extra_packages_1.EXTRA_PACKAGES[pkg]}`);
|
|
}
|
|
else {
|
|
log_1.Log.info({ indent: false, logLevel }, `+ ${pkg}@${targetVersion}`);
|
|
}
|
|
}
|
|
};
|
|
exports.addCommand = addCommand;
|