@nodearch/command
Version:
NodeArch Command Toolkit
55 lines • 2.32 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { Logger, Service } from '@nodearch/core';
import inquirer from 'inquirer';
let CommandParser = class CommandParser {
constructor(logger) {
this.logger = logger;
}
getYargsCommands(commands) {
return commands.map(cmd => {
const { handler, questions, ...commandOptions } = cmd;
const handlerFn = (args) => this.handlerFactory(cmd, args);
if (commandOptions.builder && typeof commandOptions.builder === 'function') {
commandOptions.builder = commandOptions.builder.bind(cmd);
}
return {
...commandOptions,
handler: handlerFn
};
});
}
async handlerFactory(command, args) {
try {
const validQuestions = [];
let answers;
if (command.questions) {
for (const question of command.questions) {
if (!args || (question.name && !args[question.name]))
validQuestions.push(question);
}
}
if (validQuestions)
answers = await inquirer.prompt(validQuestions);
const data = { ...args, ...answers };
await command.handler.bind(command)(data);
}
catch (e) {
this.logger.error(e);
process.exit(1);
}
}
};
CommandParser = __decorate([
Service(),
__metadata("design:paramtypes", [Logger])
], CommandParser);
export { CommandParser };
//# sourceMappingURL=command-parser.js.map