Skip to content

Commit 1a82c35

Browse files
toConfig: allows 'extensionASTNodes' to be undefined (#2184)
We should have consistent behaviour for all properties returned by `toConfig` and since `extensions` is optional that mean `extensionASTNodes` should also be optional
1 parent d9cc4b9 commit 1a82c35

File tree

3 files changed

+55
-21
lines changed

3 files changed

+55
-21
lines changed

src/type/definition.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ export class GraphQLScalarType {
586586
parseValue: GraphQLScalarValueParser<*>,
587587
parseLiteral: GraphQLScalarLiteralParser<*>,
588588
extensions: ?ReadOnlyObjMap<mixed>,
589-
extensionASTNodes: $ReadOnlyArray<ScalarTypeExtensionNode>,
589+
extensionASTNodes: ?$ReadOnlyArray<ScalarTypeExtensionNode>,
590590
|} {
591591
return {
592592
name: this.name,
@@ -596,7 +596,7 @@ export class GraphQLScalarType {
596596
parseLiteral: this.parseLiteral,
597597
extensions: this.extensions,
598598
astNode: this.astNode,
599-
extensionASTNodes: this.extensionASTNodes || [],
599+
extensionASTNodes: this.extensionASTNodes,
600600
};
601601
}
602602

@@ -715,7 +715,7 @@ export class GraphQLObjectType {
715715
interfaces: Array<GraphQLInterfaceType>,
716716
fields: GraphQLFieldConfigMap<*, *>,
717717
extensions: ?ReadOnlyObjMap<mixed>,
718-
extensionASTNodes: $ReadOnlyArray<ObjectTypeExtensionNode>,
718+
extensionASTNodes: ?$ReadOnlyArray<ObjectTypeExtensionNode>,
719719
|} {
720720
return {
721721
name: this.name,
@@ -725,7 +725,7 @@ export class GraphQLObjectType {
725725
isTypeOf: this.isTypeOf,
726726
extensions: this.extensions,
727727
astNode: this.astNode,
728-
extensionASTNodes: this.extensionASTNodes || [],
728+
extensionASTNodes: this.extensionASTNodes,
729729
};
730730
}
731731

@@ -1005,7 +1005,7 @@ export class GraphQLInterfaceType {
10051005
...GraphQLInterfaceTypeConfig<*, *>,
10061006
fields: GraphQLFieldConfigMap<*, *>,
10071007
extensions: ?ReadOnlyObjMap<mixed>,
1008-
extensionASTNodes: $ReadOnlyArray<InterfaceTypeExtensionNode>,
1008+
extensionASTNodes: ?$ReadOnlyArray<InterfaceTypeExtensionNode>,
10091009
|} {
10101010
return {
10111011
name: this.name,
@@ -1014,7 +1014,7 @@ export class GraphQLInterfaceType {
10141014
resolveType: this.resolveType,
10151015
extensions: this.extensions,
10161016
astNode: this.astNode,
1017-
extensionASTNodes: this.extensionASTNodes || [],
1017+
extensionASTNodes: this.extensionASTNodes,
10181018
};
10191019
}
10201020

@@ -1103,7 +1103,7 @@ export class GraphQLUnionType {
11031103
...GraphQLUnionTypeConfig<*, *>,
11041104
types: Array<GraphQLObjectType>,
11051105
extensions: ?ReadOnlyObjMap<mixed>,
1106-
extensionASTNodes: $ReadOnlyArray<UnionTypeExtensionNode>,
1106+
extensionASTNodes: ?$ReadOnlyArray<UnionTypeExtensionNode>,
11071107
|} {
11081108
return {
11091109
name: this.name,
@@ -1112,7 +1112,7 @@ export class GraphQLUnionType {
11121112
resolveType: this.resolveType,
11131113
extensions: this.extensions,
11141114
astNode: this.astNode,
1115-
extensionASTNodes: this.extensionASTNodes || [],
1115+
extensionASTNodes: this.extensionASTNodes,
11161116
};
11171117
}
11181118

@@ -1236,7 +1236,7 @@ export class GraphQLEnumType /* <T> */ {
12361236
toConfig(): {|
12371237
...GraphQLEnumTypeConfig,
12381238
extensions: ?ReadOnlyObjMap<mixed>,
1239-
extensionASTNodes: $ReadOnlyArray<EnumTypeExtensionNode>,
1239+
extensionASTNodes: ?$ReadOnlyArray<EnumTypeExtensionNode>,
12401240
|} {
12411241
const values = keyValMap(
12421242
this.getValues(),
@@ -1256,7 +1256,7 @@ export class GraphQLEnumType /* <T> */ {
12561256
values,
12571257
extensions: this.extensions,
12581258
astNode: this.astNode,
1259-
extensionASTNodes: this.extensionASTNodes || [],
1259+
extensionASTNodes: this.extensionASTNodes,
12601260
};
12611261
}
12621262

@@ -1379,7 +1379,7 @@ export class GraphQLInputObjectType {
13791379
...GraphQLInputObjectTypeConfig,
13801380
fields: GraphQLInputFieldConfigMap,
13811381
extensions: ?ReadOnlyObjMap<mixed>,
1382-
extensionASTNodes: $ReadOnlyArray<InputObjectTypeExtensionNode>,
1382+
extensionASTNodes: ?$ReadOnlyArray<InputObjectTypeExtensionNode>,
13831383
|} {
13841384
const fields = mapValue(this.getFields(), field => ({
13851385
description: field.description,
@@ -1395,7 +1395,7 @@ export class GraphQLInputObjectType {
13951395
fields,
13961396
extensions: this.extensions,
13971397
astNode: this.astNode,
1398-
extensionASTNodes: this.extensionASTNodes || [],
1398+
extensionASTNodes: this.extensionASTNodes,
13991399
};
14001400
}
14011401

src/type/schema.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ export class GraphQLSchema {
263263
types: Array<GraphQLNamedType>,
264264
directives: Array<GraphQLDirective>,
265265
extensions: ?ReadOnlyObjMap<mixed>,
266-
extensionASTNodes: $ReadOnlyArray<SchemaExtensionNode>,
266+
extensionASTNodes: ?$ReadOnlyArray<SchemaExtensionNode>,
267267
assumeValid: boolean,
268268
|} {
269269
return {
@@ -274,7 +274,7 @@ export class GraphQLSchema {
274274
directives: this.getDirectives().slice(),
275275
extensions: this.extensions,
276276
astNode: this.astNode,
277-
extensionASTNodes: this.extensionASTNodes || [],
277+
extensionASTNodes: this.extensionASTNodes,
278278
assumeValid: this.__validationErrors !== undefined,
279279
};
280280
}

src/utilities/extendSchema.js

+41-7
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,10 @@ export function extendSchema(
202202
types: objectValues(typeMap),
203203
directives: getMergedDirectives(),
204204
astNode: schemaDef || schemaConfig.astNode,
205-
extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExts),
205+
extensionASTNodes: concatMaybeArrays(
206+
schemaConfig.extensionASTNodes,
207+
schemaExts,
208+
),
206209
});
207210

208211
// Below are functions used for producing this schema that have closed over
@@ -285,7 +288,10 @@ export function extendSchema(
285288
field => astBuilder.buildInputField(field),
286289
),
287290
}),
288-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
291+
extensionASTNodes: concatMaybeArrays(
292+
config.extensionASTNodes,
293+
extensions,
294+
),
289295
});
290296
}
291297

@@ -304,7 +310,10 @@ export function extendSchema(
304310
value => astBuilder.buildEnumValue(value),
305311
),
306312
},
307-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
313+
extensionASTNodes: concatMaybeArrays(
314+
config.extensionASTNodes,
315+
extensions,
316+
),
308317
});
309318
}
310319

