graphql 1.13.14 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
 - data/lib/graphql/analysis/ast/query_depth.rb +0 -1
 - data/lib/graphql/analysis/ast/visitor.rb +1 -1
 - data/lib/graphql/analysis/ast.rb +0 -10
 - data/lib/graphql/analysis.rb +0 -7
 - data/lib/graphql/backtrace/table.rb +0 -18
 - data/lib/graphql/backtrace/tracer.rb +1 -2
 - data/lib/graphql/backtrace.rb +2 -8
 - data/lib/graphql/dig.rb +1 -1
 - data/lib/graphql/execution/errors.rb +1 -9
 - data/lib/graphql/execution/interpreter/runtime.rb +2 -9
 - data/lib/graphql/execution/interpreter.rb +0 -22
 - data/lib/graphql/execution/lazy.rb +1 -1
 - data/lib/graphql/execution/lookahead.rb +6 -13
 - data/lib/graphql/execution/multiplex.rb +50 -107
 - data/lib/graphql/execution.rb +11 -3
 - data/lib/graphql/introspection/dynamic_fields.rb +3 -8
 - data/lib/graphql/introspection/entry_points.rb +2 -15
 - data/lib/graphql/language/document_from_schema_definition.rb +0 -17
 - data/lib/graphql/pagination/connections.rb +2 -28
 - data/lib/graphql/query/context.rb +1 -185
 - data/lib/graphql/query/literal_input.rb +8 -13
 - data/lib/graphql/query/validation_pipeline.rb +8 -37
 - data/lib/graphql/query/variables.rb +22 -18
 - data/lib/graphql/query.rb +5 -35
 - data/lib/graphql/railtie.rb +0 -104
 - data/lib/graphql/relay/range_add.rb +0 -4
 - data/lib/graphql/relay.rb +0 -15
 - data/lib/graphql/schema/addition.rb +1 -8
 - data/lib/graphql/schema/argument.rb +1 -25
 - data/lib/graphql/schema/build_from_definition.rb +0 -1
 - data/lib/graphql/schema/directive.rb +0 -21
 - data/lib/graphql/schema/enum.rb +1 -18
 - data/lib/graphql/schema/enum_value.rb +0 -22
 - data/lib/graphql/schema/field.rb +2 -185
 - data/lib/graphql/schema/input_object.rb +9 -56
 - data/lib/graphql/schema/interface.rb +0 -25
 - data/lib/graphql/schema/introspection_system.rb +3 -8
 - data/lib/graphql/schema/late_bound_type.rb +2 -2
 - data/lib/graphql/schema/list.rb +0 -6
 - data/lib/graphql/schema/loader.rb +0 -1
 - data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
 - data/lib/graphql/schema/member/build_type.rb +4 -6
 - data/lib/graphql/schema/member/has_arguments.rb +14 -18
 - data/lib/graphql/schema/member/has_fields.rb +2 -2
 - data/lib/graphql/schema/member/has_interfaces.rb +0 -2
 - data/lib/graphql/schema/member.rb +0 -6
 - data/lib/graphql/schema/mutation.rb +0 -9
 - data/lib/graphql/schema/non_null.rb +1 -7
 - data/lib/graphql/schema/object.rb +0 -40
 - data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
 - data/lib/graphql/schema/scalar.rb +0 -15
 - data/lib/graphql/schema/union.rb +0 -16
 - data/lib/graphql/schema/warden.rb +1 -1
 - data/lib/graphql/schema/wrapper.rb +0 -5
 - data/lib/graphql/schema.rb +106 -945
 - data/lib/graphql/static_validation/base_visitor.rb +4 -21
 - data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
 - data/lib/graphql/static_validation/validator.rb +2 -24
 - data/lib/graphql/static_validation.rb +0 -2
 - data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
 - data/lib/graphql/subscriptions/event.rb +1 -1
 - data/lib/graphql/subscriptions/instrumentation.rb +0 -51
 - data/lib/graphql/subscriptions.rb +4 -13
 - data/lib/graphql/tracing/data_dog_tracing.rb +2 -19
 - data/lib/graphql/tracing/platform_tracing.rb +4 -31
 - data/lib/graphql/tracing.rb +0 -2
 - data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
 - data/lib/graphql/types/relay/default_relay.rb +0 -10
 - data/lib/graphql/types/relay/node_behaviors.rb +5 -1
 - data/lib/graphql/types/relay.rb +0 -2
 - data/lib/graphql/version.rb +1 -1
 - data/lib/graphql.rb +1 -65
 - metadata +6 -132
 - data/lib/graphql/analysis/analyze_query.rb +0 -98
 - data/lib/graphql/analysis/field_usage.rb +0 -45
 - data/lib/graphql/analysis/max_query_complexity.rb +0 -26
 - data/lib/graphql/analysis/max_query_depth.rb +0 -26
 - data/lib/graphql/analysis/query_complexity.rb +0 -88
 - data/lib/graphql/analysis/query_depth.rb +0 -43
 - data/lib/graphql/analysis/reducer_state.rb +0 -48
 - data/lib/graphql/argument.rb +0 -131
 - data/lib/graphql/authorization.rb +0 -82
 - data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
 - data/lib/graphql/backwards_compatibility.rb +0 -61
 - data/lib/graphql/base_type.rb +0 -232
 - data/lib/graphql/boolean_type.rb +0 -2
 - data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
 - data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
 - data/lib/graphql/compatibility/execution_specification.rb +0 -436
 - data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
 - data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
 - data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
 - data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
 - data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
 - data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
 - data/lib/graphql/compatibility.rb +0 -5
 - data/lib/graphql/define/assign_argument.rb +0 -12
 - data/lib/graphql/define/assign_connection.rb +0 -13
 - data/lib/graphql/define/assign_enum_value.rb +0 -18
 - data/lib/graphql/define/assign_global_id_field.rb +0 -11
 - data/lib/graphql/define/assign_mutation_function.rb +0 -34
 - data/lib/graphql/define/assign_object_field.rb +0 -42
 - data/lib/graphql/define/defined_object_proxy.rb +0 -53
 - data/lib/graphql/define/instance_definable.rb +0 -255
 - data/lib/graphql/define/no_definition_error.rb +0 -7
 - data/lib/graphql/define/non_null_with_bang.rb +0 -16
 - data/lib/graphql/define/type_definer.rb +0 -31
 - data/lib/graphql/define.rb +0 -31
 - data/lib/graphql/deprecated_dsl.rb +0 -55
 - data/lib/graphql/directive/deprecated_directive.rb +0 -2
 - data/lib/graphql/directive/include_directive.rb +0 -2
 - data/lib/graphql/directive/skip_directive.rb +0 -2
 - data/lib/graphql/directive.rb +0 -107
 - data/lib/graphql/enum_type.rb +0 -133
 - data/lib/graphql/execution/execute.rb +0 -333
 - data/lib/graphql/execution/flatten.rb +0 -40
 - data/lib/graphql/execution/typecast.rb +0 -50
 - data/lib/graphql/field/resolve.rb +0 -59
 - data/lib/graphql/field.rb +0 -226
 - data/lib/graphql/float_type.rb +0 -2
 - data/lib/graphql/function.rb +0 -128
 - data/lib/graphql/id_type.rb +0 -2
 - data/lib/graphql/input_object_type.rb +0 -138
 - data/lib/graphql/int_type.rb +0 -2
 - data/lib/graphql/interface_type.rb +0 -72
 - data/lib/graphql/internal_representation/document.rb +0 -27
 - data/lib/graphql/internal_representation/node.rb +0 -206
 - data/lib/graphql/internal_representation/print.rb +0 -51
 - data/lib/graphql/internal_representation/rewrite.rb +0 -184
 - data/lib/graphql/internal_representation/scope.rb +0 -88
 - data/lib/graphql/internal_representation/visit.rb +0 -36
 - data/lib/graphql/internal_representation.rb +0 -7
 - data/lib/graphql/list_type.rb +0 -80
 - data/lib/graphql/non_null_type.rb +0 -71
 - data/lib/graphql/object_type.rb +0 -130
 - data/lib/graphql/query/arguments.rb +0 -189
 - data/lib/graphql/query/arguments_cache.rb +0 -24
 - data/lib/graphql/query/executor.rb +0 -52
 - data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
 - data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
 - data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
 - data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
 - data/lib/graphql/query/serial_execution.rb +0 -40
 - data/lib/graphql/relay/array_connection.rb +0 -83
 - data/lib/graphql/relay/base_connection.rb +0 -189
 - data/lib/graphql/relay/connection_instrumentation.rb +0 -54
 - data/lib/graphql/relay/connection_resolve.rb +0 -43
 - data/lib/graphql/relay/connection_type.rb +0 -54
 - data/lib/graphql/relay/edge.rb +0 -27
 - data/lib/graphql/relay/edge_type.rb +0 -19
 - data/lib/graphql/relay/edges_instrumentation.rb +0 -39
 - data/lib/graphql/relay/global_id_resolve.rb +0 -17
 - data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
 - data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
 - data/lib/graphql/relay/mutation/resolve.rb +0 -56
 - data/lib/graphql/relay/mutation/result.rb +0 -38
 - data/lib/graphql/relay/mutation.rb +0 -106
 - data/lib/graphql/relay/node.rb +0 -39
 - data/lib/graphql/relay/page_info.rb +0 -7
 - data/lib/graphql/relay/relation_connection.rb +0 -188
 - data/lib/graphql/relay/type_extensions.rb +0 -32
 - data/lib/graphql/scalar_type.rb +0 -91
 - data/lib/graphql/schema/catchall_middleware.rb +0 -35
 - data/lib/graphql/schema/default_parse_error.rb +0 -10
 - data/lib/graphql/schema/default_type_error.rb +0 -17
 - data/lib/graphql/schema/member/accepts_definition.rb +0 -164
 - data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
 - data/lib/graphql/schema/member/instrumentation.rb +0 -131
 - data/lib/graphql/schema/middleware_chain.rb +0 -82
 - data/lib/graphql/schema/possible_types.rb +0 -44
 - data/lib/graphql/schema/rescue_middleware.rb +0 -60
 - data/lib/graphql/schema/timeout_middleware.rb +0 -88
 - data/lib/graphql/schema/traversal.rb +0 -228
 - data/lib/graphql/schema/validation.rb +0 -313
 - data/lib/graphql/static_validation/default_visitor.rb +0 -15
 - data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
 - data/lib/graphql/string_type.rb +0 -2
 - data/lib/graphql/subscriptions/subscription_root.rb +0 -76
 - data/lib/graphql/tracing/opentelemetry_tracing.rb +0 -101
 - data/lib/graphql/tracing/skylight_tracing.rb +0 -70
 - data/lib/graphql/types/relay/node_field.rb +0 -24
 - data/lib/graphql/types/relay/nodes_field.rb +0 -43
 - data/lib/graphql/union_type.rb +0 -115
 - data/lib/graphql/upgrader/member.rb +0 -937
 - data/lib/graphql/upgrader/schema.rb +0 -38
 
