graphql 2.6.11 → 2.6.13

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/.rdoc_options +4 -0
  3. data/lib/generators/graphql/core.rb +1 -0
  4. data/lib/generators/graphql/detailed_trace_generator.rb +1 -0
  5. data/lib/generators/graphql/enum_generator.rb +1 -0
  6. data/lib/generators/graphql/field_extractor.rb +1 -0
  7. data/lib/generators/graphql/input_generator.rb +1 -0
  8. data/lib/generators/graphql/install/mutation_root_generator.rb +1 -0
  9. data/lib/generators/graphql/install_generator.rb +1 -0
  10. data/lib/generators/graphql/interface_generator.rb +1 -0
  11. data/lib/generators/graphql/loader_generator.rb +8 -2
  12. data/lib/generators/graphql/mutation_create_generator.rb +8 -2
  13. data/lib/generators/graphql/mutation_delete_generator.rb +8 -2
  14. data/lib/generators/graphql/mutation_generator.rb +8 -2
  15. data/lib/generators/graphql/mutation_update_generator.rb +8 -2
  16. data/lib/generators/graphql/object_generator.rb +1 -0
  17. data/lib/generators/graphql/orm_mutations_base.rb +8 -2
  18. data/lib/generators/graphql/relay.rb +1 -0
  19. data/lib/generators/graphql/relay_generator.rb +1 -0
  20. data/lib/generators/graphql/scalar_generator.rb +1 -0
  21. data/lib/generators/graphql/type_generator.rb +38 -8
  22. data/lib/generators/graphql/union_generator.rb +1 -0
  23. data/lib/graphql/analysis/analyzer.rb +35 -9
  24. data/lib/graphql/analysis/field_usage.rb +1 -0
  25. data/lib/graphql/analysis/max_query_complexity.rb +2 -1
  26. data/lib/graphql/analysis/max_query_depth.rb +1 -0
  27. data/lib/graphql/analysis/query_complexity.rb +57 -20
  28. data/lib/graphql/analysis/query_depth.rb +17 -12
  29. data/lib/graphql/analysis/visitor.rb +79 -16
  30. data/lib/graphql/analysis.rb +23 -6
  31. data/lib/graphql/analysis_error.rb +1 -0
  32. data/lib/graphql/autoload.rb +30 -7
  33. data/lib/graphql/backtrace/table.rb +21 -5
  34. data/lib/graphql/backtrace/traced_error.rb +8 -3
  35. data/lib/graphql/backtrace.rb +14 -9
  36. data/lib/graphql/coercion_error.rb +1 -0
  37. data/lib/graphql/current.rb +44 -19
  38. data/lib/graphql/dashboard/application_controller.rb +1 -0
  39. data/lib/graphql/dashboard/detailed_traces.rb +1 -0
  40. data/lib/graphql/dashboard/installable.rb +1 -0
  41. data/lib/graphql/dashboard/landings_controller.rb +1 -0
  42. data/lib/graphql/dashboard/limiters.rb +1 -0
  43. data/lib/graphql/dashboard/operation_store.rb +1 -0
  44. data/lib/graphql/dashboard/statics_controller.rb +1 -0
  45. data/lib/graphql/dashboard/subscriptions.rb +1 -0
  46. data/lib/graphql/dashboard.rb +36 -22
  47. data/lib/graphql/dataloader/active_record_association_source.rb +1 -0
  48. data/lib/graphql/dataloader/active_record_source.rb +1 -0
  49. data/lib/graphql/dataloader/async_dataloader.rb +10 -7
  50. data/lib/graphql/dataloader/null_dataloader.rb +4 -3
  51. data/lib/graphql/dataloader/request.rb +8 -2
  52. data/lib/graphql/dataloader/request_all.rb +8 -2
  53. data/lib/graphql/dataloader/source.rb +127 -35
  54. data/lib/graphql/dataloader.rb +93 -42
  55. data/lib/graphql/date_encoding_error.rb +2 -1
  56. data/lib/graphql/dig.rb +12 -3
  57. data/lib/graphql/duration_encoding_error.rb +2 -1
  58. data/lib/graphql/execution/directive_checks.rb +8 -3
  59. data/lib/graphql/execution/errors.rb +20 -6
  60. data/lib/graphql/execution/field_resolve_step.rb +40 -13
  61. data/lib/graphql/execution/finalize.rb +12 -6
  62. data/lib/graphql/execution/input_values.rb +2 -1
  63. data/lib/graphql/execution/interpreter/argument_value.rb +17 -5
  64. data/lib/graphql/execution/interpreter/arguments.rb +24 -9
  65. data/lib/graphql/execution/interpreter/arguments_cache.rb +2 -1
  66. data/lib/graphql/execution/interpreter/execution_errors.rb +1 -0
  67. data/lib/graphql/execution/interpreter/handles_raw_value.rb +1 -0
  68. data/lib/graphql/execution/interpreter/resolve.rb +18 -8
  69. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +4 -1
  70. data/lib/graphql/execution/interpreter/runtime.rb +72 -25
  71. data/lib/graphql/execution/interpreter.rb +15 -6
  72. data/lib/graphql/execution/lazy/lazy_method_map.rb +21 -8
  73. data/lib/graphql/execution/lazy.rb +34 -10
  74. data/lib/graphql/execution/load_argument_step.rb +1 -0
  75. data/lib/graphql/execution/lookahead.rb +137 -54
  76. data/lib/graphql/execution/multiplex.rb +4 -4
  77. data/lib/graphql/execution/next.rb +7 -0
  78. data/lib/graphql/execution/prepare_object_step.rb +1 -0
  79. data/lib/graphql/execution/resolve_type_step.rb +2 -1
  80. data/lib/graphql/execution/runner.rb +9 -3
  81. data/lib/graphql/execution/selections_step.rb +3 -2
  82. data/lib/graphql/execution.rb +2 -2
  83. data/lib/graphql/execution_error.rb +19 -10
  84. data/lib/graphql/float_decoding_error.rb +1 -0
  85. data/lib/graphql/float_encoding_error.rb +7 -2
  86. data/lib/graphql/integer_decoding_error.rb +2 -1
  87. data/lib/graphql/integer_encoding_error.rb +8 -3
  88. data/lib/graphql/introspection/base_object.rb +3 -1
  89. data/lib/graphql/introspection/directive_location_enum.rb +1 -0
  90. data/lib/graphql/introspection/directive_type.rb +1 -0
  91. data/lib/graphql/introspection/dynamic_fields.rb +1 -0
  92. data/lib/graphql/introspection/entry_points.rb +1 -0
  93. data/lib/graphql/introspection/enum_value_type.rb +1 -0
  94. data/lib/graphql/introspection/field_type.rb +1 -0
  95. data/lib/graphql/introspection/input_value_type.rb +1 -0
  96. data/lib/graphql/introspection/introspection_query.rb +1 -0
  97. data/lib/graphql/introspection/schema_type.rb +1 -0
  98. data/lib/graphql/introspection/type_kind_enum.rb +1 -0
  99. data/lib/graphql/introspection/type_type.rb +1 -0
  100. data/lib/graphql/introspection.rb +1 -0
  101. data/lib/graphql/invalid_name_error.rb +1 -0
  102. data/lib/graphql/invalid_null_error.rb +19 -6
  103. data/lib/graphql/language/block_string.rb +2 -1
  104. data/lib/graphql/language/cache.rb +10 -4
  105. data/lib/graphql/language/comment.rb +1 -0
  106. data/lib/graphql/language/definition_slice.rb +1 -0
  107. data/lib/graphql/language/document_from_schema_definition.rb +9 -10
  108. data/lib/graphql/language/generation.rb +23 -9
  109. data/lib/graphql/language/lexer.rb +5 -0
  110. data/lib/graphql/language/nodes.rb +2094 -419
  111. data/lib/graphql/language/parser.rb +24 -17
  112. data/lib/graphql/language/printer.rb +31 -16
  113. data/lib/graphql/language/sanitized_printer.rb +16 -5
  114. data/lib/graphql/language/static_visitor.rb +19 -4
  115. data/lib/graphql/language/visitor.rb +51 -29
  116. data/lib/graphql/language.rb +13 -7
  117. data/lib/graphql/load_application_object_failed_error.rb +14 -5
  118. data/lib/graphql/name_validator.rb +1 -0
  119. data/lib/graphql/pagination/active_record_relation_connection.rb +1 -0
  120. data/lib/graphql/pagination/array_connection.rb +20 -6
  121. data/lib/graphql/pagination/connection.rb +178 -48
  122. data/lib/graphql/pagination/connections.rb +21 -14
  123. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -0
  124. data/lib/graphql/pagination/relation_connection.rb +123 -22
  125. data/lib/graphql/pagination/sequel_dataset_connection.rb +1 -0
  126. data/lib/graphql/pagination.rb +1 -0
  127. data/lib/graphql/parse_error.rb +1 -0
  128. data/lib/graphql/query/context/scoped_context.rb +2 -1
  129. data/lib/graphql/query/context.rb +106 -35
  130. data/lib/graphql/query/fingerprint.rb +15 -7
  131. data/lib/graphql/query/input_validation_result.rb +1 -0
  132. data/lib/graphql/query/null_context.rb +1 -0
  133. data/lib/graphql/query/partial.rb +28 -15
  134. data/lib/graphql/query/result.rb +15 -5
  135. data/lib/graphql/query/validation_pipeline.rb +16 -6
  136. data/lib/graphql/query/variable_validation_error.rb +1 -0
  137. data/lib/graphql/query/variables.rb +9 -2
  138. data/lib/graphql/query.rb +193 -49
  139. data/lib/graphql/railtie.rb +7 -3
  140. data/lib/graphql/rake_task/validate.rb +72 -17
  141. data/lib/graphql/rake_task.rb +55 -23
  142. data/lib/graphql/relay/range_add.rb +32 -21
  143. data/lib/graphql/relay.rb +1 -0
  144. data/lib/graphql/rubocop/graphql/base_cop.rb +1 -0
  145. data/lib/graphql/rubocop/graphql/default_null_true.rb +9 -6
  146. data/lib/graphql/rubocop/graphql/default_required_true.rb +9 -6
  147. data/lib/graphql/rubocop/graphql/field_type_in_block.rb +12 -8
  148. data/lib/graphql/rubocop/graphql/root_types_in_block.rb +9 -5
  149. data/lib/graphql/rubocop.rb +1 -0
  150. data/lib/graphql/runtime_error.rb +1 -0
  151. data/lib/graphql/runtime_type_error.rb +1 -0
  152. data/lib/graphql/schema/addition.rb +18 -6
  153. data/lib/graphql/schema/always_visible.rb +1 -0
  154. data/lib/graphql/schema/argument.rb +265 -42
  155. data/lib/graphql/schema/base_64_encoder.rb +2 -2
  156. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -0
  157. data/lib/graphql/schema/build_from_definition/resolve_map.rb +2 -2
  158. data/lib/graphql/schema/build_from_definition.rb +94 -27
  159. data/lib/graphql/schema/built_in_types.rb +1 -0
  160. data/lib/graphql/schema/directive/deprecated.rb +1 -0
  161. data/lib/graphql/schema/directive/feature.rb +39 -22
  162. data/lib/graphql/schema/directive/flagged.rb +6 -1
  163. data/lib/graphql/schema/directive/include.rb +1 -0
  164. data/lib/graphql/schema/directive/one_of.rb +1 -0
  165. data/lib/graphql/schema/directive/skip.rb +1 -0
  166. data/lib/graphql/schema/directive/specified_by.rb +1 -0
  167. data/lib/graphql/schema/directive/transform.rb +17 -8
  168. data/lib/graphql/schema/directive.rb +12 -7
  169. data/lib/graphql/schema/enum.rb +99 -38
  170. data/lib/graphql/schema/enum_value.rb +21 -13
  171. data/lib/graphql/schema/field/connection_extension.rb +10 -2
  172. data/lib/graphql/schema/field/scope_extension.rb +1 -0
  173. data/lib/graphql/schema/field.rb +621 -109
  174. data/lib/graphql/schema/field_extension.rb +89 -34
  175. data/lib/graphql/schema/find_inherited_value.rb +5 -3
  176. data/lib/graphql/schema/finder.rb +22 -8
  177. data/lib/graphql/schema/has_single_input_argument.rb +39 -6
  178. data/lib/graphql/schema/input_object.rb +40 -13
  179. data/lib/graphql/schema/interface.rb +33 -17
  180. data/lib/graphql/schema/introspection_system.rb +7 -3
  181. data/lib/graphql/schema/late_bound_type.rb +2 -2
  182. data/lib/graphql/schema/list.rb +15 -4
  183. data/lib/graphql/schema/loader.rb +23 -12
  184. data/lib/graphql/schema/member/base_dsl_methods.rb +58 -12
  185. data/lib/graphql/schema/member/build_type.rb +16 -5
  186. data/lib/graphql/schema/member/graphql_type_names.rb +10 -6
  187. data/lib/graphql/schema/member/has_arguments.rb +115 -48
  188. data/lib/graphql/schema/member/has_ast_node.rb +1 -0
  189. data/lib/graphql/schema/member/has_authorization.rb +5 -0
  190. data/lib/graphql/schema/member/has_dataloader.rb +91 -34
  191. data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -2
  192. data/lib/graphql/schema/member/has_directives.rb +38 -10
  193. data/lib/graphql/schema/member/has_fields.rb +151 -70
  194. data/lib/graphql/schema/member/has_interfaces.rb +10 -2
  195. data/lib/graphql/schema/member/has_path.rb +14 -5
  196. data/lib/graphql/schema/member/has_unresolved_type_error.rb +1 -0
  197. data/lib/graphql/schema/member/has_validators.rb +19 -4
  198. data/lib/graphql/schema/member/relay_shortcuts.rb +10 -2
  199. data/lib/graphql/schema/member/scoped.rb +14 -3
  200. data/lib/graphql/schema/member/type_system_helpers.rb +36 -6
  201. data/lib/graphql/schema/member/validates_input.rb +1 -0
  202. data/lib/graphql/schema/member.rb +9 -2
  203. data/lib/graphql/schema/mutation.rb +50 -46
  204. data/lib/graphql/schema/non_null.rb +21 -5
  205. data/lib/graphql/schema/object.rb +33 -12
  206. data/lib/graphql/schema/printer.rb +52 -31
  207. data/lib/graphql/schema/ractor_shareable.rb +6 -2
  208. data/lib/graphql/schema/relay_classic_mutation.rb +3 -3
  209. data/lib/graphql/schema/resolver/has_payload_type.rb +29 -7
  210. data/lib/graphql/schema/resolver.rb +156 -45
  211. data/lib/graphql/schema/scalar.rb +1 -0
  212. data/lib/graphql/schema/subscription.rb +67 -28
  213. data/lib/graphql/schema/timeout.rb +65 -25
  214. data/lib/graphql/schema/type_expression.rb +14 -5
  215. data/lib/graphql/schema/type_membership.rb +29 -10
  216. data/lib/graphql/schema/union.rb +4 -2
  217. data/lib/graphql/schema/unique_within_type.rb +24 -5
  218. data/lib/graphql/schema/validator/all_validator.rb +17 -9
  219. data/lib/graphql/schema/validator/allow_blank_validator.rb +8 -2
  220. data/lib/graphql/schema/validator/allow_null_validator.rb +8 -2
  221. data/lib/graphql/schema/validator/exclusion_validator.rb +14 -5
  222. data/lib/graphql/schema/validator/format_validator.rb +21 -10
  223. data/lib/graphql/schema/validator/inclusion_validator.rb +15 -6
  224. data/lib/graphql/schema/validator/length_validator.rb +23 -12
  225. data/lib/graphql/schema/validator/numericality_validator.rb +29 -16
  226. data/lib/graphql/schema/validator/required_validator.rb +45 -31
  227. data/lib/graphql/schema/validator.rb +89 -25
  228. data/lib/graphql/schema/visibility/migration.rb +14 -7
  229. data/lib/graphql/schema/visibility/profile.rb +65 -20
  230. data/lib/graphql/schema/visibility/visit.rb +12 -10
  231. data/lib/graphql/schema/visibility.rb +24 -20
  232. data/lib/graphql/schema/warden.rb +117 -31
  233. data/lib/graphql/schema/wrapper.rb +4 -1
  234. data/lib/graphql/schema.rb +1046 -300
  235. data/lib/graphql/static_validation/all_rules.rb +2 -1
  236. data/lib/graphql/static_validation/base_visitor.rb +59 -9
  237. data/lib/graphql/static_validation/definition_dependencies.rb +27 -7
  238. data/lib/graphql/static_validation/error.rb +3 -0
  239. data/lib/graphql/static_validation/interpreter_visitor.rb +1 -0
  240. data/lib/graphql/static_validation/literal_validator.rb +1 -0
  241. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +4 -0
  242. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +1 -0
  243. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +3 -0
  244. data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +1 -0
  245. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -0
  246. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +1 -0
  247. data/lib/graphql/static_validation/rules/directives_are_defined.rb +3 -0
  248. data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +1 -0
  249. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +3 -0
  250. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +1 -0
  251. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +3 -0
  252. data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +1 -0
  253. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +9 -1
  254. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +1 -0
  255. data/lib/graphql/static_validation/rules/fields_will_merge.rb +295 -134
  256. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +14 -2
  257. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +3 -0
  258. data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +1 -0
  259. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -0
  260. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +1 -0
  261. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +3 -0
  262. data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +1 -0
  263. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +3 -0
  264. data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +1 -0
  265. data/lib/graphql/static_validation/rules/fragments_are_named.rb +3 -0
  266. data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +1 -0
  267. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +3 -0
  268. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +1 -0
  269. data/lib/graphql/static_validation/rules/fragments_are_used.rb +3 -0
  270. data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +1 -0
  271. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +3 -0
  272. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +1 -0
  273. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +3 -0
  274. data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +1 -0
  275. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +3 -0
  276. data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +1 -0
  277. data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +1 -0
  278. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +4 -0
  279. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +1 -0
  280. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +3 -0
  281. data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +1 -0
  282. data/lib/graphql/static_validation/rules/query_root_exists.rb +3 -0
  283. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +1 -0
  284. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -1
  285. data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +1 -0
  286. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -0
  287. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +1 -0
  288. data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +43 -5
  289. data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +1 -0
  290. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +3 -0
  291. data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +1 -0
  292. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +3 -0
  293. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +1 -0
  294. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +3 -0
  295. data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +1 -0
  296. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +207 -51
  297. data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +1 -0
  298. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +3 -0
  299. data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +1 -0
  300. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +6 -3
  301. data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +1 -0
  302. data/lib/graphql/static_validation/validation_context.rb +3 -2
  303. data/lib/graphql/static_validation/validation_timeout_error.rb +1 -0
  304. data/lib/graphql/static_validation/validator.rb +41 -16
  305. data/lib/graphql/static_validation.rb +1 -0
  306. data/lib/graphql/string_encoding_error.rb +1 -0
  307. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +85 -65
  308. data/lib/graphql/subscriptions/broadcast_analyzer.rb +10 -4
  309. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +1 -0
  310. data/lib/graphql/subscriptions/event.rb +25 -6
  311. data/lib/graphql/subscriptions/serialize.rb +58 -19
  312. data/lib/graphql/subscriptions.rb +172 -46
  313. data/lib/graphql/testing/helpers.rb +17 -4
  314. data/lib/graphql/testing/mock_action_cable.rb +55 -33
  315. data/lib/graphql/testing.rb +1 -0
  316. data/lib/graphql/tracing/active_support_notifications_trace.rb +17 -9
  317. data/lib/graphql/tracing/active_support_notifications_tracing.rb +2 -1
  318. data/lib/graphql/tracing/appoptics_trace.rb +2 -1
  319. data/lib/graphql/tracing/appoptics_tracing.rb +2 -1
  320. data/lib/graphql/tracing/appsignal_trace.rb +16 -7
  321. data/lib/graphql/tracing/appsignal_tracing.rb +7 -3
  322. data/lib/graphql/tracing/call_legacy_tracers.rb +1 -0
  323. data/lib/graphql/tracing/data_dog_trace.rb +17 -6
  324. data/lib/graphql/tracing/data_dog_tracing.rb +10 -3
  325. data/lib/graphql/tracing/detailed_trace/active_record_backend.rb +1 -0
  326. data/lib/graphql/tracing/detailed_trace/memory_backend.rb +1 -0
  327. data/lib/graphql/tracing/detailed_trace/redis_backend.rb +1 -0
  328. data/lib/graphql/tracing/detailed_trace.rb +105 -42
  329. data/lib/graphql/tracing/legacy_hooks_trace.rb +5 -0
  330. data/lib/graphql/tracing/legacy_trace.rb +1 -0
  331. data/lib/graphql/tracing/monitor_trace.rb +17 -11
  332. data/lib/graphql/tracing/new_relic_trace.rb +17 -8
  333. data/lib/graphql/tracing/new_relic_tracing.rb +7 -3
  334. data/lib/graphql/tracing/notifications_trace.rb +11 -8
  335. data/lib/graphql/tracing/notifications_tracing.rb +23 -7
  336. data/lib/graphql/tracing/null_trace.rb +1 -0
  337. data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +1 -0
  338. data/lib/graphql/tracing/perfetto_trace.rb +41 -19
  339. data/lib/graphql/tracing/platform_trace.rb +3 -1
  340. data/lib/graphql/tracing/platform_tracing.rb +16 -7
  341. data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +1 -0
  342. data/lib/graphql/tracing/prometheus_trace.rb +22 -13
  343. data/lib/graphql/tracing/prometheus_tracing.rb +1 -0
  344. data/lib/graphql/tracing/scout_trace.rb +10 -4
  345. data/lib/graphql/tracing/scout_tracing.rb +7 -3
  346. data/lib/graphql/tracing/sentry_trace.rb +12 -5
  347. data/lib/graphql/tracing/statsd_trace.rb +12 -6
  348. data/lib/graphql/tracing/statsd_tracing.rb +7 -1
  349. data/lib/graphql/tracing/trace.rb +231 -58
  350. data/lib/graphql/tracing.rb +25 -9
  351. data/lib/graphql/type_kinds.rb +2 -1
  352. data/lib/graphql/types/big_int.rb +1 -0
  353. data/lib/graphql/types/boolean.rb +1 -0
  354. data/lib/graphql/types/float.rb +1 -0
  355. data/lib/graphql/types/id.rb +1 -0
  356. data/lib/graphql/types/int.rb +2 -1
  357. data/lib/graphql/types/iso_8601_date.rb +21 -4
  358. data/lib/graphql/types/iso_8601_date_time.rb +33 -6
  359. data/lib/graphql/types/iso_8601_duration.rb +42 -9
  360. data/lib/graphql/types/json.rb +1 -0
  361. data/lib/graphql/types/relay/base_connection.rb +38 -32
  362. data/lib/graphql/types/relay/base_edge.rb +15 -9
  363. data/lib/graphql/types/relay/connection_behaviors.rb +19 -3
  364. data/lib/graphql/types/relay/edge_behaviors.rb +17 -4
  365. data/lib/graphql/types/relay/has_node_field.rb +6 -1
  366. data/lib/graphql/types/relay/has_nodes_field.rb +6 -1
  367. data/lib/graphql/types/relay/node.rb +1 -0
  368. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  369. data/lib/graphql/types/relay/page_info.rb +1 -0
  370. data/lib/graphql/types/relay/page_info_behaviors.rb +1 -0
  371. data/lib/graphql/types/relay.rb +4 -3
  372. data/lib/graphql/types/string.rb +1 -0
  373. data/lib/graphql/types.rb +1 -0
  374. data/lib/graphql/unauthorized_enum_value_error.rb +4 -1
  375. data/lib/graphql/unauthorized_error.rb +11 -4
  376. data/lib/graphql/unauthorized_field_error.rb +4 -1
  377. data/lib/graphql/unresolved_type_error.rb +16 -5
  378. data/lib/graphql/version.rb +2 -1
  379. data/lib/graphql.rb +37 -9
  380. data/readme.md +1 -1
  381. metadata +89 -5
  382. data/.yardopts +0 -5
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  # This error is raised when `Types::ISO8601Date` is asked to return a value
4
5
  # that cannot be parsed to a Ruby Date.
