graphql 1.13.10 → 2.0.2

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.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  3. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  4. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  5. data/lib/graphql/analysis/ast/visitor.rb +1 -1
  6. data/lib/graphql/analysis/ast.rb +0 -10
  7. data/lib/graphql/analysis.rb +0 -7
  8. data/lib/graphql/backtrace/table.rb +0 -18
  9. data/lib/graphql/backtrace/tracer.rb +1 -2
  10. data/lib/graphql/backtrace.rb +2 -8
  11. data/lib/graphql/dataloader/null_dataloader.rb +3 -1
  12. data/lib/graphql/dig.rb +1 -1
  13. data/lib/graphql/execution/errors.rb +1 -9
  14. data/lib/graphql/execution/interpreter/runtime.rb +17 -31
  15. data/lib/graphql/execution/interpreter.rb +0 -22
  16. data/lib/graphql/execution/lazy.rb +1 -1
  17. data/lib/graphql/execution/lookahead.rb +6 -13
  18. data/lib/graphql/execution/multiplex.rb +50 -107
  19. data/lib/graphql/execution.rb +11 -3
  20. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  21. data/lib/graphql/introspection/entry_points.rb +2 -15
  22. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  23. data/lib/graphql/pagination/connections.rb +2 -28
  24. data/lib/graphql/query/context.rb +97 -194
  25. data/lib/graphql/query/input_validation_result.rb +10 -1
  26. data/lib/graphql/query/validation_pipeline.rb +8 -37
  27. data/lib/graphql/query/variables.rb +22 -18
  28. data/lib/graphql/query.rb +5 -36
  29. data/lib/graphql/railtie.rb +0 -104
  30. data/lib/graphql/relay.rb +0 -15
  31. data/lib/graphql/schema/addition.rb +1 -8
  32. data/lib/graphql/schema/argument.rb +5 -26
  33. data/lib/graphql/schema/build_from_definition.rb +0 -1
  34. data/lib/graphql/schema/directive.rb +0 -21
  35. data/lib/graphql/schema/enum.rb +4 -23
  36. data/lib/graphql/schema/enum_value.rb +0 -22
  37. data/lib/graphql/schema/field.rb +70 -230
  38. data/lib/graphql/schema/input_object.rb +21 -68
  39. data/lib/graphql/schema/interface.rb +0 -25
  40. data/lib/graphql/schema/introspection_system.rb +3 -8
  41. data/lib/graphql/schema/late_bound_type.rb +2 -2
  42. data/lib/graphql/schema/list.rb +2 -7
  43. data/lib/graphql/schema/loader.rb +0 -1
  44. data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
  45. data/lib/graphql/schema/member/build_type.rb +4 -6
  46. data/lib/graphql/schema/member/has_arguments.rb +50 -24
  47. data/lib/graphql/schema/member/has_fields.rb +2 -2
  48. data/lib/graphql/schema/member/has_interfaces.rb +1 -3
  49. data/lib/graphql/schema/member/validates_input.rb +2 -2
  50. data/lib/graphql/schema/member.rb +0 -6
  51. data/lib/graphql/schema/mutation.rb +0 -9
  52. data/lib/graphql/schema/non_null.rb +1 -7
  53. data/lib/graphql/schema/object.rb +7 -42
  54. data/lib/graphql/schema/relay_classic_mutation.rb +49 -42
  55. data/lib/graphql/schema/resolver/has_payload_type.rb +11 -1
  56. data/lib/graphql/schema/resolver.rb +23 -45
  57. data/lib/graphql/schema/scalar.rb +4 -19
  58. data/lib/graphql/schema/subscription.rb +0 -7
  59. data/lib/graphql/schema/union.rb +0 -16
  60. data/lib/graphql/schema/warden.rb +2 -2
  61. data/lib/graphql/schema/wrapper.rb +0 -5
  62. data/lib/graphql/schema.rb +106 -944
  63. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  64. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  65. data/lib/graphql/static_validation/validator.rb +2 -24
  66. data/lib/graphql/static_validation.rb +0 -2
  67. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  68. data/lib/graphql/subscriptions/event.rb +1 -1
  69. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  70. data/lib/graphql/subscriptions.rb +14 -16
  71. data/lib/graphql/tracing/platform_tracing.rb +0 -23
  72. data/lib/graphql/tracing.rb +0 -1
  73. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  74. data/lib/graphql/types/relay/default_relay.rb +0 -10
  75. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  76. data/lib/graphql/types/relay.rb +0 -2
  77. data/lib/graphql/version.rb +1 -1
  78. data/lib/graphql.rb +1 -65
  79. metadata +2 -128
  80. data/lib/graphql/analysis/analyze_query.rb +0 -98
  81. data/lib/graphql/analysis/field_usage.rb +0 -45
  82. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  83. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  84. data/lib/graphql/analysis/query_complexity.rb +0 -88
  85. data/lib/graphql/analysis/query_depth.rb +0 -43
  86. data/lib/graphql/analysis/reducer_state.rb +0 -48
  87. data/lib/graphql/argument.rb +0 -131
  88. data/lib/graphql/authorization.rb +0 -82
  89. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  90. data/lib/graphql/backwards_compatibility.rb +0 -61
  91. data/lib/graphql/base_type.rb +0 -232
  92. data/lib/graphql/boolean_type.rb +0 -2
  93. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  94. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  95. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  96. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  97. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  98. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  99. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  100. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  101. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  102. data/lib/graphql/compatibility.rb +0 -5
  103. data/lib/graphql/define/assign_argument.rb +0 -12
  104. data/lib/graphql/define/assign_connection.rb +0 -13
  105. data/lib/graphql/define/assign_enum_value.rb +0 -18
  106. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  107. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  108. data/lib/graphql/define/assign_object_field.rb +0 -42
  109. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  110. data/lib/graphql/define/instance_definable.rb +0 -240
  111. data/lib/graphql/define/no_definition_error.rb +0 -7
  112. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  113. data/lib/graphql/define/type_definer.rb +0 -31
  114. data/lib/graphql/define.rb +0 -31
  115. data/lib/graphql/deprecated_dsl.rb +0 -55
  116. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  117. data/lib/graphql/directive/include_directive.rb +0 -2
  118. data/lib/graphql/directive/skip_directive.rb +0 -2
  119. data/lib/graphql/directive.rb +0 -107
  120. data/lib/graphql/enum_type.rb +0 -133
  121. data/lib/graphql/execution/execute.rb +0 -333
  122. data/lib/graphql/execution/flatten.rb +0 -40
  123. data/lib/graphql/execution/typecast.rb +0 -50
  124. data/lib/graphql/field/resolve.rb +0 -59
  125. data/lib/graphql/field.rb +0 -226
  126. data/lib/graphql/float_type.rb +0 -2
  127. data/lib/graphql/function.rb +0 -128
  128. data/lib/graphql/id_type.rb +0 -2
  129. data/lib/graphql/input_object_type.rb +0 -138
  130. data/lib/graphql/int_type.rb +0 -2
  131. data/lib/graphql/interface_type.rb +0 -72
  132. data/lib/graphql/internal_representation/document.rb +0 -27
  133. data/lib/graphql/internal_representation/node.rb +0 -206
  134. data/lib/graphql/internal_representation/print.rb +0 -51
  135. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  136. data/lib/graphql/internal_representation/scope.rb +0 -88
  137. data/lib/graphql/internal_representation/visit.rb +0 -36
  138. data/lib/graphql/internal_representation.rb +0 -7
  139. data/lib/graphql/list_type.rb +0 -80
  140. data/lib/graphql/non_null_type.rb +0 -71
  141. data/lib/graphql/object_type.rb +0 -130
  142. data/lib/graphql/query/arguments.rb +0 -189
  143. data/lib/graphql/query/arguments_cache.rb +0 -24
  144. data/lib/graphql/query/executor.rb +0 -52
  145. data/lib/graphql/query/literal_input.rb +0 -136
  146. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  147. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  148. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  149. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  150. data/lib/graphql/query/serial_execution.rb +0 -40
  151. data/lib/graphql/relay/array_connection.rb +0 -83
  152. data/lib/graphql/relay/base_connection.rb +0 -189
  153. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  154. data/lib/graphql/relay/connection_resolve.rb +0 -43
  155. data/lib/graphql/relay/connection_type.rb +0 -54
  156. data/lib/graphql/relay/edge.rb +0 -27
  157. data/lib/graphql/relay/edge_type.rb +0 -19
  158. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  159. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  160. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  161. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  162. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  163. data/lib/graphql/relay/mutation/result.rb +0 -38
  164. data/lib/graphql/relay/mutation.rb +0 -106
  165. data/lib/graphql/relay/node.rb +0 -39
  166. data/lib/graphql/relay/page_info.rb +0 -7
  167. data/lib/graphql/relay/relation_connection.rb +0 -188
  168. data/lib/graphql/relay/type_extensions.rb +0 -32
  169. data/lib/graphql/scalar_type.rb +0 -91
  170. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  171. data/lib/graphql/schema/default_parse_error.rb +0 -10
  172. data/lib/graphql/schema/default_type_error.rb +0 -17
  173. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  174. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  175. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  176. data/lib/graphql/schema/middleware_chain.rb +0 -82
  177. data/lib/graphql/schema/possible_types.rb +0 -44
  178. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  179. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  180. data/lib/graphql/schema/traversal.rb +0 -228
  181. data/lib/graphql/schema/validation.rb +0 -313
  182. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  183. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  184. data/lib/graphql/string_type.rb +0 -2
  185. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  186. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  187. data/lib/graphql/types/relay/node_field.rb +0 -24
  188. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  189. data/lib/graphql/union_type.rb +0 -115
  190. data/lib/graphql/upgrader/member.rb +0 -937
  191. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -15,8 +15,6 @@ module GraphQL
