Spaces:
Running
Running
import { GraphQLError } from '../../error/GraphQLError.mjs'; | |
import { Kind } from '../../language/kinds.mjs'; | |
/** | |
* Lone anonymous operation | |
* | |
* A GraphQL document is only valid if when it contains an anonymous operation | |
* (the query short-hand) that it contains only that one operation definition. | |
* | |
* See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation | |
*/ | |
export function LoneAnonymousOperationRule(context) { | |
let operationCount = 0; | |
return { | |
Document(node) { | |
operationCount = node.definitions.filter( | |
(definition) => definition.kind === Kind.OPERATION_DEFINITION, | |
).length; | |
}, | |
OperationDefinition(node) { | |
if (!node.name && operationCount > 1) { | |
context.reportError( | |
new GraphQLError( | |
'This anonymous operation must be the only defined operation.', | |
{ | |
nodes: node, | |
}, | |
), | |
); | |
} | |
}, | |
}; | |
} | |