graphql 1.13.16 → 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.

Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  4. data/lib/graphql/analysis/ast/visitor.rb +1 -1
  5. data/lib/graphql/analysis/ast.rb +0 -10
  6. data/lib/graphql/analysis.rb +0 -7
  7. data/lib/graphql/backtrace/table.rb +0 -18
  8. data/lib/graphql/backtrace/tracer.rb +1 -2
  9. data/lib/graphql/backtrace.rb +2 -8
  10. data/lib/graphql/dig.rb +1 -1
  11. data/lib/graphql/execution/errors.rb +1 -9
  12. data/lib/graphql/execution/interpreter/runtime.rb +2 -9
  13. data/lib/graphql/execution/interpreter.rb +0 -22
  14. data/lib/graphql/execution/lazy.rb +1 -1
  15. data/lib/graphql/execution/lookahead.rb +6 -13
  16. data/lib/graphql/execution/multiplex.rb +50 -107
  17. data/lib/graphql/execution.rb +11 -3
  18. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  19. data/lib/graphql/introspection/entry_points.rb +2 -15
  20. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  21. data/lib/graphql/pagination/connections.rb +2 -28
  22. data/lib/graphql/query/context.rb +1 -185
  23. data/lib/graphql/query/input_validation_result.rb +0 -9
  24. data/lib/graphql/query/literal_input.rb +8 -13
  25. data/lib/graphql/query/validation_pipeline.rb +6 -34
  26. data/lib/graphql/query/variable_validation_error.rb +2 -2
  27. data/lib/graphql/query/variables.rb +8 -31
  28. data/lib/graphql/query.rb +5 -34
  29. data/lib/graphql/railtie.rb +0 -104
  30. data/lib/graphql/relay/range_add.rb +0 -4
  31. data/lib/graphql/relay.rb +0 -15
  32. data/lib/graphql/schema/addition.rb +1 -8
  33. data/lib/graphql/schema/argument.rb +1 -25
  34. data/lib/graphql/schema/build_from_definition.rb +0 -1
  35. data/lib/graphql/schema/directive.rb +0 -21
  36. data/lib/graphql/schema/enum.rb +3 -19
  37. data/lib/graphql/schema/enum_value.rb +0 -22
  38. data/lib/graphql/schema/field.rb +2 -185
  39. data/lib/graphql/schema/input_object.rb +11 -57
  40. data/lib/graphql/schema/interface.rb +0 -25
  41. data/lib/graphql/schema/introspection_system.rb +3 -8
  42. data/lib/graphql/schema/late_bound_type.rb +2 -2
  43. data/lib/graphql/schema/list.rb +3 -24
  44. data/lib/graphql/schema/loader.rb +0 -1
  45. data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
  46. data/lib/graphql/schema/member/build_type.rb +4 -6
  47. data/lib/graphql/schema/member/has_arguments.rb +14 -18
  48. data/lib/graphql/schema/member/has_fields.rb +2 -2
  49. data/lib/graphql/schema/member/has_interfaces.rb +0 -2
  50. data/lib/graphql/schema/member/validates_input.rb +2 -2
  51. data/lib/graphql/schema/member.rb +0 -6
  52. data/lib/graphql/schema/mutation.rb +0 -9
  53. data/lib/graphql/schema/non_null.rb +3 -9
  54. data/lib/graphql/schema/object.rb +0 -40
  55. data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
  56. data/lib/graphql/schema/scalar.rb +1 -16
  57. data/lib/graphql/schema/union.rb +0 -16
  58. data/lib/graphql/schema/warden.rb +1 -1
  59. data/lib/graphql/schema/wrapper.rb +0 -5
  60. data/lib/graphql/schema.rb +106 -945
  61. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  62. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  63. data/lib/graphql/static_validation/validator.rb +2 -24
  64. data/lib/graphql/static_validation.rb +0 -2
  65. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  66. data/lib/graphql/subscriptions/event.rb +1 -1
  67. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  68. data/lib/graphql/subscriptions.rb +4 -13
  69. data/lib/graphql/tracing/data_dog_tracing.rb +2 -19
  70. data/lib/graphql/tracing/platform_tracing.rb +4 -31
  71. data/lib/graphql/tracing.rb +0 -1
  72. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  73. data/lib/graphql/types/relay/default_relay.rb +0 -10
  74. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  75. data/lib/graphql/types/relay.rb +0 -2
  76. data/lib/graphql/version.rb +1 -1
  77. data/lib/graphql.rb +1 -65
  78. metadata +6 -131
  79. data/lib/graphql/analysis/analyze_query.rb +0 -98
  80. data/lib/graphql/analysis/field_usage.rb +0 -45
  81. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  82. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  83. data/lib/graphql/analysis/query_complexity.rb +0 -88
  84. data/lib/graphql/analysis/query_depth.rb +0 -43
  85. data/lib/graphql/analysis/reducer_state.rb +0 -48
  86. data/lib/graphql/argument.rb +0 -131
  87. data/lib/graphql/authorization.rb +0 -82
  88. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  89. data/lib/graphql/backwards_compatibility.rb +0 -61
  90. data/lib/graphql/base_type.rb +0 -232
  91. data/lib/graphql/boolean_type.rb +0 -2
  92. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  93. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  94. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  95. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  96. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  97. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  98. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  99. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  100. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  101. data/lib/graphql/compatibility.rb +0 -5
  102. data/lib/graphql/define/assign_argument.rb +0 -12
  103. data/lib/graphql/define/assign_connection.rb +0 -13
  104. data/lib/graphql/define/assign_enum_value.rb +0 -18
  105. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  106. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  107. data/lib/graphql/define/assign_object_field.rb +0 -42
  108. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  109. data/lib/graphql/define/instance_definable.rb +0 -255
  110. data/lib/graphql/define/no_definition_error.rb +0 -7
  111. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  112. data/lib/graphql/define/type_definer.rb +0 -31
  113. data/lib/graphql/define.rb +0 -31
  114. data/lib/graphql/deprecated_dsl.rb +0 -55
  115. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  116. data/lib/graphql/directive/include_directive.rb +0 -2
  117. data/lib/graphql/directive/skip_directive.rb +0 -2
  118. data/lib/graphql/directive.rb +0 -107
  119. data/lib/graphql/enum_type.rb +0 -133
  120. data/lib/graphql/execution/execute.rb +0 -333
  121. data/lib/graphql/execution/flatten.rb +0 -40
  122. data/lib/graphql/execution/typecast.rb +0 -50
  123. data/lib/graphql/field/resolve.rb +0 -59
  124. data/lib/graphql/field.rb +0 -226
  125. data/lib/graphql/float_type.rb +0 -2
  126. data/lib/graphql/function.rb +0 -128
  127. data/lib/graphql/id_type.rb +0 -2
  128. data/lib/graphql/input_object_type.rb +0 -138
  129. data/lib/graphql/int_type.rb +0 -2
  130. data/lib/graphql/interface_type.rb +0 -72
  131. data/lib/graphql/internal_representation/document.rb +0 -27
  132. data/lib/graphql/internal_representation/node.rb +0 -206
  133. data/lib/graphql/internal_representation/print.rb +0 -51
  134. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  135. data/lib/graphql/internal_representation/scope.rb +0 -88
  136. data/lib/graphql/internal_representation/visit.rb +0 -36
  137. data/lib/graphql/internal_representation.rb +0 -7
  138. data/lib/graphql/list_type.rb +0 -80
  139. data/lib/graphql/non_null_type.rb +0 -71
  140. data/lib/graphql/object_type.rb +0 -130
  141. data/lib/graphql/query/arguments.rb +0 -189
  142. data/lib/graphql/query/arguments_cache.rb +0 -24
  143. data/lib/graphql/query/executor.rb +0 -52
  144. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  145. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  146. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  147. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  148. data/lib/graphql/query/serial_execution.rb +0 -40
  149. data/lib/graphql/relay/array_connection.rb +0 -83
  150. data/lib/graphql/relay/base_connection.rb +0 -189
  151. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  152. data/lib/graphql/relay/connection_resolve.rb +0 -43
  153. data/lib/graphql/relay/connection_type.rb +0 -54
  154. data/lib/graphql/relay/edge.rb +0 -27
  155. data/lib/graphql/relay/edge_type.rb +0 -19
  156. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  157. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  158. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  159. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  160. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  161. data/lib/graphql/relay/mutation/result.rb +0 -38
  162. data/lib/graphql/relay/mutation.rb +0 -106
  163. data/lib/graphql/relay/node.rb +0 -39
  164. data/lib/graphql/relay/page_info.rb +0 -7
  165. data/lib/graphql/relay/relation_connection.rb +0 -188
  166. data/lib/graphql/relay/type_extensions.rb +0 -32
  167. data/lib/graphql/scalar_type.rb +0 -91
  168. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  169. data/lib/graphql/schema/default_parse_error.rb +0 -10
  170. data/lib/graphql/schema/default_type_error.rb +0 -17
  171. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  172. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  173. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  174. data/lib/graphql/schema/middleware_chain.rb +0 -82
  175. data/lib/graphql/schema/possible_types.rb +0 -44
  176. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  177. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  178. data/lib/graphql/schema/traversal.rb +0 -228
  179. data/lib/graphql/schema/validation.rb +0 -313
  180. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  181. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  182. data/lib/graphql/string_type.rb +0 -2
  183. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  184. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  185. data/lib/graphql/types/relay/node_field.rb +0 -24
  186. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  187. data/lib/graphql/union_type.rb +0 -115
  188. data/lib/graphql/upgrader/member.rb +0 -937
  189. data/lib/graphql/upgrader/schema.rb +0 -38