15
15
  #
16
16
  # A resolver's configuration may be overridden with other keywords in the `field(...)` call.
17
17
  #
18
- # See the {.field_options} to see how a Resolver becomes a set of field configuration options.
19
- #
20
18
  # @see {GraphQL::Schema::Mutation} for a concrete subclass of `Resolver`.
21
19
  # @see {GraphQL::Function} `Resolver` is a replacement for `GraphQL::Function`
22
20
  class Resolver
@@ -210,6 +208,18 @@ module GraphQL
210
208
  end
211
209
 
212
210
  class << self
211
+ def field_arguments(context = GraphQL::Query::NullContext)
212
+ arguments(context)
213
+ end
214
+
215
+ def get_field_argument(name, context = GraphQL::Query::NullContext)
216
+ get_argument(name, context)
217
+ end
218
+
219
+ def own_field_arguments
220
+ own_arguments
221
+ end
222
+
213
223
  # Default `:resolve` set below.
214
224
  # @return [Symbol] The method to call on instances of this object to resolve the field
215
225
  def resolve_method(new_method = nil)
@@ -242,6 +252,14 @@ module GraphQL
242
252
  @null.nil? ? (superclass.respond_to?(:null) ? superclass.null : true) : @null
243
253
  end
244
254
 
255
+ def resolver_method(new_method_name = nil)
256
+ if new_method_name
257
+ @resolver_method = new_method_name
258
+ else
259
+ @resolver_method || :resolve_with_support
260
+ end
261
+ end
262
+
245
263
  # Call this method to get the return type of the field,
