graphql 2.6.9 → 2.6.14

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 +3 -2
  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 +45 -16
  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 +98 -44
  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 +288 -168
  61. data/lib/graphql/execution/finalize.rb +12 -6
  62. data/lib/graphql/execution/input_values.rb +5 -2
  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 +18 -7
  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 +38 -13
  79. data/lib/graphql/execution/resolve_type_step.rb +2 -1
  80. data/lib/graphql/execution/runner.rb +32 -15
  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 +14 -0
  85. data/lib/graphql/float_encoding_error.rb +33 -0
  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 +16 -8
  110. data/lib/graphql/language/nodes.rb +2094 -419
  111. data/lib/graphql/language/parser.rb +29 -18
  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 +15 -9
  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 +24 -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 +164 -27
  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 -16
  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 +17 -1
  137. data/lib/graphql/query/variables.rb +9 -2
  138. data/lib/graphql/query.rb +195 -50
  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 +69 -50
  153. data/lib/graphql/schema/always_visible.rb +1 -0
  154. data/lib/graphql/schema/argument.rb +279 -45
  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 +507 -178
  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 +33 -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 +622 -110
  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 +21 -7
  186. data/lib/graphql/schema/member/graphql_type_names.rb +10 -6
  187. data/lib/graphql/schema/member/has_arguments.rb +112 -49
  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 +45 -11
  193. data/lib/graphql/schema/member/has_fields.rb +151 -70
  194. data/lib/graphql/schema/member/has_interfaces.rb +8 -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 +44 -15
  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 +73 -19
  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 +1052 -304
  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 +355 -157
  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 +89 -23
  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 +25 -6
  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 +19 -4
  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 +39 -9
  380. data/readme.md +1 -1
  381. metadata +91 -5
  382. data/.yardopts +0 -5
@@ -1,23 +1,31 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class Schema
4
- # You can use the result of {GraphQL::Introspection::INTROSPECTION_QUERY}
5
+ # You can use the result of [GraphQL::Introspection::INTROSPECTION_QUERY](rdoc-ref:GraphQL::Introspection::INTROSPECTION_QUERY)
5
6
  # to make a schema. This schema is missing some important details like
6
7
  # `resolve` functions, but it does include the full type system,
7
8
  # so you can use it to validate queries.
8
9
  #
9
- # @see GraphQL::Schema.from_introspection for a public API
10
+ # See [GraphQL::Schema.from_introspection](rdoc-ref:GraphQL::Schema.from_introspection) for a public API
10
11
  module Loader
11
- extend self
12
-
13
12
  # Create schema with the result of an introspection query.
14
- # @param introspection_result [Hash] A response from {GraphQL::Introspection::INTROSPECTION_QUERY}
15
- # @return [Class] the schema described by `input`
16
- def load(introspection_result)
13
+ #
14
+ # **Parameters**
15
+ #
16
+ # - `introspection_result` (`Hash`) — A response from [GraphQL::Introspection::INTROSPECTION_QUERY](rdoc-ref:GraphQL::Introspection::INTROSPECTION_QUERY)
17
+ #
18
+ # **Returns**
19
+ #
20
+ # - `Class` — the schema described by `input`
21
+ #
22
+ # :call-seq:
23
+ # load(Hash introspection_result) -> Class
24
+ def self.load(introspection_result)
17
25
  schema = introspection_result.fetch("data").fetch("__schema")
18
26
 
19
27
  types = {}
20
- type_resolver = ->(type) { resolve_type(types, type) }
28
+ type_resolver = ->(type) { resolve_type_reference(types, type) }
21
29
 
22
30
  schema.fetch("types").each do |type|
23
31
  next if type.fetch("name").start_with?("__")
@@ -56,7 +64,7 @@ module GraphQL
56
64
  class << self
57
65
  private
58
66
 
59
- def resolve_type(types, type)
67
+ def resolve_type_reference(types, type)
60
68
  case kind = type.fetch("kind")
61
69
  when "ENUM", "INTERFACE", "INPUT_OBJECT", "OBJECT", "SCALAR", "UNION"
62
70
  type_name = type.fetch("name")
@@ -67,9 +75,9 @@ module GraphQL
67
75
  type
68
76
  end
69
77
  when "LIST"
