diff --git a/index.js b/index.js index 552baa44..da459c94 100644 --- a/index.js +++ b/index.js @@ -204,9 +204,7 @@ function parse(input, options) { if (options.parseNumbers && !Number.isNaN(Number(value))) { value = Number(value); - } - - if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) { + } else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) { value = value.toLowerCase() === 'true'; } diff --git a/test/parse.js b/test/parse.js index 61bba900..9ae2dc6b 100644 --- a/test/parse.js +++ b/test/parse.js @@ -253,3 +253,8 @@ test('boolean value returns as boolean if option is set', t => { t.deepEqual(queryString.parse('foo=true', {parseBooleans: true}), {foo: true}); t.deepEqual(queryString.parse('foo=false&bar=true', {parseBooleans: true}), {foo: false, bar: true}); }); + +test('boolean value returns as boolean and number value as number if both options are set', t => { + t.deepEqual(queryString.parse('foo=true&bar=1.12', {parseNumbers: true, parseBooleans: true}), {foo: true, bar: 1.12}); + t.deepEqual(queryString.parse('foo=16.32&bar=false', {parseNumbers: true, parseBooleans: true}), {foo: 16.32, bar: false}); +});