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.

71 lines
2.2 KiB

2 years ago
var template = require('./template');
var each = require('./each');
var map = require('./map');
var rpad = require('./rpad');
var ansiColor = require('./ansiColor');
var toArr = require('./toArr');
var cloneDeep = require('./cloneDeep');
var strWidth = require('./strWidth');
var max = require('./max');
exports = function(data) {
data = cloneDeep(data);
data.usage = toArr(data.usage);
if (data.commands) {
var cmdNameWidths = map(data.commands, function(command) {
return strWidth(command.name);
});
data.maxNameWidth = max.apply(null, cmdNameWidths);
return helpTpl(data);
}
each(data.options, function(option) {
option.name =
(option.shorthand ? '-' + option.shorthand + ', ' : ' ') +
'--' +
option.name;
});
var optNameWidths = map(data.options, function(option) {
return strWidth(option.name);
});
data.maxNameWidth = max.apply(null, optNameWidths);
return cmdTpl(data);
};
var tplUtil = {
each: each
};
tplUtil.rpad = function(text, len) {
return rpad(text, len, ' ');
};
each(['yellow', 'green', 'cyan', 'red', 'white', 'magenta'], function(color) {
tplUtil[color] = function(text) {
return ansiColor[color](text);
};
});
var cmdTpl = template(
[
'Usage:',
'',
"<% util.each(usage, function (value) { %> <%=util.cyan(name)%> <%=value%><%='\\n'%><% }); %>",
'<% if (options) { %>Options:',
'',
"<% util.each(options, function (option) { %> <%=util.yellow(util.rpad(option.name, maxNameWidth))%> <%=option.desc%><%='\\n'%><% }); %>",
'<% } %>Description:',
'',
' <%=desc%>'
].join('\n'),
tplUtil
);
var helpTpl = template(
[
'Usage:',
'',
"<% util.each(usage, function (value) { %> <%=util.cyan(name)%> <%=value%><%='\\n'%><% }); %>",
'Commands:',
'',
"<% util.each(commands, function (command) { %> <%=util.yellow(util.rpad(command.name, maxNameWidth))%> <%=command.desc%><%='\\n'%><% }); %>",
"Run '<%=util.cyan(name + ' help <command>')%>' for more information on a specific command"
].join('\n'),
tplUtil
);
module.exports = exports;