5
6
  #
6
- # @see GraphQL::Types::ISO8601Date which raises this error
7
+ # See [GraphQL::Types::ISO8601Date](rdoc-ref:GraphQL::Types::ISO8601Date) which raises this error
7
8
  class DateEncodingError < GraphQL::RuntimeTypeError
8
9
  # The value which couldn't be encoded
9
10
  attr_reader :date_value
data/lib/graphql/dig.rb CHANGED
@@ -1,13 +1,22 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Dig
4
5
  # implemented using the old activesupport #dig instead of the ruby built-in
5
6
  # so we can use some of the magic in Schema::InputObject and Interpreter::Arguments
6
7
  # to handle stringified/symbolized keys.
7
8
  #
8
- # @param own_key [String, Symbol] A key to retrieve
9
- # @param rest_keys [Array<[String, Symbol>] Retrieves the value object corresponding to the each key objects repeatedly
10
- # @return [Object]
9
+ # **Parameters**
10
+ #
11
+ # - `own_key` (`String, Symbol`) — A key to retrieve
12
+ # - `rest_keys` (`Array<[String, Symbol]>`) — Keys to use for retrieving nested values
13
+ #
14
+ # **Returns**
15
+ #
16
+ # - `Object`
17
+ #
18
+ # :call-seq:
19
+ # dig(String | Symbol own_key, Array[[String, Symbol]] *rest_keys) -> Object
11
20
  def dig(own_key, *rest_keys)
