po-cli
Version:
po | short commands for polymer-cli
127 lines (94 loc) • 2.62 kB
JavaScript
const pjson = require('../package.json');
const { exec } = require('child_process');
const readline = require('readline');
const rawArgs = process.argv.slice(2)
const argumentsMap = {
doc: 'analyze > analysis.json',
s: 'serve',
b: 'build',
in: 'init',
inst: 'install',
t: 'test',
l: 'lint'
};
const utilityArgs = [
'-v',
'--verbose',
'-h',
'--help',
'--version',
'--desc'
];
const semanticArgument = rawArgs[0];
const polymerCommand = argumentsMap[semanticArgument];
const polymerArguments = rawArgs.splice(1);
let targetCommands = [];
if (semanticArgument === '--version') {
console.log(pjson.version)
return;
}
if (semanticArgument === '--desc') {
console.log(pjson.description)
return;
}
if (utilityArgs.indexOf(semanticArgument) !== -1) {
showHelpInfo();
return;
}
if (!polymerCommand || !polymerArguments) {
console.log('Ошибка команды...');
showHelpInfo();
return;
} else {
targetCommands = 'polymer ' + [polymerCommand, ...polymerArguments].join(' ');
}
const child = exec(targetCommands, (error, stdout, stderr) => {
if (error && polymerCommand !== 'lint') {
console.log(error)
throw error;
}
if (stdout) console.log(stdout);
if (stderr) console.log(stderr);
});
child.stdin.setEncoding('utf-8');
process.stdin.pipe(child.stdin);
child.stdout.pipe(process.stdout);
readline.emitKeypressEvents(process.stdin);
if (semanticArgument !== 's') {
process.stdin.setRawMode(true);
}
process.stdin.on('keypress', (a, key) => {
if (key.ctrl && key.name === 'c') {
child.kill();
process.exit();
}
});
child.stdout.on('end', () => {
setTimeout(() => {
process.exit();
}, 100);
});
function showHelpInfo() {
let spaceNumber = 0;
console.log('Available commands: \n');
console.log('-------------');
console.log(`${pjson.description}\nверс. ${pjson.version}\n`);
utilityArgs.forEach((el) => { console.log(el) })
console.log('\n-------------\n');
console.log('Polymer 2.0\n');
for (let prop in argumentsMap) {
if (spaceNumber < prop.length) spaceNumber = prop.length;
}
for (let prop in argumentsMap) {
currentSpaceNumder = spaceNumber - prop.length;
console.log(`${prop}${createSpaceString(currentSpaceNumder)} - polymer ${argumentsMap[prop]}`);
}
function createSpaceString(spaceNumber) {
let str = '';
for (let i = 0; i < spaceNumber; i++) {
str += ' ';
}
return str;
}
}