@@ -92,6 +92,18 @@ export function createResolvers(
92
92
resolvers [ typeName ] [ fieldName ] . resolve = resolver ;
93
93
}
94
94
95
+ if ( isDefined ( ( obj [ fieldName ] as any ) . extensions ) ) {
96
+ // some extensions allow to omit the resolve function, e.g. grafast
97
+ const defaultResolver = ( val : any ) => val ;
98
+ const resolver = wrapResolver ( {
99
+ config,
100
+ resolver : ( obj [ fieldName ] as any ) . resolve || defaultResolver ,
101
+ middlewareMap,
102
+ path,
103
+ } ) ;
104
+ resolvers [ typeName ] [ fieldName ] . resolve = resolver ;
105
+ }
106
+
95
107
// { subscribe }
96
108
if ( isDefined ( ( obj [ fieldName ] as any ) . subscribe ) ) {
97
109
const resolver = wrapResolver ( {
@@ -286,6 +298,21 @@ function addObject({
286
298
container [ typeName ] [ fieldName ] . resolve = resolver . resolve ;
287
299
}
288
300
301
+ // extensions
302
+ if ( isDefined ( resolver . extensions ) ) {
303
+ if ( container [ typeName ] [ fieldName ] . extensions ) {
304
+ throw new ResolverDuplicatedError (
305
+ `Duplicated resolver of "${ typeName } .${ fieldName } " (extensions method)` ,
306
+ useLocation ( { dirname : config . dirname , id : config . id } )
307
+ ) ;
308
+ }
309
+
310
+ ( resolver . extensions as any ) [ resolverMetadataProp ] = {
311
+ moduleId : config . id ,
312
+ } as ResolverMetadata ;
313
+ container [ typeName ] [ fieldName ] . extensions = resolver . extensions ;
314
+ }
315
+
289
316
// subscribe
290
317
if ( isDefined ( resolver . subscribe ) ) {
291
318
if ( container [ typeName ] [ fieldName ] . subscribe ) {
@@ -501,10 +528,15 @@ function isResolveFn(value: any): value is ResolveFn {
501
528
interface ResolveOptions {
502
529
resolve ?: ResolveFn ;
503
530
subscribe ?: ResolveFn ;
531
+ extensions ?: Record < string , any > ;
504
532
}
505
533
506
534
function isResolveOptions ( value : any ) : value is ResolveOptions {
507
- return isDefined ( value . resolve ) || isDefined ( value . subscribe ) ;
535
+ return (
536
+ isDefined ( value . resolve ) ||
537
+ isDefined ( value . subscribe ) ||
538
+ isDefined ( value . extensions )
539
+ ) ;
508
540
}
509
541
510
542
function isScalarResolver ( obj : any ) : obj is GraphQLScalarType {
0 commit comments