12
21
  val = self[own_key]
13
22
  if val.nil? || rest_keys.empty?
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  # This error is raised when `Types::ISO8601Duration` is asked to return a value
4
5
  # that cannot be parsed as an ISO8601-formatted duration by ActiveSupport::Duration.
5
6
  #
6
- # @see GraphQL::Types::ISO8601Duration which raises this error
7
+ # See [GraphQL::Types::ISO8601Duration](rdoc-ref:GraphQL::Types::ISO8601Duration) which raises this error
7
8
  class DurationEncodingError < GraphQL::RuntimeTypeError
8
9
  # The value which couldn't be encoded
9
10
  attr_reader :duration_value
@@ -1,16 +1,21 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Execution
4
5
  # Boolean checks for how an AST node's directives should
5
6
  # influence its execution
6
- # @api private
7
- module DirectiveChecks
7
+ module DirectiveChecks # :nodoc:
8
8
  SKIP = "skip"
9
9
  INCLUDE = "include"
10
10
 
11
11
  module_function
12
12
 
13
- # @return [Boolean] Should this node be included in the query?
13
+ # **Returns**
14
+ #
15
+ # - `Boolean` — Should this node be included in the query?
16
+ #
17
+ # :call-seq:
18
+ # include?(directive_ast_nodes, query) -> bool
14
19
  def include?(directive_ast_nodes, query)