70
- Schema::List.new(resolve_type(types, type.fetch("ofType")))
78
+ Schema::List.new(resolve_type_reference(types, type.fetch("ofType")))
71
79
  when "NON_NULL"
72
- Schema::NonNull.new(resolve_type(types, type.fetch("ofType")))
80
+ Schema::NonNull.new(resolve_type_reference(types, type.fetch("ofType")))
73
81
  else
74
82
  fail GraphQL::RequiredImplementationMissingError, "#{kind} not implemented"
75
83
  end
@@ -113,6 +121,7 @@ module GraphQL
113
121
  end
114
122
  when "INTERFACE"
115
123
  Module.new do
124
+ #: self as GraphQL::Schema::Member::interface_definition
116
125
  include GraphQL::Schema::Interface
117
126
  graphql_name(type["name"])
118
127
  description(type["description"])
@@ -213,7 +222,9 @@ module GraphQL
213
222
  dummy_query_ast = GraphQL.parse(dummy_query_str)
214
223
 
215
224
  # Reach into the AST for the default value:
216
- input_value_ast = dummy_query_ast.definitions.first.variables.first.default_value
225
+ operation = dummy_query_ast.definitions.first #: as GraphQL::Language::Nodes::OperationDefinition
226
+ variable = operation.variables.first #: as !nil
227
+ input_value_ast = variable.default_value
217
228
 
218
229
  kwargs[:default_value] = extract_default_value(default_value_str, input_value_ast)
219
230
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require "graphql/schema/find_inherited_value"
4
5
 
@@ -6,17 +7,28 @@ module GraphQL
6
7
  class Schema
7
8
  class Member
8
9
  # DSL methods shared by lots of things in the GraphQL Schema.
9
- # @api private
10
- # @see Classes that extend this, eg {GraphQL::Schema::Object}
11
- module BaseDSLMethods
10
+ # See classes that extend this, eg [GraphQL::Schema::Object](rdoc-ref:GraphQL::Schema::Object)
11
+ #--
12
+ # @requires_ancestor: Kernel
13
+ # @requires_ancestor: Module
14
+ module BaseDSLMethods # :nodoc:
12
15
  include GraphQL::Schema::FindInheritedValue
13
16
 
14
17
  # Call this with a new name to override the default name for this schema member; OR
15
18
  # call it without an argument to get the name of this schema member
16
19
  #
17
20
  # The default name is implemented in default_graphql_name
18
- # @param new_name [String]
19
- # @return [String]
21
+ #
22
+ # **Parameters**
23
+ #
24
+ # - `new_name` (`String`)
25
+ #
26
+ # **Returns**
27
+ #
28
+ # - `String`
29
+ #
30
+ # :call-seq:
31
+ # graphql_name(String new_name) -> String
20
32
  def graphql_name(new_name = nil)
21
33
  if new_name
22
34
  GraphQL::NameValidator.validate!(new_name)
@@ -28,8 +40,17 @@ module GraphQL
28
40
 
29
41
  # Call this method to provide a new description; OR
30
42
  # call it without an argument to get the description
31
- # @param new_description [String]
32
- # @return [String]
43
+ #
44
+ # **Parameters**
45
+ #
46
+ # - `new_description` (`String`)
47
+ #
48
+ # **Returns**
49
+ #
50
+ # - `String`
51
+ #
52
+ # :call-seq:
53
+ # description(String new_description) -> String
33
54
  def description(new_description = nil)
34
55
  if new_description
35
56
  @description = new_description
@@ -42,8 +63,17 @@ module GraphQL
42
63
 
43
64
  # Call this method to provide a new comment; OR
44
65
  # call it without an argument to get the comment
45
- # @param new_comment [String]
46
- # @return [String, nil]
66
+ #
67
+ # **Parameters**
68
+ #
69
+ # - `new_comment` (`String`)
70
+ #
71
+ # **Returns**
72
+ #
73
+ # - `String, nil`
74
+ #
75
+ # :call-seq:
76
+ # comment(String new_comment) -> String | nil
47
77
  def comment(new_comment = NOT_CONFIGURED)
48
78
  if !NOT_CONFIGURED.equal?(new_comment)
49
79
  @comment = new_comment
@@ -56,6 +86,9 @@ module GraphQL
56
86
 