| 
         @@ -1,71 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              # A non-null type modifies another type.
         
     | 
| 
       4 
     | 
    
         
            -
              #
         
     | 
| 
       5 
     | 
    
         
            -
              # Non-null types can be created with `!` (`InnerType!`)
         
     | 
| 
       6 
     | 
    
         
            -
              # or {BaseType#to_non_null_type} (`InnerType.to_non_null_type`)
         
     | 
| 
       7 
     | 
    
         
            -
              #
         
     | 
| 
       8 
     | 
    
         
            -
              # For return types, it says that the returned value will _always_ be present.
         
     | 
| 
       9 
     | 
    
         
            -
              #
         
     | 
| 
       10 
     | 
    
         
            -
              # @example A field which _always_ returns an error
         
     | 
| 
       11 
     | 
    
         
            -
              #   field :items, !ItemType
         
     | 
| 
       12 
     | 
    
         
            -
              #   # or
         
     | 
| 
       13 
     | 
    
         
            -
              #   field :items, ItemType.to_non_null_type
         
     | 
| 
       14 
     | 
    
         
            -
              #
         
     | 
| 
       15 
     | 
    
         
            -
              # (If the application fails to return a value, {InvalidNullError} will be passed to {Schema#type_error}.)
         
     | 
| 
       16 
     | 
    
         
            -
              #
         
     | 
| 
       17 
     | 
    
         
            -
              # For input types, it says that the incoming value _must_ be provided by the query.
         
     | 
| 
       18 
     | 
    
         
            -
              #
         
     | 
| 
       19 
     | 
    
         
            -
              # @example A field which _requires_ a string input
         
     | 
| 
       20 
     | 
    
         
            -
              #   field :newNames do
         
     | 
| 
       21 
     | 
    
         
            -
              #     # ...
         
     | 
| 
       22 
     | 
    
         
            -
              #     argument :values, !types.String
         
     | 
| 
       23 
     | 
    
         
            -
              #     # or
         
     | 
| 
       24 
     | 
    
         
            -
              #     argument :values, types.String.to_non_null_type
         
     | 
| 
       25 
     | 
    
         
            -
              #   end
         
     | 
| 
       26 
     | 
    
         
            -
              #
         
     | 
| 
       27 
     | 
    
         
            -
              # (If a value isn't provided, {Query::VariableValidationError} will be raised).
         
     | 
| 
       28 
     | 
    
         
            -
              #
         
     | 
| 
       29 
     | 
    
         
            -
              # Given a non-null type, you can always get the underlying type with {#unwrap}.
         
     | 
| 
       30 
     | 
    
         
            -
              #
         
     | 
| 
       31 
     | 
    
         
            -
              class NonNullType < GraphQL::BaseType
         
     | 
| 
       32 
     | 
    
         
            -
                include GraphQL::BaseType::ModifiesAnotherType
         
     | 
| 
       33 
     | 
    
         
            -
                extend Forwardable
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                attr_reader :of_type
         
     | 
| 
       36 
     | 
    
         
            -
                def initialize(of_type:)
         
     | 
| 
       37 
     | 
    
         
            -
                  super()
         
     | 
| 
       38 
     | 
    
         
            -
                  @of_type = of_type
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                def valid_input?(value, ctx)
         
     | 
| 
       42 
     | 
    
         
            -
                  validate_input(value, ctx).valid?
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                def validate_input(value, ctx)
         
     | 
| 
       46 
     | 
    
         
            -
                  if value.nil?
         
     | 
| 
       47 
     | 
    
         
            -
                    result = GraphQL::Query::InputValidationResult.new
         
     | 
| 
       48 
     | 
    
         
            -
                    result.add_problem("Expected value to not be null")
         
     | 
| 
       49 
     | 
    
         
            -
                    result
         
     | 
| 
       50 
     | 
    
         
            -
                  else
         
     | 
| 
       51 
     | 
    
         
            -
                    of_type.validate_input(value, ctx)
         
     | 
| 
       52 
     | 
    
         
            -
                  end
         
     | 
| 
       53 
     | 
    
         
            -
                end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                def_delegators :@of_type, :coerce_input, :coerce_result, :list?
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                def kind
         
     | 
| 
       58 
     | 
    
         
            -
                  GraphQL::TypeKinds::NON_NULL
         
     | 
| 
       59 
     | 
    
         
            -
                end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                def to_s
         
     | 
| 
       62 
     | 
    
         
            -
                  "#{of_type.to_s}!"
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
                alias_method :inspect, :to_s
         
     | 
| 
       65 
     | 
    
         
            -
                alias :to_type_signature :to_s
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                def non_null?
         
     | 
| 
       68 
     | 
    
         
            -
                  true
         
     | 
| 
       69 
     | 
    
         
            -
                end
         
     | 
| 
       70 
     | 
    
         
            -
              end
         
     | 
| 
       71 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/graphql/object_type.rb
    DELETED
    
    | 
         @@ -1,130 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              # @api deprecated
         
     | 
| 
       4 
     | 
    
         
            -
              class ObjectType < GraphQL::BaseType
         
     | 
| 
       5 
     | 
    
         
            -
                extend Define::InstanceDefinable::DeprecatedDefine
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                deprecated_accepts_definitions :interfaces, :fields, :mutation, :relay_node_type, field: GraphQL::Define::AssignObjectField
         
     | 
| 
       8 
     | 
    
         
            -
                deprecated_accepts_definitions implements: ->(type, *interfaces, inherit: false) { type.implements(interfaces, inherit: inherit) }
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                attr_accessor :fields, :mutation, :relay_node_type
         
     | 
| 
       11 
     | 
    
         
            -
                ensure_defined(:fields, :mutation, :interfaces, :relay_node_type)
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                # @!attribute fields
         
     | 
| 
       14 
     | 
    
         
            -
                #   @return [Hash<String => GraphQL::Field>] Map String fieldnames to their {GraphQL::Field} implementations
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                # @!attribute mutation
         
     | 
| 
       17 
     | 
    
         
            -
                #   @return [GraphQL::Relay::Mutation, nil] The mutation this object type was derived from, if it is an auto-generated payload type.
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def initialize
         
     | 
| 
       20 
     | 
    
         
            -
                  super
         
     | 
| 
       21 
     | 
    
         
            -
                  @fields = {}
         
     | 
| 
       22 
     | 
    
         
            -
                  @clean_inherited_fields = nil
         
     | 
| 
       23 
     | 
    
         
            -
                  @structural_interface_type_memberships = []
         
     | 
| 
       24 
     | 
    
         
            -
                  @inherited_interface_type_memberships = []
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                def initialize_copy(other)
         
     | 
| 
       28 
     | 
    
         
            -
                  super
         
     | 
| 
       29 
     | 
    
         
            -
                  @structural_interface_type_memberships = other.structural_interface_type_memberships.dup
         
     | 
| 
       30 
     | 
    
         
            -
                  @inherited_interface_type_memberships = other.inherited_interface_type_memberships.dup
         
     | 
| 
       31 
     | 
    
         
            -
                  @fields = other.fields.dup
         
     | 
| 
       32 
     | 
    
         
            -
                end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                # This method declares interfaces for this type AND inherits any field definitions
         
     | 
| 
       35 
     | 
    
         
            -
                # @param new_interfaces [Array<GraphQL::Interface>] interfaces that this type implements
         
     | 
| 
       36 
     | 
    
         
            -
                # @deprecated Use `implements` instead of `interfaces`.
         
     | 
| 
       37 
     | 
    
         
            -
                def interfaces=(new_interfaces)
         
     | 
| 
       38 
     | 
    
         
            -
                  @structural_interface_type_memberships = []
         
     | 
| 
       39 
     | 
    
         
            -
                  @inherited_interface_type_memberships = []
         
     | 
| 
       40 
     | 
    
         
            -
                  @clean_inherited_fields = nil
         
     | 
| 
       41 
     | 
    
         
            -
                  implements(new_interfaces, inherit: true)
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                def interfaces(ctx = GraphQL::Query::NullContext)
         
     | 
| 
       45 
     | 
    
         
            -
                  ensure_defined
         
     | 
| 
       46 
     | 
    
         
            -
                  visible_ifaces = []
         
     | 
| 
       47 
     | 
    
         
            -
                  unfiltered = ctx == GraphQL::Query::NullContext
         
     | 
| 
       48 
     | 
    
         
            -
                  [@structural_interface_type_memberships, @inherited_interface_type_memberships].each do |tms|
         
     | 
| 
       49 
     | 
    
         
            -
                    tms.each do |type_membership|
         
     | 
| 
       50 
     | 
    
         
            -
                      if unfiltered || type_membership.visible?(ctx)
         
     | 
| 
       51 
     | 
    
         
            -
                        # if this is derived from a class-based object, we have to
         
     | 
| 
       52 
     | 
    
         
            -
                        # get the `.graphql_definition` of the attached interface.
         
     | 
| 
       53 
     | 
    
         
            -
                        visible_ifaces << GraphQL::BaseType.resolve_related_type(type_membership.abstract_type)
         
     | 
| 
       54 
     | 
    
         
            -
                      end
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                  visible_ifaces
         
     | 
| 
       59 
     | 
    
         
            -
                end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                def kind
         
     | 
| 
       62 
     | 
    
         
            -
                  GraphQL::TypeKinds::OBJECT
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                # This fields doesnt have instrumenation applied
         
     | 
| 
       66 
     | 
    
         
            -
                # @see [Schema#get_field] Get field with instrumentation
         
     | 
| 
       67 
     | 
    
         
            -
                # @return [GraphQL::Field] The field definition for `field_name` (may be inherited from interfaces)
         
     | 
| 
       68 
     | 
    
         
            -
                def get_field(field_name)
         
     | 
| 
       69 
     | 
    
         
            -
                  fields[field_name] || interface_fields[field_name]
         
     | 
| 
       70 
     | 
    
         
            -
                end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                # These fields don't have instrumenation applied
         
     | 
| 
       73 
     | 
    
         
            -
                # @see [Schema#get_fields] Get fields with instrumentation
         
     | 
| 
       74 
     | 
    
         
            -
                # @return [Array<GraphQL::Field>] All fields, including ones inherited from interfaces
         
     | 
| 
       75 
     | 
    
         
            -
                def all_fields
         
     | 
| 
       76 
     | 
    
         
            -
                  interface_fields.merge(self.fields).values
         
     | 
| 
       77 
     | 
    
         
            -
                end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                # Declare that this object implements this interface.
         
     | 
| 
       80 
     | 
    
         
            -
                # This declaration will be validated when the schema is defined.
         
     | 
| 
       81 
     | 
    
         
            -
                # @param interfaces [Array<GraphQL::Interface>] add a new interface that this type implements
         
     | 
| 
       82 
     | 
    
         
            -
                # @param inherits [Boolean] If true, copy the interfaces' field definitions to this type
         
     | 
| 
       83 
     | 
    
         
            -
                def implements(interfaces, inherit: false, **options)
         
     | 
| 
       84 
     | 
    
         
            -
                  if !interfaces.is_a?(Array)
         
     | 
| 
       85 
     | 
    
         
            -
                    raise ArgumentError, "`implements(interfaces)` must be an array, not #{interfaces.class} (#{interfaces})"
         
     | 
