From cfd83432628d4ae67ac5b0c669de342e009dfa41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20L=C3=B6fgren?= Date: Fri, 2 Oct 2020 00:46:52 +0200 Subject: [PATCH 1/6] Default `isMultiple` to empty array --- index.js | 1 + test/test.js | 44 ++++++++++++++------------------------------ 2 files changed, 15 insertions(+), 30 deletions(-) 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/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 { From 69de916b06713cebb2b0730a63c7bc37df86f44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20L=C3=B6fgren?= Date: Mon, 19 Oct 2020 13:13:36 +0200 Subject: [PATCH 2/6] Update README and type declarations --- index.d.ts | 38 +++++++++++++++++++++----------------- readme.md | 3 +++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/index.d.ts b/index.d.ts index 9602f55..e4e2202 100644 --- a/index.d.ts +++ b/index.d.ts @@ -125,7 +125,11 @@ 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`. + + 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.__ @@ -198,24 +202,24 @@ declare namespace meow { type TypedFlag = Flag extends {type: 'number'} - ? number - : Flag extends {type: 'string'} - ? string - : Flag extends {type: 'boolean'} - ? boolean - : unknown; + ? number + : Flag extends {type: 'string'} + ? string + : Flag extends {type: 'boolean'} + ? boolean + : unknown; type PossiblyOptionalFlag = Flag extends {isRequired: true} - ? FlagType - : Flag extends {default: any} - ? FlagType - : FlagType | undefined; + ? FlagType + : Flag extends {default: any} + ? FlagType + : FlagType | undefined; type TypedFlags = { [F in keyof Flags]: Flags[F] extends {isMultiple: true} - ? PossiblyOptionalFlag>> - : PossiblyOptionalFlag> + ? PossiblyOptionalFlag>> + : PossiblyOptionalFlag> }; interface Result { @@ -269,14 +273,14 @@ import foo = require('.'); const cli = meow(` Usage - $ foo + $ foo Options - --rainbow, -r Include a rainbow + --rainbow, -r Include a rainbow Examples - $ foo unicorns --rainbow - 🌈 unicorns 🌈 + $ foo unicorns --rainbow + 🌈 unicorns 🌈 `, { flags: { rainbow: { diff --git a/readme.md b/readme.md index dd88d4c..153993a 100644 --- a/readme.md +++ b/readme.md @@ -239,9 +239,12 @@ 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. 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 `[]`._ + Example: ```js From 8fcabe8c5f3189d58815351d8e49a0ad12f2ed83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20L=C3=B6fgren?= Date: Mon, 19 Oct 2020 13:18:13 +0200 Subject: [PATCH 3/6] Sync README and type declaration docs --- index.d.ts | 2 +- readme.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index e4e2202..926e4c2 100644 --- a/index.d.ts +++ b/index.d.ts @@ -131,7 +131,7 @@ declare namespace meow { _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.__ + __Caution: Explicitly specifying `undefined` for `booleanDefault` has different meaning from omitting key itself.__ @example ``` diff --git a/readme.md b/readme.md index 153993a..7b38ca0 100644 --- a/readme.md +++ b/readme.md @@ -245,6 +245,8 @@ 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 From 1697d17c177186adb85a1a4ecebfb50cb18e2ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20L=C3=B6fgren?= Date: Mon, 19 Oct 2020 13:22:12 +0200 Subject: [PATCH 4/6] Revert formatting changes --- index.d.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/index.d.ts b/index.d.ts index 926e4c2..44146e0 100644 --- a/index.d.ts +++ b/index.d.ts @@ -202,24 +202,24 @@ declare namespace meow { type TypedFlag = Flag extends {type: 'number'} - ? number - : Flag extends {type: 'string'} - ? string - : Flag extends {type: 'boolean'} - ? boolean - : unknown; + ? number + : Flag extends {type: 'string'} + ? string + : Flag extends {type: 'boolean'} + ? boolean + : unknown; type PossiblyOptionalFlag = Flag extends {isRequired: true} - ? FlagType - : Flag extends {default: any} - ? FlagType - : FlagType | undefined; + ? FlagType + : Flag extends {default: any} + ? FlagType + : FlagType | undefined; type TypedFlags = { [F in keyof Flags]: Flags[F] extends {isMultiple: true} - ? PossiblyOptionalFlag>> - : PossiblyOptionalFlag> + ? PossiblyOptionalFlag>> + : PossiblyOptionalFlag> }; interface Result { @@ -273,14 +273,14 @@ import foo = require('.'); const cli = meow(` Usage - $ foo + $ foo Options - --rainbow, -r Include a rainbow + --rainbow, -r Include a rainbow Examples - $ foo unicorns --rainbow - 🌈 unicorns 🌈 + $ foo unicorns --rainbow + 🌈 unicorns 🌈 `, { flags: { rainbow: { From f7072206d88961e9d73729517bdec6844971ce35 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Tue, 20 Oct 2020 01:21:40 +0200 Subject: [PATCH 5/6] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 7b38ca0..9e6ab8a 100644 --- a/readme.md +++ b/readme.md @@ -240,7 +240,7 @@ 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 `[]`._ From 47f54ecb878c12e2b8421de0e63a74507c86b752 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Tue, 20 Oct 2020 01:22:02 +0200 Subject: [PATCH 6/6] Update index.d.ts --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 44146e0..67c6057 100644 --- a/index.d.ts +++ b/index.d.ts @@ -127,7 +127,7 @@ declare namespace meow { /** 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`. + 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 `[]`._