57
87
  # This pushes some configurations _down_ the inheritance tree,
58
88
  # in order to prevent repetitive lookups at runtime.
89
+ #--
90
+ # @requires_ancestor: Module
91
+ # @requires_ancestor: GraphQL::Schema::Member::BaseDSLMethods
59
92
  module ConfigurationExtension
60
93
  def inherited(child_class)
61
94
  child_class.introspection(introspection)
@@ -72,7 +105,12 @@ module GraphQL
72
105
  end
73
106
  end
74
107
 
75
- # @return [Boolean] If true, this object is part of the introspection system
108
+ # **Returns**
109
+ #
110
+ # - `Boolean` — If true, this object is part of the introspection system
111
+ #
112
+ # :call-seq:
113
+ # introspection(new_introspection) -> bool
76
114
  def introspection(new_introspection = nil)
77
115
  if !new_introspection.nil?
78
116
  @introspection = new_introspection
@@ -88,7 +126,13 @@ module GraphQL
88
126
  end
89
127
 
90
128
  # The mutation this type was derived from, if it was derived from a mutation
91
- # @return [Class]
129
+ #
130
+ # **Returns**
131
+ #
132
+ # - `Class`
133
+ #
134
+ # :call-seq:
135
+ # mutation(mutation_class) -> Class
92
136
  def mutation(mutation_class = nil)
93
137
  if mutation_class
94
138
  @mutation = mutation_class
@@ -107,7 +151,9 @@ module GraphQL
107
151
  def default_graphql_name
108
152
  @default_graphql_name ||= begin
109
153
  raise GraphQL::RequiredImplementationMissingError, 'Anonymous class should declare a `graphql_name`' if name.nil?
110
- g_name = -name.split("::").last
154
+ class_name = name #: as !nil
155
+ short_name = class_name.split("::").last #: as String
156
+ g_name = -short_name
111
157
  g_name.end_with?("Type") ? g_name.sub(/Type\Z/, "") : g_name
112
158
  end
113
159
  end
@@ -1,14 +1,24 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class Schema
4
5
  class Member
5
- # @api private
6
- module BuildType
6
+ #--
7
+ # @requires_ancestor: Kernel
8
+ module BuildType # :nodoc:
7
9
  LIST_TYPE_ERROR = "Use an array of [T] or [T, null: true] for list types; other arrays are not supported"
8
10
 
9
11
  module_function
10
- # @param type_expr [String, Class, GraphQL::BaseType]
11
- # @return [GraphQL::BaseType]
12
+ # **Parameters**
13
+ #
14
+ # - `type_expr` (`String, Class, GraphQL::BaseType`)
15
+ #
16
+ # **Returns**
17
+ #
18
+ # - `GraphQL::BaseType`
19
+ #
20
+ # :call-seq:
21
+ # parse_type(String | Class | GraphQL::BaseType type_expr, null:) -> GraphQL::BaseType
12
22
  def parse_type(type_expr, null:)
13
23
  list_type = false
14
24
 
@@ -104,7 +114,8 @@ module GraphQL
104
114
  to_type_name(something.first)
105
115
  when Module
106
116
  if something.respond_to?(:graphql_name)
107
- something.graphql_name
117
+ type_defn = something #: as GraphQL::Schema::Member::type_definition
118
+ type_defn.graphql_name
108
119
  else
109
120
  to_type_name(something.name)
110
121
  end
@@ -174,12 +185,15 @@ module GraphQL
174
185
  end
175
186
  string2 = string.dup
176
187
 
177
- string2.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2') # URLDecoder -> URL_Decoder
178
- string2.gsub!(/([a-z\d])([A-Z])/,'\1_\2') # someThing -> some_Thing
188
+ # URLDecoder -> URL_Decoder, someThing -> some_Thing
189
+ string2.gsub!(UNDERSCORE_BOUNDARY, "_")
179
190
  string2.downcase!
180
191
 
181
192
  string2
182
193
  end
194
+
195
+ UNDERSCORE_BOUNDARY = /(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z\d])(?=[A-Z])/
196
+ private_constant :UNDERSCORE_BOUNDARY
183
197
  end
184
198
  end
185
199
  end
@@ -1,17 +1,21 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  class Schema
5
6
  class Member