| 
       86 
     | 
    
         
            -
                  end
         
     | 
| 
       87 
     | 
    
         
            -
                  @clean_inherited_fields = nil
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                  type_memberships = inherit ? @inherited_interface_type_memberships : @structural_interface_type_memberships
         
     | 
| 
       90 
     | 
    
         
            -
                  interfaces.each do |iface|
         
     | 
| 
       91 
     | 
    
         
            -
                    iface = BaseType.resolve_related_type(iface)
         
     | 
| 
       92 
     | 
    
         
            -
                    if iface.is_a?(GraphQL::InterfaceType)
         
     | 
| 
       93 
     | 
    
         
            -
                      type_memberships << iface.type_membership_class.new(iface, self, **options)
         
     | 
| 
       94 
     | 
    
         
            -
                    end
         
     | 
| 
       95 
     | 
    
         
            -
                  end
         
     | 
| 
       96 
     | 
    
         
            -
                end
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                def resolve_type_proc
         
     | 
| 
       99 
     | 
    
         
            -
                  nil
         
     | 
| 
       100 
     | 
    
         
            -
                end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                attr_writer :structural_interface_type_memberships
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                protected
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                attr_reader :structural_interface_type_memberships, :inherited_interface_type_memberships
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                private
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                def normalize_interfaces(ifaces)
         
     | 
| 
       111 
     | 
    
         
            -
                  ifaces.map { |i_type| GraphQL::BaseType.resolve_related_type(i_type) }
         
     | 
| 
       112 
     | 
    
         
            -
                end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                def interface_fields
         
     | 
| 
       115 
     | 
    
         
            -
                  if @clean_inherited_fields
         
     | 
| 
       116 
     | 
    
         
            -
                    @clean_inherited_fields
         
     | 
| 
       117 
     | 
    
         
            -
                  else
         
     | 
| 
       118 
     | 
    
         
            -
                    ensure_defined
         
     | 
| 
       119 
     | 
    
         
            -
                    @clean_inherited_fields = {}
         
     | 
| 
       120 
     | 
    
         
            -
                    @inherited_interface_type_memberships.each do |type_membership|
         
     | 
| 
       121 
     | 
    
         
            -
                      iface = GraphQL::BaseType.resolve_related_type(type_membership.abstract_type)
         
     | 
| 
       122 
     | 
    
         
            -
                      if iface.is_a?(GraphQL::InterfaceType)
         
     | 
| 
       123 
     | 
    
         
            -
                        @clean_inherited_fields.merge!(iface.fields)
         
     | 
| 
       124 
     | 
    
         
            -
                      end
         
     | 
| 
       125 
     | 
    
         
            -
                    end
         
     | 
| 
       126 
     | 
    
         
            -
                    @clean_inherited_fields
         
     | 
| 
       127 
     | 
    
         
            -
                  end
         
     | 
| 
       128 
     | 
    
         
            -
                end
         
     | 
| 
       129 
     | 
    
         
            -
              end
         
     | 
| 
       130 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,189 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                # Read-only access to values, normalizing all keys to strings
         
     | 
| 
       5 
     | 
    
         
            -
                #
         
     | 
| 
       6 
     | 
    
         
            -
                # {Arguments} recursively wraps the input in {Arguments} instances.
         
     | 
| 
       7 
     | 
    
         
            -
                class Arguments
         
     | 
| 
       8 
     | 
    
         
            -
                  extend Forwardable
         
     | 
| 
       9 
     | 
    
         
            -
                  include GraphQL::Dig
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  def self.construct_arguments_class(argument_owner)
         
     | 
| 
       12 
     | 
    
         
            -
                    argument_definitions = argument_owner.arguments # rubocop:disable Development/ContextIsPassedCop -- legacy-related
         
     | 
| 
       13 
     | 
    
         
            -
                    argument_owner.arguments_class = Class.new(self) do
         
     | 
| 
       14 
     | 
    
         
            -
                      self.argument_owner = argument_owner
         
     | 
| 
       15 
     | 
    
         
            -
                      self.argument_definitions = argument_definitions
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                      argument_definitions.each do |_arg_name, arg_definition|
         
     | 
| 
       18 
     | 
    
         
            -
                        if arg_definition.method_access?
         
     | 
| 
       19 
     | 
    
         
            -
                          expose_as = arg_definition.expose_as.to_s.freeze
         
     | 
| 
       20 
     | 
    
         
            -
                          expose_as_underscored = GraphQL::Schema::Member::BuildType.underscore(expose_as).freeze
         
     | 
| 
       21 
     | 
    
         
            -
                          method_names = [expose_as, expose_as_underscored].uniq
         
     | 
| 
       22 
     | 
    
         
            -
                          method_names.each do |method_name|
         
     | 
| 
       23 
     | 
    
         
            -
                            # Don't define a helper method if it would override something.
         
     | 
| 
       24 
     | 
    
         
            -
                            if method_defined?(method_name)
         
     | 
| 
       25 
     | 
    
         
            -
                              GraphQL::Deprecation.warn(
         
     | 
| 
       26 
     | 
    
         
            -
                                "Unable to define a helper for argument with name '#{method_name}' "\
         
     | 
| 
       27 
     | 
    
         
            -
                                "as this is a reserved name. Add `method_access: false` to stop this warning."
         
     | 
| 
       28 
     | 
    
         
            -
                              )
         
     | 
| 
       29 
     | 
    
         
            -
                            else
         
     | 
| 
       30 
     | 
    
         
            -
                              define_method(method_name) do
         
     | 
| 
       31 
     | 
    
         
            -
                                # Always use `expose_as` here, since #[] doesn't accept underscored names
         
     | 
| 
       32 
     | 
    
         
            -
                                self[expose_as]
         
     | 
| 
       33 
     | 
    
         
            -
                              end
         
     | 
| 
       34 
     | 
    
         
            -
                            end
         
     | 
| 
       35 
     | 
    
         
            -
                          end
         
     | 
| 
       36 
     | 
    
         
            -
                        end
         
     | 
| 
       37 
     | 
    
         
            -
                      end
         
     | 
| 
       38 
     | 
    
         
            -
                    end
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                  attr_reader :argument_values
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                  def initialize(values, context:, defaults_used:)
         
     | 
| 
       44 
     | 
    
         
            -
                    @argument_values = values.inject({}) do |memo, (inner_key, inner_value)|
         
     | 
| 
       45 
     | 
    
         
            -
                      arg_name = inner_key.to_s
         
     | 
| 
       46 
     | 
    
         
            -
                      arg_defn = self.class.argument_definitions[arg_name] || raise("Not found #{arg_name} among #{self.class.argument_definitions.keys}")
         
     | 
| 
       47 
     | 
    
         
            -
                      arg_default_used = defaults_used.include?(arg_name)
         
     | 
| 
       48 
     | 
    
         
            -
                      arg_value = wrap_value(inner_value, arg_defn.type, context)
         
     | 
| 
       49 
     | 
    
         
            -
                      string_key = arg_defn.expose_as
         
     | 
| 
       50 
     | 
    
         
            -
                      memo[string_key] = ArgumentValue.new(string_key, arg_value, arg_defn, arg_default_used)
         
     | 
| 
       51 
     | 
    
         
            -
                      memo
         
     | 
| 
       52 
     | 
    
         
            -
                    end
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                  # @param key [String, Symbol] name or index of value to access
         
     | 
| 
       56 
     | 
    
         
            -
                  # @return [Object] the argument at that key
         
     | 
