@@ -74,7 +74,8 @@ import {
74
74
} from '../type/schema' ;
75
75
76
76
export type TypeFieldResolverMap = ObjMap <
77
- ObjMap < GraphQLFieldResolver < mixed , mixed , mixed >> ,
77
+ | ObjMap < GraphQLFieldResolver < mixed , mixed , mixed >> /* type and interface */
78
+ | ObjMap < any > /* enum */ ,
78
79
> ;
79
80
80
81
export type BuildSchemaOptions = {
@@ -259,22 +260,14 @@ export class ASTDefinitionBuilder {
259
260
field : FieldDefinitionNode ,
260
261
typeName ?: string ,
261
262
) : GraphQLFieldConfig < mixed , mixed > {
262
- const resolve =
263
- ( typeName &&
264
- this . _options &&
265
- this . _options . resolvers &&
266
- this . _options . resolvers [ typeName ] &&
267
- this . _options . resolvers [ typeName ] [ field . name . value ] ) ||
268
- undefined ;
269
-
270
263
return {
271
264
// Note: While this could make assertions to get the correctly typed
272
265
// value, that would throw immediately while type system validation
273
266
// with validateSchema() will produce more actionable results.
274
267
type : ( this . getWrappedType ( field . type ) : any ) ,
275
268
description : getDescription ( field , this . _options ) ,
276
269
args : keyByNameNode ( field . arguments || [ ] , arg => this . buildArg ( arg ) ) ,
277
- resolve,
270
+ resolve : this . _lookupResolver ( typeName , field . name . value ) ,
278
271
deprecationReason : getDeprecationReason ( field ) ,
279
272
astNode : field ,
280
273
} ;
@@ -306,8 +299,12 @@ export class ASTDefinitionBuilder {
306
299
} ;
307
300
}
308
301
309
- buildEnumValue ( value : EnumValueDefinitionNode ) : GraphQLEnumValueConfig {
302
+ buildEnumValue (
303
+ value : EnumValueDefinitionNode ,
304
+ typeName ?: string ,
305
+ ) : GraphQLEnumValueConfig {
310
306
return {
307
+ value : this . _lookupResolver ( typeName , value . name . value ) ,
311
308
description : getDescription ( value , this . _options ) ,
312
309
deprecationReason : getDeprecationReason ( value ) ,
313
310
astNode : value ,
@@ -389,11 +386,14 @@ export class ASTDefinitionBuilder {
389
386
390
387
_makeEnumDef ( astNode : EnumTypeDefinitionNode ) {
391
388
const valueNodes = astNode . values || [ ] ;
389
+ const name = astNode . name . value ;
392
390
393
391
return new GraphQLEnumType ( {
394
- name : astNode . name . value ,
392
+ name,
395
393
description : getDescription ( astNode , this . _options ) ,
396
- values : keyByNameNode ( valueNodes , value => this . buildEnumValue ( value ) ) ,
394
+ values : keyByNameNode ( valueNodes , value =>
395
+ this . buildEnumValue ( value , name ) ,
396
+ ) ,
397
397
astNode,
398
398
} ) ;
399
399
}
@@ -437,6 +437,17 @@ export class ASTDefinitionBuilder {
437
437
astNode : def ,
438
438
} ) ;
439
439
}
440
+
441
+ _lookupResolver ( typeName : ?string , key : string ) {
442
+ return (
443
+ ( typeName &&
444
+ this . _options &&
445
+ this . _options . resolvers &&
446
+ this . _options . resolvers [ typeName ] &&
447
+ this . _options . resolvers [ typeName ] [ key ] ) ||
448
+ undefined
449
+ ) ;
450
+ }
440
451
}
441
452
442
453
function keyByNameNode < T : { + name : NameNode , ... } , V > (
0 commit comments