import { GraphQLError } from '../../error/GraphQLError' ; import { Kind } from '../../language/kinds' ; import type { ASTVisitor } from '../../language/visitor' ; import type { ASTValidationContext } from '../ValidationContext' ; /**
 * 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.' , node ) ) ; } } , } ; }