| 
       57 
     | 
    
         
            -
                  def [](key)
         
     | 
| 
       58 
     | 
    
         
            -
                    key_s = key.is_a?(String) ? key : key.to_s
         
     | 
| 
       59 
     | 
    
         
            -
                    @argument_values.fetch(key_s, NULL_ARGUMENT_VALUE).value
         
     | 
| 
       60 
     | 
    
         
            -
                  end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                  # @param key [String, Symbol] name of value to access
         
     | 
| 
       63 
     | 
    
         
            -
                  # @return [Boolean] true if the argument was present in this field
         
     | 
| 
       64 
     | 
    
         
            -
                  def key?(key)
         
     | 
| 
       65 
     | 
    
         
            -
                    key_s = key.is_a?(String) ? key : key.to_s
         
     | 
| 
       66 
     | 
    
         
            -
                    @argument_values.key?(key_s)
         
     | 
| 
       67 
     | 
    
         
            -
                  end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                  # @param key [String, Symbol] name of value to access
         
     | 
| 
       70 
     | 
    
         
            -
                  # @return [Boolean] true if the argument default was passed as the argument value to the resolver
         
     | 
| 
       71 
     | 
    
         
            -
                  def default_used?(key)
         
     | 
| 
       72 
     | 
    
         
            -
                    key_s = key.is_a?(String) ? key : key.to_s
         
     | 
| 
       73 
     | 
    
         
            -
                    @argument_values.fetch(key_s, NULL_ARGUMENT_VALUE).default_used?
         
     | 
| 
       74 
     | 
    
         
            -
                  end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                  # Get the hash of all values, with stringified keys
         
     | 
| 
       77 
     | 
    
         
            -
                  # @return [Hash] the stringified hash
         
     | 
| 
       78 
     | 
    
         
            -
                  def to_h
         
     | 
| 
       79 
     | 
    
         
            -
                    @to_h ||= begin
         
     | 
| 
       80 
     | 
    
         
            -
                      h = {}
         
     | 
| 
       81 
     | 
    
         
            -
                      each_value do |arg_value|
         
     | 
| 
       82 
     | 
    
         
            -
                        arg_key = arg_value.definition.expose_as
         
     | 
| 
       83 
     | 
    
         
            -
                        h[arg_key] = unwrap_value(arg_value.value)
         
     | 
| 
       84 
     | 
    
         
            -
                      end
         
     | 
| 
       85 
     | 
    
         
            -
                      h
         
     | 
| 
       86 
     | 
    
         
            -
                    end
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                  def_delegators :to_h, :keys, :values, :each
         
     | 
| 
       90 
     | 
    
         
            -
                  def_delegators :@argument_values, :any?
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                  def prepare
         
     | 
| 
       93 
     | 
    
         
            -
                    self
         
     | 
| 
       94 
     | 
    
         
            -
                  end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
                  # Access each key, value and type for the arguments in this set.
         
     | 
| 
       97 
     | 
    
         
            -
                  # @yield [argument_value] The {ArgumentValue} for each argument
         
     | 
| 
       98 
     | 
    
         
            -
                  # @yieldparam argument_value [ArgumentValue]
         
     | 
| 
       99 
     | 
    
         
            -
                  def each_value
         
     | 
| 
       100 
     | 
    
         
            -
                    @argument_values.each_value do |argument_value|
         
     | 
| 
       101 
     | 
    
         
            -
                      yield(argument_value)
         
     | 
| 
       102 
     | 
    
         
            -
                    end
         
     | 
| 
       103 
     | 
    
         
            -
                  end
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                  class << self
         
     | 
| 
       106 
     | 
    
         
            -
                    attr_accessor :argument_definitions, :argument_owner
         
     | 
| 
       107 
     | 
    
         
            -
                  end
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                  NoArguments = Class.new(self) do
         
     | 
| 
       110 
     | 
    
         
            -
                    self.argument_definitions = []
         
     | 
| 
       111 
     | 
    
         
            -
                  end
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
                  NO_ARGS = NoArguments.new({}, context: nil, defaults_used: Set.new)
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                  # Convert this instance into valid Ruby keyword arguments
         
     | 
| 
       116 
     | 
    
         
            -
                  # @return [{Symbol=>Object}]
         
     | 
| 
       117 
     | 
    
         
            -
                  def to_kwargs
         
     | 
| 
       118 
     | 
    
         
            -
                    ruby_kwargs = {}
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                    keys.each do |key|
         
     | 
| 
       121 
     | 
    
         
            -
                      ruby_kwargs[Schema::Member::BuildType.underscore(key).to_sym] = self[key]
         
     | 
| 
       122 
     | 
    
         
            -
                    end
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                    ruby_kwargs
         
     | 
| 
       125 
     | 
    
         
            -
                  end
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                  alias :to_hash :to_kwargs
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                  private
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                  class ArgumentValue
         
     | 
| 
       132 
     | 
    
         
            -
                    attr_reader :key, :value, :definition
         
     | 
| 
       133 
     | 
    
         
            -
                    attr_writer :default_used
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                    def initialize(key, value, definition, default_used)
         
     | 
| 
       136 
     | 
    
         
            -
                      @key = key
         
     | 
| 
       137 
     | 
    
         
            -
                      @value = value
         
     | 
| 
       138 
     | 
    
         
            -
                      @definition = definition
         
     | 
| 
       139 
     | 
    
         
            -
                      @default_used = default_used
         
     | 
| 
       140 
     | 
    
         
            -
                    end
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                    # @return [Boolean] true if the argument default was passed as the argument value to the resolver
         
     | 
| 
       143 
     | 
    
         
            -
                    def default_used?
         
     | 
| 
       144 
     | 
    
         
            -
                      @default_used
         
     | 
| 
       145 
     | 
    
         
            -
                    end
         
     | 
| 
       146 
     | 
    
         
            -
                  end
         
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                  NULL_ARGUMENT_VALUE = ArgumentValue.new(nil, nil, nil, nil)
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
                  def wrap_value(value, arg_defn_type, context)
         
     | 
| 
       151 
     | 
    
         
            -
                    if value.nil?
         
     | 
| 
       152 
     | 
    
         
            -
                      nil
         
     | 
| 
       153 
     | 
    
         
            -
                    else
         
     | 
| 
       154 
     | 
    
         
            -
                      case arg_defn_type
         
     | 
| 
       155 
     | 
    
         
            -
                      when GraphQL::ListType
         
     | 
| 
       156 
     | 
    
         
            -
                        value.map { |item| wrap_value(item, arg_defn_type.of_type, context) }
         
     | 
| 
       157 
     | 
    
         
            -
                      when GraphQL::NonNullType
         
     | 
| 
       158 
     | 
    
         
            -
                        wrap_value(value, arg_defn_type.of_type, context)
         
     | 
| 
       159 
     | 
    
         
            -
                      when GraphQL::InputObjectType
         
     | 
| 
       160 
     | 
    
         
            -
                        if value.is_a?(Hash)
         
     | 
| 
       161 
     | 
    
         
            -
                          result = arg_defn_type.arguments_class.new(value, context: context, defaults_used: Set.new)
         
     | 
| 
       162 
     | 
    
         
            -
                          result.prepare
         
     | 
| 
       163 
     | 
    
         
            -
                        else
         
     | 
| 
       164 
     | 
    
         
            -
                          value
         
     | 
| 
       165 
     | 
    
         
            -
                        end
         
     | 
