@@ -185,7 +185,7 @@ export function extendSchema(
185
185
const typeName = typeRef . name . value ;
186
186
const existingType = schema . getType ( typeName ) ;
187
187
if ( existingType ) {
188
- return getExtendedType ( existingType ) ;
188
+ return extendNamedType ( existingType ) ;
189
189
}
190
190
191
191
throw new GraphQLError (
@@ -203,12 +203,12 @@ export function extendSchema(
203
203
const existingMutationType = schema . getMutationType ( ) ;
204
204
const existingSubscriptionType = schema . getSubscriptionType ( ) ;
205
205
const operationTypes = {
206
- query : existingQueryType ? getExtendedType ( existingQueryType ) : null ,
206
+ query : existingQueryType ? extendNamedType ( existingQueryType ) : null ,
207
207
mutation : existingMutationType
208
- ? getExtendedType ( existingMutationType )
208
+ ? extendNamedType ( existingMutationType )
209
209
: null ,
210
210
subscription : existingSubscriptionType
211
- ? getExtendedType ( existingSubscriptionType )
211
+ ? extendNamedType ( existingSubscriptionType )
212
212
: null ,
213
213
} ;
214
214
@@ -228,7 +228,7 @@ export function extendSchema(
228
228
const types = [
229
229
// Iterate through all types, getting the type definition for each, ensuring
230
230
// that any type not directly referenced by a field will get created.
231
- ...objectValues ( schema . getTypeMap ( ) ) . map ( type => getExtendedType ( type ) ) ,
231
+ ...objectValues ( schema . getTypeMap ( ) ) . map ( type => extendNamedType ( type ) ) ,
232
232
// Do the same with new types.
233
233
...astBuilder . buildTypes ( objectValues ( typeDefinitionMap ) ) ,
234
234
] ;
@@ -265,30 +265,25 @@ export function extendSchema(
265
265
) ;
266
266
}
267
267
268
- function getExtendedType < T : GraphQLNamedType > (type: T): T {
269
- if ( ! extendTypeCache [ type . name ] ) {
270
- extendTypeCache [ type . name ] = extendType ( type ) ;
271
- }
272
- return (extendTypeCache[type.name]: any);
273
- }
274
-
275
- // To be called at most once per type. Only getExtendedType should call this.
276
- function extendType ( type ) {
268
+ function extendNamedType < T : GraphQLNamedType > (type: T): T {
277
269
if ( isIntrospectionType ( type ) ) {
278
270
// Introspection types are not extended.
279
271
return type ;
280
272
}
281
- if ( isObjectType ( type ) ) {
282
- return extendObjectType ( type ) ;
283
- }
284
- if ( isInterfaceType ( type ) ) {
285
- return extendInterfaceType ( type ) ;
286
- }
287
- if ( isUnionType ( type ) ) {
288
- return extendUnionType ( type ) ;
273
+
274
+ if (!extendTypeCache[type.name]) {
275
+ if ( isObjectType ( type ) ) {
276
+ extendTypeCache [ type . name ] = extendObjectType ( type ) ;
277
+ } else if (isInterfaceType(type)) {
278
+ extendTypeCache [ type . name ] = extendInterfaceType ( type ) ;
279
+ } else if (isUnionType(type)) {
280
+ extendTypeCache [ type . name ] = extendUnionType ( type ) ;
281
+ } else {
282
+ // This type is not yet extendable.
283
+ extendTypeCache [ type . name ] = type ;
284
+ }
289
285
}
290
- // This type is not yet extendable.
291
- return type ;
286
+ return ( extendTypeCache [ type . name ] : any ) ;
292
287
}
293
288
294
289
function extendObjectType ( type : GraphQLObjectType ) : GraphQLObjectType {
@@ -332,7 +327,7 @@ export function extendSchema(
332
327
return new GraphQLUnionType ( {
333
328
name : type . name ,
334
329
description : type . description ,
335
- types : type . getTypes ( ) . map ( getExtendedType ) ,
330
+ types : type . getTypes ( ) . map ( extendNamedType ) ,
336
331
astNode : type . astNode ,
337
332
resolveType : type . resolveType ,
338
333
} ) ;
@@ -341,7 +336,7 @@ export function extendSchema(
341
336
function extendImplementedInterfaces(
342
337
type: GraphQLObjectType,
343
338
): Array< GraphQLInterfaceType > {
344
- const interfaces = type . getInterfaces ( ) . map ( getExtendedType ) ;
339
+ const interfaces = type . getInterfaces ( ) . map ( extendNamedType ) ;
345
340
346
341
// If there are any extensions to the interfaces, apply those here.
347
342
const extensions = typeExtensionsMap [ type . name ] ;
@@ -367,7 +362,7 @@ export function extendSchema(
367
362
newFieldMap [ fieldName ] = {
368
363
description : field . description ,
369
364
deprecationReason : field . deprecationReason ,
370
- type : extendFieldType ( field . type ) ,
365
+ type : extendType ( field . type ) ,
371
366
args : keyMap ( field . args , arg => arg . name ) ,
372
367
astNode : field . astNode ,
373
368
resolve : field . resolve ,
@@ -395,14 +390,14 @@ export function extendSchema(
395
390
return newFieldMap;
396
391
}
397
392
398
- function extendFieldType < T : GraphQLType > (typeDef: T): T {
393
+ function extendType < T : GraphQLType > (typeDef: T): T {
399
394
if ( isListType ( typeDef ) ) {
400
- return ( GraphQLList ( extendFieldType ( typeDef . ofType ) ) : any ) ;
395
+ return ( GraphQLList ( extendType ( typeDef . ofType ) ) : any ) ;
401
396
}
402
397
if (isNonNullType(typeDef)) {
403
- return ( GraphQLNonNull ( extendFieldType ( typeDef . ofType ) ) : any ) ;
398
+ return ( GraphQLNonNull ( extendType ( typeDef . ofType ) ) : any ) ;
404
399
}
405
- return getExtendedType ( typeDef ) ;
400
+ return extendNamedType (typeDef);
406
401
}
407
402
}
408
403
0 commit comments