yargs-parser

ci NPM version Conventional Commits nycrc config on GitHub

The mighty option parser used by yargs.

visit the yargs website for more examples, and thorough usage instructions.

Example

sh npm i yargs-parser --save

js const argv = require('yargs-parser')(process.argv.slice(2)) console.log(argv)

console $ node example.js --foo=33 --bar hello { _: [], foo: 33, bar: 'hello' }

or parse a string!

js const argv = require('yargs-parser')('--foo=99 --bar=33') console.log(argv)

console { _: [], foo: 99, bar: 33 }

Convert an array of mixed types before passing to yargs-parser:

js const parse = require('yargs-parser') parse(['-f', 11, '--zoom', 55].join(' ')) // <-- array to string parse(['-f', 11, '--zoom', 55].map(String)) // <-- array of strings

Deno Example

As of v19 yargs-parser supports Deno:

```typescript import parser from "https://deno.land/x/yargs_parser/deno.ts";

const argv = parser('--foo=99 --bar=9987930', { string: ['bar'] }) console.log(argv) ```

ESM Example

As of v19 yargs-parser supports ESM (both in Node.js and in the browser):

Node.js:

```js import parser from 'yargs-parser'

const argv = parser('--foo=99 --bar=9987930', { string: ['bar'] }) console.log(argv) ```

Browsers:

```html

```

API

parser(args, opts={})

Parses command line arguments returning a simple mapping of keys and values.

expects:

returns:

require('yargs-parser').detailed(args, opts={})

Parses a command line string, returning detailed information required by the yargs engine.

expects:

returns:

Configuration

The yargs-parser applies several automated transformations on the keys provided in args. These features can be turned on and off using the configuration field of opts.

js var parsed = parser(['--no-dice'], { configuration: { 'boolean-negation': false } })

short option groups

Should a group of short-options be treated as boolean flags?

console $ node example.js -abc { _: [], a: true, b: true, c: true }

if disabled:

console $ node example.js -abc { _: [], abc: true }

camel-case expansion

Should hyphenated arguments be expanded into camel-case aliases?

console $ node example.js --foo-bar { _: [], 'foo-bar': true, fooBar: true }

if disabled:

console $ node example.js --foo-bar { _: [], 'foo-bar': true }

dot-notation

Should keys that contain . be treated as objects?

console $ node example.js --foo.bar { _: [], foo: { bar: true } }

if disabled:

console $ node example.js --foo.bar { _: [], "foo.bar": true }

parse numbers

Should keys that look like numbers be treated as such?

console $ node example.js --foo=99.3 { _: [], foo: 99.3 }

if disabled:

console $ node example.js --foo=99.3 { _: [], foo: "99.3" }

parse positional numbers

Should positional keys that look like numbers be treated as such.

console $ node example.js 99.3 { _: [99.3] }

if disabled:

console $ node example.js 99.3 { _: ['99.3'] }

boolean negation

Should variables prefixed with --no be treated as negations?

console $ node example.js --no-foo { _: [], foo: false }

if disabled:

console $ node example.js --no-foo { _: [], "no-foo": true }

combine arrays

Should arrays be combined when provided by both command line arguments and a configuration file.

duplicate arguments array

Should arguments be coerced into an array when duplicated:

console $ node example.js -x 1 -x 2 { _: [], x: [1, 2] }

if disabled:

console $ node example.js -x 1 -x 2 { _: [], x: 2 }

flatten duplicate arrays

Should array arguments be coerced into a single array when duplicated:

console $ node example.js -x 1 2 -x 3 4 { _: [], x: [1, 2, 3, 4] }

if disabled:

console $ node example.js -x 1 2 -x 3 4 { _: [], x: [[1, 2], [3, 4]] }

greedy arrays

Should arrays consume more than one positional argument following their flag.

console $ node example --arr 1 2 { _: [], arr: [1, 2] }

if disabled:

console $ node example --arr 1 2 { _: [2], arr: [1] }

Note: in v18.0.0 we are considering defaulting greedy arrays to false.

nargs eats options

Should nargs consume dash options as well as positional arguments.

negation prefix

The prefix to use for negated boolean variables.

console $ node example.js --no-foo { _: [], foo: false }

if set to quux:

console $ node example.js --quuxfoo { _: [], foo: false }

populate --

Should unparsed flags be stored in -- or _.

If disabled:

console $ node example.js a -b -- x y { _: [ 'a', 'x', 'y' ], b: true }

If enabled:

console $ node example.js a -b -- x y { _: [ 'a' ], '--': [ 'x', 'y' ], b: true }

set placeholder key

Should a placeholder be added for keys not set via the corresponding CLI argument?

If disabled:

console $ node example.js -a 1 -c 2 { _: [], a: 1, c: 2 }

If enabled:

console $ node example.js -a 1 -c 2 { _: [], a: 1, b: undefined, c: 2 }

halt at non-option

Should parsing stop at the first positional argument? This is similar to how e.g. ssh parses its command line.

If disabled:

console $ node example.js -a run b -x y { _: [ 'b' ], a: 'run', x: 'y' }

If enabled:

console $ node example.js -a run b -x y { _: [ 'b', '-x', 'y' ], a: 'run' }

strip aliased

Should aliases be removed before returning results?

If disabled:

console $ node example.js --test-field 1 { _: [], 'test-field': 1, testField: 1, 'test-alias': 1, testAlias: 1 }

If enabled:

console $ node example.js --test-field 1 { _: [], 'test-field': 1, testField: 1 }

strip dashed

Should dashed keys be removed before returning results? This option has no effect if camel-case-expansion is disabled.

If disabled:

console $ node example.js --test-field 1 { _: [], 'test-field': 1, testField: 1 }

If enabled:

console $ node example.js --test-field 1 { _: [], testField: 1 }

unknown options as args

Should unknown options be treated like regular arguments? An unknown option is one that is not configured in opts.

If disabled

console $ node example.js --unknown-option --known-option 2 --string-option --unknown-option2 { _: [], unknownOption: true, knownOption: 2, stringOption: '', unknownOption2: true }

If enabled

console $ node example.js --unknown-option --known-option 2 --string-option --unknown-option2 { _: ['--unknown-option'], knownOption: 2, stringOption: '--unknown-option2' }

Supported Node.js Versions

Libraries in this ecosystem make a best effort to track Node.js' release schedule. Here's a post on why we think this is important.

Special Thanks

The yargs project evolves from optimist and minimist. It owes its existence to a lot of James Halliday's hard work. Thanks substack beep boop \o/

License

ISC