diff --git a/resources/buildConfigDefinitions.js b/resources/buildConfigDefinitions.js index 72a37cb912..5b9084f863 100644 --- a/resources/buildConfigDefinitions.js +++ b/resources/buildConfigDefinitions.js @@ -161,6 +161,9 @@ function mapperFor(elt, t) { if (type == 'NumberOrBoolean') { return wrap(t.identifier('numberOrBooleanParser')); } + if (type == 'NumberOrString') { + return t.callExpression(wrap(t.identifier('numberOrStringParser')), [t.stringLiteral(elt.name)]); + } if (type === 'StringOrStringArray') { return wrap(t.identifier('arrayParser')); } @@ -212,6 +215,9 @@ function parseDefaultValue(elt, value, t) { if (type == 'NumberOrBoolean') { literalValue = t.numericLiteral(parsers.numberOrBoolParser('')(value)); } + if (type == 'NumberOrString') { + literalValue = t.numericLiteral(parsers.numberOrStringParser('')(value)); + } if (nestedOptionTypes.includes(type)) { const object = parsers.objectParser(value); diff --git a/spec/parsers.spec.js b/spec/parsers.spec.js index d2a6f20991..413bdb5156 100644 --- a/spec/parsers.spec.js +++ b/spec/parsers.spec.js @@ -1,6 +1,7 @@ const { numberParser, numberOrBoolParser, + numberOrStringParser, booleanParser, objectParser, arrayParser, @@ -18,6 +19,15 @@ describe('parsers', () => { }).toThrow(); }); + it('parses correctly with numberOrStringParser', () => { + const parser = numberOrStringParser('key'); + expect(parser('100d')).toEqual('100d'); + expect(parser(100)).toEqual(100); + expect(() => { + parser(undefined); + }).toThrow(); + }); + it('parses correctly with numberOrBoolParser', () => { const parser = numberOrBoolParser('key'); expect(parser(true)).toEqual(true); diff --git a/src/Options/Definitions.js b/src/Options/Definitions.js index 8cf076f14d..a1da6c09a7 100644 --- a/src/Options/Definitions.js +++ b/src/Options/Definitions.js @@ -378,7 +378,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_MAX_LOG_FILES', help: "Maximum number of logs to keep. If not set, no logs will be removed. This can be a number of files or number of days. If using days, add 'd' as the suffix. (default: null)", - action: parsers.objectParser, + action: parsers.numberOrStringParser('maxLogFiles'), }, maxUploadSize: { env: 'PARSE_SERVER_MAX_UPLOAD_SIZE', diff --git a/src/Options/parsers.js b/src/Options/parsers.js index 812c1bc21f..384b5494ef 100644 --- a/src/Options/parsers.js +++ b/src/Options/parsers.js @@ -23,6 +23,15 @@ function numberOrBoolParser(key) { }; } +function numberOrStringParser(key) { + return function (opt) { + if (typeof opt === 'string') { + return opt; + } + return numberParser(key)(opt); + }; +} + function objectParser(opt) { if (typeof opt == 'object') { return opt; @@ -69,6 +78,7 @@ function nullParser(opt) { module.exports = { numberParser, numberOrBoolParser, + numberOrStringParser, nullParser, booleanParser, moduleOrObjectParser,