| 
       166 
     | 
    
         
            -
                      else
         
     | 
| 
       167 
     | 
    
         
            -
                        value
         
     | 
| 
       168 
     | 
    
         
            -
                      end
         
     | 
| 
       169 
     | 
    
         
            -
                    end
         
     | 
| 
       170 
     | 
    
         
            -
                  end
         
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
                  def unwrap_value(value)
         
     | 
| 
       173 
     | 
    
         
            -
                    case value
         
     | 
| 
       174 
     | 
    
         
            -
                    when Array
         
     | 
| 
       175 
     | 
    
         
            -
                      value.map { |item| unwrap_value(item) }
         
     | 
| 
       176 
     | 
    
         
            -
                    when Hash
         
     | 
| 
       177 
     | 
    
         
            -
                      value.inject({}) do |memo, (key, value)|
         
     | 
| 
       178 
     | 
    
         
            -
                        memo[key] = unwrap_value(value)
         
     | 
| 
       179 
     | 
    
         
            -
                        memo
         
     | 
| 
       180 
     | 
    
         
            -
                      end
         
     | 
| 
       181 
     | 
    
         
            -
                    when GraphQL::Query::Arguments, GraphQL::Schema::InputObject
         
     | 
| 
       182 
     | 
    
         
            -
                      value.to_h
         
     | 
| 
       183 
     | 
    
         
            -
                    else
         
     | 
| 
       184 
     | 
    
         
            -
                      value
         
     | 
| 
       185 
     | 
    
         
            -
                    end
         
     | 
| 
       186 
     | 
    
         
            -
                  end
         
     | 
| 
       187 
     | 
    
         
            -
                end
         
     | 
| 
       188 
     | 
    
         
            -
              end
         
     | 
| 
       189 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,24 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                module ArgumentsCache
         
     | 
| 
       5 
     | 
    
         
            -
                  # @return [Hash<InternalRepresentation::Node, GraphQL::Language::NodesDirectiveNode => Hash<GraphQL::Field, GraphQL::Directive => GraphQL::Query::Arguments>>]
         
     | 
| 
       6 
     | 
    
         
            -
                  def self.build(query)
         
     | 
| 
       7 
     | 
    
         
            -
                    Hash.new do |h1, irep_or_ast_node|
         
     | 
| 
       8 
     | 
    
         
            -
                      h1[irep_or_ast_node] = Hash.new do |h2, definition|
         
     | 
| 
       9 
     | 
    
         
            -
                        ast_node = irep_or_ast_node.is_a?(GraphQL::InternalRepresentation::Node) ? irep_or_ast_node.ast_node : irep_or_ast_node
         
     | 
| 
       10 
     | 
    
         
            -
                        h2[definition] = if definition.arguments(query.context).empty?
         
     | 
| 
       11 
     | 
    
         
            -
                          GraphQL::Query::Arguments::NO_ARGS
         
     | 
| 
       12 
     | 
    
         
            -
                        else
         
     | 
| 
       13 
     | 
    
         
            -
                          GraphQL::Query::LiteralInput.from_arguments(
         
     | 
| 
       14 
     | 
    
         
            -
                            ast_node.arguments,
         
     | 
| 
       15 
     | 
    
         
            -
                            definition,
         
     | 
| 
       16 
     | 
    
         
            -
                            query.variables,
         
     | 
| 
       17 
     | 
    
         
            -
                          )
         
     | 
| 
       18 
     | 
    
         
            -
                        end
         
     | 
| 
       19 
     | 
    
         
            -
                      end
         
     | 
| 
       20 
     | 
    
         
            -
                    end
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,52 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                class Executor
         
     | 
| 
       5 
     | 
    
         
            -
                  class PropagateNull < StandardError; end
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                  # @return [GraphQL::Query] the query being executed
         
     | 
| 
       8 
     | 
    
         
            -
                  attr_reader :query
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  def initialize(query)
         
     | 
| 
       11 
     | 
    
         
            -
                    @query = query
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  # Evaluate {operation_name} on {query}.
         
     | 
| 
       15 
     | 
    
         
            -
                  # Handle {GraphQL::ExecutionError}s by putting them in the "errors" key.
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [Hash] A GraphQL response, with either a "data" key or an "errors" key
         
     | 
| 
       17 
     | 
    
         
            -
                  def result
         
     | 
| 
       18 
     | 
    
         
            -
                    execute
         
     | 
| 
       19 
     | 
    
         
            -
                  rescue GraphQL::ExecutionError => err
         
     | 
| 
       20 
     | 
    
         
            -
                    query.context.errors << err
         
     | 
| 
       21 
     | 
    
         
            -
                    {"errors" => [err.to_h]}
         
     | 
| 
       22 
     | 
    
         
            -
                  end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  private
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  def execute
         
     | 
| 
       27 
     | 
    
         
            -
                    operation = query.selected_operation
         
     | 
| 
       28 
     | 
    
         
            -
                    return {} if operation.nil?
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                    op_type = operation.operation_type
         
     | 
| 
       31 
     | 
    
         
            -
                    root_type = query.root_type_for_operation(op_type)
         
     | 
| 
       32 
     | 
    
         
            -
                    execution_strategy_class = query.schema.execution_strategy_for_operation(op_type)
         
     | 
| 
       33 
     | 
    
         
            -
                    execution_strategy = execution_strategy_class.new
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                    query.context.execution_strategy = execution_strategy
         
     | 
| 
       36 
     | 
    
         
            -
                    data_result = begin
         
     | 
| 
       37 
     | 
    
         
            -
                      execution_strategy.execute(operation, root_type, query)
         
     | 
| 
       38 
     | 
    
         
            -
                    rescue PropagateNull
         
     | 
| 
       39 
     | 
    
         
            -
                      nil
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                    result = { "data" => data_result }
         
     | 
| 
       42 
     | 
    
         
            -
                    error_result = query.context.errors.map(&:to_h)
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                    if error_result.any?
         
     | 
| 
       45 
     | 
    
         
            -
                      result["errors"] = error_result
         
     | 
| 
       46 
     | 
    
         
            -
                    end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                    result
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
                end
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,92 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                class SerialExecution
         
     | 
| 
       5 
     | 
    
         
            -
                  class FieldResolution
         
     | 
| 
       6 
     | 
    
         
            -
                    attr_reader :irep_node, :parent_type, :target, :field, :arguments, :query
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                    def initialize(selection, parent_type, target, query_ctx)
         
     | 
| 
       9 
     | 
    
         
            -
                      @irep_node = selection
         
     | 
| 
       10 
     | 
    
         
            -
                      @selection = selection
         
     | 
| 
       11 
     | 
    
         
            -
                      @parent_type = parent_type
         
     | 
| 
       12 
     | 
    
         
            -
                      @target = target
         
     | 
| 
       13 
     | 
    
         
            -
                      @query = query_ctx.query
         
     | 
| 
       14 
     | 
    
         
            -
                      @field = irep_node.definition
         
     | 
| 
       15 
     | 
    
         
            -
                      @field_ctx = query_ctx.spawn_child(
         
     | 
| 
       16 
     | 
    
         
            -
                        key: irep_node.name,
         
     | 
| 
       17 
     | 
    
         
            -
                        object: target,
         
     | 
| 
       18 
     | 
    
         
            -
                        irep_node: irep_node,
         
     | 
| 
       19 
     | 
    
         
            -
                      )
         
     | 
| 
       20 
     | 
    
         
            -
                      @arguments = @query.arguments_for(irep_node, @field)
         
     | 