246
264
  # or use it as a configuration method to assign a return type
247
265
  # instead of generating one.
@@ -257,8 +275,8 @@ module GraphQL
257
275
  @type_expr = new_type
258
276
  @null = null
259
277
  else
260
- if @type_expr
261
- GraphQL::Schema::Member::BuildType.parse_type(@type_expr, null: @null)
278
+ if type_expr
279
+ GraphQL::Schema::Member::BuildType.parse_type(type_expr, null: self.null)
262
280
  elsif superclass.respond_to?(:type)
263
281
  superclass.type
264
282
  else
@@ -307,47 +325,7 @@ module GraphQL
307
325
 
308
326
  # @return [Boolean] `true` if this resolver or a superclass has an assigned `max_page_size`
309
327
  def has_max_page_size?
310
- defined?(@max_page_size) || (superclass.respond_to?(:has_max_page_size?) && superclass.has_max_page_size?)
311
- end
312
-
313
- def field_options
314
-
315
- all_args = {}
316
- all_argument_definitions.each do |arg|
317
- if (prev_entry = all_args[arg.graphql_name])
318
- if prev_entry.is_a?(Array)
319
- prev_entry << arg
320
- else
321
- all_args[arg.graphql_name] = [prev_entry, arg]
322
- end
323
- else
324
- all_args[arg.graphql_name] = arg
325
- end
326
- end
327
-
328
- field_opts = {
329
- type: type_expr,
330
- description: description,
331
- extras: extras,
332
- resolver_method: :resolve_with_support,
333
- resolver_class: self,
334
- arguments: all_args,
335
- null: null,
336
- complexity: complexity,
337
- broadcastable: broadcastable?,
338
- }
339
-
340
- # If there aren't any, then the returned array is `[].freeze`,
341
- # but passing that along breaks some user code.
342
- if (exts = extensions).any?
343
- field_opts[:extensions] = exts
344
- end
345
-
346
- if has_max_page_size?
347
- field_opts[:max_page_size] = max_page_size
348
- end
349
-
350
- field_opts
328
+ (!!defined?(@max_page_size)) || (superclass.respond_to?(:has_max_page_size?) && superclass.has_max_page_size?)
351
329
  end
352
330
 
353
331
  # A non-normalized type configuration, without `null` applied
@@ -2,7 +2,6 @@
2
2
  module GraphQL
3
3
  class Schema
4
4
  class Scalar < GraphQL::Schema::Member
5
- extend GraphQL::Schema::Member::AcceptsDefinition
6
5
  extend GraphQL::Schema::Member::ValidatesInput
7
6
 
8
7
  class << self
@@ -14,20 +13,6 @@ module GraphQL
14
13
  val
15
14
  end
16
15
 
