@graphql-tools/graphql
Version:
Fork of GraphQL.js
29 lines (28 loc) • 1.09 kB
JavaScript
import { GraphQLError } from '../../error/GraphQLError.js';
import { Kind } from '../../language/kinds.js';
import { isExecutableDefinitionNode } from '../../language/predicates.js';
/**
* Executable definitions
*
* A GraphQL document is only valid for execution if all definitions are either
* operation or fragment definitions.
*
* See https://spec.graphql.org/draft/#sec-Executable-Definitions
*/
export function ExecutableDefinitionsRule(context) {
return {
Document(node) {
for (const definition of node.definitions) {
if (!isExecutableDefinitionNode(definition)) {
const defName = definition.kind === Kind.SCHEMA_DEFINITION || definition.kind === Kind.SCHEMA_EXTENSION
? 'schema'
: '"' + definition.name.value + '"';
context.reportError(new GraphQLError(`The ${defName} definition is not executable.`, {
nodes: definition,
}));
}
}
return false;
},
};
}