data/lib/graphql/relay.rb CHANGED
@@ -1,18 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'graphql/relay/page_info'
4
- require 'graphql/relay/edge'
5
- require 'graphql/relay/edge_type'
6
- require 'graphql/relay/edges_instrumentation'
7
- require 'graphql/relay/base_connection'
8
- require 'graphql/relay/array_connection'
9
3
  require 'graphql/relay/range_add'
10
- require 'graphql/relay/relation_connection'
11
- require 'graphql/relay/mongo_relation_connection'
12
- require 'graphql/relay/global_id_resolve'
13
- require 'graphql/relay/mutation'
14
- require 'graphql/relay/node'
15
- require 'graphql/relay/connection_instrumentation'
16
- require 'graphql/relay/connection_resolve'
17
- require 'graphql/relay/connection_type'
18
- require 'graphql/relay/type_extensions'
@@ -136,14 +136,7 @@ module GraphQL
136
136
  end
137
137
 
138
138
  def add_type(type, owner:, late_types:, path:)
139
- if type.respond_to?(:metadata) && type.metadata.is_a?(Hash)
140
- type_class = type.metadata[:type_class]
141
- if type_class.nil?
142
- raise ArgumentError, "Can't add legacy type: #{type} (#{type.class})"
143
- else
144
- type = type_class
145
- end
146
- elsif type.is_a?(String) || type.is_a?(GraphQL::Schema::LateBoundType)
139
+ if type.is_a?(String) || type.is_a?(GraphQL::Schema::LateBoundType)
147
140
  late_types << [owner, type]