17
- prepend Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
18
-
19
- def to_graphql
20
- type_defn = GraphQL::ScalarType.new
21
- type_defn.name = graphql_name
22
- type_defn.description = description
23
- type_defn.coerce_result = method(:coerce_result)
24
- type_defn.coerce_input = method(:coerce_input)
25
- type_defn.metadata[:type_class] = self
26
- type_defn.default_scalar = default_scalar
27
- type_defn.ast_node = ast_node
28
- type_defn
29
- end
30
-
31
16
  def kind
32
17
  GraphQL::TypeKinds::SCALAR
33
18
  end
@@ -56,7 +41,6 @@ module GraphQL
56
41
  end
57
42
 
58
43
  def validate_non_null_input(value, ctx)
59
- result = Query::InputValidationResult.new
60
44
  coerced_result = begin
61
45
  ctx.query.with_error_handling do
62
46
  coerce_input(value, ctx)
@@ -71,11 +55,12 @@ module GraphQL
71
55
  else
72
56
  " #{GraphQL::Language.serialize(value)}"
73
57
  end
74
- result.add_problem("Could not coerce value#{str_value} to #{graphql_name}")
58
+ Query::InputValidationResult.from_problem("Could not coerce value#{str_value} to #{graphql_name}")
75
59
  elsif coerced_result.is_a?(GraphQL::CoercionError)
76
- result.add_problem(coerced_result.message, message: coerced_result.message, extensions: coerced_result.extensions)
60
+ Query::InputValidationResult.from_problem(coerced_result.message, message: coerced_result.message, extensions: coerced_result.extensions)
61
+ else
62
+ nil
77
63
  end
78
- result
79
64
  end
80
65
  end
81
66
  end
@@ -143,13 +143,6 @@ module GraphQL
143
143
  def self.topic_for(arguments:, field:, scope:)
144
144
  Subscriptions::Serialize.dump_recursive([scope, field.graphql_name, arguments])
145
145
  end
146
-
147
- # Overriding Resolver#field_options to include subscription_scope
148
- def self.field_options
149
- super.merge(
150
- subscription_scope: subscription_scope
151
- )
152
- end
153
146
  end
154
147
  end
155
148
  end
@@ -2,7 +2,6 @@
2
2
  module GraphQL
3
3
  class Schema
4
4
  class Union < GraphQL::Schema::Member
5
- extend GraphQL::Schema::Member::AcceptsDefinition
6
5
  extend GraphQL::Schema::Member::HasUnresolvedTypeError
7
6
 
8
7
  class << self
@@ -33,21 +32,6 @@ module GraphQL
33
32
  type_memberships.map(&:object_type)
34
33
  end
35
34
 
36
- prepend GraphQL::Schema::Member::CachedGraphQLDefinition::DeprecatedToGraphQL
37
-
38
- def to_graphql
39
- type_defn = GraphQL::UnionType.new
40
- type_defn.name = graphql_name
41
- type_defn.description = description
42
- type_defn.ast_node = ast_node
43
- type_defn.type_memberships = type_memberships
44
- if respond_to?(:resolve_type)
45
- type_defn.resolve_type = method(:resolve_type)
46
- end
47
- type_defn.metadata[:type_class] = self
48
- type_defn
49
- end
50
-
51
35
  def type_membership_class(membership_class = nil)
52
36
  if membership_class
53
37
  @type_membership_class = membership_class
@@ -10,7 +10,7 @@ module GraphQL
10
10
  # should go through a warden. If you access the schema directly,
11
11
  # you may show a client something that it shouldn't be allowed to see.
12
12
  #
13
- # @example Hidding private fields
13
+ # @example Hiding private fields
14
14
  # private_members = -> (member, ctx) { member.metadata[:private] }
15
15
  # result = Schema.execute(query_string, except: private_members)
16
16
  #
@@ -85,7 +85,7 @@ module GraphQL
85
85
  # @param context [GraphQL::Query::Context]
86
86
  # @param schema [GraphQL::Schema]
87
87
  def initialize(filter, context:, schema:)
88
- @schema = schema.interpreter? ? schema : schema.graphql_definition
88
+ @schema = schema
89
89
  # Cache these to avoid repeated hits to the inheritance chain when one isn't present
90
90
  @query = @schema.query
91
91
  @mutation = @schema.mutation
@@ -3,7 +3,6 @@
3
3
  module GraphQL
4
4
  class Schema
5
5
  class Wrapper
6
- include GraphQL::Schema::Member::CachedGraphQLDefinition
7
6
  include GraphQL::Schema::Member::TypeSystemHelpers
8
7
 
9
8
  # @return [Class, Module] The inner type of this wrapping type, the type of which one or more objects may be present.
@@ -13,10 +12,6 @@ module GraphQL
13
12
  @of_type = of_type
14
13
  end
15
14
 
16
- def to_graphql
17
- raise GraphQL::RequiredImplementationMissingError
18
- end
19
-
20
15
  def unwrap
21
16
  @of_type.unwrap
22
17
  end