Sha256: 27db2820371ccf59e1820600fa29fa59becae56def93101c3e4a36b3db3249ec

Contents?: true

Size: 1.96 KB

Versions: 13

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true
module GraphQL
  module StaticValidation
    # Initialized with a {GraphQL::Schema}, then it can validate {GraphQL::Language::Nodes::Documents}s based on that schema.
    #
    # By default, it's used by {GraphQL::Query}
    #
    # @example Validate a query
    #   validator = GraphQL::StaticValidation::Validator.new(schema: MySchema)
    #   query = GraphQL::Query.new(MySchema, query_string)
    #   errors = validator.validate(query)[:errors]
    #
    class Validator
      # @param schema [GraphQL::Schema]
      # @param rules [Array<#validate(context)>] a list of rules to use when validating
      def initialize(schema:, rules: GraphQL::StaticValidation::ALL_RULES)
        @schema = schema
        @rules = rules
      end

      # Validate `query` against the schema. Returns an array of message hashes.
      # @param query [GraphQL::Query]
      # @return [Array<Hash>]
      def validate(query, validate: true)
        query.trace("validate", { validate: validate, query: query }) do
          context = GraphQL::StaticValidation::ValidationContext.new(query)
          rewrite = GraphQL::InternalRepresentation::Rewrite.new

          # Put this first so its enters and exits are always called
          rewrite.validate(context)

          # If the caller opted out of validation, don't attach these
          if validate
            @rules.each do |rules|
              rules.new.validate(context)
            end
          end

          context.visitor.visit
          rewrite_result = rewrite.document

          # Post-validation: allow validators to register handlers on rewritten query nodes
          GraphQL::InternalRepresentation::Visit.visit_each_node(rewrite_result.operation_definitions, context.each_irep_node_handlers)

          {
            errors: context.errors,
            # If there were errors, the irep is garbage
            irep: context.errors.any? ? nil : rewrite_result,
          }
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
graphql-1.8.18 lib/graphql/static_validation/validator.rb
graphql-1.8.17 lib/graphql/static_validation/validator.rb
graphql-1.8.16 lib/graphql/static_validation/validator.rb
graphql-1.8.15 lib/graphql/static_validation/validator.rb
graphql-1.8.14 lib/graphql/static_validation/validator.rb
graphql-1.8.13 lib/graphql/static_validation/validator.rb
graphql-1.8.12 lib/graphql/static_validation/validator.rb
graphql-1.8.11 lib/graphql/static_validation/validator.rb
graphql-1.8.10 lib/graphql/static_validation/validator.rb
graphql-1.8.9 lib/graphql/static_validation/validator.rb
graphql-1.8.8 lib/graphql/static_validation/validator.rb
graphql-1.8.7 lib/graphql/static_validation/validator.rb
graphql-1.8.6 lib/graphql/static_validation/validator.rb