148
141
  return
149
142
  end
@@ -2,8 +2,6 @@
2
2
  module GraphQL
3
3
  class Schema
4
4
  class Argument
5
- include GraphQL::Schema::Member::CachedGraphQLDefinition
6
- include GraphQL::Schema::Member::AcceptsDefinition
7
5
  include GraphQL::Schema::Member::HasPath
8
6
  include GraphQL::Schema::Member::HasAstNode
9
7
  include GraphQL::Schema::Member::HasDirectives
@@ -44,12 +42,11 @@ module GraphQL
44
42
  # @param prepare [Symbol] A method to call to transform this argument's valuebefore sending it to field resolution
45
43
  # @param camelize [Boolean] if true, the name will be camelized when building the schema
46
44
  # @param from_resolver [Boolean] if true, a Resolver class defined this argument
47
- # @param method_access [Boolean] If false, don't build method access on legacy {Query::Arguments} instances.
48
45
  # @param directives [Hash{Class => Hash}]
49
46
  # @param deprecation_reason [String]
50
47
  # @param validates [Hash, nil] Options for building validators, if any should be applied
51
48
  # @param replace_null_with_default [Boolean] if `true`, incoming values of `null` will be replaced with the configured `default_value`
52
- def initialize(arg_name = nil, type_expr = nil, desc = nil, required: true, type: nil, name: nil, loads: nil, description: nil, ast_node: nil, default_value: NO_DEFAULT, as: nil, from_resolver: false, camelize: true, prepare: nil, method_access: true, owner:, validates: nil, directives: nil, deprecation_reason: nil, replace_null_with_default: false, &definition_block)
49
+ def initialize(arg_name = nil, type_expr = nil, desc = nil, required: true, type: nil, name: nil, loads: nil, description: nil, ast_node: nil, default_value: NO_DEFAULT, as: nil, from_resolver: false, camelize: true, prepare: nil, owner:, validates: nil, directives: nil, deprecation_reason: nil, replace_null_with_default: false, &definition_block)
53
50
  arg_name ||= name
54
51
  @name = -(camelize ? Member::BuildType.camelize(arg_name.to_s) : arg_name.to_s)
55
52
  @type_expr = type_expr || type
@@ -70,7 +67,6 @@ module GraphQL
70
67
  @prepare = prepare
71
68
  @ast_node = ast_node
72
69
  @from_resolver = from_resolver
73
- @method_access = method_access
74
70
  self.deprecation_reason = deprecation_reason
75
71
 
76
72
  if directives
@@ -169,26 +165,6 @@ module GraphQL
169
165
  true
170
166
  end
171
167
 
172
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
173
-
174
- def to_graphql
175
- argument = GraphQL::Argument.new
176
- argument.name = @name
177
- argument.type = -> { type }
178
- argument.description = @description
179
- argument.metadata[:type_class] = self
180
- argument.as = @as
181
- argument.ast_node = ast_node
182
- argument.method_access = @method_access
183
- if NO_DEFAULT != @default_value
184
- argument.default_value = @default_value
185
- end
186
- if self.deprecation_reason
187
- argument.deprecation_reason = self.deprecation_reason
188
- end
189
- argument
190
- end
191
-
192
168
  def type=(new_type)
193
169
  validate_input_type(new_type)
194
170
  # This isn't true for LateBoundTypes, but we can assume those will
@@ -365,7 +365,6 @@ module GraphQL
365
365
  deprecation_reason: builder.build_deprecation_reason(argument_defn.directives),
366
366
  ast_node: argument_defn,
367
367
  camelize: false,
368
- method_access: false,
369
368
  directives: prepare_directives(argument_defn, type_resolver),
370
369
  **default_value_kwargs
371
370
  )
@@ -8,7 +8,6 @@ module GraphQL
8
8
  # - {.resolve}: Wraps field resolution (so it should call `yield` to continue)
9
9
  class Directive < GraphQL::Schema::Member
10
10
  extend GraphQL::Schema::Member::HasArguments
11
- extend GraphQL::Schema::Member::AcceptsDefinition
12
11
 
13
12
  class << self
14
13
  # Directives aren't types, they don't have kinds.
@@ -55,26 +54,6 @@ module GraphQL
55
54
  default_directive
56
55
  end
57
56
 