6
7
  # These constants are interpreted as GraphQL types when defining fields or arguments
7
8
  #
8
- # @example
9
- # field :is_draft, Boolean, null: false
10
- # field :id, ID, null: false
11
- # field :score, Int, null: false
12
9
  #
13
- # @api private
14
- module GraphQLTypeNames
10
+ # **Examples**
11
+ #
12
+ # **Example: field :is_draft, Boolean, null: false**
13
+ #
14
+ # ```ruby
15
+ # field :id, ID, null: false
16
+ # field :score, Int, null: false
17
+ # ```
18
+ module GraphQLTypeNames # :nodoc:
15
19
  Boolean = "Boolean"
16
20
  ID = "ID"
17
21
  Int = "Int"
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class Schema
4
5
  class Member
6
+ #--
7
+ # @requires_ancestor: Kernel
5
8
  module HasArguments
6
9
  def self.included(cls)
7
10
  cls.extend(ArgumentClassAccessor)
@@ -14,28 +17,39 @@ module GraphQL
14
17
  cls.extend(ClassConfigured)
15
18
  end
16
19
 
17
- # @param arg_name [Symbol] The underscore-cased name of this argument, `name:` keyword also accepted
18
- # @param type_expr The GraphQL type of this argument; `type:` keyword also accepted
19
- # @param desc [String] Argument description, `description:` keyword also accepted
20
- # @option kwargs [Boolean, :nullable] :required if true, this argument is non-null; if false, this argument is nullable. If `:nullable`, then the argument must be provided, though it may be `null`.
21
- # @option kwargs [String] :description Positional argument also accepted
22
- # @option kwargs [Class, Array<Class>] :type Input type; positional argument also accepted
23
- # @option kwargs [Symbol] :name positional argument also accepted
24
- # @option kwargs [Object] :default_value
25
- # @option kwargs [Class, Array<Class>] :loads A GraphQL type to load for the given ID when one is present
26
- # @option kwargs [Symbol] :as Override the keyword name when passed to a method
27
- # @option kwargs [Symbol] :prepare A method to call to transform this argument's valuebefore sending it to field resolution
28
- # @option kwargs [Boolean] :camelize if true, the name will be camelized when building the schema
29
- # @option kwargs [Boolean] :from_resolver if true, a Resolver class defined this argument
30
- # @option kwargs [Hash{Class => Hash}] :directives
31
- # @option kwargs [String] :deprecation_reason
32
- # @option kwargs [String] :comment Private, used by GraphQL-Ruby when parsing GraphQL schema files
33
- # @option kwargs [GraphQL::Language::Nodes::InputValueDefinition] :ast_node Private, used by GraphQL-Ruby when parsing schema files
34
- # @option kwargs [Hash, nil] :validates Options for building validators, if any should be applied
35
- # @option kwargs [Boolean] :replace_null_with_default if `true`, incoming values of `null` will be replaced with the configured `default_value`
36
- # @param definition_block [Proc] Called with the newly-created {Argument}
37
- # @param kwargs [Hash] Keywords for defining an argument. Any keywords not documented here must be handled by your base Argument class.
38
- # @return [GraphQL::Schema::Argument] An instance of {argument_class} created from these arguments
20
+ # **Parameters**
21
+ #
22
+ # - `arg_name` (`Symbol`) — The underscore-cased name of this argument, `name:` keyword also accepted
23
+ # - `type_expr` — The GraphQL type of this argument; `type:` keyword also accepted
24
+ # - `desc` (`String`) — Argument description, `description:` keyword also accepted
25
+ # - `definition_block` (`Proc`) — Called with the newly-created [Argument](rdoc-ref:Argument)
26
+ # - `kwargs` (`Hash`) — Keywords for defining an argument. Any keywords not documented here must be handled by your base Argument class.
27
+ #
28
+ # **Options**
29
+ #
30
+ # - `kwargs.:required` (`Boolean, :nullable`) — if true, this argument is non-null; if false, this argument is nullable. If `:nullable`, then the argument must be provided, though it may be `null`.
31
+ # - `kwargs.:description` (`String`) — Positional argument also accepted
32
+ # - `kwargs.:type` (`Class, Array<Class>`) — Input type; positional argument also accepted
33
+ # - `kwargs.:name` (`Symbol`) — positional argument also accepted
34
+ # - `kwargs.:default_value` (`Object`)
35
+ # - `kwargs.:loads` (`Class, Array<Class>`) — A GraphQL type to load for the given ID when one is present
36
+ # - `kwargs.:as` (`Symbol`) — Override the keyword name when passed to a method
37
+ # - `kwargs.:prepare` (`Symbol`) — A method to call to transform this argument's valuebefore sending it to field resolution
38
+ # - `kwargs.:camelize` (`Boolean`) — if true, the name will be camelized when building the schema
39
+ # - `kwargs.:from_resolver` (`Boolean`) — if true, a Resolver class defined this argument
40
+ # - `kwargs.:directives` (`Hash{Class => Hash}`)
41
+ # - `kwargs.:deprecation_reason` (`String`)
42
+ # - `kwargs.:comment` (`String`) — Private, used by GraphQL-Ruby when parsing GraphQL schema files
43
+ # - `kwargs.:ast_node` (`GraphQL::Language::Nodes::InputValueDefinition`) — Private, used by GraphQL-Ruby when parsing schema files
44
+ # - `kwargs.:validates` (`Hash, nil`) — Options for building validators, if any should be applied
45
+ # - `kwargs.:replace_null_with_default` (`Boolean`) — if `true`, incoming values of `null` will be replaced with the configured `default_value`
46
+ #
47
+ # **Returns**
48
+ #
49
+ # - `GraphQL::Schema::Argument` — An instance of [argument_class](rdoc-ref:argument_class) created from these arguments
50
+ #
51
+ # :call-seq:
52
+ # argument(Symbol arg_name, type_expr, String desc, Hash **kwargs, Proc &definition_block) -> GraphQL::Schema::Argument
39
53
  def argument(arg_name = nil, type_expr = nil, desc = nil, **kwargs, &definition_block)