15
20
  directive_ast_nodes.each do |directive_ast_node|
16
21
  name = directive_ast_node.name
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -6,10 +7,18 @@ module GraphQL
6
7
  # Register this handler, updating the
7
8
  # internal handler index to maintain least-to-most specific.
8
9
  #
9
- # @param error_class [Class<Exception>]
10
- # @param error_handlers [Hash]
11
- # @param error_handler [Proc]
12
- # @return [void]
10
+ # **Parameters**
11
+ #
12
+ # - `error_class` (`Class<Exception>`)
13
+ # - `error_handlers` (`Hash`)
14
+ # - `error_handler` (`Proc`)
15
+ #
16
+ # **Returns**
17
+ #
18
+ # - `void`
19
+ #
20
+ # :call-seq:
21
+ # register_rescue_from(Class[Exception] error_class, Hash error_handlers, Proc error_handler) -> void
13
22
  def self.register_rescue_from(error_class, error_handlers, error_handler)
14
23
  subclasses_handlers = {}
15
24
  this_level_subclasses = []
@@ -52,10 +61,15 @@ module GraphQL
52
61
  nil
53
62
  end
54
63
 
55
- # @return [Proc, nil] The handler for `error_class`, if one was registered on this schema or inherited
64
+ # **Returns**
65
+ #
66
+ # - `Proc, nil` — The handler for `error_class`, if one was registered on this schema or inherited
67
+ #
68
+ # :call-seq:
69
+ # find_handler_for(schema, error_class) -> Proc | nil
56
70
  def self.find_handler_for(schema, error_class)
