diff --git a/src/type/schema.js b/src/type/schema.js index d5526443a09..2ee4df6d119 100644 --- a/src/type/schema.js +++ b/src/type/schema.js @@ -13,6 +13,7 @@ import { isUnionType, isInputObjectType, isWrappingType, + getNamedType, } from './definition'; import type { GraphQLType, @@ -22,7 +23,11 @@ import type { GraphQLInterfaceType, } from './definition'; import type { SchemaDefinitionNode } from '../language/ast'; -import { GraphQLDirective, specifiedDirectives } from './directives'; +import { + GraphQLDirective, + isDirective, + specifiedDirectives, +} from './directives'; import type { GraphQLError } from '../error/GraphQLError'; import { __Schema } from './introspection'; import find from '../jsutils/find'; @@ -121,6 +126,10 @@ export class GraphQLSchema { initialTypes = initialTypes.concat(types); } + initialTypes = initialTypes.concat( + ...this._directives.map(directive => getDirectiveArgTypes(directive)), + ); + this._typeMap = initialTypes.reduce( typeMapReducer, (Object.create(null): TypeMap), @@ -269,3 +278,10 @@ function typeMapReducer(map: TypeMap, type: ?GraphQLType): TypeMap { return reducedMap; } + +function getDirectiveArgTypes(directive: GraphQLDirective) { + if (!isDirective(directive)) { + return []; + } + return directive.args.map(arg => getNamedType(arg.type)); +}