bpframework-cli
Version:
cli of bpframework
119 lines (100 loc) • 2.89 kB
JavaScript
;
var febs = require('febs');
var List = require('term-list');
var path = require('path');
var init = require('./init');
var version = require('./version');
var pack = require('../package.json');
var utils = require('./utils');
var chalk = require('chalk');
var fs = require('fs');
var commands = {
'version': [version, 'Version'],
'init': [init, 'Initial project'],
}
var LASTUPDATE_STEP = 1000 * 60 * 60 * 10;
var LASTUPDATE_FILE = path.join(__dirname, 'lastupdate');
var lastupdate = (new Date().getTime() - LASTUPDATE_STEP).toString();
if (febs.file.fileIsExist(LASTUPDATE_FILE)) {
lastupdate = fs.readFileSync(LASTUPDATE_FILE, 'utf8');
}
function checkoutVersion(cbFinish) {
febs.utils.execCommand((process.platform === 'win32'? 'npm.cmd': 'npm'), ['view', 'bpframework-cli', 'version', '--json'], (err, stdout, stderr) => {
if (err) {
console.error(err);
if ('n' == utils.question(chalk.red('[Error] checkout latest version! continue? (Y/n)'), (answer) => {
return answer == 'Y' || answer == 'n';
})) {
process.exit(0);
} else {
stdout = '"' + febs.string.trim(pack.version) + '"';
}
}
if (febs.string.trim(stdout) != '"' + febs.string.trim(pack.version) + '"') {
console.log('[New version available] To run: ' + chalk.green('npm i bpframework-cli@latest -g') + ' in terminal');
if ('Y' == utils.question('[Warn] upgrade now? (Y/n)', (answer) => {
return answer == 'Y' || answer == 'n';
})) {
console.log("upgrading...")
febs.utils.execCommand("npm", ["i", "bpframework-cli@latest", "-g"], (err, stdout, stderr) => {
if (err) {
console.error(stderr);
}
else {
console.log(stdout);
}
process.exit(0);
});
}
else {
cbFinish();
}
}
else {
cbFinish();
}
});
}
function runDo() {
var args = process.argv.slice(2);
if (args.length === 0) {
printUsage();
}
var command = commands[args[0]];
if (!command) {
console.error('Command `%s` unrecognized', args[0]);
printUsage();
return;
}
command[0].done(args);
}
/**
* Parses the command line and runs a command of the CLI.
*/
function run() {
let step = new Date().getTime() - Number(lastupdate);
if (Number.isInteger(step) && step < LASTUPDATE_STEP) {
runDo();
}
else {
fs.writeFileSync(LASTUPDATE_FILE, new Date().getTime().toString());
checkoutVersion(runDo);
}
}
function printUsage() {
console.log([
'Usage: bpframework <command>',
'',
'Commands:'
].concat(Object.keys(commands).map(function(name) {
return ' - ' + name + ': ' + commands[name][1];
})).join('\n'));
process.exit(1);
}
if (require.main === module) {
run();
}
module.exports = {
run: run,
};