All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sangria.validation.rules.LoneAnonymousOperation.scala Maven / Gradle / Ivy

package sangria.validation.rules

import sangria.ast
import sangria.ast.AstVisitorCommand._
import sangria.validation._

import scala.language.postfixOps

/**
 * 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.
 */
class LoneAnonymousOperation extends ValidationRule {
  override def visitor(ctx: ValidationContext) = new AstValidatingVisitor {
    var operationCount = 0

    override val onEnter: ValidationVisit = {
      case ast.Document(definitions, _, _) ⇒
        operationCount = definitions.count(_.isInstanceOf[ast.OperationDefinition])
        Right(Continue)
      case op: ast.OperationDefinition ⇒
        if (op.name.isEmpty && operationCount > 1)
          Left(Vector(AnonOperationNotAloneViolation(ctx.sourceMapper, op.position.toList)))
        else
          Right(Continue)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy