From 1a8a3ec3e4defc3e9577f531a51810ba5ceeb0c2 Mon Sep 17 00:00:00 2001 From: Piotr Date: Thu, 11 Apr 2024 14:55:37 +0200 Subject: [PATCH] empty string should be evaulated as false for Boolean config --- packages/convict/src/main.js | 10 +++++++++- packages/convict/test/format.test.js | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/convict/src/main.js b/packages/convict/src/main.js index 24749984..edb36a81 100644 --- a/packages/convict/src/main.js +++ b/packages/convict/src/main.js @@ -410,7 +410,7 @@ function coerce(k, v, schema, instance) { case 'int': v = parseInt(v, 10); break case 'port_or_windows_named_pipe': v = isWindowsNamedPipe(v) ? v : parseInt(v, 10); break case 'number': v = parseFloat(v); break - case 'boolean': v = String(v).toLowerCase() !== 'false'; break + case 'boolean': v = parseBoolean(v); break case 'array': v = v.split(','); break case 'object': v = JSON.parse(v); break case 'regexp': v = new RegExp(v); break @@ -422,6 +422,14 @@ function coerce(k, v, schema, instance) { return v } +function parseBoolean(v) { + if (String(v).toLowerCase() === 'false') { + return false + } + + return Boolean(v) +} + function loadFile(path) { const segments = path.split('.') const extension = segments.length > 1 ? segments.pop() : '' diff --git a/packages/convict/test/format.test.js b/packages/convict/test/format.test.js index 92e1cbd9..e01ffcec 100644 --- a/packages/convict/test/format.test.js +++ b/packages/convict/test/format.test.js @@ -94,12 +94,22 @@ describe('convict formats', function() { optional: { format: '*', default: undefined + }, + boolean: { + format: Boolean, + default: false } } }) }) + test('validates empty string boolean', function() { + conf.set('foo.boolean', '') + const val = conf.get('foo.boolean') + expect(val).toBe(false) + }) + test('validates default schema', function() { expect(function() { conf.validate()