40
54
  if kwargs[:loads]
41
55
  loads_name = arg_name || kwargs[:name]
@@ -65,8 +79,17 @@ module GraphQL
65
79
  end
66
80
 
67
81
  # Register this argument with the class.
68
- # @param arg_defn [GraphQL::Schema::Argument]
69
- # @return [GraphQL::Schema::Argument]
82
+ #
83
+ # **Parameters**
84
+ #
85
+ # - `arg_defn` (`GraphQL::Schema::Argument`)
86
+ #
87
+ # **Returns**
88
+ #
89
+ # - `GraphQL::Schema::Argument`
90
+ #
91
+ # :call-seq:
92
+ # add_argument(GraphQL::Schema::Argument arg_defn) -> GraphQL::Schema::Argument
70
93
  def add_argument(arg_defn)
71
94
  @own_arguments ||= {}
72
95
  prev_defn = @own_arguments[arg_defn.name]
@@ -98,7 +121,12 @@ module GraphQL
98
121
  nil
99
122
  end
100
123
 
101
- # @return [Hash<String => GraphQL::Schema::Argument] Arguments defined on this thing, keyed by name. Includes inherited definitions
124
+ # **Returns**
125
+ #
126
+ # - `Hash<String => GraphQL::Schema::Argument>` — Arguments defined on this thing, keyed by name. Includes inherited definitions
127
+ #
128
+ # :call-seq:
129
+ # arguments(context:, _require_defined_arguments) -> Hash[String, GraphQL::Schema::Argument]
102
130
  def arguments(context = GraphQL::Query::NullContext.instance, _require_defined_arguments = nil)
103
131
  if !own_arguments.empty?
104
132
  own_arguments_that_apply = {}
@@ -145,7 +173,8 @@ module GraphQL
145
173
 
146
174
  def all_argument_definitions
147
175
  all_defns = {}
148
- ancestors.reverse_each do |ancestor|
176
+ all_ancestors = ancestors #: Array[untyped]
177
+ all_ancestors.reverse_each do |ancestor|
149
178
  if ancestor.respond_to?(:own_arguments)
150
179
  all_defns.merge!(ancestor.own_arguments)
151
180
  end
@@ -159,7 +188,8 @@ module GraphQL
159
188
  def get_argument(argument_name, context = GraphQL::Query::NullContext.instance)
