diff --git a/src/Interfaces.ts b/src/Interfaces.ts index 9a176068eeb..1ffe9fa815c 100644 --- a/src/Interfaces.ts +++ b/src/Interfaces.ts @@ -65,6 +65,7 @@ export interface IResolverOptions { fragment?: string; resolve?: IFieldResolver; subscribe?: IFieldResolver; + extensions?: Record; __resolveType?: GraphQLTypeResolver; __isTypeOf?: GraphQLIsTypeOfFn; } diff --git a/src/test/schemaGenerator.test.ts b/src/test/schemaGenerator.test.ts index e777a55dfcc..b673fbdf192 100644 --- a/src/test/schemaGenerator.test.ts +++ b/src/test/schemaGenerator.test.ts @@ -382,6 +382,31 @@ describe('generating schema from shorthand', () => { expect(jsSchema.getQueryType().getFields().bar).toBeDefined(); }); + test('allow for a map of extensions in field resolver', () => { + const jsSchema = makeExecutableSchema({ + typeDefs: /* GraphQL */ ` + type Query { + foo: String + } + `, + resolvers: { + Query: { + foo: { + resolve() { + return 'Foo'; + }, + extensions: { + verbose: true, + }, + }, + }, + }, + }); + const extensions = jsSchema.getQueryType().getFields().foo.extensions; + expect(extensions).toHaveProperty('verbose'); + expect(extensions.verbose).toBe(true); + }); + test('can concatenateTypeDefs created by a function inside a closure', () => { const typeA = { typeDefs: () => ['type TypeA { foo: String }'] }; const typeB = { typeDefs: () => ['type TypeB { bar: String }'] };