fix: NumberOrBoolean config option (cluster) value not coerced from env/CLI (#10531)

This commit is contained in:
Daniel
2026-07-07 15:37:06 +02:00
committed by GitHub
parent 7e9d53a083
commit 459786fd41
4 changed files with 17 additions and 8 deletions
+1 -1
View File
@@ -177,7 +177,7 @@ function mapperFor(elt, t) {
return wrap(t.identifier('moduleOrObjectParser'));
}
if (type == 'NumberOrBoolean') {
return wrap(t.identifier('numberOrBooleanParser'));
return t.callExpression(wrap(t.identifier('numberOrBoolParser')), [t.stringLiteral(elt.name)]);
}
if (type == 'NumberOrString') {
return t.callExpression(wrap(t.identifier('numberOrStringParser')), [t.stringLiteral(elt.name)]);
+10 -2
View File
@@ -178,7 +178,7 @@ describe('definitions', () => {
if (typeof definition.required !== 'undefined') {
expect(typeof definition.required).toBe('boolean');
}
if (typeof definition.action !== 'undefined') {
if ('action' in definition) {
expect(typeof definition.action).toBe('function');
}
}
@@ -189,6 +189,14 @@ describe('definitions', () => {
definitions.facebookAppIds.action();
}).toThrow();
});
it('should coerce the NumberOrBoolean cluster option value', () => {
const action = definitions.cluster.action;
expect(typeof action).toBe('function');
expect(action('2')).toBe(2);
expect(action('true')).toBe(true);
expect(action('false')).toBe(false);
});
});
describe('LiveQuery definitions', () => {
@@ -203,7 +211,7 @@ describe('LiveQuery definitions', () => {
if (typeof definition.required !== 'undefined') {
expect(typeof definition.required).toBe('boolean');
}
if (typeof definition.action !== 'undefined') {
if ('action' in definition) {
expect(typeof definition.action).toBe('function');
}
}
+5 -4
View File
@@ -81,9 +81,10 @@ describe('buildConfigDefinitions', () => {
expect(result.property.name).toBe('moduleOrObjectParser');
});
it('should return numberOrBooleanParser for NumberOrBoolean GenericTypeAnnotation', () => {
it('should return numberOrBoolParser call expression for NumberOrBoolean GenericTypeAnnotation', () => {
const mockElement = {
type: 'GenericTypeAnnotation',
name: 'cluster',
typeAnnotation: {
id: {
name: 'NumberOrBoolean',
@@ -93,9 +94,9 @@ describe('buildConfigDefinitions', () => {
const result = mapperFor(mockElement, t);
expect(t.isMemberExpression(result)).toBe(true);
expect(result.object.name).toBe('parsers');
expect(result.property.name).toBe('numberOrBooleanParser');
expect(t.isCallExpression(result)).toBe(true);
expect(result.callee.property.name).toBe('numberOrBoolParser');
expect(result.arguments[0].value).toBe('cluster');
});
it('should return numberOrStringParser call expression for NumberOrString GenericTypeAnnotation', () => {
+1 -1
View File
@@ -139,7 +139,7 @@ module.exports.ParseServerOptions = {
cluster: {
env: 'PARSE_SERVER_CLUSTER',
help: 'Run with cluster, optionally set the number of processes default to os.cpus().length',
action: parsers.numberOrBooleanParser,
action: parsers.numberOrBoolParser('cluster'),
},
collectionPrefix: {
env: 'PARSE_SERVER_COLLECTION_PREFIX',