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,21 +1,32 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  class Schema
5
6
  class Member
6
- # @api public
7
- # Shared methods for working with {Dataloader} inside GraphQL runtime objects.
7
+ # **API:** public Shared methods for working with [Dataloader](rdoc-ref:Dataloader) inside GraphQL runtime objects.
8
8
  module HasDataloader
9
- # @return [GraphQL::Dataloader] The dataloader for the currently-running query
9
+ # **Returns**
10
+ #
11
+ # - `GraphQL::Dataloader` — The dataloader for the currently-running query
12
+ #
13
+ # :call-seq:
14
+ # dataloader() -> GraphQL::Dataloader
10
15
  def dataloader
11
16
  context.dataloader
12
17
  end
13
18
 
14
19
  # A shortcut method for loading a key from a source.
15
20
  # Identical to `dataloader.with(source_class, *source_args).load(load_key)`
16
- # @param source_class [Class<GraphQL::Dataloader::Source>]
17
- # @param source_args [Array<Object>] Any extra parameters defined in `source_class`'s `initialize` method
18
- # @param load_key [Object] The key to look up using `def fetch`
21
+ #
22
+ # **Parameters**
23
+ #
24
+ # - `source_class` (`Class<GraphQL::Dataloader::Source>`)
25
+ # - `source_args` (`Array<Object>`) — Any extra parameters defined in `source_class`'s `initialize` method
26
+ # - `load_key` (`Object`) — The key to look up using `def fetch`
27
+ #
28
+ # :call-seq:
29
+ # dataload(Class[GraphQL::Dataloader::Source] source_class, Array[Object] *source_args, Object load_key)
19
30
  def dataload(source_class, *source_args, load_key)
20
31
  dataloader.with(source_class, *source_args).load(load_key)
21
32
  end
@@ -23,29 +34,56 @@ module GraphQL
23
34
  # A shortcut method for loading many keys from a source.
24
35
  # Identical to `dataloader.with(source_class, *source_args).load_all(load_keys)`
25
36
  #
26
- # @example
27
- # field :score, Integer, resolve_batch: true
37
+ # **Examples**
38
+ #
39
+ # **Example: field :score, Integer, resolve_batch: true**
40
+ #
41
+ # ```ruby
42
+ # def self.score(posts)
43
+ # dataload_all(PostScoreSource, posts.map(&:id))
44
+ # end
45
+ # ```
28
46
  #
29
- # def self.score(posts)
30
- # dataload_all(PostScoreSource, posts.map(&:id))
31
- # end
47
+ # **Parameters**
32
48
  #
33
- # @param source_class [Class<GraphQL::Dataloader::Source>]
34
- # @param source_args [Array<Object>] Any extra parameters defined in `source_class`'s `initialize` method
35
- # @param load_keys [Array<Object>] The keys to look up using `def fetch`
49
+ # - `source_class` (`Class<GraphQL::Dataloader::Source>`)
50
+ # - `source_args` (`Array<Object>`) — Any extra parameters defined in `source_class`'s `initialize` method
51
+ # - `load_keys` (`Array<Object>`) — The keys to look up using `def fetch`
52
+ #
53
+ # :call-seq:
54
+ # dataload_all(Class[GraphQL::Dataloader::Source] source_class, Array[Object] *source_args, Array[Object] load_keys)
36
55
  def dataload_all(source_class, *source_args, load_keys)
37
56
  dataloader.with(source_class, *source_args).load_all(load_keys)
38
57
  end
39
58
 
40
- # Find an object with ActiveRecord via {Dataloader::ActiveRecordSource}.
41
- # @param model [Class<ActiveRecord::Base>]
42
- # @param find_by_value [Object] Usually an `id`, might be another value if `find_by:` is also provided
43
- # @param find_by [Symbol, String] A column name to look the record up by. (Defaults to the model's primary key.)
44
- # @return [ActiveRecord::Base, nil]
45
- # @example Finding a record by ID
46
- # dataload_record(Post, 5) # Like `Post.find(5)`, but dataloaded
47
- # @example Finding a record by another attribute
48
- # dataload_record(User, "matz", find_by: :handle) # Like `User.find_by(handle: "matz")`, but dataloaded
59
+ # Find an object with ActiveRecord via [Dataloader::ActiveRecordSource](rdoc-ref:Dataloader::ActiveRecordSource).
60
+ #
61
+ # **Parameters**
62
+ #
63
+ # - `model` (`Class<ActiveRecord::Base>`)
64
+ # - `find_by_value` (`Object`) — Usually an `id`, might be another value if `find_by:` is also provided
65
+ # - `find_by` (`Symbol, String`) — A column name to look the record up by. (Defaults to the model's primary key.)
66
+ #
67
+ # **Returns**
68
+ #
69
+ # - `ActiveRecord::Base, nil`
70
+ #
71
+ # **Examples**
72
+ #
73
+ # **Example: Finding a record by ID**
74
+ #
75
+ # ```ruby
76
+ # dataload_record(Post, 5) # Like `Post.find(5)`, but dataloaded
77
+ # ```
78
+ #
79
+ # **Example: Finding a record by another attribute**
80
+ #
81
+ # ```ruby
82
+ # dataload_record(User, "matz", find_by: :handle) # Like `User.find_by(handle: "matz")`, but dataloaded
83
+ # ```
84
+ #
85
+ # :call-seq:
86
+ # dataload_record(Class[ActiveRecord::Base] model, Object find_by_value, Symbol | String find_by:) -> ActiveRecord::Base | nil
49
87
  def dataload_record(model, find_by_value, find_by: nil)
