diff --git a/src/validation/rules/ExecutableDefinitions.js b/src/validation/rules/ExecutableDefinitions.js index 4af7ec4879..08f25833c7 100644 --- a/src/validation/rules/ExecutableDefinitions.js +++ b/src/validation/rules/ExecutableDefinitions.js @@ -10,7 +10,11 @@ import type { ASTValidationContext } from '../ValidationContext'; import { GraphQLError } from '../../error/GraphQLError'; import { Kind } from '../../language/kinds'; -import { isExecutableDefinitionNode } from '../../language/predicates'; +import { + isDefinitionNode, + isExecutableDefinitionNode, +} from '../../language/predicates'; +import type { ASTNode } from '../../language/ast'; import type { ASTVisitor } from '../../language/visitor'; export function nonExecutableDefinitionMessage(defName: string): string { @@ -27,23 +31,26 @@ export function ExecutableDefinitions( context: ASTValidationContext, ): ASTVisitor { return { - Document(node) { - for (const definition of node.definitions) { - if (!isExecutableDefinitionNode(definition)) { + enter(node) { + if (isDefinitionNode(node)) { + if (!isExecutableDefinitionNode(node)) { context.reportError( new GraphQLError( nonExecutableDefinitionMessage( - definition.kind === Kind.SCHEMA_DEFINITION || - definition.kind === Kind.SCHEMA_EXTENSION - ? 'schema' - : definition.name.value, + isSchemaNode(node) ? 'schema' : node.name.value, ), - [definition], + node, ), ); } + return false; } - return false; }, }; } + +function isSchemaNode(node: ASTNode): boolean %checks { + return ( + node.kind === Kind.SCHEMA_DEFINITION || node.kind === Kind.SCHEMA_EXTENSION + ); +}