mirror of
https://github.com/balena-io/balena-cli.git
synced 2024-12-22 15:02:22 +00:00
f8470287c1
Only list primary commands by default, unless a `--verbose` option is passed to list the additional ones. Fixes: https://github.com/resin-io/resin-cli/issues/101
116 lines
3.2 KiB
JavaScript
116 lines
3.2 KiB
JavaScript
(function() {
|
|
var _, capitano, columnify, command, general, indent, parse, print;
|
|
|
|
_ = require('lodash');
|
|
|
|
_.str = require('underscore.string');
|
|
|
|
capitano = require('capitano');
|
|
|
|
columnify = require('columnify');
|
|
|
|
parse = function(object) {
|
|
return _.object(_.map(object, function(item) {
|
|
var signature;
|
|
if (item.alias != null) {
|
|
signature = item.toString();
|
|
} else {
|
|
signature = item.signature.toString();
|
|
}
|
|
return [signature, item.description];
|
|
}));
|
|
};
|
|
|
|
indent = function(text) {
|
|
text = _.map(_.str.lines(text), function(line) {
|
|
return ' ' + line;
|
|
});
|
|
return text.join('\n');
|
|
};
|
|
|
|
print = function(data) {
|
|
return console.log(indent(columnify(data, {
|
|
showHeaders: false,
|
|
minWidth: 35
|
|
})));
|
|
};
|
|
|
|
general = function(params, options, done) {
|
|
var commands, groupedCommands;
|
|
console.log('Usage: resin [COMMAND] [OPTIONS]\n');
|
|
console.log('Primary commands:\n');
|
|
commands = _.reject(capitano.state.commands, function(command) {
|
|
return command.isWildcard();
|
|
});
|
|
groupedCommands = _.groupBy(commands, function(command) {
|
|
if (command.plugin) {
|
|
return 'plugins';
|
|
} else if (command.primary) {
|
|
return 'primary';
|
|
}
|
|
return 'secondary';
|
|
});
|
|
print(parse(groupedCommands.primary));
|
|
if (options.verbose) {
|
|
if (!_.isEmpty(groupedCommands.plugins)) {
|
|
console.log('\nInstalled plugins:\n');
|
|
print(parse(groupedCommands.plugins));
|
|
}
|
|
console.log('\nAdditional commands:\n');
|
|
print(parse(groupedCommands.secondary));
|
|
} else {
|
|
console.log('\nRun `resin help --verbose` to list additional commands');
|
|
}
|
|
if (!_.isEmpty(capitano.state.globalOptions)) {
|
|
console.log('\nGlobal Options:\n');
|
|
print(parse(capitano.state.globalOptions));
|
|
}
|
|
return done();
|
|
};
|
|
|
|
command = function(params, options, done) {
|
|
return capitano.state.getMatchCommand(params.command, function(error, command) {
|
|
if (error != null) {
|
|
return done(error);
|
|
}
|
|
if ((command == null) || command.isWildcard()) {
|
|
return done(new Error("Command not found: " + params.command));
|
|
}
|
|
console.log("Usage: " + command.signature);
|
|
if (command.help != null) {
|
|
console.log("\n" + command.help);
|
|
} else if (command.description != null) {
|
|
console.log("\n" + (_.str.humanize(command.description)));
|
|
}
|
|
if (!_.isEmpty(command.options)) {
|
|
console.log('\nOptions:\n');
|
|
print(parse(command.options));
|
|
}
|
|
return done();
|
|
});
|
|
};
|
|
|
|
exports.help = {
|
|
signature: 'help [command...]',
|
|
description: 'show help',
|
|
help: 'Get detailed help for an specific command.\n\nExamples:\n\n $ resin help apps\n $ resin help os download',
|
|
primary: true,
|
|
options: [
|
|
{
|
|
signature: 'verbose',
|
|
description: 'show additional commands',
|
|
boolean: true,
|
|
alias: 'v'
|
|
}
|
|
],
|
|
action: function(params, options, done) {
|
|
if (params.command != null) {
|
|
return command(params, options, done);
|
|
} else {
|
|
return general(params, options, done);
|
|
}
|
|
}
|
|
};
|
|
|
|
}).call(this);
|