1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var common_1 = require("./common");
|
4 | var argv = common_1.minimist(process.argv.slice(2));
|
5 | var maxStringLength = function (strings) {
|
6 | return Math.max.apply(null, strings.map(function (item) { return item.length; }));
|
7 | };
|
8 | function 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 | }
|
38 | function 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 | }
|
46 | function 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 | }
|
56 | function 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 | }
|
71 | function 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 | }
|
81 | exports.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 |
|
\ | No newline at end of file |