graphql 2.2.5 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/templates/schema.erb +3 -0
  3. data/lib/graphql/analysis/ast/field_usage.rb +36 -9
  4. data/lib/graphql/analysis/ast/query_complexity.rb +3 -0
  5. data/lib/graphql/analysis/ast/visitor.rb +8 -0
  6. data/lib/graphql/analysis/ast.rb +10 -1
  7. data/lib/graphql/backtrace/inspect_result.rb +0 -12
  8. data/lib/graphql/coercion_error.rb +1 -9
  9. data/lib/graphql/dataloader/request.rb +5 -0
  10. data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
  11. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +6 -4
  12. data/lib/graphql/execution/interpreter/runtime.rb +93 -106
  13. data/lib/graphql/execution/interpreter.rb +90 -150
  14. data/lib/graphql/introspection/entry_points.rb +9 -3
  15. data/lib/graphql/introspection/schema_type.rb +3 -1
  16. data/lib/graphql/language/document_from_schema_definition.rb +2 -3
  17. data/lib/graphql/language/lexer.rb +48 -30
  18. data/lib/graphql/language/nodes.rb +11 -16
  19. data/lib/graphql/language/parser.rb +94 -45
  20. data/lib/graphql/language/printer.rb +4 -0
  21. data/lib/graphql/language.rb +60 -0
  22. data/lib/graphql/pagination/array_connection.rb +6 -6
  23. data/lib/graphql/query/context.rb +30 -33
  24. data/lib/graphql/query/validation_pipeline.rb +2 -2
  25. data/lib/graphql/query/variables.rb +3 -3
  26. data/lib/graphql/query.rb +3 -3
  27. data/lib/graphql/schema/argument.rb +18 -2
  28. data/lib/graphql/schema/base_64_encoder.rb +3 -5
  29. data/lib/graphql/schema/build_from_definition.rb +9 -1
  30. data/lib/graphql/schema/field.rb +33 -30
  31. data/lib/graphql/schema/input_object.rb +1 -2
  32. data/lib/graphql/schema/interface.rb +5 -1
  33. data/lib/graphql/schema/loader.rb +2 -1
  34. data/lib/graphql/schema/member/has_arguments.rb +2 -2
  35. data/lib/graphql/schema/mutation.rb +7 -0
  36. data/lib/graphql/schema/resolver.rb +19 -10
  37. data/lib/graphql/schema/unique_within_type.rb +1 -1
  38. data/lib/graphql/schema.rb +129 -29
  39. data/lib/graphql/static_validation/literal_validator.rb +1 -2
  40. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +1 -1
  41. data/lib/graphql/static_validation/validator.rb +3 -0
  42. data/lib/graphql/subscriptions/serialize.rb +2 -0
  43. data/lib/graphql/subscriptions.rb +0 -3
  44. data/lib/graphql/testing/helpers.rb +32 -6
  45. data/lib/graphql/tracing/data_dog_trace.rb +21 -34
  46. data/lib/graphql/tracing/data_dog_tracing.rb +7 -21
  47. data/lib/graphql/tracing/legacy_hooks_trace.rb +74 -0
  48. data/lib/graphql/tracing/platform_tracing.rb +3 -1
  49. data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +3 -1
  50. data/lib/graphql/tracing/prometheus_trace.rb +2 -2
  51. data/lib/graphql/tracing/sentry_trace.rb +112 -0
  52. data/lib/graphql/tracing.rb +3 -1
  53. data/lib/graphql/version.rb +1 -1
  54. data/lib/graphql.rb +10 -2
  55. metadata +38 -23
  56. data/lib/graphql/schema/base_64_bp.rb +0 -26
  57. data/lib/graphql/subscriptions/instrumentation.rb +0 -28
@@ -11,7 +11,6 @@ module GraphQL
11
11
  class Runtime
12
12
  class CurrentState
13
13
  def initialize
14
- @current_object = nil
15
14
  @current_field = nil
16
15
  @current_arguments = nil
17
16
  @current_result_name = nil
@@ -19,8 +18,12 @@ module GraphQL
19
18
  @was_authorized_by_scope_items = nil
20
19
  end
21
20
 
21
+ def current_object
22
+ @current_result.graphql_application_value
23
+ end
24
+
22
25
  attr_accessor :current_result, :current_result_name,
23
- :current_arguments, :current_field, :current_object, :was_authorized_by_scope_items
26
+ :current_arguments, :current_field, :was_authorized_by_scope_items
24
27
  end
25
28
 
26
29
  # @return [GraphQL::Query]
@@ -39,7 +42,7 @@ module GraphQL
39
42
  @lazies_at_depth = lazies_at_depth
40
43
  @schema = query.schema
41
44
  @context = query.context
42
- @response = GraphQLResultHash.new(nil, nil, false)
45
+ @response = nil
43
46
  # Identify runtime directives by checking which of this schema's directives have overridden `def self.resolve`
44
47
  @runtime_directive_names = []
45
48
  noop_resolve_owner = GraphQL::Schema::Directive.singleton_class
@@ -79,12 +82,11 @@ module GraphQL
79
82
  root_operation = query.selected_operation
80
83
  root_op_type = root_operation.operation_type || "query"
81
84
  root_type = schema.root_type_for_operation(root_op_type)
82
-
83
- st = get_current_runtime_state
84
- st.current_object = query.root_value
85
- st.current_result = @response
86
85
  runtime_object = root_type.wrap(query.root_value, context)
87
86
  runtime_object = schema.sync_lazy(runtime_object)
87
+ @response = GraphQLResultHash.new(nil, root_type, runtime_object, nil, false)
88
+ st = get_current_runtime_state
89
+ st.current_result = @response
88
90
 
89
91
  if runtime_object.nil?
90
92
  # Root .authorized? returned false.
@@ -101,7 +103,7 @@ module GraphQL
101
103
  # directly evaluated and the results can be written right into the main response hash.
102
104
  tap_or_each(gathered_selections) do |selections, is_selection_array|
103
105
  if is_selection_array
104
- selection_response = GraphQLResultHash.new(nil, nil, false)
106
+ selection_response = GraphQLResultHash.new(nil, root_type, runtime_object, nil, false)
105
107
  final_response = @response
106
108
  else
107
109
  selection_response = @response
@@ -109,26 +111,14 @@ module GraphQL
109
111
  end
110
112
 
111
113
  @dataloader.append_job {
112
- st = get_current_runtime_state
113
- st.current_object = query.root_value
114
- st.current_result_name = nil
115
- st.current_result = selection_response
116
- # This is a less-frequent case; use a fast check since it's often not there.
117
- if (directives = selections[:graphql_directives])
118
- selections.delete(:graphql_directives)
119
- end
120
- call_method_on_directives(:resolve, runtime_object, directives) do
121
- evaluate_selections(
122
- runtime_object,
123
- root_type,
124
- root_op_type == "mutation",
125
- selections,
126
- selection_response,
127
- final_response,
128
- nil,
129
- st,
130
- )
131
- end
114
+ evaluate_selections(
115
+ root_op_type == "mutation",
116
+ selections,
117
+ selection_response,
118
+ final_response,
119
+ nil,
120
+ nil,
121
+ )
132
122
  }
133
123
  end
134
124
  end
@@ -205,36 +195,44 @@ module GraphQL
205
195
  NO_ARGS = GraphQL::EmptyObjects::EMPTY_HASH
206
196
 
207
197
  # @return [void]
208
- def evaluate_selections(owner_object, owner_type, is_eager_selection, gathered_selections, selections_result, target_result, parent_object, runtime_state) # rubocop:disable Metrics/ParameterLists
209
- finished_jobs = 0
210
- enqueued_jobs = gathered_selections.size
211
- gathered_selections.each do |result_name, field_ast_nodes_or_ast_node|
212
- @dataloader.append_job {
213
- runtime_state = get_current_runtime_state
214
- evaluate_selection(
215
- result_name, field_ast_nodes_or_ast_node, owner_object, owner_type, is_eager_selection, selections_result, parent_object, runtime_state
216
- )
217
- finished_jobs += 1
218
- if target_result && finished_jobs == enqueued_jobs
219
- selections_result.merge_into(target_result)
198
+ def evaluate_selections(is_eager_selection, gathered_selections, selections_result, target_result, parent_object, runtime_state) # rubocop:disable Metrics/ParameterLists
199
+ runtime_state ||= get_current_runtime_state
200
+ runtime_state.current_result_name = nil
201
+ runtime_state.current_result = selections_result
202
+ # This is a less-frequent case; use a fast check since it's often not there.
203
+ if (directives = gathered_selections[:graphql_directives])
204
+ gathered_selections.delete(:graphql_directives)
205
+ end
206
+
207
+ call_method_on_directives(:resolve, selections_result.graphql_application_value, directives) do
208
+ finished_jobs = 0
209
+ enqueued_jobs = gathered_selections.size
210
+ gathered_selections.each do |result_name, field_ast_nodes_or_ast_node|
211
+ @dataloader.append_job {
212
+ evaluate_selection(
213
+ result_name, field_ast_nodes_or_ast_node, is_eager_selection, selections_result, parent_object
214
+ )
215
+ finished_jobs += 1
216
+ if target_result && finished_jobs == enqueued_jobs
217
+ selections_result.merge_into(target_result)
218
+ end
219
+ }
220
+ # Field resolution may pause the fiber,
221
+ # so it wouldn't get to the `Resolve` call that happens below.
222
+ # So instead trigger a run from this outer context.
223
+ if is_eager_selection
224
+ @dataloader.clear_cache
225
+ @dataloader.run
226
+ @dataloader.clear_cache
220
227
  end
221
- }
222
- # Field resolution may pause the fiber,
223
- # so it wouldn't get to the `Resolve` call that happens below.
224
- # So instead trigger a run from this outer context.
225
- if is_eager_selection
226
- @dataloader.clear_cache
227
- @dataloader.run
228
- @dataloader.clear_cache
229
228
  end
229
+ selections_result
230
230
  end
231
-
232
- selections_result
233
231
  end
234
232
 
235
233
  # @return [void]
236
- def evaluate_selection(result_name, field_ast_nodes_or_ast_node, owner_object, owner_type, is_eager_field, selections_result, parent_object, runtime_state) # rubocop:disable Metrics/ParameterLists
237
- return if dead_result?(selections_result)
234
+ def evaluate_selection(result_name, field_ast_nodes_or_ast_node, is_eager_field, selections_result, parent_object) # rubocop:disable Metrics/ParameterLists
235
+ return if selections_result.graphql_dead
238
236
  # As a performance optimization, the hash key will be a `Node` if
239
237
  # there's only one selection of the field. But if there are multiple
240
238
  # selections of the field, it will be an Array of nodes
@@ -246,13 +244,16 @@ module GraphQL
246
244
  ast_node = field_ast_nodes_or_ast_node
247
245
  end
248
246
  field_name = ast_node.name
247
+ owner_type = selections_result.graphql_result_type
249
248
  field_defn = query.warden.get_field(owner_type, field_name)
250
249
 
251
250
  # Set this before calling `run_with_directives`, so that the directive can have the latest path
251
+ runtime_state = get_current_runtime_state
252
252
  runtime_state.current_field = field_defn
253
253
  runtime_state.current_result = selections_result
254
254
  runtime_state.current_result_name = result_name
255
255
 
256
+ owner_object = selections_result.graphql_application_value
256
257
  if field_defn.dynamic_introspection
257
258
  owner_object = field_defn.owner.wrap(owner_object, context)
258
259
  end
@@ -262,24 +263,24 @@ module GraphQL
262
263
  resolved_arguments = GraphQL::Execution::Interpreter::Arguments::EMPTY
263
264
  if field_defn.extras.size == 0
264
265
  evaluate_selection_with_resolved_keyword_args(
265
- NO_ARGS, resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_type, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, return_type.non_null?, runtime_state
266
+ NO_ARGS, resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, return_type.non_null?, runtime_state
266
267
  )
267
268
  else
268
- evaluate_selection_with_args(resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_type, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, runtime_state)
269
+ evaluate_selection_with_args(resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, runtime_state)
269
270
  end
270
271
  else
271
272
  @query.arguments_cache.dataload_for(ast_node, field_defn, owner_object) do |resolved_arguments|
272
273
  runtime_state = get_current_runtime_state # This might be in a different fiber
273
- evaluate_selection_with_args(resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_type, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, runtime_state)
274
+ evaluate_selection_with_args(resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_object, is_eager_field, result_name, selections_result, parent_object, return_type, runtime_state)
274
275
  end
275
276
  end
276
277
  end
277
278
 
278
- def evaluate_selection_with_args(arguments, field_defn, ast_node, field_ast_nodes, owner_type, object, is_eager_field, result_name, selection_result, parent_object, return_type, runtime_state) # rubocop:disable Metrics/ParameterLists
279
+ def evaluate_selection_with_args(arguments, field_defn, ast_node, field_ast_nodes, object, is_eager_field, result_name, selection_result, parent_object, return_type, runtime_state) # rubocop:disable Metrics/ParameterLists
279
280
  after_lazy(arguments, field: field_defn, ast_node: ast_node, owner_object: object, arguments: arguments, result_name: result_name, result: selection_result, runtime_state: runtime_state) do |resolved_arguments, runtime_state|
280
281
  return_type_non_null = return_type.non_null?
281
282
  if resolved_arguments.is_a?(GraphQL::ExecutionError) || resolved_arguments.is_a?(GraphQL::UnauthorizedError)
282
- continue_value(resolved_arguments, owner_type, field_defn, return_type_non_null, ast_node, result_name, selection_result)
283
+ continue_value(resolved_arguments, field_defn, return_type_non_null, ast_node, result_name, selection_result)
283
284
  next
284
285
  end
285
286
 
@@ -328,13 +329,12 @@ module GraphQL
328
329
  resolved_arguments.keyword_arguments
329
330
  end
330
331
 
331
- evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_type, object, is_eager_field, result_name, selection_result, parent_object, return_type, return_type_non_null, runtime_state)
332
+ evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_arguments, field_defn, ast_node, field_ast_nodes, object, is_eager_field, result_name, selection_result, parent_object, return_type, return_type_non_null, runtime_state)
332
333
  end
333
334
  end
334
335
 
335
- def evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_arguments, field_defn, ast_node, field_ast_nodes, owner_type, object, is_eager_field, result_name, selection_result, parent_object, return_type, return_type_non_null, runtime_state) # rubocop:disable Metrics/ParameterLists
336
+ def evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_arguments, field_defn, ast_node, field_ast_nodes, object, is_eager_field, result_name, selection_result, parent_object, return_type, return_type_non_null, runtime_state) # rubocop:disable Metrics/ParameterLists
336
337
  runtime_state.current_field = field_defn
337
- runtime_state.current_object = object
338
338
  runtime_state.current_arguments = resolved_arguments
339
339
  runtime_state.current_result_name = result_name
340
340
  runtime_state.current_result = selection_result
@@ -352,6 +352,14 @@ module GraphQL
352
352
  end
353
353
 
354
354
  field_result = call_method_on_directives(:resolve, object, directives) do
355
+ if directives.any?
356
+ # This might be executed in a different context; reset this info
357
+ runtime_state = get_current_runtime_state
358
+ runtime_state.current_field = field_defn
359
+ runtime_state.current_arguments = resolved_arguments
360
+ runtime_state.current_result_name = result_name
361
+ runtime_state.current_result = selection_result
362
+ end
355
363
  # Actually call the field resolver and capture the result
356
364
  app_result = begin
357
365
  @current_trace.execute_field(field: field_defn, ast_node: ast_node, query: query, object: object, arguments: kwarg_arguments) do
@@ -367,7 +375,8 @@ module GraphQL
367
375
  end
368
376
  end
369
377
  after_lazy(app_result, field: field_defn, ast_node: ast_node, owner_object: object, arguments: resolved_arguments, result_name: result_name, result: selection_result, runtime_state: runtime_state) do |inner_result, runtime_state|
370
- continue_value = continue_value(inner_result, owner_type, field_defn, return_type_non_null, ast_node, result_name, selection_result)
378
+ owner_type = selection_result.graphql_result_type
379
+ continue_value = continue_value(inner_result, field_defn, return_type_non_null, ast_node, result_name, selection_result)
371
380
  if HALT != continue_value
372
381
  was_scoped = runtime_state.was_authorized_by_scope_items
373
382
  runtime_state.was_authorized_by_scope_items = nil
@@ -375,25 +384,16 @@ module GraphQL
375
384
  end
376
385
  end
377
386
  end
378
-
379
387
  # If this field is a root mutation field, immediately resolve
380
388
  # all of its child fields before moving on to the next root mutation field.
381
389
  # (Subselections of this mutation will still be resolved level-by-level.)
382
390
  if is_eager_field
383
391
  Interpreter::Resolve.resolve_all([field_result], @dataloader)
384
- else
385
- # Return this from `after_lazy` because it might be another lazy that needs to be resolved
386
- field_result
387
392
  end
388
393
  end
389
394
 
390
-
391
- def dead_result?(selection_result)
392
- selection_result.graphql_dead # || ((parent = selection_result.graphql_parent) && parent.graphql_dead)
393
- end
394
-
395
395
  def set_result(selection_result, result_name, value, is_child_result, is_non_null)
