Bobby L. Craig

noptify

### noptify noptify is a little wrapper around `nopt` module adding a more expressive, commander-like, API and few helpers. Examples var program = noptify(process.argv, { program: 'name' }) .version('0.0.1') .option('port', '-p', 'Port to listen on (default: 35729)', Number) .option('pid', 'Path to the generated PID file', String) var opts = program.parse(); Returns an instance of `Noptify` ### Noptify Noptify provides the API to parse out option, shorthands and generate the proper generic help output. - args - The Array of arguments to parse (default: `process.argv`); - options - An hash of options with the following properties - program - The program name to use in usage output Every noptify instance is created with two options, `-h, --help` and `-v, --version`. ### Noptify#parse Parse the provided options and shorthands, pass them through `nopt` and return the result. When `opts.help` is set, the help output is displayed and `help` event is emitted. The process exists with `0` status, the help output is automatically displayed and the `help` event is emitted. Examples var program = noptify(['foo', '--help']) .on('help', function() { console.log('Examples'); console.log(''); console.log(' foo bar --baz > foo.txt'); }); var opts = program.parse(); // ... Help output ... // ... Custom help output ... // ... Exit ... ### Noptify#version Define the program version. ### Noptify#option Define `name` option with optional shorthands, optional description and optional type. ### Noptify#help Simply output to stdout the Usage and Help output. --- *Mocha generated documentation* - [API](#api) - [Collectable](#collectable) - [Commandable](#commandable) - [Parses remaining arguments and route to the appropriate command](#commandable-parses-remaining-arguments-and-route-to-the-appropriate-command) ## API returns an instanceof Noptify. ```js assert.ok(noptify() instanceof noptify.Noptify); ``` is typically used like so. ```js var program = noptify(['node', 'file.js', '-d', '--dirname', './', '-p', '3000', 'app.js', 'base.js']) .option('debug', '-d', 'Enabled debug output', Boolean) .option('dirname', 'The path to the output directory') .option('port', '-p', 'The port you wish to listen on', Number) // opts => nopt result var opts = program.parse(); assert.deepEqual(opts, { port: 3000, debug: true, dirname: './', argv: { remain: ['app.js', 'base.js'], cooked: ['--debug', '--dirname', './', '--port', '3000', 'app.js', 'base.js'], original: ['-d', '--dirname', './', '-p', '3000', 'app.js', 'base.js'] } }); ``` allows definitiion of shorthands separately. ```js var opts = noptify(['node', 'file.js', '-lc']) .option('line-comment', 'Ouputs with debugging information', Boolean) .shorthand('lc', '--line-comment') .parse(); assert.equal(opts['line-comment'], true); ``` ## Collectable provides the helper method to read from stdin. ```js var program = noptify(); assert.ok(typeof program.stdin === 'function', 'stdin defined'); ``` is invoked only when .parse() is called. ```js var program = noptify(['', '']); var str = 'testing out stdin helper'; program.stdin(function(err, res) { assert.equal(res, str); done(); }); program.parse(); process.nextTick(function() { process.stdin.emit('data', str); process.stdin.emit('end'); }); ``` ## Commandable provides the .command() utility. ```js assert.ok(typeof noptify().command === 'function'); ``` ## Parses remaining arguments and route to the appropriate command can be a simple function. ```js var program = noptify(['', '', 'init', '--debug', 'foo']).option('debug', 'an option'); program.command('init', function(args, opts) { // args ==> sliced args at command position // opts ==> nopt parsed object assert.deepEqual(args, ['--debug', 'foo']); assert.equal(opts.debug, true); assert.equal(opts.argv.remain[0], 'foo'); done(); }); program.parse(); ``` or another program, an Noptify instance. ```js var args = ['', '', 'init', '--debug', 'myapp', 'foo']; var init = noptify(args) .option('debug', 'Debug output') .command('myapp', done.bind(null, null)); noptify(args).command('init', init).parse(); ```