58
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
59
-
60
- def to_graphql
61
- defn = GraphQL::Directive.new
62
- defn.name = self.graphql_name
63
- defn.description = self.description
64
- defn.locations = self.locations
65
- defn.default_directive = self.default_directive
66
- defn.ast_node = ast_node
67
- defn.metadata[:type_class] = self
68
- all_argument_definitions.each do |arg_defn|
69
- arg_graphql = arg_defn.to_graphql(silence_deprecation_warning: true)
70
- defn.arguments[arg_graphql.name] = arg_graphql # rubocop:disable Development/ContextIsPassedCop -- legacy-related
71
- end
72
- # Make a reference to a classic-style Arguments class
73
- defn.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(defn)
74
-
75
- defn
76
- end
77
-
78
57
  # If false, this part of the query won't be evaluated
79
58
  def include?(_object, arguments, context)
80
59
  static_include?(arguments, context)
@@ -20,10 +20,9 @@ module GraphQL
20
20
  # end
21
21
  class Schema
22
22
  class Enum < GraphQL::Schema::Member
23
- extend GraphQL::Schema::Member::AcceptsDefinition
24
23
  extend GraphQL::Schema::Member::ValidatesInput
25
24
 
26
- class UnresolvedValueError < GraphQL::EnumType::UnresolvedValueError
25
+ class UnresolvedValueError < GraphQL::Error
27
26
  def initialize(value:, enum:, context:)
28
27
  fix_message = ", but this isn't a valid value for `#{enum.graphql_name}`. Update the field or resolver to return one of `#{enum.graphql_name}`'s values instead."
29
28
  message = if (cp = context[:current_path]) && (cf = context[:current_field])
@@ -108,22 +107,6 @@ module GraphQL
108
107
  enum_values(context).each_with_object({}) { |val, obj| obj[val.graphql_name] = val }
109
108
  end
110
109
 
111
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
112
-
113
- # @return [GraphQL::EnumType]
114
- def to_graphql
115
- enum_type = GraphQL::EnumType.new
116
- enum_type.name = graphql_name
117
- enum_type.description = description
118
- enum_type.introspection = introspection
119
- enum_type.ast_node = ast_node
120
- values.each do |name, val|
121
- enum_type.add_value(val.deprecated_to_graphql)
122
- end
123
- enum_type.metadata[:type_class] = self
124
- enum_type
125
- end
126
-
127
110
  # @return [Class] for handling `value(...)` inputs and building `GraphQL::Enum::EnumValue`s out of them
128
111
  def enum_value_class(new_enum_value_class = nil)
129
112
  if new_enum_value_class
@@ -139,8 +122,9 @@ module GraphQL
139
122
  GraphQL::TypeKinds::ENUM
140
123
  end
141
124
 
142
- def validate_non_null_input(value_name, ctx, max_errors: nil)
125
+ def validate_non_null_input(value_name, ctx)
143
126
  result = GraphQL::Query::InputValidationResult.new
127
+
144
128
  allowed_values = ctx.warden.enum_values(self)
145
129
  matching_value = allowed_values.find { |v| v.graphql_name == value_name }
146
130
 
@@ -13,12 +13,6 @@ module GraphQL
13
13
  # # arguments to `value(...)` in Enum classes are passed here
14
14
  # super
15
15
  # end
16
- #
17
- # def to_graphql
18
- # enum_value = super
19
- # # customize the derived GraphQL::EnumValue here
20
- # enum_value
21
- # end
22
16
  # end
23
17
  #
24
18
  # class BaseEnum < GraphQL::Schema::Enum
@@ -26,8 +20,6 @@ module GraphQL
26
20
  # enum_value_class CustomEnumValue
27
21
  # end
28
22
  class EnumValue < GraphQL::Schema::Member
29
- include GraphQL::Schema::Member::CachedGraphQLDefinition
30
- include GraphQL::Schema::Member::AcceptsDefinition
31
23
  include GraphQL::Schema::Member::HasPath
32
24
  include GraphQL::Schema::Member::HasAstNode
33
25
  include GraphQL::Schema::Member::HasDirectives
@@ -73,20 +65,6 @@ module GraphQL
73
65
  @value
74
66
  end
75
67
 
76
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
77
-
78
- # @return [GraphQL::EnumType::EnumValue] A runtime-ready object derived from this object
79
- def to_graphql
80
- enum_value = GraphQL::EnumType::EnumValue.new
81
- enum_value.name = @graphql_name
82
- enum_value.description = @description
83
- enum_value.value = @value
84
- enum_value.deprecation_reason = self.deprecation_reason
85
- enum_value.metadata[:type_class] = self
86
- enum_value.ast_node = ast_node
87
- enum_value
88
- end
89
-
90
68
  def inspect
91
69
  "#<#{self.class} #{path} @value=#{@value.inspect}#{description ? " @description=#{description.inspect}" : ""}>"
92
70
  end
@@ -5,8 +5,6 @@ require "graphql/schema/field/scope_extension"
5
5
  module GraphQL
6
6
  class Schema
7
7
  class Field
8
- include GraphQL::Schema::Member::CachedGraphQLDefinition
9
- include GraphQL::Schema::Member::AcceptsDefinition
10
8
  include GraphQL::Schema::Member::HasArguments
11
9
  include GraphQL::Schema::Member::HasAstNode
12
10
  include GraphQL::Schema::Member::HasPath
