From 0a210f36033e69c16dae8757c7e949f27860b4eb Mon Sep 17 00:00:00 2001 From: Manuel Spigolon Date: Sat, 24 Sep 2022 09:33:11 +0200 Subject: [PATCH] fix: default option accepts undefined as value --- lib/internal/util/parse_args/parse_args.js | 4 ++-- test/parallel/test-parse-args.mjs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/internal/util/parse_args/parse_args.js b/lib/internal/util/parse_args/parse_args.js index db7dca4cdaf09a..0c0ed4b347fd5a 100644 --- a/lib/internal/util/parse_args/parse_args.js +++ b/lib/internal/util/parse_args/parse_args.js @@ -331,8 +331,8 @@ const parseArgs = (config = kEmptyObject) => { validateBoolean(multipleOption, `options.${longOption}.multiple`); } - if (ObjectHasOwn(optionConfig, 'default')) { - const defaultValue = objectGetOwn(optionConfig, 'default'); + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { if (optionType === 'string' && !multipleOption) { validateString(defaultValue, `options.${longOption}.default`); } else if (optionType === 'string' && multipleOption) { diff --git a/test/parallel/test-parse-args.mjs b/test/parallel/test-parse-args.mjs index be9ef8b039f61d..ae39869cd36101 100644 --- a/test/parallel/test-parse-args.mjs +++ b/test/parallel/test-parse-args.mjs @@ -833,6 +833,19 @@ test('default must be a boolean when option type is boolean', () => { ); }); +test('default must accept undefined value', () => { + const args = []; + const options = { alpha: { type: 'boolean', default: undefined } }; + const result = parseArgs({ args, options }); + const expected = { + values: { + __proto__: null, + }, + positionals: [] + }; + assert.deepStrictEqual(result, expected); +}); + test('default must be a boolean array when option type is boolean and multiple', () => { const args = []; const options = { alpha: { type: 'boolean', multiple: true, default: 'not an array' } };