Skip to content

Commit 5f2f6ba

Browse files
authored
Merge branch 'alpha' into feat-add-graphql-to-parse-config
2 parents d8d0d79 + 6d67013 commit 5f2f6ba

File tree

5 files changed

+239
-52
lines changed

5 files changed

+239
-52
lines changed

package-lock.json

Lines changed: 67 additions & 42 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"commander": "13.1.0",
3131
"cors": "2.8.5",
3232
"deepcopy": "2.1.0",
33-
"express": "5.1.0",
33+
"express": "5.2.1",
3434
"express-rate-limit": "7.5.1",
3535
"follow-redirects": "1.15.9",
3636
"graphql": "16.11.0",

resources/buildConfigDefinitions.js

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ function mapperFor(elt, t) {
155155
return wrap(t.identifier('objectParser'));
156156
} else if (t.isBooleanTypeAnnotation(elt)) {
157157
return wrap(t.identifier('booleanParser'));
158+
} else if (t.isObjectTypeAnnotation(elt)) {
159+
return wrap(t.identifier('objectParser'));
158160
} else if (t.isGenericTypeAnnotation(elt)) {
159161
const type = elt.typeAnnotation.id.name;
160162
if (type == 'Adapter') {
@@ -372,12 +374,18 @@ This code has been generated by resources/buildConfigDefinitions.js
372374
Do not edit manually, but update Options/index.js
373375
`;
374376

375-
const babel = require('@babel/core');
376-
const res = babel.transformFileSync('./src/Options/index.js', {
377-
plugins: [plugin, '@babel/transform-flow-strip-types'],
378-
babelrc: false,
379-
auxiliaryCommentBefore,
380-
sourceMaps: false,
381-
});
382-
require('fs').writeFileSync('./src/Options/Definitions.js', res.code + '\n');
383-
require('fs').writeFileSync('./src/Options/docs.js', docs);
377+
// Only run the transformation when executed directly, not when imported by tests
378+
if (require.main === module) {
379+
const babel = require('@babel/core');
380+
const res = babel.transformFileSync('./src/Options/index.js', {
381+
plugins: [plugin, '@babel/transform-flow-strip-types'],
382+
babelrc: false,
383+
auxiliaryCommentBefore,
384+
sourceMaps: false,
385+
});
386+
require('fs').writeFileSync('./src/Options/Definitions.js', res.code + '\n');
387+
require('fs').writeFileSync('./src/Options/docs.js', docs);
388+
}
389+
390+
// Export mapperFor for testing
391+
module.exports = { mapperFor };
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
const t = require('@babel/types');
2+
const { mapperFor } = require('../resources/buildConfigDefinitions');
3+
4+
describe('buildConfigDefinitions', () => {
5+
describe('mapperFor', () => {
6+
it('should return objectParser for ObjectTypeAnnotation', () => {
7+
const mockElement = {
8+
type: 'ObjectTypeAnnotation',
9+
};
10+
11+
const result = mapperFor(mockElement, t);
12+
13+
expect(t.isMemberExpression(result)).toBe(true);
14+
expect(result.object.name).toBe('parsers');
15+
expect(result.property.name).toBe('objectParser');
16+
});
17+
18+
it('should return objectParser for AnyTypeAnnotation', () => {
19+
const mockElement = {
20+
type: 'AnyTypeAnnotation',
21+
};
22+
23+
const result = mapperFor(mockElement, t);
24+
25+
expect(t.isMemberExpression(result)).toBe(true);
26+
expect(result.object.name).toBe('parsers');
27+
expect(result.property.name).toBe('objectParser');
28+
});
29+
30+
it('should return arrayParser for ArrayTypeAnnotation', () => {
31+
const mockElement = {
32+
type: 'ArrayTypeAnnotation',
33+
};
34+
35+
const result = mapperFor(mockElement, t);
36+
37+
expect(t.isMemberExpression(result)).toBe(true);
38+
expect(result.object.name).toBe('parsers');
39+
expect(result.property.name).toBe('arrayParser');
40+
});
41+
42+
it('should return booleanParser for BooleanTypeAnnotation', () => {
43+
const mockElement = {
44+
type: 'BooleanTypeAnnotation',
45+
};
46+
47+
const result = mapperFor(mockElement, t);
48+
49+
expect(t.isMemberExpression(result)).toBe(true);
50+
expect(result.object.name).toBe('parsers');
51+
expect(result.property.name).toBe('booleanParser');
52+
});
53+
54+
it('should return numberParser call expression for NumberTypeAnnotation', () => {
55+
const mockElement = {
56+
type: 'NumberTypeAnnotation',
57+
name: 'testNumber',
58+
};
59+
60+
const result = mapperFor(mockElement, t);
61+
62+
expect(t.isCallExpression(result)).toBe(true);
63+
expect(result.callee.property.name).toBe('numberParser');
64+
expect(result.arguments[0].value).toBe('testNumber');
65+
});
66+
67+
it('should return moduleOrObjectParser for Adapter GenericTypeAnnotation', () => {
68+
const mockElement = {
69+
type: 'GenericTypeAnnotation',
70+
typeAnnotation: {
71+
id: {
72+
name: 'Adapter',
73+
},
74+
},
75+
};
76+
77+
const result = mapperFor(mockElement, t);
78+
79+
expect(t.isMemberExpression(result)).toBe(true);
80+
expect(result.object.name).toBe('parsers');
81+
expect(result.property.name).toBe('moduleOrObjectParser');
82+
});
83+
84+
it('should return numberOrBooleanParser for NumberOrBoolean GenericTypeAnnotation', () => {
85+
const mockElement = {
86+
type: 'GenericTypeAnnotation',
87+
typeAnnotation: {
88+
id: {
89+
name: 'NumberOrBoolean',
90+
},
91+
},
92+
};
93+
94+
const result = mapperFor(mockElement, t);
95+
96+
expect(t.isMemberExpression(result)).toBe(true);
97+
expect(result.object.name).toBe('parsers');
98+
expect(result.property.name).toBe('numberOrBooleanParser');
99+
});
100+
101+
it('should return numberOrStringParser call expression for NumberOrString GenericTypeAnnotation', () => {
102+
const mockElement = {
103+
type: 'GenericTypeAnnotation',
104+
name: 'testString',
105+
typeAnnotation: {
106+
id: {
107+
name: 'NumberOrString',
108+
},
109+
},
110+
};
111+
112+
const result = mapperFor(mockElement, t);
113+
114+
expect(t.isCallExpression(result)).toBe(true);
115+
expect(result.callee.property.name).toBe('numberOrStringParser');
116+
expect(result.arguments[0].value).toBe('testString');
117+
});
118+
119+
it('should return arrayParser for StringOrStringArray GenericTypeAnnotation', () => {
120+
const mockElement = {
121+
type: 'GenericTypeAnnotation',
122+
typeAnnotation: {
123+
id: {
124+
name: 'StringOrStringArray',
125+
},
126+
},
127+
};
128+
129+
const result = mapperFor(mockElement, t);
130+
131+
expect(t.isMemberExpression(result)).toBe(true);
132+
expect(result.object.name).toBe('parsers');
133+
expect(result.property.name).toBe('arrayParser');
134+
});
135+
136+
it('should return objectParser for unknown GenericTypeAnnotation', () => {
137+
const mockElement = {
138+
type: 'GenericTypeAnnotation',
139+
typeAnnotation: {
140+
id: {
141+
name: 'UnknownType',
142+
},
143+
},
144+
};
145+
146+
const result = mapperFor(mockElement, t);
147+
148+
expect(t.isMemberExpression(result)).toBe(true);
149+
expect(result.object.name).toBe('parsers');
150+
expect(result.property.name).toBe('objectParser');
151+
});
152+
});
153+
});

0 commit comments

Comments
 (0)