@@ -47,6 +47,7 @@ import {
4747 type GraphQLEnumValueConfig ,
4848 type GraphQLInputFieldConfig ,
4949 type GraphQLFieldResolver ,
50+ type GraphQLScalarTypeConverters ,
5051 GraphQLScalarType ,
5152 GraphQLObjectType ,
5253 GraphQLInterfaceType ,
@@ -73,10 +74,15 @@ import {
7374 GraphQLSchema ,
7475} from '../type/schema' ;
7576
76- export type TypeFieldResolverMap = ObjMap <
77- | ObjMap < GraphQLFieldResolver < mixed , mixed , mixed >> /* type and interface */
78- | ObjMap < any > /* enum */ ,
79- > ;
77+ export type TypeFieldResolver =
78+ /* scalars */
79+ | GraphQLScalarTypeConverters < any , any >
80+ /* type and interface */
81+ | ObjMap < GraphQLFieldResolver < mixed , mixed , mixed >>
82+ /* enum */
83+ | ObjMap < any > ;
84+
85+ export type TypeFieldResolverMap = ObjMap < TypeFieldResolver > ;
8086
8187export type BuildSchemaOptions = {
8288 ...GraphQLSchemaValidationOptions ,
@@ -127,6 +133,7 @@ export type BuildSchemaOptions = {
127133 * - resolvers — map of named types
128134 * - Object, Interface — field resolvers
129135 * - Enum — External string → any internal value
136+ * - Scalars — serialize, parseValue, parseLiteral
130137 *
131138 */
132139export function buildASTSchema (
@@ -272,7 +279,7 @@ export class ASTDefinitionBuilder {
272279 type : ( this . getWrappedType ( field . type ) : any ) ,
273280 description : getDescription ( field , this . _options ) ,
274281 args : keyByNameNode ( field . arguments || [ ] , arg => this . buildArg ( arg ) ) ,
275- resolve : this . _lookupResolver ( typeName , field . name . value ) ,
282+ resolve : this . _lookupResolverField ( typeName , field . name . value ) ,
276283 deprecationReason : getDeprecationReason ( field ) ,
277284 astNode : field ,
278285 } ;
@@ -309,7 +316,7 @@ export class ASTDefinitionBuilder {
309316 typeName ?: string ,
310317 ) : GraphQLEnumValueConfig {
311318 return {
312- value : this . _lookupResolver ( typeName , value . name . value ) ,
319+ value : this . _lookupResolverField ( typeName , value . name . value ) ,
313320 description : getDescription ( value , this . _options ) ,
314321 deprecationReason : getDeprecationReason ( value ) ,
315322 astNode : value ,
@@ -423,9 +430,17 @@ export class ASTDefinitionBuilder {
423430 }
424431
425432 _makeScalarDef ( astNode : ScalarTypeDefinitionNode ) {
433+ const name = astNode . name . value ;
434+ const resolver = ( ( this . _lookupResolver (
435+ name ,
436+ ) : any ) : GraphQLScalarTypeConverters < any , any > ) ;
437+
426438 return new GraphQLScalarType ( {
427- name : astNode . name . value ,
439+ name,
428440 description : getDescription ( astNode , this . _options ) ,
441+ serialize : ( resolver && resolver . serialize ) || undefined ,
442+ parseValue : ( resolver && resolver . parseValue ) || undefined ,
443+ parseLiteral : ( resolver && resolver . parseLiteral ) || undefined ,
429444 astNode,
430445 } ) ;
431446 }
@@ -443,16 +458,18 @@ export class ASTDefinitionBuilder {
443458 } ) ;
444459 }
445460
446- _lookupResolver ( typeName : ?string , key : string ) {
461+ _lookupResolver ( typeName : ?string ) {
462+ const opts = this . _options ;
447463 return (
448- ( typeName &&
449- this . _options &&
450- this . _options . resolvers &&
451- this . _options . resolvers [ typeName ] &&
452- this . _options . resolvers [ typeName ] [ key ] ) ||
464+ ( typeName && opts && opts . resolvers && opts . resolvers [ typeName ] ) ||
453465 undefined
454466 ) ;
455467 }
468+
469+ _lookupResolverField ( typeName : ?string , key : string ) {
470+ const resolver = this . _lookupResolver ( typeName ) ;
471+ return ( resolver && resolver [ key ] ) || undefined ;
472+ }
456473}
457474
458475function keyByNameNode < T : { + name : NameNode , ... } , V > (
0 commit comments