tronbox
Version:
TronBox - Simple development framework for Tron
1 lines • 1.58 kB
JavaScript
var TaskError=require("./errors/taskerror");var yargs=require("yargs/yargs");var _=require("lodash");function Command(commands){this.commands=commands;var args=yargs();Object.keys(this.commands).forEach(function(command){args=args.command(commands[command])});this.args=args}Command.prototype.getCommand=function(str,noAliases){var argv=this.args.parse(str);if(argv._.length===0){return null}var input=argv._[0];var chosenCommand=null;if(this.commands[input]){chosenCommand=input}else if(noAliases!==true){var currentLength=1;var availableCommandNames=Object.keys(this.commands);while(currentLength<=input.length){var possibleCommands=availableCommandNames.filter(function(possibleCommand){return possibleCommand.substring(0,currentLength)===input.substring(0,currentLength)});if(possibleCommands.length===1){chosenCommand=possibleCommands[0];break}currentLength+=1}}if(!chosenCommand){return null}var command=this.commands[chosenCommand];return{name:chosenCommand,argv:argv,command:command}};Command.prototype.run=function(command,options,callback){if(typeof options==="function"){callback=options;options={}}var result=this.getCommand(command,typeof options.noAliases==="boolean"?options.noAliases:true);if(!result){return callback(new TaskError("Cannot find command: "+command))}var argv=result.argv;if(argv._){argv._.shift()}delete argv["$0"];var clone={};Object.keys(options).forEach(function(key){try{clone[key]=options[key]}catch(e){}});options=_.extend(clone,argv);try{result.command.run(options,callback)}catch(err){callback(err)}};module.exports=Command;
;