12345678910111213141516171819202122232425262728293031323334 |
- import { GraphQLError } from '../../error/GraphQLError.mjs';
- import { Kind } from '../../language/kinds.mjs';
- import { isExecutableDefinitionNode } from '../../language/predicates.mjs';
- /**
- * 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;
- },
- };
- }
|