@@ -314,7 +323,10 @@ export function extendSchema(
314323

315324
return new GraphQLScalarType({
316325
...config,
317-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
326+
extensionASTNodes: concatMaybeArrays(
327+
config.extensionASTNodes,
328+
extensions,
329+
),
318330
});
319331
}
320332

@@ -341,7 +353,10 @@ export function extendSchema(
341353
node => astBuilder.buildField(node),
342354
),
343355
}),
344-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
356+
extensionASTNodes: concatMaybeArrays(
357+
config.extensionASTNodes,
358+
extensions,
359+
),
345360
});
346361
}
347362

@@ -362,7 +377,10 @@ export function extendSchema(
362377
node => astBuilder.buildField(node),
363378
),
364379
}),
365-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
380+
extensionASTNodes: concatMaybeArrays(
381+
config.extensionASTNodes,
382+
extensions,
383+
),
366384
});
367385
}
368386

@@ -380,7 +398,10 @@ export function extendSchema(
380398
// validation with validateSchema() will produce more actionable results.
381399
...typeNodes.map(node => (astBuilder.getNamedType(node): any)),
382400
],
383-
extensionASTNodes: config.extensionASTNodes.concat(extensions),
401+
extensionASTNodes: concatMaybeArrays(
402+
config.extensionASTNodes,
403+
extensions,
404+
),
384405
});
385406
}
386407

@@ -399,3 +420,16 @@ export function extendSchema(
399420
};
400421
}
401422
}
423+
424+
function concatMaybeArrays<X>(
425+
...arrays: $ReadOnlyArray<?$ReadOnlyArray<X>>
426+
): ?$ReadOnlyArray<X> {
427+
// eslint-disable-next-line no-undef-init
428+
let result = undefined;
429+
for (const maybeArray of arrays) {
430+
if (maybeArray) {
431+
result = result === undefined ? maybeArray : result.concat(maybeArray);
432+
}
433+
}
434+
return result;
435+
}

0 commit comments

Comments
 (0)