@@ -84,16 +82,6 @@ module GraphQL
84
82
  # @return [GraphQL::Schema:Field] an instance of `self
85
83
  # @see {.initialize} for other options
86
84
  def self.from_options(name = nil, type = nil, desc = nil, resolver: nil, mutation: nil, subscription: nil,**kwargs, &block)
87
- if kwargs[:field]
88
- if kwargs[:field].is_a?(GraphQL::Field) && kwargs[:field] == GraphQL::Types::Relay::NodeField.graphql_definition
89
- GraphQL::Deprecation.warn("Legacy-style `GraphQL::Relay::Node.field` is being added to a class-based type. See `GraphQL::Types::Relay::NodeField` for a replacement.")
90
- return GraphQL::Types::Relay::NodeField
91
- elsif kwargs[:field].is_a?(GraphQL::Field) && kwargs[:field] == GraphQL::Types::Relay::NodesField.graphql_definition
92
- GraphQL::Deprecation.warn("Legacy-style `GraphQL::Relay::Node.plural_field` is being added to a class-based type. See `GraphQL::Types::Relay::NodesField` for a replacement.")
93
- return GraphQL::Types::Relay::NodesField
94
- end
95
- end
96
-
97
85
  if (parent_config = resolver || mutation || subscription)
98
86
  # Get the parent config, merge in local overrides
99
87
  kwargs = parent_config.field_options.merge(kwargs)
@@ -106,9 +94,6 @@ module GraphQL
106
94
  end
107
95
 
108
96
  if !type.nil?
109
- if type.is_a?(GraphQL::Field)
110
- raise ArgumentError, "A GraphQL::Field was passed as the second argument, use the `field:` keyword for this instead."
111
- end
112
97
  if desc
113
98
  if kwargs[:description]
114
99
  raise ArgumentError, "Provide description as a positional argument or `description:` keyword, but not both (#{desc.inspect}, #{kwargs[:description].inspect})"
@@ -176,8 +161,6 @@ module GraphQL
176
161
 
177
162
  # @return Boolean
178
163
  attr_reader :relay_node_field
179
- # @return Boolean
180
- attr_reader :relay_nodes_field
181
164
 
182
165
  # @return [Boolean] Should we warn if this field's name conflicts with a built-in method?
183
166
  def method_conflict_warning?
@@ -214,8 +197,7 @@ module GraphQL
214
197
  # @param ast_node [Language::Nodes::FieldDefinition, nil] If this schema was parsed from definition, this AST node defined the field
215
198
  # @param method_conflict_warning [Boolean] If false, skip the warning if this field's method conflicts with a built-in method
216
199
  # @param validates [Array<Hash>] Configurations for validating this field
217
- # @param legacy_edge_class [Class, nil] (DEPRECATED) If present, pass this along to the legacy field definition
218
- def initialize(type: nil, name: nil, owner: nil, null: true, field: nil, function: nil, description: nil, deprecation_reason: nil, method: nil, hash_key: nil, dig: nil, resolver_method: nil, resolve: nil, connection: nil, max_page_size: :not_given, scope: nil, introspection: false, camelize: true, trace: nil, complexity: 1, ast_node: nil, extras: EMPTY_ARRAY, extensions: EMPTY_ARRAY, connection_extension: self.class.connection_extension, resolver_class: nil, subscription_scope: nil, relay_node_field: false, relay_nodes_field: false, method_conflict_warning: true, broadcastable: nil, arguments: EMPTY_HASH, directives: EMPTY_HASH, validates: EMPTY_ARRAY, legacy_edge_class: nil, &definition_block)
200
+ def initialize(type: nil, name: nil, owner: nil, null: true, field: nil, function: nil, description: nil, deprecation_reason: nil, method: nil, hash_key: nil, dig: nil, resolver_method: nil, resolve: nil, connection: nil, max_page_size: :not_given, scope: nil, introspection: false, camelize: true, trace: nil, complexity: 1, ast_node: nil, extras: EMPTY_ARRAY, extensions: EMPTY_ARRAY, connection_extension: self.class.connection_extension, resolver_class: nil, subscription_scope: nil, relay_node_field: false, relay_nodes_field: false, method_conflict_warning: true, broadcastable: nil, arguments: EMPTY_HASH, directives: EMPTY_HASH, validates: EMPTY_ARRAY, &definition_block)
219
201
  if name.nil?
220
202
  raise ArgumentError, "missing first `name` argument or keyword `name:`"
221
203
  end
@@ -279,7 +261,6 @@ module GraphQL
279
261
  @relay_nodes_field = relay_nodes_field
280
262
  @ast_node = ast_node
281
263
  @method_conflict_warning = method_conflict_warning
282
- @legacy_edge_class = legacy_edge_class
283
264
 
284
265
  arguments.each do |name, arg|
285
266
  case arg
@@ -510,82 +491,6 @@ module GraphQL
510
491
  # @return [Integer, nil] Applied to connections if {#has_max_page_size?}
511
492
  attr_reader :max_page_size
512
493
 
