UNPKG

1.52 kBJavaScriptView Raw
1const {
2 faillogAfter,
3 logBoth,
4} = require('./log');
5
6const {
7 yellow,
8} = require('./colorStr');
9
10// 改写 Command.prototype 的一些原型方法
11function enhance(program, methodName, log) {
12 program.Command.prototype[methodName] = (...args) => {
13 if (methodName === 'unknownOption' && this._allowUnknownOption) {
14 return;
15 }
16 program.outputHelp();
17 faillogAfter(`${log(...args)}`);
18 process.exit(0);
19 };
20}
21
22module.exports = function tipEnhance(prog, cmdName) {
23 /**
24 * 对 --help 事件,输出多一些信息
25 */
26 prog.on('--help', () => {
27 logBoth(`Run ${yellow(`${cmdName} <command> --help`)} for detailed usage of given command.`);
28 });
29
30 /**
31 * 给提示的部分字串加上颜色
32 */
33 enhance(
34 prog,
35 'missingArgument',
36 argName => `Missing required argument ${yellow(`<${argName}>`)}`,
37 );
38
39 enhance(
40 prog,
41 'unknownOption',
42 optionName => `Unknown option ${yellow(optionName)}`,
43 );
44
45 enhance(
46 prog,
47 'optionMissingArgument',
48 (option, flag) => `Missing required argument for option ${yellow(option.flags) + (flag ? `, got ${yellow(flag)}` : '')}`,
49 );
50
51 /**
52 * 对于输入的未知的子命令,输出帮助信息 + 错误提示
53 */
54 prog
55 .arguments('<command>')
56 .action((cmd) => {
57 prog.outputHelp();
58 faillogAfter(`Unknown command ${yellow(cmd)}`);
59 });
60
61 /**
62 * 对于无任何参数的的情形,输出帮助信息
63 */
64 if (!process.argv.slice(2).length) {
65 prog.outputHelp();
66 }
67};