You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.0 KiB
34 lines
1.0 KiB
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; |
|
}, |
|
}; |
|
}
|
|
|