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