513
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
514
-
515
- # @return [GraphQL::Field]
516
- def to_graphql
517
- field_defn = if @field
518
- @field.dup
519
- elsif @function
520
- GraphQL::Function.build_field(@function)
521
- else
522
- GraphQL::Field.new
523
- end
524
-
525
- field_defn.name = @name
526
- if @return_type_expr
527
- field_defn.type = -> { type }
528
- end
529
-
530
- if @description
531
- field_defn.description = @description
532
- end
533
-
534
- if self.deprecation_reason
535
- field_defn.deprecation_reason = self.deprecation_reason
536
- end
537
-
538
- if @resolver_class
539
- if @resolver_class < GraphQL::Schema::Mutation
540
- field_defn.mutation = @resolver_class
541
- end
542
- field_defn.metadata[:resolver] = @resolver_class
543
- end
544
-
545
- if !@trace.nil?
546
- field_defn.trace = @trace
547
- end
548
-
549
- if @relay_node_field
550
- field_defn.relay_node_field = @relay_node_field
551
- end
552
-
553
- if @relay_nodes_field
554
- field_defn.relay_nodes_field = @relay_nodes_field
555
- end
556
-
557
- if @legacy_edge_class
558
- field_defn.edge_class = @legacy_edge_class
559
- end
560
-
561
- field_defn.resolve = self.method(:resolve_field)
562
- field_defn.connection = connection?
563
- field_defn.connection_max_page_size = max_page_size
564
- field_defn.introspection = @introspection
565
- field_defn.complexity = @complexity
566
- field_defn.subscription_scope = @subscription_scope
567
- field_defn.ast_node = ast_node
568
-
569
- all_argument_definitions.each do |defn|
570
- arg_graphql = defn.deprecated_to_graphql
571
- field_defn.arguments[arg_graphql.name] = arg_graphql # rubocop:disable Development/ContextIsPassedCop -- legacy-related
572
- end
573
-
574
- # Support a passed-in proc, one way or another
575
- @resolve_proc = if @resolve
576
- @resolve
577
- elsif @function
578
- @function
579
- elsif @field
580
- @field.resolve_proc
581
- end
582
-
583
- # Ok, `self` isn't a class, but this is for consistency with the classes
584
- field_defn.metadata[:type_class] = self
585
- field_defn.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(field_defn)
586
- field_defn
587
- end
588
-
589
494
  class MissingReturnTypeError < GraphQL::Error; end
590
495
  attr_writer :type
591
496
 
@@ -668,37 +573,6 @@ module GraphQL
668
573
  end
669
574
  end
670
575
 
671
- # Implement {GraphQL::Field}'s resolve API.
672
- #
673
- # Eventually, we might hook up field instances to execution in another way. TBD.
674
- # @see #resolve for how the interpreter hooks up to it
675
- def resolve_field(obj, args, ctx)
676
- ctx.schema.after_lazy(obj) do |after_obj|
677
- # First, apply auth ...
678
- query_ctx = ctx.query.context
679
- # Some legacy fields can have `nil` here, not exactly sure why.
680
- # @see https://github.com/rmosolgo/graphql-ruby/issues/1990 before removing
681
- inner_obj = after_obj && after_obj.object
682
- ctx.schema.after_lazy(to_ruby_args(after_obj, args, ctx)) do |ruby_args|
683
- if authorized?(inner_obj, ruby_args, query_ctx)
684
- # Then if it passed, resolve the field
685
- if @resolve_proc
686
- # Might be nil, still want to call the func in that case
687
- with_extensions(inner_obj, ruby_args, query_ctx) do |extended_obj, extended_args|
688
- # Pass the GraphQL args here for compatibility:
689
- @resolve_proc.call(extended_obj, args, ctx)
690
- end
691
- else
692
- public_send_field(after_obj, ruby_args, query_ctx)
693
- end
694
- else
695
- err = GraphQL::UnauthorizedFieldError.new(object: inner_obj, type: obj.class, context: ctx, field: self)
696
- query_ctx.schema.unauthorized_field(err)
697
- end
698
- end
699
- end
700
- end
701
-
702
576
  # This method is called by the interpreter for each field.
703
577
  # You can extend it in your base field classes.
704
578
  # @param object [GraphQL::Schema::Object] An instance of some type class, wrapping an application object
@@ -731,7 +605,7 @@ module GraphQL
731
605
  err
732
606
  end
733
607
 
734
- # @param ctx [GraphQL::Query::Context::FieldResolutionContext]
608
+ # @param ctx [GraphQL::Query::Context]
735
609
  def fetch_extra(extra_name, ctx)
736
610
  if extra_name != :path && extra_name != :ast_node && respond_to?(extra_name)
737
611
  self.public_send(extra_name)
@@ -744,63 +618,6 @@ module GraphQL
744
618
 
745
619
  private
746
620
 
