From 14924def296f0baf99a64f9ae9356f7db5a025bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20L=C3=B6fgren?= Date: Tue, 20 Oct 2020 01:22:38 +0200 Subject: [PATCH] Default `isMultiple` to empty array (#163) Co-authored-by: Sindre Sorhus --- index.d.ts | 8 ++++++-- index.js | 1 + readme.md | 7 ++++++- test/test.js | 44 ++++++++++++++------------------------------ 4 files changed, 27 insertions(+), 33 deletions(-) diff --git a/index.d.ts b/index.d.ts index 9602f55..67c6057 100644 --- a/index.d.ts +++ b/index.d.ts @@ -125,9 +125,13 @@ declare namespace meow { readonly inferType?: boolean; /** - Value of `boolean` flags not defined in `argv`. If set to `undefined` the flags not defined in `argv` will be excluded from the result. The `default` value set in `boolean` flags take precedence over `booleanDefault`. + Value of `boolean` flags not defined in `argv`. - __Caution: Explicitly specifying undefined for `booleanDefault` has different meaning from omitting key itself.__ + If set to `undefined`, the flags not defined in `argv` will be excluded from the result. The `default` value set in `boolean` flags take precedence over `booleanDefault`. + + _Note: If used in conjunction with `isMultiple`, the default flag value is set to `[]`._ + + __Caution: Explicitly specifying `undefined` for `booleanDefault` has different meaning from omitting key itself.__ @example ``` diff --git a/index.js b/index.js index 721eeb6..b3f85ce 100644 --- a/index.js +++ b/index.js @@ -68,6 +68,7 @@ const buildParserFlags = ({flags, booleanDefault}) => if (flag.isMultiple) { flag.type = flag.type ? `${flag.type}-array` : 'array'; + flag.default = flag.default || []; delete flag.isMultiple; } diff --git a/readme.md b/readme.md index dd88d4c..9e6ab8a 100644 --- a/readme.md +++ b/readme.md @@ -239,9 +239,14 @@ Type: `boolean | null | undefined`\ Default: `false` Value of `boolean` flags not defined in `argv`. -If set to `undefined` the flags not defined in `argv` will be excluded from the result. + +If set to `undefined`, the flags not defined in `argv` will be excluded from the result. The `default` value set in `boolean` flags take precedence over `booleanDefault`. +_Note: If used in conjunction with `isMultiple`, the default flag value is set to `[]`._ + +__Caution: Explicitly specifying `undefined` for `booleanDefault` has different meaning from omitting key itself.__ + Example: ```js diff --git a/test/test.js b/test/test.js index e1f329a..abaebef 100644 --- a/test/test.js +++ b/test/test.js @@ -312,6 +312,20 @@ test('supports `number` flag type - throws on incorrect default value', t => { }); }); +test('isMultiple - unset flag returns empty array', t => { + t.deepEqual(meow({ + argv: [], + flags: { + foo: { + type: 'string', + isMultiple: true + } + } + }).flags, { + foo: [] + }); +}); + test('isMultiple - flag set once returns array', t => { t.deepEqual(meow({ argv: ['--foo=bar'], @@ -408,25 +422,6 @@ test('isMultiple - boolean flag is false by default', t => { }); }); -test('isMultiple - flag with `booleanDefault: undefined` => filter out unset boolean args', t => { - t.deepEqual(meow({ - argv: ['--foo'], - booleanDefault: undefined, - flags: { - foo: { - type: 'boolean', - isMultiple: true - }, - bar: { - type: 'boolean', - isMultiple: true - } - } - }).flags, { - foo: [true] - }); -}); - test('isMultiple - number flag', t => { t.deepEqual(meow({ argv: ['--foo=1.3', '--foo=-1'], @@ -510,17 +505,6 @@ test('isMultiple - handles multi-word flag name', t => { }); }); -test('isMultiple - handles non-set flags correctly', t => { - t.deepEqual(meow({ - argv: [], - flags: { - foo: { - isMultiple: true - } - } - }).flags, {}); -}); - if (NODE_MAJOR_VERSION >= 14) { test('supports es modules', async t => { try {