57
71
  handlers = schema.error_handlers[:subclass_handlers]
58
- handler = nil
72
+ handler = nil #: untyped
59
73
  while (handlers) do
60
74
  _err_class, next_handler = handlers.find { |err_class, handler| error_class <= err_class }
61
75
  if next_handler
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
+ # typed: false
2
3
  module GraphQL
3
4
  module Execution
4
5
  class FieldResolveStep
6
+ # Only these built-in fields on Relay connection and edge types return already-scoped items.
7
+ # Custom fields on those types must still be authorized normally.
8
+ SCOPED_RELAY_FIELD_NAMES = [:node, :nodes, :edges].freeze
9
+
5
10
  def initialize(parent_type:, runner:, key:, selections_step:)
6
11
  @selections_step = selections_step
7
12
  @key = key
@@ -283,7 +288,7 @@ module GraphQL
283
288
  authorized_objects = objects
284
289
  end
285
290
 
286
- if @parent_type.default_relay? && authorized_objects.all? { |o| o.respond_to?(:was_authorized_by_scope_items?) && o.was_authorized_by_scope_items? }
291
+ if @parent_type.default_relay? && SCOPED_RELAY_FIELD_NAMES.include?(@field_definition.original_name) && authorized_objects.all? { |o| o.respond_to?(:was_authorized_by_scope_items?) && o.was_authorized_by_scope_items? }
287
292
  @was_scoped = true