| 
       21 
     | 
    
         
            -
                    end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    def result
         
     | 
| 
       24 
     | 
    
         
            -
                      result_name = irep_node.name
         
     | 
| 
       25 
     | 
    
         
            -
                      raw_value = get_raw_value
         
     | 
| 
       26 
     | 
    
         
            -
                      if raw_value.is_a?(GraphQL::Execution::Execute::Skip)
         
     | 
| 
       27 
     | 
    
         
            -
                        {}
         
     | 
| 
       28 
     | 
    
         
            -
                      else
         
     | 
| 
       29 
     | 
    
         
            -
                        { result_name => get_finished_value(raw_value) }
         
     | 
| 
       30 
     | 
    
         
            -
                      end
         
     | 
| 
       31 
     | 
    
         
            -
                    end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                    # GraphQL::Batch depends on this
         
     | 
| 
       34 
     | 
    
         
            -
                    def execution_context
         
     | 
| 
       35 
     | 
    
         
            -
                      @field_ctx
         
     | 
| 
       36 
     | 
    
         
            -
                    end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                    private
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                    # After getting the value from the field's resolve method,
         
     | 
| 
       41 
     | 
    
         
            -
                    # continue by "finishing" the value, eg. executing sub-fields or coercing values
         
     | 
| 
       42 
     | 
    
         
            -
                    def get_finished_value(raw_value)
         
     | 
| 
       43 
     | 
    
         
            -
                      case raw_value
         
     | 
| 
       44 
     | 
    
         
            -
                      when GraphQL::ExecutionError
         
     | 
| 
       45 
     | 
    
         
            -
                        raw_value.ast_node = @field_ctx.ast_node
         
     | 
| 
       46 
     | 
    
         
            -
                        raw_value.path = @field_ctx.path
         
     | 
| 
       47 
     | 
    
         
            -
                        @query.context.errors.push(raw_value)
         
     | 
| 
       48 
     | 
    
         
            -
                      when Array
         
     | 
| 
       49 
     | 
    
         
            -
                        list_errors = raw_value.each_with_index.select { |value, _| value.is_a?(GraphQL::ExecutionError) }
         
     | 
| 
       50 
     | 
    
         
            -
                        if list_errors.any?
         
     | 
| 
       51 
     | 
    
         
            -
                          list_errors.each do |error, index|
         
     | 
| 
       52 
     | 
    
         
            -
                            error.ast_node = @field_ctx.ast_node
         
     | 
| 
       53 
     | 
    
         
            -
                            error.path = @field_ctx.path + [index]
         
     | 
| 
       54 
     | 
    
         
            -
                            @query.context.errors.push(error)
         
     | 
| 
       55 
     | 
    
         
            -
                          end
         
     | 
| 
       56 
     | 
    
         
            -
                        end
         
     | 
| 
       57 
     | 
    
         
            -
                      end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                      begin
         
     | 
| 
       60 
     | 
    
         
            -
                        GraphQL::Query::SerialExecution::ValueResolution.resolve(
         
     | 
| 
       61 
     | 
    
         
            -
                          parent_type,
         
     | 
| 
       62 
     | 
    
         
            -
                          field,
         
     | 
| 
       63 
     | 
    
         
            -
                          field.type,
         
     | 
| 
       64 
     | 
    
         
            -
                          raw_value,
         
     | 
| 
       65 
     | 
    
         
            -
                          @selection,
         
     | 
| 
       66 
     | 
    
         
            -
                          @field_ctx,
         
     | 
| 
       67 
     | 
    
         
            -
                        )
         
     | 
| 
       68 
     | 
    
         
            -
                      rescue GraphQL::Query::Executor::PropagateNull
         
     | 
| 
       69 
     | 
    
         
            -
                        if field.type.kind.non_null?
         
     | 
| 
       70 
     | 
    
         
            -
                          raise
         
     | 
| 
       71 
     | 
    
         
            -
                        else
         
     | 
| 
       72 
     | 
    
         
            -
                          nil
         
     | 
| 
       73 
     | 
    
         
            -
                        end
         
     | 
| 
       74 
     | 
    
         
            -
                      end
         
     | 
| 
       75 
     | 
    
         
            -
                    end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                    # Get the result of:
         
     | 
| 
       78 
     | 
    
         
            -
                    # - Any middleware on this schema
         
     | 
| 
       79 
     | 
    
         
            -
                    # - The field's resolve method
         
     | 
| 
       80 
     | 
    
         
            -
                    # If the middleware chain returns a GraphQL::ExecutionError, its message
         
     | 
| 
       81 
     | 
    
         
            -
                    # is added to the "errors" key.
         
     | 
| 
       82 
     | 
    
         
            -
                    def get_raw_value
         
     | 
| 
       83 
     | 
    
         
            -
                      begin
         
     | 
| 
       84 
     | 
    
         
            -
                        @field_ctx.schema.middleware.invoke([parent_type, target, field, arguments, @field_ctx]) # rubocop:disable Development/ContextIsPassedCop -- unrelated
         
     | 
| 
       85 
     | 
    
         
            -
                      rescue GraphQL::ExecutionError => err
         
     | 
| 
       86 
     | 
    
         
            -
                        err
         
     | 
| 
       87 
     | 
    
         
            -
                      end
         
     | 
| 
       88 
     | 
    
         
            -
                    end
         
     | 
| 
       89 
     | 
    
         
            -
                  end
         
     | 
| 
       90 
     | 
    
         
            -
                end
         
     | 
| 
       91 
     | 
    
         
            -
              end
         
     | 
| 
       92 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,19 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                class SerialExecution
         
     | 
| 
       5 
     | 
    
         
            -
                  module OperationResolution
         
     | 
| 
       6 
     | 
    
         
            -
                    def self.resolve(selection, target, query)
         
     | 
| 
       7 
     | 
    
         
            -
                      result = query.context.execution_strategy.selection_resolution.resolve(
         
     | 
| 
       8 
     | 
    
         
            -
                        query.root_value,
         
     | 
| 
       9 
     | 
    
         
            -
                        target,
         
     | 
| 
       10 
     | 
    
         
            -
                        selection,
         
     | 
| 
       11 
     | 
    
         
            -
                        query.context,
         
     | 
| 
       12 
     | 
    
         
            -
                      )
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                      result
         
     | 
| 
       15 
     | 
    
         
            -
                    end
         
     | 
| 
       16 
     | 
    
         
            -
                  end
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
              end
         
     | 
| 
       19 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,23 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                class SerialExecution
         
     | 
| 
       5 
     | 
    
         
            -
                  module SelectionResolution
         
     | 
| 
       6 
     | 
    
         
            -
                    def self.resolve(target, current_type, selection, query_ctx)
         
     | 
| 
       7 
     | 
    
         
            -
                      selection_result = {}
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                      selection.typed_children[current_type].each do |name, subselection|
         
     | 
| 
       10 
     | 
    
         
            -
                        selection_result.merge!(query_ctx.execution_strategy.field_resolution.new(
         
     | 
| 
       11 
     | 
    
         
            -
                          subselection,
         
     | 
| 
       12 
     | 
    
         
            -
                          current_type,
         
     | 
| 
       13 
     | 
    
         
            -
                          target,
         
     | 
| 
       14 
     | 
    
         
            -
                          query_ctx
         
     | 
| 
       15 
     | 
    
         
            -
                        ).result)
         
     | 
| 
       16 
     | 
    
         
            -
                      end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                      selection_result
         
     | 