396
- if !dead_result?(selection_result)
396
+ if !selection_result.graphql_dead
397
397
  if value.nil? && is_non_null
398
398
  # This is an invalid nil that should be propagated
399
399
  # One caller of this method passes a block,
@@ -447,11 +447,13 @@ module GraphQL
447
447
  end
448
448
 
449
449
  HALT = Object.new
450
- def continue_value(value, parent_type, field, is_non_null, ast_node, result_name, selection_result) # rubocop:disable Metrics/ParameterLists
450
+ def continue_value(value, field, is_non_null, ast_node, result_name, selection_result) # rubocop:disable Metrics/ParameterLists
451
451
  case value
452
452
  when nil
453
453
  if is_non_null
454
454
  set_result(selection_result, result_name, nil, false, is_non_null) do
455
+ # When this comes from a list item, use the parent object:
456
+ parent_type = selection_result.is_a?(GraphQLResultArray) ? selection_result.graphql_parent.graphql_result_type : selection_result.graphql_result_type
455
457
  # This block is called if `result_name` is not dead. (Maybe a previous invalid nil caused it be marked dead.)
456
458
  err = parent_type::InvalidNullError.new(parent_type, field, value)
457
459
  schema.type_error(err, context)
@@ -465,7 +467,7 @@ module GraphQL
465
467
  # to avoid the overhead of checking three different classes
466
468
  # every time.
467
469
  if value.is_a?(GraphQL::ExecutionError)
468
- if selection_result.nil? || !dead_result?(selection_result)
470
+ if selection_result.nil? || !selection_result.graphql_dead
469
471
  value.path ||= current_path
470
472
  value.ast_node ||= ast_node
471
473
  context.errors << value
@@ -483,7 +485,7 @@ module GraphQL
483
485
  rescue GraphQL::ExecutionError => err
484
486
  err
485
487
  end
486
- continue_value(next_value, parent_type, field, is_non_null, ast_node, result_name, selection_result)
488
+ continue_value(next_value, field, is_non_null, ast_node, result_name, selection_result)
487
489
  elsif value.is_a?(GraphQL::UnauthorizedError)
488
490
  # this hook might raise & crash, or it might return
489
491
  # a replacement value
@@ -492,7 +494,7 @@ module GraphQL
492
494
  rescue GraphQL::ExecutionError => err
493
495
  err
494
496
  end
495
- continue_value(next_value, parent_type, field, is_non_null, ast_node, result_name, selection_result)
497
+ continue_value(next_value, field, is_non_null, ast_node, result_name, selection_result)
496
498
  elsif GraphQL::Execution::SKIP == value
497
499
  # It's possible a lazy was already written here
498
500
  case selection_result
@@ -515,7 +517,7 @@ module GraphQL
515
517
  # It's an array full of execution errors; add them all.
516
518
  if value.any? && value.all?(GraphQL::ExecutionError)
517
519
  list_type_at_all = (field && (field.type.list?))
518
- if selection_result.nil? || !dead_result?(selection_result)
520
+ if selection_result.nil? || !selection_result.graphql_dead
519
521
  value.each_with_index do |error, index|
520
522
  error.ast_node ||= ast_node
521
523
  error.path ||= current_path + (list_type_at_all ? [index] : [])
@@ -595,9 +597,9 @@ module GraphQL
595
597
  err
596
598
  end
597
599
  after_lazy(object_proxy, ast_node: ast_node, field: field, owner_object: owner_object, arguments: arguments, trace: false, result_name: result_name, result: selection_result, runtime_state: runtime_state) do |inner_object, runtime_state|
598
- continue_value = continue_value(inner_object, owner_type, field, is_non_null, ast_node, result_name, selection_result)
600
+ continue_value = continue_value(inner_object, field, is_non_null, ast_node, result_name, selection_result)
599
601
  if HALT != continue_value
600
- response_hash = GraphQLResultHash.new(result_name, selection_result, is_non_null)
602
+ response_hash = GraphQLResultHash.new(result_name, current_type, continue_value, selection_result, is_non_null)
601
603
  set_result(selection_result, result_name, response_hash, true, is_non_null)
602
604
 
603
605
  gathered_selections = gather_selections(continue_value, current_type, next_selections)