747
- NO_ARGS = {}.freeze
748
-
749
- # Convert a GraphQL arguments instance into a Ruby-style hash.
750
- #
751
- # @param obj [GraphQL::Schema::Object] The object where this field is being resolved
752
- # @param graphql_args [GraphQL::Query::Arguments]
753
- # @param field_ctx [GraphQL::Query::Context::FieldResolutionContext]
754
- # @return [Hash<Symbol => Any>]
755
- def to_ruby_args(obj, graphql_args, field_ctx)
756
- if graphql_args.any? || @extras.any?
757
- # Splat the GraphQL::Arguments to Ruby keyword arguments
758
- ruby_kwargs = graphql_args.to_kwargs
759
- maybe_lazies = []
760
- # Apply any `prepare` methods. Not great code organization, can this go somewhere better?
761
- arguments(field_ctx).each do |name, arg_defn|
762
- ruby_kwargs_key = arg_defn.keyword
763
-
764
- if ruby_kwargs.key?(ruby_kwargs_key)
765
- loads = arg_defn.loads
766
- value = ruby_kwargs[ruby_kwargs_key]
767
- loaded_value = if loads && !arg_defn.from_resolver?
768
- if arg_defn.type.list?
769
- loaded_values = value.map { |val| load_application_object(arg_defn, loads, val, field_ctx.query.context) }
770
- field_ctx.schema.after_any_lazies(loaded_values) { |result| result }
771
- else
772
- load_application_object(arg_defn, loads, value, field_ctx.query.context)
773
- end
774
- elsif arg_defn.type.list? && value.is_a?(Array)
775
- field_ctx.schema.after_any_lazies(value, &:itself)
776
- else
777
- value
778
- end
779
-
780
- maybe_lazies << field_ctx.schema.after_lazy(loaded_value) do |loaded_value|
781
- prepared_value = if arg_defn.prepare
782
- arg_defn.prepare_value(obj, loaded_value)
783
- else
784
- loaded_value
785
- end
786
-
787
- ruby_kwargs[ruby_kwargs_key] = prepared_value
788
- end
789
- end
790
- end
791
-
792
- @extras.each do |extra_arg|
793
- ruby_kwargs[extra_arg] = fetch_extra(extra_arg, field_ctx)
794
- end
795
-
796
- field_ctx.schema.after_any_lazies(maybe_lazies) do
797
- ruby_kwargs
798
- end
799
- else
800
- NO_ARGS
801
- end
802
- end
803
-
804
621
  def public_send_field(unextended_obj, unextended_ruby_kwargs, query_ctx)
805
622
  with_extensions(unextended_obj, unextended_ruby_kwargs, query_ctx) do |obj, ruby_kwargs|
806
623
  begin
@@ -2,7 +2,6 @@
2
2
  module GraphQL
3
3
  class Schema
4
4
  class InputObject < GraphQL::Schema::Member
5
- extend GraphQL::Schema::Member::AcceptsDefinition
6
5
  extend Forwardable
7
6
  extend GraphQL::Schema::Member::HasArguments
8
7
  extend GraphQL::Schema::Member::HasArguments::ArgumentObjectLoader
@@ -13,49 +12,28 @@ module GraphQL
13
12
 
14
13
  # @return [GraphQL::Query::Context] The context for this query
15
14
  attr_reader :context
16
- # @return [GraphQL::Query::Arguments, GraphQL::Execution::Interpereter::Arguments] The underlying arguments instance
15
+ # @return [GraphQL::Execution::Interpereter::Arguments] The underlying arguments instance
17
16
  attr_reader :arguments
18
17
 
19
18
  # Ruby-like hash behaviors, read-only
20
19
  def_delegators :@ruby_style_hash, :keys, :values, :each, :map, :any?, :empty?
21
20
 
22
- def initialize(arguments = nil, ruby_kwargs: nil, context:, defaults_used:)
21
+ def initialize(arguments, ruby_kwargs:, context:, defaults_used:)
23
22
  @context = context
24
- if ruby_kwargs
25
- @ruby_style_hash = ruby_kwargs
26
- @arguments = arguments
27
- else
28
- @arguments = self.class.arguments_class.new(arguments, context: context, defaults_used: defaults_used)
29
- # Symbolized, underscored hash:
30
- @ruby_style_hash = @arguments.to_kwargs
31
- end
23
+ @ruby_style_hash = ruby_kwargs
24
+ @arguments = arguments
32
25
  # Apply prepares, not great to have it duplicated here.
33
- maybe_lazies = []
34
26
  self.class.arguments(context).each_value do |arg_defn|
35
27
  ruby_kwargs_key = arg_defn.keyword
36
-
37
28
  if @ruby_style_hash.key?(ruby_kwargs_key)
38
- loads = arg_defn.loads
39
- # Resolvers do this loading themselves;
40
- # With the interpreter, it's done during `coerce_arguments`
41
- if loads && !arg_defn.from_resolver? && !context.interpreter?
42
- value = @ruby_style_hash[ruby_kwargs_key]
43
- loaded_value = arg_defn.load_and_authorize_value(self, value, context)
44
- maybe_lazies << context.schema.after_lazy(loaded_value) do |loaded_value|
45
- overwrite_argument(ruby_kwargs_key, loaded_value)
46
- end
47
- end
48
-
49
29
  # Weirdly, procs are applied during coercion, but not methods.
50
30
  # Probably because these methods require a `self`.
51
- if arg_defn.prepare.is_a?(Symbol) || context.nil? || !context.interpreter?
31
+ if arg_defn.prepare.is_a?(Symbol) || context.nil?
52
32
  prepared_value = arg_defn.prepare_value(self, @ruby_style_hash[ruby_kwargs_key])
53
33
  overwrite_argument(ruby_kwargs_key, prepared_value)
54
34
  end
55
35
  end
56
36
  end
