Skip to content
Prev Previous commit
Next Next commit
fix: multiple option value instead of presence
  • Loading branch information
Eomm committed Oct 7, 2022
commit 15d988ae2f1862d09b8b51412353fbca153cce4e
14 changes: 6 additions & 8 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,20 +328,18 @@ const parseArgs = (config = kEmptyObject) => {
}
}

const hasMultipleFlag = ObjectHasOwn(optionConfig, 'multiple');
if (hasMultipleFlag) {
validateBoolean(optionConfig.multiple, `options.${longOption}.multiple`);
}
validateBoolean(ObjectHasOwn(optionConfig, 'multiple'), `options.${longOption}.multiple`);

if (ObjectHasOwn(optionConfig, 'defaultValue')) {
const defaultValue = objectGetOwn(optionConfig, 'defaultValue');
if (optionType === 'string' && !hasMultipleFlag) {
const multipleOption = objectGetOwn(optionConfig, 'multiple');
if (optionType === 'string' && !multipleOption) {
validateString(defaultValue, `options.${longOption}.defaultValue`);
} else if (optionType === 'string' && hasMultipleFlag) {
} else if (optionType === 'string' && multipleOption) {
validateStringArray(defaultValue, `options.${longOption}.defaultValue`);
} else if (optionType === 'boolean' && !hasMultipleFlag) {
} else if (optionType === 'boolean' && !multipleOption) {
validateBoolean(defaultValue, `options.${longOption}.defaultValue`);
} else if (optionType === 'boolean' && hasMultipleFlag) {
} else if (optionType === 'boolean' && multipleOption) {
validateBooleanArray(defaultValue, `options.${longOption}.defaultValue`);
}
}
Expand Down
11 changes: 11 additions & 0 deletions test/default-values.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,14 @@ test('proto as default value must be ignored', (t) => {
t.deepEqual(result, expected);
t.end();
});


test('multiple as false should not expect an array', (t) => {
Comment thread
shadowspawn marked this conversation as resolved.
Outdated
const args = [];
const options = { alpha: { type: 'string', multiple: false, defaultValue: 42 } };
t.throws(() => {
parseArgs({ args, options });
}, /alpha\.defaultValue must be String/
);
t.end();
});