288
293
  end
289
294
 
@@ -414,11 +419,15 @@ module GraphQL
414
419
  case ext
415
420
  when Schema::Field::ConnectionExtension
416
421
  conns = ctx.schema.connections
422
+ lookahead = @arguments[:lookahead]
423
+ # The memo omits the extension's extras (`:lookahead`)
424
+ conn_arguments = memos[@finish_extension_idx] || @arguments
417
425
  @field_results.map!.each_with_index do |value, idx|
418
426
  object = @extended.object[idx]
419
- conn = conns.populate_connection(@field_definition, object, value, @arguments, ctx)
427
+ conn = conns.populate_connection(@field_definition, object, value, conn_arguments, ctx)
420
428
  if conn
421
429
  conn.was_authorized_by_scope_items = @was_scoped
430
+ conn.lookahead ||= lookahead
422
431
  end
423
432
  conn
424
433
  rescue GraphQL::RuntimeError => err
@@ -510,7 +519,7 @@ module GraphQL
510
519
  def build_leaf_result(result_h, result_key, field_result, return_type, ctx, is_from_array)
511
520
  if field_result.nil?
512
521
  if return_type.non_null?
513
- add_non_null_error(is_from_array)
522
+ add_non_null_error(is_from_array, return_type: return_type)
514
523
  else
515
524
  nil
516
525
  end
@@ -527,7 +536,7 @@ module GraphQL
527
536
  end
528
537
 
529
538
  inner_type = return_type.of_type
530
- result_a = Array.new(field_result.size)
539
+ result_a = field_result.is_a?(Array) ? Array.new(field_result.size) : []
531
540
  field_result.each_with_index do |item, idx|
532
541
  result_a[idx] = build_leaf_result(result_a, idx, item, inner_type, ctx, true)
533
542
  end
@@ -605,8 +614,14 @@ module GraphQL
605
614
  end
606
615
  end
607
616
 
608
- def add_non_null_error(is_from_array)
609
- err = @parent_type::InvalidNullError.new(@parent_type, @field_definition, ast_nodes, is_from_array: is_from_array, path: path)
617
+ def add_non_null_error(is_from_array, return_type: nil)
618
+ if is_from_array && return_type
619
+ list_type = @field_definition.type
620
+ list_type = list_type.of_type if list_type.non_null?
621
+ # Preserve existing messages for single-level lists.
622
+ element_type = return_type.of_type if list_type.of_type.list?
623
+ end
624
+ err = @parent_type::InvalidNullError.new(@parent_type, @field_definition, ast_nodes, is_from_array: is_from_array, path: path, element_type: element_type)
610
625
  nn_result = @runner.schema.type_error(err, @selections_step.query.context)
611
626
  if nn_result.nil?
612
627
  propagate_nulls
@@ -645,11 +660,18 @@ module GraphQL
645
660
  list_result = graphql_result[key] = []
646
661
  @directive_finalizers&.each { |f| @runner.add_finalizer(@selections_step.query, list_result, nil, f) }
647
662
  i = 0