50
88
  source = if find_by
51
89
  dataloader.with(Dataloader::ActiveRecordSource, model, find_by: find_by)
@@ -56,7 +94,7 @@ module GraphQL
56
94
  source.load(find_by_value)
57
95
  end
58
96
 
59
- # @see dataload_record Like `dataload_record`, but accepts an Array of `find_by_values`
97
+ # See [dataload_record](rdoc-ref:dataload_record) Like `dataload_record`, but accepts an Array of `find_by_values`
60
98
  def dataload_all_records(model, find_by_values, find_by: nil)
61
99
  source = if find_by
62
100
  dataloader.with(Dataloader::ActiveRecordSource, model, find_by: find_by)
@@ -66,15 +104,34 @@ module GraphQL
66
104
  source.load_all(find_by_values)
67
105
  end
68
106
 
69
- # Look up an associated record using a Rails association (via {Dataloader::ActiveRecordAssociationSource})
70
- # @param association_name [Symbol] A `belongs_to` or `has_one` association. (If a `has_many` association is named here, it will be selected without pagination.)
71
- # @param record [ActiveRecord::Base] The object that the association belongs to.
72
- # @param scope [ActiveRecord::Relation] A scope to look up the associated record in
73
- # @return [ActiveRecord::Base, nil] The associated record, if there is one
74
- # @example Looking up a belongs_to on the current object
75
- # dataload_association(:parent) # Equivalent to `object.parent`, but dataloaded
76
- # @example Looking up an associated record on some other object
77
- # dataload_association(comment, :post) # Equivalent to `comment.post`, but dataloaded
107
+ # Look up an associated record using a Rails association (via [Dataloader::ActiveRecordAssociationSource](rdoc-ref:Dataloader::ActiveRecordAssociationSource))
108
+ #
109
+ # **Parameters**
110
+ #
111
+ # - `association_name` (`Symbol`) — A `belongs_to` or `has_one` association. (If a `has_many` association is named here, it will be selected without pagination.)
112
+ # - `record` (`ActiveRecord::Base`) — The object that the association belongs to.
113
+ # - `scope` (`ActiveRecord::Relation`) — A scope to look up the associated record in
114
+ #
115
+ # **Returns**
116
+ #
117
+ # - `ActiveRecord::Base, nil` — The associated record, if there is one
118
+ #
119
+ # **Examples**
120
+ #
121
+ # **Example: Looking up a belongs_to on the current object**
122
+ #
123
+ # ```ruby
124
+ # dataload_association(:parent) # Equivalent to `object.parent`, but dataloaded
125
+ # ```
126
+ #
127
+ # **Example: Looking up an associated record on some other object**
128
+ #
129
+ # ```ruby
130
+ # dataload_association(comment, :post) # Equivalent to `comment.post`, but dataloaded
131
+ # ```
132
+ #
133
+ # :call-seq:
134
+ # dataload_association(ActiveRecord::Base record, Symbol association_name, ActiveRecord::Relation scope:) -> ActiveRecord::Base | nil
78
135
  def dataload_association(record = object, association_name, scope: nil)
79
136
  source = if scope
80
137
  dataloader.with(Dataloader::ActiveRecordAssociationSource, association_name, scope)
@@ -84,7 +141,7 @@ module GraphQL
84
141
  source.load(record)
85
142
  end
86
143
 
87
- # @see dataload_association Like `dataload_assocation` but accepts an Array of records (required param)
144
+ # See [dataload_association](rdoc-ref:dataload_association) Like `dataload_assocation` but accepts an Array of records (required param)
88
145
  def dataload_all_associations(records, association_name, scope: nil)
89
146
  source = if scope
90
147
  dataloader.with(Dataloader::ActiveRecordAssociationSource, association_name, scope)
@@ -1,14 +1,25 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  class Schema
5
6
  class Member
7
+ #--
8
+ # @requires_ancestor: GraphQL::Schema::Member::HasDirectives
6
9
  module HasDeprecationReason
7
- # @return [String, nil] Explains why this member was deprecated (if present, this will be marked deprecated in introspection)
10
+ # **Returns**
11
+ #
12
+ # - `String, nil` — Explains why this member was deprecated (if present, this will be marked deprecated in introspection)
8
13
  attr_reader :deprecation_reason
