JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 25
  • Score
    100M100P100Q48593F
  • License MIT

more greedy argument parser like a minimist!

Package Exports

  • chopsticks

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (chopsticks) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Chopsticks

Installation

npm install chopsticks --save

Usage

chopsticks(args, opts={}) -> argv

  • opts.string
  • opts.boolean
  • opts.alias
  • opts.default
  • opts.stopEarly
  • opts.dash (aka opts['--'])
  • opts.unknown

minimist-v1.2.0 spec completed.

New features

  • Emoji support 👍 - can use emoji to short flags.

    node -e 'console.log(require("minimist")(["-🍣👹👺"]))'
    # { _: [], '�': '�👹👺' }
    
    node -e 'console.log(require("chopsticks")(["-🍣👹👺"]))'
    # { '🍣': true, '👹': true, '👺': true, _: [] }
  • opts.unknown=true - return the detailed object at argv.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!"
    //   ]
    // }
  • 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']
    //   ]
    // }
  • 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)

  • opts.sentence - if true, 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']
    //   ]
    // }
  • 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',
    //   _: []
    // }
  • opts.nest - if true, 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

License

MIT