ern-api-gen
Version:
Electrode Native API generator
109 lines • 4.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const camelCase_1 = __importDefault(require("lodash/camelCase"));
const CommandUsage_1 = require("./CommandUsage");
const Help_1 = require("./Help");
const CommandErrorHandler_1 = require("./CommandErrorHandler");
class Cli {
static builder(name) {
const opts = {
commandErrorHandler: CommandErrorHandler_1.CommandErrorHandler,
commandHelp: Help_1.Help,
commandUsage: CommandUsage_1.CommandUsage,
name,
};
const w = {
withDescription(description) {
opts.description = description;
return w;
},
withDefaultCommand(command) {
opts.defaultCommand = command;
return w;
},
withCommands(...commands) {
opts.commands = commands;
return w;
},
withCommandsHelp(commandHelp) {
opts.commandHelp = commandHelp;
return w;
},
withCommandUsage(commandUsage) {
opts.commandUsage = commandUsage;
return w;
},
withCommandErrorHandler(errorHandler) {
opts.commandErrorHandler = errorHandler;
return w;
},
build() {
return {
parse(args = []) {
const isHelp = args.indexOf('-h') > -1 || args.indexOf('--help') > -1;
const values = {};
let Command = opts.defaultCommand;
for (const c of opts.commands) {
if (c.Usage.name === args[0]) {
Command = c;
break;
}
}
if (!Command) {
new opts.commandErrorHandler(values, opts, Command).handle(args.length ? `Unknown Command ${args[0]}` : 'No Command given');
}
if (isHelp && Command === opts.defaultCommand) {
return new opts.commandHelp(values, opts).run();
}
for (const opt of Command.Usage.options) {
let value;
let current;
NAMES: for (const n of opt.name) {
for (let i = 0, l = args.length; i < l; i++) {
if (args[i] === n) {
value = args[++i];
current = opt;
break NAMES;
}
const eqStr = `${n}=`;
if (args[i].startsWith(eqStr)) {
value = args[i].substring(eqStr.length);
current = opt;
break NAMES;
}
}
}
if (current) {
const property = opt.property || camelCase_1.default(opt.title);
if (current.hasArg) {
if (value == null) {
return new opts.commandErrorHandler(values, opts, Command).handle(`${name} requires a value`);
}
values[property] = value;
}
else {
values[property] = true;
}
}
else {
if (opt.required) {
return new opts.commandErrorHandler(values, opts, Command).handle(`${args[0]} requires a option for ${opt.description}`);
}
}
}
if (isHelp) {
return new opts.commandUsage(values, opts, Command).run();
}
return new Command(values, opts).run();
},
};
},
};
return w;
}
}
exports.Cli = Cli;
//# sourceMappingURL=Cli.js.map