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.
73 lines
1.6 KiB
73 lines
1.6 KiB
'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();
|
|
};
|
|
|