160
189
  warden = Warden.from_context(context)
161
190
  skip_visible = context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Visibility::Profile)
162
- for ancestor in ancestors
191
+ all_ancestors = ancestors #: Array[untyped]
192
+ for ancestor in all_ancestors
163
193
  if ancestor.respond_to?(:own_arguments) &&
164
194
  (a = ancestor.own_arguments[argument_name]) &&
165
195
  (skip_visible || (a = Warden.visible_entry?(:visible_argument?, a, context, warden)))
@@ -171,6 +201,9 @@ module GraphQL
171
201
  end
172
202
  end
173
203
 
204
+ #--
205
+ # @requires_ancestor: Kernel
206
+ # @requires_ancestor: GraphQL::Schema::Member::HasArguments
174
207
  module FieldConfigured
175
208
  def arguments(context = GraphQL::Query::NullContext.instance, _require_defined_arguments = nil)
176
209
  own_arguments = super
@@ -230,7 +263,12 @@ module GraphQL
230
263
  end
231
264
  end
232
265
 
233
- # @return [GraphQL::Schema::Argument, nil] Argument defined on this thing, fetched by name.
266
+ # **Returns**
267
+ #
268
+ # - `GraphQL::Schema::Argument, nil` — Argument defined on this thing, fetched by name.
269
+ #
270
+ # :call-seq:
271
+ # get_argument(argument_name, context:) -> GraphQL::Schema::Argument | nil
234
272
  def get_argument(argument_name, context = GraphQL::Query::NullContext.instance)
235
273
  warden = Warden.from_context(context)
236
274
  if (arg_config = own_arguments[argument_name]) && ((context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Visibility::Profile)) || (visible_arg = Warden.visible_entry?(:visible_argument?, arg_config, context, warden)))
@@ -242,26 +280,32 @@ module GraphQL
242
280
  end
243
281
  end
244
282
 
245
- # @param new_arg_class [Class] A class to use for building argument definitions
283
+ # **Parameters**
284
+ #
285
+ # - `new_arg_class` (`Class`) — A class to use for building argument definitions
286
+ #
287
+ # :call-seq:
288
+ # argument_class(Class new_arg_class)
246
289
  def argument_class(new_arg_class = nil)
247
290
  self.class.argument_class(new_arg_class)
248
291
  end
249
292
 
250
- # @api private
251
- # If given a block, it will eventually yield the loaded args to the block.
293
+ # **Yields:** [Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>]
252
294
  #
253
- # If no block is given, it will immediately dataload (but might return a Lazy).
295
+ # **Parameters**
254
296
  #
255
- # @param values [Hash<String, Object>]
256
- # @param context [GraphQL::Query::Context]
257
- # @yield [Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>]
258
- # @return [Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>]
259
- def coerce_arguments(parent_object, values, context, &block)
297
+ # - `values` (`Hash<String, Object>`)
298
+ # - `context` (`GraphQL::Query::Context`)
299
+ #
300
+ # **Returns**
301
+ #
302
+ # - `Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>`
303
+ def coerce_arguments(parent_object, values, context, &block) # :nodoc:
260
304
  # Cache this hash to avoid re-merging it
261
305
  arg_defns = context.types.arguments(self)
262
306
  total_args_count = arg_defns.size
263
307
 
