chore: Add objectParser for ObjectTypeAnnotation in Parse Server options (#9912)
This commit is contained in:
@@ -155,6 +155,8 @@ function mapperFor(elt, t) {
|
|||||||
return wrap(t.identifier('objectParser'));
|
return wrap(t.identifier('objectParser'));
|
||||||
} else if (t.isBooleanTypeAnnotation(elt)) {
|
} else if (t.isBooleanTypeAnnotation(elt)) {
|
||||||
return wrap(t.identifier('booleanParser'));
|
return wrap(t.identifier('booleanParser'));
|
||||||
|
} else if (t.isObjectTypeAnnotation(elt)) {
|
||||||
|
return wrap(t.identifier('objectParser'));
|
||||||
} else if (t.isGenericTypeAnnotation(elt)) {
|
} else if (t.isGenericTypeAnnotation(elt)) {
|
||||||
const type = elt.typeAnnotation.id.name;
|
const type = elt.typeAnnotation.id.name;
|
||||||
if (type == 'Adapter') {
|
if (type == 'Adapter') {
|
||||||
@@ -372,12 +374,18 @@ This code has been generated by resources/buildConfigDefinitions.js
|
|||||||
Do not edit manually, but update Options/index.js
|
Do not edit manually, but update Options/index.js
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const babel = require('@babel/core');
|
// Only run the transformation when executed directly, not when imported by tests
|
||||||
const res = babel.transformFileSync('./src/Options/index.js', {
|
if (require.main === module) {
|
||||||
plugins: [plugin, '@babel/transform-flow-strip-types'],
|
const babel = require('@babel/core');
|
||||||
babelrc: false,
|
const res = babel.transformFileSync('./src/Options/index.js', {
|
||||||
auxiliaryCommentBefore,
|
plugins: [plugin, '@babel/transform-flow-strip-types'],
|
||||||
sourceMaps: false,
|
babelrc: false,
|
||||||
});
|
auxiliaryCommentBefore,
|
||||||
require('fs').writeFileSync('./src/Options/Definitions.js', res.code + '\n');
|
sourceMaps: false,
|
||||||
require('fs').writeFileSync('./src/Options/docs.js', docs);
|
});
|
||||||
|
require('fs').writeFileSync('./src/Options/Definitions.js', res.code + '\n');
|
||||||
|
require('fs').writeFileSync('./src/Options/docs.js', docs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Export mapperFor for testing
|
||||||
|
module.exports = { mapperFor };
|
||||||
|
|||||||
153
spec/buildConfigDefinitions.spec.js
Normal file
153
spec/buildConfigDefinitions.spec.js
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
const t = require('@babel/types');
|
||||||
|
const { mapperFor } = require('../resources/buildConfigDefinitions');
|
||||||
|
|
||||||
|
describe('buildConfigDefinitions', () => {
|
||||||
|
describe('mapperFor', () => {
|
||||||
|
it('should return objectParser for ObjectTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'ObjectTypeAnnotation',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('objectParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return objectParser for AnyTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'AnyTypeAnnotation',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('objectParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return arrayParser for ArrayTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'ArrayTypeAnnotation',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('arrayParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return booleanParser for BooleanTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'BooleanTypeAnnotation',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('booleanParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return numberParser call expression for NumberTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'NumberTypeAnnotation',
|
||||||
|
name: 'testNumber',
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isCallExpression(result)).toBe(true);
|
||||||
|
expect(result.callee.property.name).toBe('numberParser');
|
||||||
|
expect(result.arguments[0].value).toBe('testNumber');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return moduleOrObjectParser for Adapter GenericTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'GenericTypeAnnotation',
|
||||||
|
typeAnnotation: {
|
||||||
|
id: {
|
||||||
|
name: 'Adapter',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('moduleOrObjectParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return numberOrBooleanParser for NumberOrBoolean GenericTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'GenericTypeAnnotation',
|
||||||
|
typeAnnotation: {
|
||||||
|
id: {
|
||||||
|
name: 'NumberOrBoolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('numberOrBooleanParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return numberOrStringParser call expression for NumberOrString GenericTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'GenericTypeAnnotation',
|
||||||
|
name: 'testString',
|
||||||
|
typeAnnotation: {
|
||||||
|
id: {
|
||||||
|
name: 'NumberOrString',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isCallExpression(result)).toBe(true);
|
||||||
|
expect(result.callee.property.name).toBe('numberOrStringParser');
|
||||||
|
expect(result.arguments[0].value).toBe('testString');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return arrayParser for StringOrStringArray GenericTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'GenericTypeAnnotation',
|
||||||
|
typeAnnotation: {
|
||||||
|
id: {
|
||||||
|
name: 'StringOrStringArray',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('arrayParser');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return objectParser for unknown GenericTypeAnnotation', () => {
|
||||||
|
const mockElement = {
|
||||||
|
type: 'GenericTypeAnnotation',
|
||||||
|
typeAnnotation: {
|
||||||
|
id: {
|
||||||
|
name: 'UnknownType',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = mapperFor(mockElement, t);
|
||||||
|
|
||||||
|
expect(t.isMemberExpression(result)).toBe(true);
|
||||||
|
expect(result.object.name).toBe('parsers');
|
||||||
|
expect(result.property.name).toBe('objectParser');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -111,6 +111,7 @@ module.exports.ParseServerOptions = {
|
|||||||
env: 'PARSE_SERVER_AUTH_PROVIDERS',
|
env: 'PARSE_SERVER_AUTH_PROVIDERS',
|
||||||
help:
|
help:
|
||||||
'Configuration for your authentication providers, as stringified JSON. See http://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication',
|
'Configuration for your authentication providers, as stringified JSON. See http://docs.parseplatform.org/parse-server/guide/#oauth-and-3rd-party-authentication',
|
||||||
|
action: parsers.objectParser,
|
||||||
},
|
},
|
||||||
cacheAdapter: {
|
cacheAdapter: {
|
||||||
env: 'PARSE_SERVER_CACHE_ADAPTER',
|
env: 'PARSE_SERVER_CACHE_ADAPTER',
|
||||||
|
|||||||
Reference in New Issue
Block a user