57
-
58
- @maybe_lazies = maybe_lazies
59
37
  end
60
38
 
61
39
  def to_h
@@ -68,12 +46,10 @@ module GraphQL
68
46
 
69
47
  def prepare
70
48
  if @context
71
- @context.schema.after_any_lazies(@maybe_lazies) do
72
- object = @context[:current_object]
73
- # Pass this object's class with `as` so that messages are rendered correctly from inherited validators
74
- Schema::Validator.validate!(self.class.validators, object, @context, @ruby_style_hash, as: self.class)
75
- self
76
- end
49
+ object = @context[:current_object]
50
+ # Pass this object's class with `as` so that messages are rendered correctly from inherited validators
51
+ Schema::Validator.validate!(self.class.validators, object, @context, @ruby_style_hash, as: self.class)
52
+ self
77
53
  else
78
54
  self
79
55
  end
@@ -83,7 +59,6 @@ module GraphQL
83
59
  # Authorize each argument (but this doesn't apply if `prepare` is implemented):
84
60
  if value.respond_to?(:key?)
85
61
  arguments(ctx).each do |_name, input_obj_arg|
86
- input_obj_arg = input_obj_arg.type_class
87
62
  if value.key?(input_obj_arg.keyword) &&
88
63
  !input_obj_arg.authorized?(obj, value[input_obj_arg.keyword], ctx)
89
64
  return false
@@ -132,9 +107,6 @@ module GraphQL
132
107
  end
133
108
 
134
109
  class << self
135
- # @return [Class<GraphQL::Arguments>]
136
- attr_accessor :arguments_class
137
-
138
110
  def argument(*args, **kwargs, &block)
139
111
  argument_defn = super(*args, **kwargs, &block)
140
112
  # Add a method access
@@ -147,25 +119,6 @@ module GraphQL
147
119
  argument_defn
148
120
  end
149
121
 
150
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
151
-
152
- def to_graphql
153
- type_defn = GraphQL::InputObjectType.new
154
- type_defn.name = graphql_name
155
- type_defn.description = description
156
- type_defn.metadata[:type_class] = self
157
- type_defn.mutation = mutation
158
- type_defn.ast_node = ast_node
159
- all_argument_definitions.each do |arg|
160
- type_defn.arguments[arg.graphql_definition(silence_deprecation_warning: true).name] = arg.graphql_definition(silence_deprecation_warning: true) # rubocop:disable Development/ContextIsPassedCop -- legacy-related
161
- end
162
- # Make a reference to a classic-style Arguments class
163
- self.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(type_defn)
164
- # But use this InputObject class at runtime
165
- type_defn.arguments_class = self
166
- type_defn
167
- end
168
-
169
122
  def kind
170
123
  GraphQL::TypeKinds::INPUT_OBJECT
171
124
  end
@@ -173,8 +126,9 @@ module GraphQL
173
126
  # @api private
174
127
  INVALID_OBJECT_MESSAGE = "Expected %{object} to be a key-value object responding to `to_h` or `to_unsafe_h`."
175
128
 
176
- def validate_non_null_input(input, ctx, max_errors: nil)
129
+ def validate_non_null_input(input, ctx)
177
130
  result = GraphQL::Query::InputValidationResult.new
131
+
178
132
  warden = ctx.warden
179
133
 
180
134
  if input.is_a?(Array)
@@ -4,8 +4,6 @@ module GraphQL
4
4
  module Interface
5
5
  include GraphQL::Schema::Member::GraphQLTypeNames
6
6
  module DefinitionMethods
7
- include GraphQL::Schema::Member::CachedGraphQLDefinition
8
- include GraphQL::Relay::TypeExtensions
9
7
  include GraphQL::Schema::Member::BaseDSLMethods
10
8
  # ConfigurationExtension's responsibilities are in `def included` below
11
9
  include GraphQL::Schema::Member::TypeSystemHelpers
@@ -100,34 +98,11 @@ module GraphQL
100
98
  end
101
99
  end
102
100
 
103
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
104
-
105
- def to_graphql
106
- type_defn = GraphQL::InterfaceType.new
107
- type_defn.name = graphql_name
108
- type_defn.description = description
109
- type_defn.orphan_types = orphan_types
110
- type_defn.type_membership_class = self.type_membership_class
111
- type_defn.ast_node = ast_node
112
- fields.each do |field_name, field_inst| # rubocop:disable Development/ContextIsPassedCop -- legacy-related
113
- field_defn = field_inst.graphql_definition(silence_deprecation_warning: true)
114
- type_defn.fields[field_defn.name] = field_defn # rubocop:disable Development/ContextIsPassedCop -- legacy-related
115
- end
116
- type_defn.metadata[:type_class] = self
117
- if respond_to?(:resolve_type)
118
- type_defn.resolve_type = method(:resolve_type)
119
- end
120
- type_defn
121
- end
122
-
123
101
  def kind
124
102
  GraphQL::TypeKinds::INTERFACE
125
103
  end
126
104
  end
127
105
 
128
- # Extend this _after_ `DefinitionMethods` is defined, so it will be used
129
- extend GraphQL::Schema::Member::AcceptsDefinition
130
-
131
106
  extend DefinitionMethods
132
107
 
133
108
  def unwrap