mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-11-03 23:29:03 +00:00 
			
		
		
		
	
		
			
	
	
		
			514 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			514 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# DEPRECATION NOTICE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								I don't want to maintain this module anymore since I just use
							 | 
						||
| 
								 | 
							
								[minimist](https://npmjs.org/package/minimist), the argument parsing engine,
							 | 
						||
| 
								 | 
							
								directly instead nowadays.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed
							 | 
						||
| 
								 | 
							
								successor to optimist.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://github.com/chevex/yargs)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You should also consider [nomnom](https://github.com/harthur/nomnom).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								optimist
							 | 
						||
| 
								 | 
							
								========
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optimist is a node.js library for option parsing for people who hate option
							 | 
						||
| 
								 | 
							
								parsing. More specifically, this module is for people who like all the --bells
							 | 
						||
| 
								 | 
							
								and -whistlz of program usage but think optstrings are a waste of time.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								With optimist, option parsing doesn't have to suck (as much).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](http://travis-ci.org/substack/node-optimist)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								examples
							 | 
						||
| 
								 | 
							
								========
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								With Optimist, the options are just a hash! No optstrings attached.
							 | 
						||
| 
								 | 
							
								-------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								xup.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist').argv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (argv.rif - 5 * argv.xup > 7.138) {
							 | 
						||
| 
								 | 
							
								    console.log('Buy more riffiwobbles');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								else {
							 | 
						||
| 
								 | 
							
								    console.log('Sell the xupptumblers');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./xup.js --rif=55 --xup=9.52
							 | 
						||
| 
								 | 
							
								    Buy more riffiwobbles
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    $ ./xup.js --rif 12 --xup 8.1
							 | 
						||
| 
								 | 
							
								    Sell the xupptumblers
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								But wait! There's more! You can do short options:
							 | 
						||
| 
								 | 
							
								-------------------------------------------------
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								short.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist').argv;
							 | 
						||
| 
								 | 
							
								console.log('(%d,%d)', argv.x, argv.y);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./short.js -x 10 -y 21
							 | 
						||
| 
								 | 
							
								    (10,21)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								And booleans, both long and short (and grouped):
							 | 
						||
| 
								 | 
							
								----------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var util = require('util');
							 | 
						||
| 
								 | 
							
								var argv = require('optimist').argv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (argv.s) {
							 | 
						||
| 
								 | 
							
								    util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								console.log(
							 | 
						||
| 
								 | 
							
								    (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./bool.js -s
							 | 
						||
| 
								 | 
							
								    The cat says: meow
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    $ ./bool.js -sp
							 | 
						||
| 
								 | 
							
								    The cat says: meow.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./bool.js -sp --fr
							 | 
						||
| 
								 | 
							
								    Le chat dit: miaou.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								And non-hypenated options too! Just use `argv._`!
							 | 
						||
| 
								 | 
							
								-------------------------------------------------
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								nonopt.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist').argv;
							 | 
						||
| 
								 | 
							
								console.log('(%d,%d)', argv.x, argv.y);
							 | 
						||
| 
								 | 
							
								console.log(argv._);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./nonopt.js -x 6.82 -y 3.35 moo
							 | 
						||
| 
								 | 
							
								    (6.82,3.35)
							 | 
						||
| 
								 | 
							
								    [ 'moo' ]
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz
							 | 
						||
| 
								 | 
							
								    (0.54,1.12)
							 | 
						||
| 
								 | 
							
								    [ 'foo', 'bar', 'baz' ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Plus, Optimist comes with .usage() and .demand()!
							 | 
						||
| 
								 | 
							
								-------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								divide.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .usage('Usage: $0 -x [num] -y [num]')
							 | 
						||
| 
								 | 
							
								    .demand(['x','y'])
							 | 
						||
| 
								 | 
							
								    .argv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.log(argv.x / argv.y);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								    $ ./divide.js -x 55 -y 11
							 | 
						||
| 
								 | 
							
								    5
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    $ node ./divide.js -x 4.91 -z 2.51
							 | 
						||
| 
								 | 
							
								    Usage: node ./divide.js -x [num] -y [num]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Options:
							 | 
						||
| 
								 | 
							
								      -x  [required]
							 | 
						||
| 
								 | 
							
								      -y  [required]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Missing required arguments: y
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								EVEN MORE HOLY COW
							 | 
						||
| 
								 | 
							
								------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								default_singles.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .default('x', 10)
							 | 
						||
| 
								 | 
							
								    .default('y', 10)
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								console.log(argv.x + argv.y);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./default_singles.js -x 5
							 | 
						||
| 
								 | 
							
								    15
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								default_hash.js:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .default({ x : 10, y : 10 })
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								console.log(argv.x + argv.y);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./default_hash.js -y 7
							 | 
						||
| 
								 | 
							
								    17
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								And if you really want to get all descriptive about it...
							 | 
						||
| 
								 | 
							
								---------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								boolean_single.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .boolean('v')
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								console.dir(argv);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./boolean_single.js -v foo bar baz
							 | 
						||
| 
								 | 
							
								    true
							 | 
						||
| 
								 | 
							
								    [ 'bar', 'baz', 'foo' ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								boolean_double.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .boolean(['x','y','z'])
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								console.dir([ argv.x, argv.y, argv.z ]);
							 | 
						||
| 
								 | 
							
								console.dir(argv._);
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ ./boolean_double.js -x -z one two three
							 | 
						||
| 
								 | 
							
								    [ true, false, true ]
							 | 
						||
| 
								 | 
							
								    [ 'one', 'two', 'three' ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optimist is here to help...
							 | 
						||
| 
								 | 
							
								---------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can describe parameters for help messages and set aliases. Optimist figures
							 | 
						||
| 
								 | 
							
								out how to format a handy help string automatically.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								line_count.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .usage('Count the lines in a file.\nUsage: $0')
							 | 
						||
| 
								 | 
							
								    .demand('f')
							 | 
						||
| 
								 | 
							
								    .alias('f', 'file')
							 | 
						||
| 
								 | 
							
								    .describe('f', 'Load a file')
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fs = require('fs');
							 | 
						||
| 
								 | 
							
								var s = fs.createReadStream(argv.file);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var lines = 0;
							 | 
						||
| 
								 | 
							
								s.on('data', function (buf) {
							 | 
						||
| 
								 | 
							
								    lines += buf.toString().match(/\n/g).length;
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								s.on('end', function () {
							 | 
						||
| 
								 | 
							
								    console.log(lines);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								***
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node line_count.js
							 | 
						||
| 
								 | 
							
								    Count the lines in a file.
							 | 
						||
| 
								 | 
							
								    Usage: node ./line_count.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Options:
							 | 
						||
| 
								 | 
							
								      -f, --file  Load a file  [required]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Missing required arguments: f
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node line_count.js --file line_count.js 
							 | 
						||
| 
								 | 
							
								    20
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    $ node line_count.js -f line_count.js 
							 | 
						||
| 
								 | 
							
								    20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								methods
							 | 
						||
| 
								 | 
							
								=======
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								By itself,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								require('optimist').argv
							 | 
						||
| 
								 | 
							
								`````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								will use `process.argv` array to construct the `argv` object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can pass in the `process.argv` yourself:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								require('optimist')([ '-x', '1', '-y', '2' ]).argv
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								or use .parse() to do the same thing:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								require('optimist').parse([ '-x', '1', '-y', '2' ])
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The rest of these methods below come in just before the terminating `.argv`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.alias(key, alias)
							 | 
						||
| 
								 | 
							
								------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Set key names as equivalent such that updates to a key will propagate to aliases
							 | 
						||
| 
								 | 
							
								and vice-versa.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optionally `.alias()` can take an object that maps keys to aliases.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.default(key, value)
							 | 
						||
| 
								 | 
							
								--------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Set `argv[key]` to `value` if no option was specified on `process.argv`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optionally `.default()` can take an object that maps keys to default values.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.demand(key)
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` is a string, show the usage information and exit if `key` wasn't
							 | 
						||
| 
								 | 
							
								specified in `process.argv`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` is a number, demand at least as many non-option arguments, which show
							 | 
						||
| 
								 | 
							
								up in `argv._`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` is an Array, demand each element.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.describe(key, desc)
							 | 
						||
| 
								 | 
							
								--------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Describe a `key` for the generated usage information.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optionally `.describe()` can take an object that maps keys to descriptions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.options(key, opt)
							 | 
						||
| 
								 | 
							
								------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Instead of chaining together `.alias().demand().default()`, you can specify
							 | 
						||
| 
								 | 
							
								keys in `opt` for each of the chainable methods.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .options('f', {
							 | 
						||
| 
								 | 
							
								        alias : 'file',
							 | 
						||
| 
								 | 
							
								        default : '/etc/passwd',
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								is the same as
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								````javascript
							 | 
						||
| 
								 | 
							
								var argv = require('optimist')
							 | 
						||
| 
								 | 
							
								    .alias('f', 'file')
							 | 
						||
| 
								 | 
							
								    .default('f', '/etc/passwd')
							 | 
						||
| 
								 | 
							
								    .argv
							 | 
						||
| 
								 | 
							
								;
							 | 
						||
| 
								 | 
							
								````
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optionally `.options()` can take an object that maps keys to `opt` parameters.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.usage(message)
							 | 
						||
| 
								 | 
							
								---------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Set a usage message to show which commands to use. Inside `message`, the string
							 | 
						||
| 
								 | 
							
								`$0` will get interpolated to the current script name or node command for the
							 | 
						||
| 
								 | 
							
								present script similar to how `$0` works in bash or perl.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.check(fn)
							 | 
						||
| 
								 | 
							
								----------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Check that certain conditions are met in the provided arguments.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `fn` throws or returns `false`, show the thrown error, usage information, and
							 | 
						||
| 
								 | 
							
								exit.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.boolean(key)
							 | 
						||
| 
								 | 
							
								-------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Interpret `key` as a boolean. If a non-flag option follows `key` in
							 | 
						||
| 
								 | 
							
								`process.argv`, that string won't get set as the value of `key`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be
							 | 
						||
| 
								 | 
							
								`false`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` is an Array, interpret all the elements as booleans.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.string(key)
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tell the parser logic not to interpret `key` as a number or boolean.
							 | 
						||
| 
								 | 
							
								This can be useful if you need to preserve leading zeros in an input.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If `key` is an Array, interpret all the elements as strings.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.wrap(columns)
							 | 
						||
| 
								 | 
							
								--------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Format usage output to wrap at `columns` many columns.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.help()
							 | 
						||
| 
								 | 
							
								-------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Return the generated usage string.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.showHelp(fn=console.error)
							 | 
						||
| 
								 | 
							
								---------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Print the usage data using `fn` for printing.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.parse(args)
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parse `args` instead of `process.argv`. Returns the `argv` object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.argv
							 | 
						||
| 
								 | 
							
								-----
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Get the arguments as a plain old object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Arguments without a corresponding flag show up in the `argv._` array.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The script name or node command is available at `argv.$0` similarly to how `$0`
							 | 
						||
| 
								 | 
							
								works in bash or perl.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								parsing tricks
							 | 
						||
| 
								 | 
							
								==============
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								stop parsing
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Use `--` to stop parsing flags and stuff the remainder into `argv._`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4
							 | 
						||
| 
								 | 
							
								    { _: [ '-c', '3', '-d', '4' ],
							 | 
						||
| 
								 | 
							
								      '$0': 'node ./examples/reflect.js',
							 | 
						||
| 
								 | 
							
								      a: 1,
							 | 
						||
| 
								 | 
							
								      b: 2 }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								negate fields
							 | 
						||
| 
								 | 
							
								-------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you want to explicity set a field to false instead of just leaving it
							 | 
						||
| 
								 | 
							
								undefined or to override a default you can do `--no-key`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node examples/reflect.js -a --no-b
							 | 
						||
| 
								 | 
							
								    { _: [],
							 | 
						||
| 
								 | 
							
								      '$0': 'node ./examples/reflect.js',
							 | 
						||
| 
								 | 
							
								      a: true,
							 | 
						||
| 
								 | 
							
								      b: false }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								numbers
							 | 
						||
| 
								 | 
							
								-------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to
							 | 
						||
| 
								 | 
							
								one. This way you can just `net.createConnection(argv.port)` and you can add
							 | 
						||
| 
								 | 
							
								numbers out of `argv` with `+` without having that mean concatenation,
							 | 
						||
| 
								 | 
							
								which is super frustrating.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								duplicates
							 | 
						||
| 
								 | 
							
								----------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you specify a flag multiple times it will get turned into an array containing
							 | 
						||
| 
								 | 
							
								all the values in order.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node examples/reflect.js -x 5 -x 8 -x 0
							 | 
						||
| 
								 | 
							
								    { _: [],
							 | 
						||
| 
								 | 
							
								      '$0': 'node ./examples/reflect.js',
							 | 
						||
| 
								 | 
							
								        x: [ 5, 8, 0 ] }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								dot notation
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When you use dots (`.`s) in argument names, an implicit object path is assumed.
							 | 
						||
| 
								 | 
							
								This lets you organize arguments into nested objects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5
							 | 
						||
| 
								 | 
							
								     { _: [],
							 | 
						||
| 
								 | 
							
								       '$0': 'node ./examples/reflect.js',
							 | 
						||
| 
								 | 
							
								         foo: { bar: { baz: 33 }, quux: 5 } }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								short numbers
							 | 
						||
| 
								 | 
							
								-------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Short numeric `head -n5` style argument work too:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $ node reflect.js -n123 -m456
							 | 
						||
| 
								 | 
							
								    { '3': true,
							 | 
						||
| 
								 | 
							
								      '6': true,
							 | 
						||
| 
								 | 
							
								      _: [],
							 | 
						||
| 
								 | 
							
								      '$0': 'node ./reflect.js',
							 | 
						||
| 
								 | 
							
								      n: 123,
							 | 
						||
| 
								 | 
							
								      m: 456 }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								installation
							 | 
						||
| 
								 | 
							
								============
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								With [npm](http://github.com/isaacs/npm), just do:
							 | 
						||
| 
								 | 
							
								    npm install optimist
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								or clone this project on github:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    git clone http://github.com/substack/node-optimist.git
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To run the tests with [expresso](http://github.com/visionmedia/expresso),
							 | 
						||
| 
								 | 
							
								just do:
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    expresso
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inspired By
							 | 
						||
| 
								 | 
							
								===========
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This module is loosely inspired by Perl's
							 | 
						||
| 
								 | 
							
								[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).
							 |