@@ -92,6 +92,17 @@ export function createResolvers(
92
92
resolvers [ typeName ] [ fieldName ] . resolve = resolver ;
93
93
}
94
94
95
+ if ( isDefined ( ( obj [ fieldName ] as any ) . extensions ) ) {
96
+ const defaultResolver = ( val : any ) => val ;
97
+ const resolver = wrapResolver ( {
98
+ config,
99
+ resolver : ( obj [ fieldName ] as any ) . resolve || defaultResolver ,
100
+ middlewareMap,
101
+ path,
102
+ } ) ;
103
+ resolvers [ typeName ] [ fieldName ] . resolve = resolver ;
104
+ }
105
+
95
106
// { subscribe }
96
107
if ( isDefined ( ( obj [ fieldName ] as any ) . subscribe ) ) {
97
108
const resolver = wrapResolver ( {
@@ -286,6 +297,22 @@ function addObject({
286
297
container [ typeName ] [ fieldName ] . resolve = resolver . resolve ;
287
298
}
288
299
300
+ // extensions
301
+ if ( isDefined ( resolver . extensions ) ) {
302
+ if ( container [ typeName ] [ fieldName ] . extensions ) {
303
+ throw new ResolverDuplicatedError (
304
+ `Duplicated resolver of "${ typeName } .${ fieldName } " (extensions method)` ,
305
+ useLocation ( { dirname : config . dirname , id : config . id } )
306
+ ) ;
307
+ }
308
+
309
+ // writeResolverMetadata(resolver.extensions, config);
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