chopsticks
v0.6.0
Published
more greedy argument parser like a minimist!
Downloads
33
Maintainers
Readme
Installation
npm install chopsticks --save
Usage
chopsticks(args, opts={})
-> argv
- [x]
opts.string
- [x]
opts.boolean
- [x]
opts.alias
- [x]
opts.default
- [x]
opts.stopEarly
- [x]
opts.dash
(akaopts['--']
) - [x]
opts.unknown
minimist-v1.2.0 spec completed.
New features
[x] Emoji support :+1: - can use emoji to short flags.
node -e 'console.log(require("minimist")(["-🍣👹👺"]))' # { _: [], '�': '�👹👺' } node -e 'console.log(require("chopsticks")(["-🍣👹👺"]))' # { '🍣': true, '👹': true, '👺': true, _: [] }
[x]
opts.unknown=true
- return the detailed object atargv.unknown
.parse(['-f', 'true', '--no-foo', 'true', 'noop!', '--', 'huh'], { unknown: true }); // { // "_": [ // "huh" // ], // "unknown": [ // Flag { type: 'short', name: 'f', value: 'true' }, // Flag { type: 'long', name: 'foo', value: false }, // "true", // "noop!" // ] // }
[x]
opts.array
- the specified flag takes the following argument continually. (like a npm-run-all)// $ node program.js -s cover lint report -s foo bar baz -- huh parse(process.argv.slice(2), { array: 's' }); // { // "_": [ // "huh" // ], // "s": [ // ['cover', 'lint', 'report'], // ['foo', 'bar', 'baz'] // ] // }
[x]
opts.object
- if specify flag names, the value of the specify flag is handled as key of the object.// $ node program.js -x one --y.two foo -z=three.baz parse(process.argv.slice(2), { object: ['x', 'y', 'z'] }); // { // _: [], // x: { // one: true, // }, // y: { // two: 'foo', // }, // z: { // three: { // baz: true, // }, // }, // },
if
true
, will handle all long flag without equal signs as object (e.g. affects--foo
, not-f
or--foo=bar
)[x]
opts.sentence
- iftrue
, argument with right-comma/right-period, is defined in "sentence". (like an abigail)// $ node program.js lorem. cover, lint, report. 'foo bar', baz. huh -- huh parse(process.argv.slice(2), { sentence: true }); // { // "_": [ // "huh", // "huh" // ], // "sentence": [ // ['lorem'], // ['cover', 'lint', 'report'], // ['foo bar', 'baz'] // ] // }
[x] Relative Filename Flag - if the flag name begins with a dot(e.g.
--./path/to/file
), it handled as a flag name.// $ node program.js --use-popular-plugin --./my-extra-plugin.js customValue parse(process.argv.slice(2)); // { // 'use-popular-plugin': true, // './my-extra-plugin.js': 'customValue', // _: [] // }
[x]
opts.nest
- iftrue
, recursively parsing the inside of brackets ([]
). like a browserify syntax(aka subarg)// $ node program.js rawr --beep [ boop -a 3 ] -n4 --robots [ -x 8 -y 6 ] parse(process.argv.slice(2), { nest: true }); // { _: [ 'rawr' ], // beep: { _: [ 'boop' ], a: 3 }, // n: 4, // robots: { _: [], x: 8, y: 6 } }
Stacktrace was broken
node
> require('chopsticks')('error')
# TypeError: args is not an array
# at n.u.createClass.value (/path/to/chopsticks/lib/index.js:1:59798)
published code is compressed and the source map is provided. sourcemap isn't supported on NodeJS(current v5.10.0). but this resolved in the node-source-map-support.
npm install source-map-support --save-dev
import 'source-map-support/register';
or...
$ mocha --require source-map-support/register
you can check the original line number.
$ node
require('source-map-support/register');
require('chopsticks')('error');
# TypeError: args is not an array
# at n.u.createClass.value (/Users/59naga/Downloads/chopsticks/src/Chopsticks.js:58:13)
Development
Requirement global
- NodeJS v5.10.0
- Npm v3.8.3
git clone https://github.com/59naga/chopsticks
cd chopsticks
npm install
npm test