UNPKG

jovo-cli

Version:
141 lines 6.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const command_1 = require("@oclif/command"); const chalk_1 = __importDefault(require("chalk")); const child_process_1 = require("child_process"); const fs_extra_1 = require("fs-extra"); const jovo_cli_core_1 = require("jovo-cli-core"); const Listr = require("listr"); const path_1 = require("path"); const rimraf_1 = __importDefault(require("rimraf")); const util_1 = require("util"); const utils_1 = require("../utils"); const Prompts_1 = require("../utils/Prompts"); const execAsync = util_1.promisify(child_process_1.exec); const rimrafAsync = util_1.promisify(rimraf_1.default); class Update extends command_1.Command { async run() { try { this.parse(Update); this.log(`\n jovo update: ${Update.description}`); this.log(chalk_1.default.grey(' >> Learn more: https://jovo.tech/docs/cli/update\n')); const tasks = new Listr([], { renderer: new utils_1.JovoCliRenderer(), collapse: false, }); const project = jovo_cli_core_1.getProject(); await project.init(); const packageVersions = await utils_1.getPackageVersionsNpm(/^jovo\-/); const outOfDatePackages = []; if (Object.keys(packageVersions).length > 0) { this.log('Jovo packages of current project:'); for (const [name, pkg] of Object.entries(packageVersions)) { if (pkg.local !== pkg.npm) { outOfDatePackages.push({ dev: pkg.dev, inPackageJson: pkg.inPackageJson, name, }); } if (!pkg.inPackageJson) { continue; } let text = ` ${name} ${pkg.dev ? '(dev)' : ''}: ${pkg.local}`; if (pkg.local !== pkg.npm) { text += chalk_1.default.grey(` -> ${pkg.npm}`); } this.log(text); } } if (outOfDatePackages.length === 0) { this.log('\n\nAll packages are already up to date!\n'); return; } const { update } = await Prompts_1.promptUpdateVersions(outOfDatePackages.filter((pkg) => pkg.inPackageJson).length); if (update !== Prompts_1.ANSWER_UPDATE) { return; } let npmUpdateOutput = ''; for (let i = 0; i < outOfDatePackages.length; i++) { outOfDatePackages[i].name = outOfDatePackages[i].name + '@latest'; } tasks.add({ title: 'Updating Jovo packages...', task: async () => { const prodPkgsSave = outOfDatePackages .filter((pkg) => !pkg.dev && pkg.inPackageJson) .map((pkg) => pkg.name); const prodPkgsNoSave = outOfDatePackages .filter((pkg) => !pkg.dev && !pkg.inPackageJson) .map((pkg) => pkg.name); const devPkgsSave = outOfDatePackages .filter((pkg) => pkg.dev && pkg.inPackageJson) .map((pkg) => pkg.name); const devPkgsNoSave = outOfDatePackages .filter((pkg) => !pkg.dev && !pkg.inPackageJson) .map((pkg) => pkg.name); const updateCommands = []; if (prodPkgsSave.length > 0) { updateCommands.push(`npm install ${prodPkgsSave.join(' ')} --loglevel=error`); } if (prodPkgsSave.length > 0) { updateCommands.push(`npm install ${prodPkgsNoSave.join(' ')} --no-save --loglevel=error`); } if (devPkgsSave.length > 0) { updateCommands.push(`npm install ${devPkgsSave.join(' ')} --save-dev --loglevel=error`); } if (devPkgsNoSave.length > 0) { updateCommands.push(`npm install ${devPkgsNoSave.join(' ')} --no-save --loglevel=error`); } const updateCommand = updateCommands.join('&&'); try { const { stdout, stderr } = await execAsync(updateCommand, { cwd: project.getProjectPath(), }); npmUpdateOutput = stdout; if (stderr) { throw new jovo_cli_core_1.JovoCliError(stderr, 'jovo-cli'); } } catch (err) { if (err instanceof jovo_cli_core_1.JovoCliError) { throw err; } throw new jovo_cli_core_1.JovoCliError(err.message, 'jovo-cli'); } }, }); const bundleDirectoryPath = project.getZipBundleDirectoryPath(); try { fs_extra_1.statSync(bundleDirectoryPath); const bundleNodeDirectoryPath = path_1.join(bundleDirectoryPath, 'node_modules'); fs_extra_1.statSync(bundleNodeDirectoryPath); tasks.add({ title: 'Deleting "node_modules" in bundle directory...', async task() { await rimrafAsync(bundleNodeDirectoryPath); }, }); } catch (err) { } await tasks.run(); this.log(); this.log('Update completed.'); this.log(); this.log('Update output: '); this.log('-------------------'); npmUpdateOutput ? this.log(npmUpdateOutput) : this.log('Everything is up to date!'); this.log('Changelog: https://raw.githubusercontent.com/jovotech/jovo-framework/master/CHANGELOG.md'); } catch (err) { this.error(`There was a problem:\n${err}`); } } } exports.Update = Update; Update.description = 'Updates the Jovo modules in project to latest versions.'; Update.examples = ['jovo update']; //# sourceMappingURL=update.js.map