UNPKG

4.75 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var common_1 = require("./common");
4var argv = common_1.minimist(process.argv.slice(2));
5var maxStringLength = function (strings) {
6 return Math.max.apply(null, strings.map(function (item) { return item.length; }));
7};
8function printCommandHelp(name, command) {
9 var args = Object.keys(command.args || {}).map(function (k) { return ({
10 name: k,
11 description: command.args ? command.args[k] : '',
12 }); });
13 var params = args.filter(function (item) { return !item.name.startsWith('-'); });
14 var flags = args.filter(function (item) { return item.name.startsWith('-'); });
15 var paramsDisplay = params.map(function (p) { return p.name; }).join(', ');
16 var maxArgLength = maxStringLength(args.map(function (item) { return item.name; }));
17 var logArg = function (arg, color) {
18 var argName = ("" + arg.name + ' '.repeat(maxArgLength)).substr(0, maxArgLength);
19 common_1.log.info(" " + common_1.log[color](argName) + " " + arg.description);
20 };
21 common_1.log.info();
22 common_1.log.info("Usage: " + common_1.log.blue(name) + " " + common_1.log.magenta(paramsDisplay));
23 common_1.log.info.gray('------------------------------------------------------------');
24 common_1.log.info("" + (command.description || 'No description.'));
25 common_1.log.info();
26 if (params.length > 0) {
27 common_1.log.info.gray('Parameters:');
28 params.forEach(function (arg) { return logArg(arg, 'magenta'); });
29 common_1.log.info();
30 }
31 if (flags.length > 0) {
32 common_1.log.info.gray('Flags:');
33 flags.forEach(function (arg) { return logArg(arg, 'cyan'); });
34 common_1.log.info();
35 }
36 common_1.log.info();
37}
38function toDisplayName(command) {
39 var alias = command.alias, name = command.name;
40 var displayName = name;
41 if (alias.length > 0) {
42 displayName = displayName + " (" + alias.join(',') + ")";
43 }
44 return displayName;
45}
46function printCommands(commands, maxNameLength) {
47 var commandNames = Object.keys(commands).sort();
48 commandNames.forEach(function (name) {
49 var command = commands[name];
50 var description = command.description;
51 var displayName = toDisplayName(command);
52 var paddedName = ("" + displayName + ' '.repeat(maxNameLength)).substr(0, maxNameLength);
53 common_1.log.info(" " + common_1.log.blue(paddedName) + " " + common_1.log.gray(description || 'No description.'));
54 });
55}
56function printGroups(commands) {
57 var displayNames = Object.keys(commands).map(function (k) {
58 return toDisplayName(commands[k]);
59 });
60 var maxNameLength = maxStringLength(displayNames);
61 var groups = common_1.toGroupedCommands(commands);
62 Object.keys(groups).forEach(function (group) {
63 if (group !== common_1.constants.DEFAULT_GROUP) {
64 common_1.log.info();
65 common_1.log.info.gray(" " + group);
66 common_1.log.info();
67 }
68 printCommands(groups[group], maxNameLength);
69 });
70}
71function findCommand(name, commands) {
72 name = name || '';
73 name = name.trim();
74 if (commands[name]) {
75 return commands[name];
76 }
77 return Object.keys(commands)
78 .map(function (key) { return commands[key]; })
79 .find(function (cmd) { return cmd.alias.includes(name); });
80}
81exports.default = (function (commands) {
82 if (commands === void 0) { commands = {}; }
83 var commandName = argv._[0];
84 var command = findCommand(commandName, commands);
85 var helpRequested = argv.h === true || argv.help === true;
86 if (command === undefined) {
87 common_1.log.info();
88 common_1.log.info.cyan('Commands:\n');
89 printGroups(commands);
90 common_1.log.info();
91 common_1.log.info();
92 return;
93 }
94 else if (command && helpRequested) {
95 printCommandHelp(commandName, command);
96 }
97 else {
98 var args = argv;
99 args._.shift();
100 var commandArgs = {
101 params: args._,
102 options: args,
103 };
104 delete args._;
105 if (command.validate && common_1.R.is(Function, command.validate)) {
106 commandArgs = command.validate(commandArgs);
107 }
108 if (commandArgs && common_1.R.is(Function, command.action)) {
109 try {
110 var result = command.action(commandArgs);
111 if (result && common_1.R.is(Function, result.catch)) {
112 result.catch(function (err) { return common_1.log.error(err, '\n'); });
113 }
114 }
115 catch (err) {
116 common_1.log.error(err, '\n');
117 }
118 }
119 }
120});
121//# sourceMappingURL=command.js.map
\No newline at end of file