9
14
 
10
15
  # Set the deprecation reason for this member, or remove it by assigning `nil`
11
- # @param text [String, nil]
16
+ #
17
+ # **Parameters**
18
+ #
19
+ # - `text` (`String, nil`)
20
+ #
21
+ # :call-seq:
22
+ # deprecation_reason=(String | nil text)
12
23
  def deprecation_reason=(text)
13
24
  @deprecation_reason = text
14
25
  if text.nil?
@@ -24,6 +35,8 @@ module GraphQL
24
35
  child_class.extend(ClassMethods)
25
36
  end
26
37
 
38
+ #--
39
+ # @requires_ancestor: GraphQL::Schema::Member::HasDeprecationReason
27
40
  module ClassMethods
28
41
  def deprecation_reason(new_reason = NOT_CONFIGURED)
29
42
  if NOT_CONFIGURED.equal?(new_reason)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  class Schema
@@ -6,7 +7,10 @@ module GraphQL
6
7
  module HasDirectives
7
8
  def self.extended(child_cls)
8
9
  super
9
- child_cls.module_exec { self.own_directives = nil }
10
+ child_cls.module_exec {
11
+ #: self as GraphQL::Schema::Member::HasDirectives
12
+ self.own_directives = nil
13
+ }
10
14
  end
11
15
 
12
16
  def inherited(child_cls)
@@ -18,7 +22,12 @@ module GraphQL
18
22
  #
19
23
  # It removes a previously-attached instance of `dir_class`, if there is one.
20
24
  #
21
- # @return [void]
25
+ # **Returns**
26
+ #
27
+ # - `void`
28
+ #
29
+ # :call-seq:
30
+ # directive(dir_class, **options) -> void
22
31
  def directive(dir_class, **options)
23
32
  @own_directives ||= []
24
33
  HasDirectives.add_directive(self, @own_directives, dir_class, options)
@@ -26,8 +35,17 @@ module GraphQL
26
35
  end
27
36
 
28
37
  # Remove an attached instance of `dir_class`, if there is one
29
- # @param dir_class [Class<GraphQL::Schema::Directive>]
30
- # @return [viod]
38
+ #
39
+ # **Parameters**
40
+ #
41
+ # - `dir_class` (`Class<GraphQL::Schema::Directive>`)
42
+ #
43
+ # **Returns**
44
+ #
45
+ # - `void`
46
+ #
47
+ # :call-seq:
48
+ # remove_directive(Class[GraphQL::Schema::Directive] dir_class) -> void
31
49
  def remove_directive(dir_class)
32
50
  HasDirectives.remove_directive(@own_directives, dir_class)
33
51
  nil
@@ -56,7 +74,7 @@ module GraphQL
56
74
  GraphQL::EmptyObjects::EMPTY_ARRAY
57
75
  end
58
76
  if !inherited_directives.empty? && directives
59
- dirs = []
77
+ dirs = [] #: Array[GraphQL::Schema::Directive]?
60
78
  merge_directives(dirs, inherited_directives)
61
79
  merge_directives(dirs, directives)
62
80
  dirs
@@ -68,8 +86,9 @@ module GraphQL
68
86
  GraphQL::EmptyObjects::EMPTY_ARRAY
69
87
  end
70
88
  when Module
71
- dirs = nil
72
- schema_member.ancestors.reverse_each do |ancestor|
89
+ dirs = nil #: Array[GraphQL::Schema::Directive]?
90
+ ancestors = schema_member.ancestors #: Array[untyped]
91
+ ancestors.reverse_each do |ancestor|
73
92
  if ancestor.respond_to?(:own_directives) &&
74
93
  !(anc_dirs = ancestor.own_directives).empty?
75
94
  dirs ||= []
@@ -93,9 +112,18 @@ module GraphQL
93
112
  # Modify `target` by adding items from `dirs` such that:
94
113
  # - Any name conflict is overridden by the incoming member of `dirs`
95
114
  # - Any other member of `dirs` is appended
96
- # @param target [Array<GraphQL::Schema::Directive>]
97
- # @param dirs [Array<GraphQL::Schema::Directive>]
98
- # @return [void]
115
+ #
116
+ # **Parameters**
117
+ #
118
+ # - `target` (`Array<GraphQL::Schema::Directive>`)
119
+ # - `dirs` (`Array<GraphQL::Schema::Directive>`)
120
+ #
121
+ # **Returns**
122
+ #
123
+ # - `void`
124
+ #
125
+ # :call-seq:
126
+ # merge_directives(Array[GraphQL::Schema::Directive] target, Array[GraphQL::Schema::Directive] dirs) -> void
99
127
  def merge_directives(target, dirs)
100
128
  dirs.each do |dir|
101
129
  if (idx = target.find_index { |d| d.graphql_name == dir.graphql_name })