264
- finished_args = nil
308
+ finished_args = nil #: untyped
265
309
  prepare_finished_args = -> {
266
310
  if total_args_count == 0
267
311
  finished_args = GraphQL::Execution::Interpreter::Arguments::EMPTY
@@ -271,7 +315,7 @@ module GraphQL
271
315
  else
272
316
  argument_values = {}
273
317
  resolved_args_count = 0
274
- raised_error = false
318
+ raised_error = false #: bool
275
319
  arg_defns.each do |arg_defn|
276
320
  context.dataloader.append_job do
277
321
  begin
@@ -318,6 +362,8 @@ module GraphQL
318
362
  nil
319
363
  end
320
364
 
365
+ #--
366
+ # @requires_ancestor: Kernel
321
367
  module HasDirectiveArguments
322
368
  def validate_directive_argument(arg_defn, value)
323
369
  if value.nil? && arg_defn.type.non_null?
@@ -346,14 +392,21 @@ module GraphQL
346
392
  end
347
393
  end
348
394
 
395
+ #--
396
+ # @requires_ancestor: Kernel
349
397
  module ArgumentObjectLoader
350
398
  # Look up the corresponding object for a provided ID.
351
- # By default, it uses Relay-style {Schema.object_from_id},
399
+ # By default, it uses Relay-style [Schema.object_from_id](rdoc-ref:Schema.object_from_id),
352
400
  # override this to find objects another way.
353
401
  #
354
- # @param type [Class, Module] A GraphQL type definition
355
- # @param id [String] A client-provided to look up
356
- # @param context [GraphQL::Query::Context] the current context
402
+ # **Parameters**
403
+ #
404
+ # - `type` (`Class, Module`) — A GraphQL type definition
405
+ # - `id` (`String`) — A client-provided to look up
406
+ # - `context` (`GraphQL::Query::Context`) — the current context
407
+ #
408
+ # :call-seq:
409
+ # object_from_id(Class | Module type, String id, GraphQL::Query::Context context)
357
410
  def object_from_id(type, id, context)
358
411
  context.schema.object_from_id(id, context)
359
412
  end
@@ -374,7 +427,7 @@ module GraphQL
374
427
  def authorize_application_object(argument, id, context, loaded_application_object)
375
428
  context.query.after_lazy(loaded_application_object) do |application_object|
376
429
  if application_object.nil?
377
- err = GraphQL::LoadApplicationObjectFailedError.new(context: context, argument: argument, id: id, object: application_object)
430
+ err = GraphQL::LoadApplicationObjectFailedError.new(context: context, argument: argument, id: id, object: application_object) #: GraphQL::RuntimeError
378
431
  application_object = load_application_object_failed(err)
379
432
  end
380
433
  # Double-check that the located object is actually of this type
@@ -397,7 +450,7 @@ module GraphQL
397
450
  # This union/interface is used in `loads:` but not otherwise visible to this query
398
451
  context.types.loadable_possible_types(arg_loads_type, context).include?(application_object_type)
399
452
  else
400
- true
453
+ arg_loads_type == application_object_type
401
454
  end
402
455
  else
403
456
  context.types.possible_types(arg_loads_type).include?(application_object_type)
@@ -424,7 +477,8 @@ module GraphQL
424
477
  )
425
478
  if self.respond_to?(:unauthorized_object)
426
479
  err.set_backtrace(caller)
427
- unauthorized_object(err)
480
+ loader = self #: untyped
481
+ loader.unauthorized_object(err)
428
482
  else
429
483
  raise err
430
484
  end
@@ -439,9 +493,18 @@ module GraphQL
439
493
  # Called when an argument's `loads:` configuration fails to fetch an application object.
440
494
  # By default, this method raises the given error, but you can override it to handle failures differently.
441
495
  #
442
- # @param err [GraphQL::LoadApplicationObjectFailedError] The error that occurred
443
- # @return [Object, nil] If a value is returned, it will be used instead of the failed load
444
- # @api public
496
+ # **API:** public
497
+ #
498
+ # **Parameters**
499
+ #
500
+ # - `err` (`GraphQL::LoadApplicationObjectFailedError`) — The error that occurred
501
+ #
502
+ # **Returns**
503
+ #
504
+ # - `Object, nil` — If a value is returned, it will be used instead of the failed load
505
+ #
506
+ # :call-seq:
507
+ # load_application_object_failed(GraphQL::LoadApplicationObjectFailedError err) -> Object | nil
445
508
  def load_application_object_failed(err)
446
509
  raise err
447
510
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class Schema
4
5
  class Member
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class Schema
4
5
  class Member
@@ -18,12 +19,16 @@ module GraphQL
18
19
  true
19
20
  end
20
21
 
22
+ #--
23
+ # @requires_ancestor: Kernel
21
24
  module InstanceConfigured
22
25
  def authorizes?(context)
23
26
  raise RequiredImplementationMissingError, "#{self.class} must implement #authorizes?(context)"
24
27
  end
25
28
  end
26
29
 
30
+ #--
31
+ # @requires_ancestor: Kernel
27
32
  module ClassConfigured
28
33
  def authorizes?(context)
29
34
  method(:authorized?).owner != GraphQL::Schema::Member::HasAuthorization