四好公路
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.6 KiB

3 years ago
'use strict';
module.exports = function() {
const name = this.config.name || this.binary.replace('-', ' ');
const firstBig = word => word.charAt(0).toUpperCase() + word.substr(1);
const parts = [];
const groups = {
commands: true,
options: true,
examples: true
};
for (const group in groups) {
if (this.details[group].length > 0) {
continue;
}
groups[group] = false;
}
const optionHandle = groups.options ? '[options] ' : '';
const cmdHandle = groups.commands ? '[command]' : '';
const value = typeof this.config.value === 'string'
? ' ' + this.config.value
: '';
parts.push([
'',
`Usage: ${this.printMainColor(name)} ${this.printSubColor(optionHandle + cmdHandle + value)}`,
''
]);
for (const group in groups) {
if (!groups[group]) {
continue;
}
parts.push(['', firstBig(group) + ':', '', '']);
if (group === 'examples') {
parts.push(this.generateExamples());
} else {
parts.push(this.generateDetails(group));
}
parts.push(['', '']);
}
let output = '';
// And finally, merge and output them
for (const part of parts) {
output += part.join('\n ');
}
if (!groups.commands && !groups.options) {
output = 'No sub commands or options available';
}
const usageFilter = this.config.usageFilter;
// If filter is available, pass usage information through
if (typeof usageFilter === 'function') {
output = usageFilter(output) || output;
}
console.log(output);
// eslint-disable-next-line unicorn/no-process-exit
process.exit();
};