648
- s = field_result.size
649
- while i < s
650
- inner_f_r = field_result[i]
651
- build_graphql_result(list_result, i, inner_f_r, inner_type, inner_type_nn, inner_type_l, true)
652
- i += 1
663
+ if field_result.is_a?(Array)
664
+ s = field_result.size
665
+ while i < s
666
+ inner_f_r = field_result[i]
667
+ build_graphql_result(list_result, i, inner_f_r, inner_type, inner_type_nn, inner_type_l, true)
668
+ i += 1
669
+ end
670
+ else
671
+ field_result.each do |inner_f_r|
672
+ build_graphql_result(list_result, i, inner_f_r, inner_type, inner_type_nn, inner_type_l, true)
673
+ i += 1
674
+ end
653
675
  end
654
676
  elsif @runner.resolves_lazies || (
655
677
  @static_type.kind.object? ?
@@ -786,8 +808,13 @@ module GraphQL
786
808
  end
787
809
  results
788
810
  when :resolve_legacy_instance_method
789
- @selections_step.graphql_objects.map do |obj_inst|
790
- obj_inst.public_send(@field_definition.execution_mode_key, **args_hash)
811
+ graphql_objects = if objects.equal?(@selections_step.objects)
812
+ @selections_step.graphql_objects
813
+ else
814
+ objects.map { |object| @parent_type.scoped_new(object, context) }
815
+ end
816
+ graphql_objects.map do |graphql_object|
817
+ graphql_object.public_send(@field_definition.execution_mode_key, **args_hash)
791
818
  rescue GraphQL::ExecutionError => exec_err
792
819
  exec_err
793
820
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Execution
4
5
  class Finalize
@@ -39,11 +40,16 @@ module GraphQL
39
40
  tf[key] = err
40
41
  @finalizers_count += 1
41
42
  elsif value_at_key.is_a?(Array)
42
- value_at_key.each_with_index do |el, idx|
43
- if el.equal?(err)
44
- tf = @finalizers[value_at_key] ||= {}.compare_by_identity
45
- tf[idx] = err
46
- @finalizers_count += 1
43
+ pending_arrays = [value_at_key]
44
+ while (array = pending_arrays.pop)
45
+ array.each_with_index do |el, idx|
46
+ if el.equal?(err)
47
+ array_tf = @finalizers[array] ||= {}.compare_by_identity
48
+ array_tf[idx] = err
49
+ @finalizers_count += 1
50
+ elsif el.is_a?(Array)
51
+ pending_arrays << el
52
+ end
47
53
  end
48
54
  end
49
55
  end
@@ -175,7 +181,7 @@ module GraphQL
175
181
  inner_type = inner_type.of_type
176
182
  end
177
183
 
178
- new_invalid_null = false
184
+ new_invalid_null = false #: bool
179
185
 
180
186
  if (f = finalizers(result_arr, nil))
181
187
  run_finalizers(@current_result_path.dup, f, result_arr, nil)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Execution
4
5
  class InputValues
@@ -38,7 +39,7 @@ module GraphQL
38
39
  def argument_values(owner_defn, argument_nodes, field_resolve_step)
39
40
  arg_defns = @query.types.arguments(owner_defn)
40
41
  argument_values = {}
41
- errors = nil
42
+ errors = nil #: untyped
42
43
 
43
44
  arg_defns.each do |argument_definition|
44
45
  arg_ruby_key = argument_definition.keyword
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
5
6
  class Interpreter
6
7
  # A container for metadata regarding arguments present in a GraphQL query.
7
- # @see Interpreter::Arguments#argument_values for a hash of these objects.
8
+ # See [Interpreter::Arguments#argument_values](rdoc-ref:Interpreter::Arguments#argument_values) for a hash of these objects.
8
9
  class ArgumentValue
9
10
  def initialize(definition:, value:, original_value:, default_used:)
10
11
  @definition = definition
@@ -13,16 +14,27 @@ module GraphQL
13
14
  @default_used = default_used
14
15
  end
15
16
 
16
- # @return [Object] The Ruby-ready value for this Argument
17
+ # **Returns**
18
+ #
19
+ # - `Object` — The Ruby-ready value for this Argument
17
20
  attr_reader :value
18
21
 
19
- # @return [Object] The value of this argument _before_ `prepare` is applied.
22
+ # **Returns**
23
+ #
24
+ # - `Object` — The value of this argument _before_ `prepare` is applied.
20
25
  attr_reader :original_value
21
26
 
22
- # @return [GraphQL::Schema::Argument] The definition instance for this argument
27
+ # **Returns**
28
+ #
29
+ # - `GraphQL::Schema::Argument` — The definition instance for this argument
23
30
  attr_reader :definition
24
31
 
25
- # @return [Boolean] `true` if the schema-defined `default_value:` was applied in this case. (No client-provided value was present.)
32
+ # **Returns**
33
+ #
34
+ # - `Boolean` — `true` if the schema-defined `default_value:` was applied in this case. (No client-provided value was present.)
35
+ #
36
+ # :call-seq:
37
+ # default_used?() -> bool
26
38
  def default_used?
27
39
  @default_used
28
40
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -8,7 +9,7 @@ module GraphQL
8
9
  # This object is immutable so that the runtime code can be sure that
9
10
  # modifications don't leak from one use to another
10
11
  #
11
- # @see GraphQL::Query#arguments_for to get access to these objects.
12
+ # See [GraphQL::Query#arguments_for](rdoc-ref:GraphQL::Query#arguments_for) to get access to these objects.
12
13
  class Arguments
13
14
  extend Forwardable
14
15
  include GraphQL::Dig
@@ -16,11 +17,18 @@ module GraphQL
16
17
  # The Ruby-style arguments hash, ready for a resolver.
17
18
  # This hash is the one used at runtime.
18
19
  #
19
- # @return [Hash<Symbol, Object>]
20
+ # **Returns**
21
+ #
22
+ # - `Hash<Symbol, Object>`
20
23
  attr_reader :keyword_arguments
21
24
 
22
- # @param argument_values [nil, Hash{Symbol => ArgumentValue}]
23
- # @param keyword_arguments [nil, Hash{Symbol => Object}]
25
+ # **Parameters**
26
+ #
27
+ # - `argument_values` (`nil, Hash{Symbol => ArgumentValue}`)
28
+ # - `keyword_arguments` (`nil, Hash{Symbol => Object}`)
29
+ #
30
+ # :call-seq:
31
+ # initialize(nil | Hash[Symbol, Object] keyword_arguments:, nil | Hash[Symbol, ArgumentValue] argument_values:)
24
32
  def initialize(keyword_arguments: nil, argument_values:)
25
33
  @empty = argument_values.nil? || argument_values.empty?
26
34
  # This is only present when `extras` have been merged in:
@@ -52,7 +60,9 @@ module GraphQL
52
60
  freeze
53
61
  end
54
62
 
55
- # @return [Hash{Symbol => ArgumentValue}]
63
+ # **Returns**
64
+ #
65
+ # - `Hash{Symbol => ArgumentValue}`
56
66
  attr_reader :argument_values
57
67
 
58
68
  def empty?
@@ -70,10 +80,15 @@ module GraphQL
70
80
  #
71
81
  # This is called by the runtime to implement field `extras: [...]`
72
82
  #
73
- # @param extra_args [Hash<Symbol => Object>]
74
- # @return [Interpreter::Arguments]
75
- # @api private
76
- def merge_extras(extra_args)
83
+ #
84
+ # **Parameters**
85
+ #
86
+ # - `extra_args` (`Hash<Symbol => Object>`)
87
+ #
88
+ # **Returns**
89
+ #
90
+ # - `Interpreter::Arguments`
91
+ def merge_extras(extra_args) # :nodoc:
77
92
  self.class.new(
78
93
  argument_values: argument_values,
79
94
  keyword_arguments: keyword_arguments.merge(extra_args)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -36,7 +37,7 @@ module GraphQL
36
37
  @storage[argument_owner][nil][ast_node]
37
38
  end
38
39
 
39
- # @yield [Interpreter::Arguments, Lazy<Interpreter::Arguments>] The finally-loaded arguments
40
+ # **Yields:** [Interpreter::Arguments, Lazy<Interpreter::Arguments>] The finally-loaded arguments
40
41
  def dataload_for(ast_node, argument_owner, parent_object, &block)
41
42
  # First, normalize all AST or Ruby values to a plain Ruby hash
42
43
  arg_storage = @storage[argument_owner][parent_object]
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -1,23 +1,32 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
5
6
  class Interpreter
6
7
  module Resolve
7
8
  # Continue field results in `results` until there's nothing else to continue.
8
- # @return [void]
9
- # @deprecated Call `dataloader.run` instead
9
+ # **Deprecated:** Call `dataloader.run` instead
10
+ #
11
+ # **Returns**
12
+ #
13
+ # - `void`
14
+ #
15
+ # :call-seq:
16
+ # resolve_all(results, dataloader) -> void
10
17
  def self.resolve_all(results, dataloader)
11
- warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{caller(1, 5).map { |l| "\n #{l}"}.join}"
18
+ backtrace = caller(1, 5) #: as !nil
19
+ warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{backtrace.map { |l| "\n #{l}"}.join}"
12
20
  dataloader.append_job { resolve(results, dataloader) }
13
21
  nil
14
22
  end
15
23
 
16
- # @deprecated Call `dataloader.run` instead
24
+ # **Deprecated:** Call `dataloader.run` instead
17
25
  def self.resolve_each_depth(lazies_at_depth, dataloader)
18
- warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{caller(1, 5).map { |l| "\n #{l}"}.join}"
26
+ backtrace = caller(1, 5) #: as !nil
27
+ warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{backtrace.map { |l| "\n #{l}"}.join}"
19
28
 
20
- smallest_depth = nil
29
+ smallest_depth = nil #: Integer?
21
30
  lazies_at_depth.each_key do |depth_key|
22
31
  smallest_depth ||= depth_key
23
32
  if depth_key < smallest_depth
@@ -39,9 +48,10 @@ module GraphQL
39
48
  nil
40
49
  end
41
50
 
42
- # @deprecated Call `dataloader.run` instead
51
+ # **Deprecated:** Call `dataloader.run` instead
43
52
  def self.resolve(results, dataloader)
44
- warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{caller(1, 5).map { |l| "\n #{l}"}.join}"
53
+ backtrace = caller(1, 5) #: as !nil
54
+ warn "#{self}.#{__method__} is deprecated; Use `dataloader.run` instead.#{backtrace.map { |l| "\n #{l}"}.join}"
45
55
  # There might be pending jobs here that _will_ write lazies
46
56
  # into the result hash. We should run them out, so we
47
57
  # can be sure that all lazies will be present in the result hashes.
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Execution
@@ -54,7 +55,9 @@ module GraphQL
54
55
  attr_reader :graphql_parent, :graphql_result_name, :graphql_is_non_null_in_parent,
55
56
  :graphql_application_value, :graphql_result_type, :graphql_selections, :graphql_is_eager, :ast_node, :graphql_arguments, :graphql_field
56
57
 
57
- # @return [Hash] Plain-Ruby result data (`@graphql_metadata` contains Result wrapper objects)
58
+ # **Returns**
59
+ #
60
+ # - `Hash` — Plain-Ruby result data (`@graphql_metadata` contains Result wrapper objects)
58
61
  attr_accessor :graphql_result_data
59
62
  end
60
63