From e1f0e24840634ae58664a70ee9e19ab80166b3f3 Mon Sep 17 00:00:00 2001 From: Darrius Wright <49100831+softwarewright@users.noreply.github.com> Date: Thu, 29 Jul 2021 06:06:00 -0600 Subject: [PATCH] Fix failure with `isMultiple` when `isRequired` function returns `false` (#194) --- index.js | 2 +- .../fixture-conditional-required-multiple.js | 21 +++++++++++++++++++ test/is-required-flag.js | 10 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100755 test/fixtures/fixture-conditional-required-multiple.js diff --git a/index.js b/index.js index 894ff2d..b255b73 100644 --- a/index.js +++ b/index.js @@ -26,7 +26,7 @@ const isFlagMissing = (flagName, definedFlags, receivedFlags, input) => { return isFlagRequired; } - return flag.isMultiple && receivedFlags[flagName].length === 0; + return flag.isMultiple && receivedFlags[flagName].length === 0 && isFlagRequired; }; const getMissingRequiredFlags = (flags, receivedFlags, input) => { diff --git a/test/fixtures/fixture-conditional-required-multiple.js b/test/fixtures/fixture-conditional-required-multiple.js new file mode 100755 index 0000000..25c63f7 --- /dev/null +++ b/test/fixtures/fixture-conditional-required-multiple.js @@ -0,0 +1,21 @@ +#!/usr/bin/env node +import meow from '../../index.js'; + +const cli = meow({ + importMeta: import.meta, + description: 'Custom description', + help: ` + Usage + foo + `, + flags: { + test: { + type: 'number', + alias: 't', + isRequired: () => false, + isMultiple: true, + }, + }, +}); + +console.log(cli.flags.test); diff --git a/test/is-required-flag.js b/test/is-required-flag.js index b77bf54..75279fd 100644 --- a/test/is-required-flag.js +++ b/test/is-required-flag.js @@ -7,6 +7,11 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const fixtureRequiredPath = path.join(__dirname, 'fixtures', 'fixture-required.js'); const fixtureRequiredFunctionPath = path.join(__dirname, 'fixtures', 'fixture-required-function.js'); const fixtureRequiredMultiplePath = path.join(__dirname, 'fixtures', 'fixture-required-multiple.js'); +const fixtureConditionalRequiredMultiplePath = path.join( + __dirname, + 'fixtures', + 'fixture-conditional-required-multiple.js', +); test('spawn cli and test not specifying required flags', async t => { try { @@ -118,3 +123,8 @@ test('spawn cli and test isRequired with isMultiple giving no values, but flag i t.regex(stderr, /--test/); } }); + +test('spawn cli and test isRequire function that returns false with isMultiple given no values, but flag is not given', async t => { + const {stdout} = await execa(fixtureConditionalRequiredMultiplePath, []); + t.is(stdout, '[]'); +});