jovo-cli
Version:
jovo command line tool (beta)
141 lines • 6.63 kB
JavaScript
;
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