Sha256: dd9fd9f965a4871614c0a3756bf19d62cda54c453fd8466deba9028c634016ce

Contents?: true

Size: 1.58 KB

Versions: 32

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true
module GraphQL
  module Analysis
    # A query reducer for measuring the depth of a given query.
    #
    # See https://graphql-ruby.org/queries/ast_analysis.html for more examples.
    #
    # @example Logging the depth of a query
    #   class LogQueryDepth < GraphQL::Analysis::QueryDepth
    #     def result
    #       log("GraphQL query depth: #{@max_depth}")
    #     end
    #   end
    #
    #   # In your Schema file:
    #
    #   class MySchema < GraphQL::Schema
    #     query_analyzer LogQueryDepth
    #   end
    #
    #   # When you run the query, the depth will get logged:
    #
    #   Schema.execute(query_str)
    #   # GraphQL query depth: 8
    #
    class QueryDepth < Analyzer
      def initialize(query)
        @max_depth = 0
        @current_depth = 0
        @count_introspection_fields = query.schema.count_introspection_fields
        super
      end

      def on_enter_field(node, parent, visitor)
        return if visitor.skipping? ||
          visitor.visiting_fragment_definition? ||
            (@count_introspection_fields == false && visitor.field_definition.introspection?)

        @current_depth += 1
      end

      def on_leave_field(node, parent, visitor)
        return if visitor.skipping? ||
          visitor.visiting_fragment_definition? ||
          (@count_introspection_fields == false && visitor.field_definition.introspection?)

        if @max_depth < @current_depth
          @max_depth = @current_depth
        end
        @current_depth -= 1
      end

      def result
        @max_depth
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
graphql-2.4.14 lib/graphql/analysis/query_depth.rb
graphql-2.3.22 lib/graphql/analysis/query_depth.rb
graphql-2.3.21 lib/graphql/analysis/query_depth.rb
graphql-2.4.13 lib/graphql/analysis/query_depth.rb
graphql-2.4.12 lib/graphql/analysis/query_depth.rb
graphql-2.4.11 lib/graphql/analysis/query_depth.rb
graphql-2.4.10 lib/graphql/analysis/query_depth.rb
graphql-2.4.9 lib/graphql/analysis/query_depth.rb
graphql-2.4.8 lib/graphql/analysis/query_depth.rb
graphql-2.4.7 lib/graphql/analysis/query_depth.rb
graphql-2.4.6 lib/graphql/analysis/query_depth.rb
graphql-2.4.5 lib/graphql/analysis/query_depth.rb
graphql-2.4.4 lib/graphql/analysis/query_depth.rb
graphql-2.4.3 lib/graphql/analysis/query_depth.rb
graphql-2.4.2 lib/graphql/analysis/query_depth.rb
graphql-2.4.1 lib/graphql/analysis/query_depth.rb
graphql-2.4.0 lib/graphql/analysis/query_depth.rb
graphql-2.3.20 lib/graphql/analysis/query_depth.rb
graphql-2.3.19 lib/graphql/analysis/query_depth.rb
graphql-2.3.18 lib/graphql/analysis/query_depth.rb