| 
       19 
     | 
    
         
            -
                    end
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
              end
         
     | 
| 
       23 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,87 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            module GraphQL
         
     | 
| 
       3 
     | 
    
         
            -
              class Query
         
     | 
| 
       4 
     | 
    
         
            -
                class SerialExecution
         
     | 
| 
       5 
     | 
    
         
            -
                  module ValueResolution
         
     | 
| 
       6 
     | 
    
         
            -
                    def self.resolve(parent_type, field_defn, field_type, value, selection, query_ctx)
         
     | 
| 
       7 
     | 
    
         
            -
                      if value.nil? || value.is_a?(GraphQL::ExecutionError)
         
     | 
| 
       8 
     | 
    
         
            -
                        if field_type.kind.non_null?
         
     | 
| 
       9 
     | 
    
         
            -
                          if value.nil?
         
     | 
| 
       10 
     | 
    
         
            -
                            type_error = GraphQL::InvalidNullError.new(parent_type, field_defn, value)
         
     | 
| 
       11 
     | 
    
         
            -
                            query_ctx.schema.type_error(type_error, query_ctx)
         
     | 
| 
       12 
     | 
    
         
            -
                          end
         
     | 
| 
       13 
     | 
    
         
            -
                          raise GraphQL::Query::Executor::PropagateNull
         
     | 
| 
       14 
     | 
    
         
            -
                        else
         
     | 
| 
       15 
     | 
    
         
            -
                          nil
         
     | 
| 
       16 
     | 
    
         
            -
                        end
         
     | 
| 
       17 
     | 
    
         
            -
                      else
         
     | 
| 
       18 
     | 
    
         
            -
                        case field_type.kind
         
     | 
| 
       19 
     | 
    
         
            -
                        when GraphQL::TypeKinds::SCALAR, GraphQL::TypeKinds::ENUM
         
     | 
| 
       20 
     | 
    
         
            -
                          field_type.coerce_result(value, query_ctx)
         
     | 
| 
       21 
     | 
    
         
            -
                        when GraphQL::TypeKinds::LIST
         
     | 
| 
       22 
     | 
    
         
            -
                          wrapped_type = field_type.of_type
         
     | 
| 
       23 
     | 
    
         
            -
                          result = []
         
     | 
| 
       24 
     | 
    
         
            -
                          i = 0
         
     | 
| 
       25 
     | 
    
         
            -
                          value.each do |inner_value|
         
     | 
| 
       26 
     | 
    
         
            -
                            inner_ctx = query_ctx.spawn_child(
         
     | 
| 
       27 
     | 
    
         
            -
                              key: i,
         
     | 
| 
       28 
     | 
    
         
            -
                              object: inner_value,
         
     | 
| 
       29 
     | 
    
         
            -
                              irep_node: selection,
         
     | 
| 
       30 
     | 
    
         
            -
                            )
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                            result << resolve(
         
     | 
| 
       33 
     | 
    
         
            -
                              parent_type,
         
     | 
| 
       34 
     | 
    
         
            -
                              field_defn,
         
     | 
| 
       35 
     | 
    
         
            -
                              wrapped_type,
         
     | 
| 
       36 
     | 
    
         
            -
                              inner_value,
         
     | 
| 
       37 
     | 
    
         
            -
                              selection,
         
     | 
| 
       38 
     | 
    
         
            -
                              inner_ctx,
         
     | 
| 
       39 
     | 
    
         
            -
                            )
         
     | 
| 
       40 
     | 
    
         
            -
                            i += 1
         
     | 
| 
       41 
     | 
    
         
            -
                          end
         
     | 
| 
       42 
     | 
    
         
            -
                          result
         
     | 
| 
       43 
     | 
    
         
            -
                        when GraphQL::TypeKinds::NON_NULL
         
     | 
| 
       44 
     | 
    
         
            -
                          wrapped_type = field_type.of_type
         
     | 
| 
       45 
     | 
    
         
            -
                          resolve(
         
     | 
| 
       46 
     | 
    
         
            -
                            parent_type,
         
     | 
| 
       47 
     | 
    
         
            -
                            field_defn,
         
     | 
| 
       48 
     | 
    
         
            -
                            wrapped_type,
         
     | 
| 
       49 
     | 
    
         
            -
                            value,
         
     | 
| 
       50 
     | 
    
         
            -
                            selection,
         
     | 
| 
       51 
     | 
    
         
            -
                            query_ctx,
         
     | 
| 
       52 
     | 
    
         
            -
                          )
         
     | 
| 
       53 
     | 
    
         
            -
                        when GraphQL::TypeKinds::OBJECT
         
     | 
| 
       54 
     | 
    
         
            -
                          query_ctx.execution_strategy.selection_resolution.resolve(
         
     | 
| 
       55 
     | 
    
         
            -
                            value,
         
     | 
| 
       56 
     | 
    
         
            -
                            field_type,
         
     | 
| 
       57 
     | 
    
         
            -
                            selection,
         
     | 
| 
       58 
     | 
    
         
            -
                            query_ctx
         
     | 
| 
       59 
     | 
    
         
            -
                          )
         
     | 
| 
       60 
     | 
    
         
            -
                        when GraphQL::TypeKinds::UNION, GraphQL::TypeKinds::INTERFACE
         
     | 
| 
       61 
     | 
    
         
            -
                          query = query_ctx.query
         
     | 
| 
       62 
     | 
    
         
            -
                          resolved_type = query.resolve_type(value)
         
     | 
| 
       63 
     | 
    
         
            -
                          possible_types = query.possible_types(field_type)
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                          if !possible_types.include?(resolved_type)
         
     | 
| 
       66 
     | 
    
         
            -
                            type_error = GraphQL::UnresolvedTypeError.new(value, field_defn, parent_type, resolved_type, possible_types)
         
     | 
| 
       67 
     | 
    
         
            -
                            query.schema.type_error(type_error, query_ctx)
         
     | 
| 
       68 
     | 
    
         
            -
                            raise GraphQL::Query::Executor::PropagateNull
         
     | 
| 
       69 
     | 
    
         
            -
                          else
         
     | 
| 
       70 
     | 
    
         
            -
                            resolve(
         
     | 
| 
       71 
     | 
    
         
            -
                              parent_type,
         
     | 
| 
       72 
     | 
    
         
            -
                              field_defn,
         
     | 
| 
       73 
     | 
    
         
            -
                              resolved_type,
         
     | 
| 
       74 
     | 
    
         
            -
                              value,
         
     | 
| 
       75 
     | 
    
         
            -
                              selection,
         
     | 
| 
       76 
     | 
    
         
            -
                              query_ctx,
         
     | 
| 
       77 
     | 
    
         
            -
                            )
         
     | 
| 
       78 
     | 
    
         
            -
                          end
         
     | 
| 
       79 
     | 
    
         
            -
                        else
         
     | 
| 
       80 
     | 
    
         
            -
                          raise("Unknown type kind: #{field_type.kind}")
         
     | 
| 
       81 
     | 
    
         
            -
                        end
         
     | 
| 
       82 
     | 
    
         
            -
                      end
         
     | 
| 
       83 
     | 
    
         
            -
                    end
         
     | 
| 
       84 
     | 
    
         
            -
                  end
         
     | 
| 
       85 
     | 
    
         
            -
                end
         
     | 
| 
       86 
     | 
    
         
            -
              end
         
     | 
| 
       87 
     | 
    
         
            -
            end
         
     |