print help for top-level commands and command sets
This commit is contained in:
		
							parent
							
								
									523f57944f
								
							
						
					
					
						commit
						83030fb416
					
				
							
								
								
									
										82
									
								
								bin/cli.js
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								bin/cli.js
									
									
									
									
									
								
							@ -20,12 +20,12 @@ function parseArgs(argv, opts) {
 | 
				
			|||||||
  var COMMAND = 'COMMAND';
 | 
					  var COMMAND = 'COMMAND';
 | 
				
			||||||
  var maxCmdLen = COMMAND.length;
 | 
					  var maxCmdLen = COMMAND.length;
 | 
				
			||||||
  var maxPairLen = 0;
 | 
					  var maxPairLen = 0;
 | 
				
			||||||
  var cmds;
 | 
					  var tlcs; // top-level commands
 | 
				
			||||||
  var arg1 = args[0];
 | 
					  var arg1 = args[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // build commands list
 | 
					  // build commands list
 | 
				
			||||||
  var pairsMap = {};
 | 
					  var pairsMap = {};
 | 
				
			||||||
  cmds = opts.commands.filter(function (desc) {
 | 
					  tlcs = opts.commands.filter(function (desc) {
 | 
				
			||||||
    var pair = desc[0].split(/\s+/)[0];
 | 
					    var pair = desc[0].split(/\s+/)[0];
 | 
				
			||||||
    var psub = pair.split(sep)[0];
 | 
					    var psub = pair.split(sep)[0];
 | 
				
			||||||
    pairsMap[pair] = true;
 | 
					    pairsMap[pair] = true;
 | 
				
			||||||
@ -36,13 +36,6 @@ function parseArgs(argv, opts) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (-1 === Object.keys(pairsMap).indexOf(cmd)) {
 | 
					 | 
				
			||||||
    console.log('fail', cmd);
 | 
					 | 
				
			||||||
    arg1 = cmd;
 | 
					 | 
				
			||||||
    cmd = 'help';
 | 
					 | 
				
			||||||
    help();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  function rpad(str, len) {
 | 
					  function rpad(str, len) {
 | 
				
			||||||
    while (str.length < len) {
 | 
					    while (str.length < len) {
 | 
				
			||||||
      str += ' ';
 | 
					      str += ' ';
 | 
				
			||||||
@ -53,42 +46,83 @@ function parseArgs(argv, opts) {
 | 
				
			|||||||
  function help() {
 | 
					  function help() {
 | 
				
			||||||
    var status = 0;
 | 
					    var status = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function helpMain() {
 | 
					    function printCmd(desc) {
 | 
				
			||||||
      console.log('');
 | 
					      var pcmd = rpad(desc[0].split(/\s+/)[0], maxCmdLen);
 | 
				
			||||||
      console.log('Here are all the top-level commands:');
 | 
					      var pdesc = desc[1];
 | 
				
			||||||
      console.log('');
 | 
					      console.info('\t' + defaults.main + ' ' + pcmd, ' # ' + pdesc);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      console.log('\t' + defaults.main + ' ' + rpad(COMMAND, maxCmdLen), ' # description');
 | 
					    function printCmds(cmds) {
 | 
				
			||||||
      console.log('\t' + '------------------------------');
 | 
					      console.info('');
 | 
				
			||||||
      cmds.forEach(function (desc) {
 | 
					
 | 
				
			||||||
        var pcmd = rpad(desc[0].split(/\s+/)[0], maxCmdLen);
 | 
					      console.info('\t' + defaults.main + ' ' + rpad(COMMAND, maxCmdLen), ' # description');
 | 
				
			||||||
        var pdesc = desc[1];
 | 
					      console.info('\t' + '------------------------------');
 | 
				
			||||||
        console.log('\t' + defaults.main + ' ' + pcmd, ' # ' + pdesc);
 | 
					      cmds.forEach(printCmd);
 | 
				
			||||||
      });
 | 
					      console.info('');
 | 
				
			||||||
      console.log('');
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function helpMain() {
 | 
				
			||||||
 | 
					      console.info('');
 | 
				
			||||||
 | 
					      console.info('Here are all the top-level commands:');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      printCmds(tlcs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (arg1 && -1 === Object.keys(pairsMap).indexOf(arg1)) {
 | 
					    if (arg1 && -1 === Object.keys(pairsMap).indexOf(arg1)) {
 | 
				
			||||||
      status = 1;
 | 
					      status = 1;
 | 
				
			||||||
      console.log('');
 | 
					      console.info('');
 | 
				
			||||||
      console.log(defaults.main + ": Unknown command '" + arg1 + "'");
 | 
					      console.info(defaults.main + ": Unknown command '" + arg1 + "'");
 | 
				
			||||||
 | 
					      console.info('');
 | 
				
			||||||
 | 
					      console.info("Try '" + defaults.main + " help'");
 | 
				
			||||||
 | 
					      console.info('');
 | 
				
			||||||
      arg1 = null;
 | 
					      arg1 = null;
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // the case of "oauth3 help --something"
 | 
				
			||||||
    if (!arg1 || '-' === arg1[0]) {
 | 
					    if (!arg1 || '-' === arg1[0]) {
 | 
				
			||||||
      helpMain();
 | 
					      helpMain();
 | 
				
			||||||
      process.exit(status);
 | 
					      process.exit(status);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // the case of "oauth3 help help"
 | 
				
			||||||
    if ('help' === arg1) {
 | 
					    if ('help' === arg1) {
 | 
				
			||||||
      helpMain();
 | 
					      helpMain();
 | 
				
			||||||
      console.log("no more help available for 'help'");
 | 
					      console.info("no more help available for 'help'");
 | 
				
			||||||
      process.exit(status);
 | 
					      process.exit(status);
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    console.info('');
 | 
				
			||||||
 | 
					    console.info('Here are all the "' + command + '"-related commands:');
 | 
				
			||||||
 | 
					    printCmds(
 | 
				
			||||||
 | 
					      opts.commands.filter(function (desc) {
 | 
				
			||||||
 | 
					        var pair = desc[0].split(/\s+/)[0];
 | 
				
			||||||
 | 
					        var psub = pair.split(sep)[0];
 | 
				
			||||||
 | 
					        maxPairLen = Math.max(maxPairLen, pair.length);
 | 
				
			||||||
 | 
					        if (arg1 === psub || arg1 === pair) {
 | 
				
			||||||
 | 
					          maxCmdLen = Math.max(maxCmdLen, pair.length);
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    console.info('');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (-1 === Object.keys(pairsMap).indexOf(cmd)) {
 | 
				
			||||||
 | 
					    arg1 = cmd;
 | 
				
			||||||
 | 
					    cmd = 'help';
 | 
				
			||||||
 | 
					    help();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (-1 !== [ 'help', '-h', '--help' ].indexOf(command) || -1 !== args.indexOf('-h') || -1 !== args.indexOf('--help')) {
 | 
					  if (-1 !== [ 'help', '-h', '--help' ].indexOf(command) || -1 !== args.indexOf('-h') || -1 !== args.indexOf('--help')) {
 | 
				
			||||||
    help();
 | 
					    help();
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  console.log('RUN', cmd, sub || '(n/a)', arg1 || '(n/a)');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
parseArgs(process.argv, {
 | 
					parseArgs(process.argv, {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user