@@ -611,34 +613,21 @@ module GraphQL
611
613
  # (Technically, it's possible that one of those entries _doesn't_ require isolation.)
612
614
  tap_or_each(gathered_selections) do |selections, is_selection_array|
613
615
  if is_selection_array
614
- this_result = GraphQLResultHash.new(result_name, selection_result, is_non_null)
616
+ this_result = GraphQLResultHash.new(result_name, current_type, continue_value, selection_result, is_non_null)
615
617
  final_result = response_hash
616
618
  else
617
619
  this_result = response_hash
618
620
  final_result = nil
619
621
  end
620
- # reset this mutable state
621
- # Unset `result_name` here because it's already included in the new response hash
622
- runtime_state.current_object = continue_value
623
- runtime_state.current_result_name = nil
624
- runtime_state.current_result = this_result
625
- # This is a less-frequent case; use a fast check since it's often not there.
626
- if (directives = selections[:graphql_directives])
627
- selections.delete(:graphql_directives)
628
- end
629
- call_method_on_directives(:resolve, continue_value, directives) do
630
- evaluate_selections(
631
- continue_value,
632
- current_type,
633
- false,
634
- selections,
635
- this_result,
636
- final_result,
637
- owner_object.object,
638
- runtime_state,
639
- )
640
- this_result
641
- end
622
+
623
+ evaluate_selections(
624
+ false,
625
+ selections,
626
+ this_result,
627
+ final_result,
628
+ owner_object.object,
629
+ runtime_state,
630
+ )
642
631
  end
643
632
  end
644
633
  end
@@ -647,7 +636,7 @@ module GraphQL
647
636
  # This is true for objects, unions, and interfaces
648
637
  use_dataloader_job = !inner_type.unwrap.kind.input?
649
638
  inner_type_non_null = inner_type.non_null?
650
- response_list = GraphQLResultArray.new(result_name, selection_result, is_non_null)
639
+ response_list = GraphQLResultArray.new(result_name, current_type, response_list, selection_result, is_non_null)
651
640
  set_result(selection_result, result_name, response_list, true, is_non_null)
652
641
  idx = nil
653
642
  list_value = begin
@@ -685,7 +674,7 @@ module GraphQL
685
674
  end
686
675
  # Detect whether this error came while calling `.each` (before `idx` is set) or while running list *items* (after `idx` is set)
687
676
  error_is_non_null = idx.nil? ? is_non_null : inner_type.non_null?
688
- continue_value(list_value, owner_type, field, error_is_non_null, ast_node, result_name, selection_result)
677
+ continue_value(list_value, field, error_is_non_null, ast_node, result_name, selection_result)
689
678
  else
690
679
  raise "Invariant: Unhandled type kind #{current_type.kind} (#{current_type})"
691
680
  end
@@ -697,7 +686,7 @@ module GraphQL
697
686
  call_method_on_directives(:resolve_each, owner_object, ast_node.directives) do
698
687
  # This will update `response_list` with the lazy
699
688
  after_lazy(inner_value, ast_node: ast_node, field: field, owner_object: owner_object, arguments: arguments, result_name: this_idx, result: response_list, runtime_state: runtime_state) do |inner_inner_value, runtime_state|
700
- continue_value = continue_value(inner_inner_value, owner_type, field, inner_type_non_null, ast_node, this_idx, response_list)
689
+ continue_value = continue_value(inner_inner_value, field, inner_type_non_null, ast_node, this_idx, response_list)
701
690
  if HALT != continue_value
702
691
  continue_field(continue_value, owner_type, field, inner_type, ast_node, next_selections, false, owner_object, arguments, this_idx, response_list, was_scoped, runtime_state)
703
692
  end
@@ -719,7 +708,6 @@ module GraphQL
719
708
  raw_dir_args = arguments(nil, dir_defn, dir_node)
720
709
  dir_args = continue_value(
721
710
  raw_dir_args, # value
722
- dir_defn, # parent_type
723
711
  nil, # field
724
712
  false, # is_non_null
725
713
  dir_node, # ast_node
@@ -785,7 +773,6 @@ module GraphQL
785
773
  # In that case, this will initialize a new state
786
774
  # to avoid conflicting with the parent fiber.
787
775
  runtime_state = get_current_runtime_state
788
- runtime_state.current_object = owner_object
789
776
  runtime_state.current_field = field
790
777
  runtime_state.current_arguments = arguments
791
778
  runtime_state.current_result_name = result_name