Skip to content

Commit a756939

Browse files
committed
fix(getEnumType): Bypass graphql 0.9.4 block for true/false values
1 parent 7d58b89 commit a756939

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/ElasticApiParser.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ export default class ElasticApiParser {
362362
case 'list':
363363
return GraphQLJSON;
364364
case 'enum':
365-
// $FlowFixMe
366365
if (Array.isArray(paramCfg.options)) {
367366
return this.getEnumType(fieldName, paramCfg.options);
368367
}
@@ -380,7 +379,7 @@ export default class ElasticApiParser {
380379
}
381380
}
382381

383-
getEnumType(fieldName: string, vals: string[]): GraphQLEnumType {
382+
getEnumType(fieldName: string, vals: mixed[]): GraphQLEnumType {
384383
const key = fieldName;
385384
const subKey = JSON.stringify(vals);
386385

@@ -393,9 +392,20 @@ export default class ElasticApiParser {
393392
(result, val) => {
394393
if (val === '') {
395394
result.empty_string = { value: '' };
395+
} else if (val === 'true') {
396+
result.true_string = { value: 'true' };
397+
} else if (val === true) {
398+
result.true_boolean = { value: true };
399+
} else if (val === 'false') {
400+
result.false_string = { value: 'false' };
401+
} else if (val === false) {
402+
result.false_boolean = { value: false };
403+
} else if (val === 'null') {
404+
result.null_string = { value: 'null' };
396405
} else if (Number.isFinite(val)) {
406+
// $FlowFixMe
397407
result[`number_${val}`] = { value: val };
398-
} else {
408+
} else if (typeof val === 'string') {
399409
result[val] = { value: val };
400410
}
401411
return result;

src/__tests__/ElasticApiParser-test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,31 @@ describe('ElasticApiParser', () => {
311311
});
312312
});
313313

314+
it('should convert `true` to `true_value` (same for `false`)', () => {
315+
// This is fix for https://github.com/graphql/graphql-js/pull/812
316+
// Which throw error on `true`, `false` and `null`.
317+
// But we allow to use this values, just renaming it.
318+
const type = parser.getEnumType('f1', ['true', true, 'false', false]);
319+
expect(type).toBeInstanceOf(GraphQLEnumType);
320+
expect(type._values[0]).toMatchObject({
321+
name: 'true_string',
322+
value: 'true',
323+
});
324+
expect(type._values[1]).toMatchObject({
325+
name: 'true_boolean',
326+
value: true,
327+
});
328+
expect(type._values[2]).toMatchObject({
329+
name: 'false_string',
330+
value: 'false',
331+
});
332+
expect(type._values[3]).toMatchObject({
333+
name: 'false_boolean',
334+
value: false,
335+
});
336+
});
337+
314338
it('should convert 1 to number_1', () => {
315-
// $FlowFixMe
316339
const type = parser.getEnumType('f1', [1]);
317340
expect(type).toBeInstanceOf(GraphQLEnumType);
318341
expect(type._values[0]).toMatchObject({ name: 'number_1', value: 1 });

0 commit comments

Comments
 (0)