UNPKG

@remotion/cli

Version:

Control Remotion features using the `npx remotion` command

177 lines (176 loc) 8.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.upgradeCommand = exports.getPackagesToUpgrade = void 0; const node_child_process_1 = require("node:child_process"); const renderer_1 = require("@remotion/renderer"); const studio_server_1 = require("@remotion/studio-server"); const catalog_utils_1 = require("./catalog-utils"); 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 getExtraPackageVersionsForRemotionVersion = (remotionVersion) => { try { const output = (0, node_child_process_1.execSync)(`npm view @remotion/studio@${remotionVersion} dependencies --json`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }); const dependencies = JSON.parse(output); const extraVersions = {}; for (const pkg of Object.keys(extra_packages_1.EXTRA_PACKAGES)) { if (dependencies[pkg]) { extraVersions[pkg] = dependencies[pkg]; } } return extraVersions; } catch (_a) { // If we can't fetch the versions, return the default versions from EXTRA_PACKAGES return extra_packages_1.EXTRA_PACKAGES; } }; const getPackagesToUpgrade = ({ depsWithVersions, catalogEntries, targetVersion, extraPackageVersions, }) => { var _a; const allDeps = [ ...Object.keys(depsWithVersions.dependencies), ...Object.keys(depsWithVersions.devDependencies), ...Object.keys(depsWithVersions.optionalDependencies), ...Object.keys(depsWithVersions.peerDependencies), ]; const catalogPackages = new Set(Object.keys(catalogEntries)); const remotionToUpgrade = list_of_remotion_packages_1.listOfRemotionPackages.filter((u) => allDeps.includes(u) || catalogPackages.has(u)); const installedExtraPackages = Object.keys(extra_packages_1.EXTRA_PACKAGES).filter((pkg) => allDeps.includes(pkg) || catalogPackages.has(pkg)); const allPackagesToUpgrade = [ ...remotionToUpgrade, ...installedExtraPackages, ]; const normalPackages = []; const catalogPackagesToUpgrade = []; for (const pkg of allPackagesToUpgrade) { const versionSpec = (0, catalog_utils_1.findVersionSpecifier)(depsWithVersions, pkg); const targetVersionForPkg = (_a = extraPackageVersions[pkg]) !== null && _a !== void 0 ? _a : targetVersion; if ((versionSpec && (0, catalog_utils_1.isCatalogProtocol)(versionSpec)) || (!versionSpec && catalogPackages.has(pkg))) { catalogPackagesToUpgrade.push({ pkg, version: targetVersionForPkg }); } else { normalPackages.push({ pkg, version: targetVersionForPkg }); } } return { normalPackages, catalogPackages: catalogPackagesToUpgrade }; }; exports.getPackagesToUpgrade = getPackagesToUpgrade; const upgradeCommand = async ({ remotionRoot, packageManager, version, logLevel, args, }) => { const depsWithVersions = studio_server_1.StudioServerInternals.getInstalledDependenciesWithVersions(remotionRoot); let targetVersion; if (version) { targetVersion = version; log_1.Log.info({ indent: false, logLevel }, 'Upgrading to specified version: ' + version); } else { targetVersion = await studio_server_1.StudioServerInternals.getLatestRemotionVersion(); log_1.Log.info({ indent: false, logLevel }, 'Newest Remotion version is', targetVersion); } 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 extraPackageVersions = getExtraPackageVersionsForRemotionVersion(targetVersion); const workspaceRoot = (0, catalog_utils_1.findWorkspaceRoot)(remotionRoot); const catalogEntries = workspaceRoot ? (0, catalog_utils_1.getCatalogEntries)(workspaceRoot) : {}; const { normalPackages, catalogPackages } = (0, exports.getPackagesToUpgrade)({ depsWithVersions, catalogEntries, targetVersion, extraPackageVersions, }); if (normalPackages.some(({ pkg }) => pkg in extra_packages_1.EXTRA_PACKAGES) || catalogPackages.some(({ pkg }) => pkg in extra_packages_1.EXTRA_PACKAGES)) { const installedExtraPackages = [ ...normalPackages, ...catalogPackages, ].filter(({ pkg }) => pkg in extra_packages_1.EXTRA_PACKAGES); log_1.Log.info({ indent: false, logLevel }, `Also upgrading extra packages: ${installedExtraPackages.map(({ pkg }) => `${pkg}@${extraPackageVersions[pkg]}`).join(', ')}`); } if (catalogPackages.length > 0) { if (workspaceRoot) { const updatedCatalogEntries = []; for (const { pkg, version: pkgVersion } of catalogPackages) { const didUpdate = (0, catalog_utils_1.updateCatalogEntry)({ workspaceRoot, pkg, newVersion: pkgVersion, }); if (didUpdate) { updatedCatalogEntries.push(`${pkg}@${pkgVersion}`); } else { normalPackages.push({ pkg, version: pkgVersion }); } } if (updatedCatalogEntries.length > 0) { log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.green(`Updated catalog entries: ${updatedCatalogEntries.join(', ')}`)); } } else { for (const catalogPkg of catalogPackages) { normalPackages.push(catalogPkg); } } } const packagesWithVersions = normalPackages.map(({ pkg, version: pkgVersion }) => `${pkg}@${pkgVersion}`); if (packagesWithVersions.length > 0) { 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(' ')}`)); await runPackageManagerCommand({ manager: manager.manager, command, logLevel, }); } if (catalogPackages.length > 0 && packagesWithVersions.length === 0) { log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.gray(`$ ${manager.manager} install`)); await runPackageManagerCommand({ manager: manager.manager, command: ['install'], logLevel, }); } log_1.Log.info({ indent: false, logLevel }, '⏫ Remotion has been upgraded!'); log_1.Log.info({ indent: false, logLevel }, 'https://remotion.dev/changelog'); }; exports.upgradeCommand = upgradeCommand; const runPackageManagerCommand = async ({ manager, command, logLevel, }) => { const task = (0, node_child_process_1.spawn)(manager, command, { env: { ...process.env, ADBLOCK: '1', DISABLE_OPENCOLLECTIVE: '1', }, 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 upgrade Remotion, see logs above'); } else { throw new Error('Failed to upgrade Remotion, run with --log=info info to see logs'); } }); }); };