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,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
- # Support {GraphQL::Parser::Cache} and {GraphQL.eager_load!}
5
+ # Support [GraphQL::Language::Cache](rdoc-ref:GraphQL::Language::Cache) and [GraphQL.eager_load!](rdoc-ref:GraphQL.eager_load!)
5
6
  #
6
- # @example Enable the parser cache with default directory
7
+ # **Examples**
7
8
  #
8
- # config.graphql.parser_cache = true
9
+ # **Example: Enable the parser cache with default directory**
9
10
  #
11
+ # ```ruby
12
+ # config.graphql.parser_cache = true
13
+ # ```
10
14
  class Railtie < Rails::Railtie
11
15
  config.graphql = ActiveSupport::OrderedOptions.new
12
16
  config.graphql.parser_cache = false
@@ -1,21 +1,83 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
3
+ require "digest/sha2"
4
+ require "net/http"
5
+ require "erb"
2
6
 
3
7
  module GraphQL
4
8
  class RakeTask
5
9
  extend Rake::DSL
6
10
 
11
+ # Helpers for `graphql:pro:validate`.
12
+ # Credentials are never passed to a subprocess, so they can't leak into the process list or logs.
13
+ module Validate
14
+ CREDENTIALS_PATTERN = /\A[a-z0-9]{11}:[a-z0-9]{11}\z/
15
+ DIGEST_PATTERN = /\A\h{128}\z/
16
+
17
+ module_function
18
+
19
+ # Returns a normalized version string, or `nil` if `version` isn't a valid gem version.
20
+ def normalize_version(version)
21
+ # `Gem::Version.correct?` accepts `nil` and `""`, so check those first
22
+ if !version.is_a?(String) || version.strip.empty? || !Gem::Version.correct?(version)
23
+ nil
24
+ else
25
+ # Strips surrounding whitespace, leaving only `[0-9a-zA-Z.]`
26
+ Gem::Version.new(version).to_s
27
+ end
28
+ end
29
+
30
+ # Returns `user:pass` for gems.graphql.pro, or `nil` if it isn't configured.
31
+ def credentials
32
+ creds = if defined?(Bundler) && Bundler.respond_to?(:settings)
33
+ Bundler.settings["gems.graphql.pro"]
34
+ end
35
+ if creds.nil?
36
+ # Array form doesn't use a shell, and no secrets are in the arguments
37
+ output = IO.popen(["bundle", "config", "get", "gems.graphql.pro", "--parseable"], err: File::NULL, &:read)
38
+ creds = output[/[a-z0-9]{11}:[a-z0-9]{11}/]
39
+ end
40
+ creds = creds&.strip
41
+ creds && creds.match?(CREDENTIALS_PATTERN) ? creds : nil
42
+ rescue SystemCallError
43
+ nil
44
+ end
45
+
46
+ # Returns the SHA512 hex digest of the downloaded gem, or `nil` if the download failed.
47
+ def fetch_gem_digest(version, creds)
48
+ user, pass = creds.split(":", 2)
49
+ uri = URI.parse("https://gems.graphql.pro/gems/graphql-pro-#{version}.gem")
50
+ req = Net::HTTP::Get.new(uri)
51
+ req.basic_auth(user, pass)
52
+ res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
53
+ res.is_a?(Net::HTTPSuccess) ? Digest::SHA512.hexdigest(res.body.to_s) : nil
54
+ end
55
+
56
+ # Returns the published digest at `uri`, or `nil` if it couldn't be fetched.
57
+ def fetch_published_digest(uri)
58
+ res = Net::HTTP.get_response(uri)
59
+ return nil unless res.is_a?(Net::HTTPSuccess)
60
+ # Remove final newline from .txt file
61
+ digest = res.body.to_s.strip
62
+ digest.match?(DIGEST_PATTERN) ? digest : nil
63
+ end
64
+ end
65
+
7
66
  desc "Get the checksum of a graphql-pro version and compare it to published versions on GitHub and graphql-ruby.org"
8
67
  task "graphql:pro:validate", [:gem_version] do |t, args|
9
- version = args[:gem_version]
10
- if version.nil?
68
+ if args[:gem_version].nil?
11
69
  raise ArgumentError, "A specific version is required, eg `rake graphql:pro:validate[1.12.0]`"
12
70
  end
71
+ version = Validate.normalize_version(args[:gem_version])
72
+ if version.nil?
73
+ raise ArgumentError, "Invalid version #{args[:gem_version].inspect}, expected a gem version like `rake graphql:pro:validate[1.12.0]`"
74
+ end
13
75
  check = "\e[32m✓\e[0m"
14
76
  ex = "\e[31m✘\e[0m"
15
77
  puts "Validating graphql-pro v#{version}"
16
78
  puts " - Checking for graphql-pro credentials..."
17
79
 
18
- creds = `bundle config gems.graphql.pro --parseable`[/[a-z0-9]{11}:[a-z0-9]{11}/]
80
+ creds = Validate.credentials
19
81
  if creds.nil?
20
82
  puts " #{ex} failed, please set with `bundle config gems.graphql.pro $MY_CREDENTIALS`"
21
83
  exit(1)
@@ -24,8 +86,8 @@ module GraphQL
24
86
  end
25
87
 
26
88
  puts " - Fetching the gem..."
27
- fetch_result = `gem fetch graphql-pro -v #{version} --source https://#{creds}@gems.graphql.pro`
28
- if fetch_result.empty?
89
+ gem_digest = Validate.fetch_gem_digest(version, creds)
90
+ if gem_digest.nil?
29
91
  puts " #{ex} failed to fetch v#{version}"
30
92
  exit(1)
31
93
  else
@@ -33,15 +95,8 @@ module GraphQL
33
95
  end
34
96
 
35
97
  puts " - Validating digest..."
36
- require "digest/sha2"
37
- gem_digest = Digest::SHA512.new.hexdigest(File.read("graphql-pro-#{version}.gem"))
38
- require "net/http"
39
- github_uri = URI("https://raw.githubusercontent.com/rmosolgo/graphql-ruby/master/guides/pro/checksums/graphql-pro-#{version}.txt")
40
- # Remove final newline from .txt file
41
- github_digest = Net::HTTP.get(github_uri).chomp
42
-
43
- docs_uri = URI("https://graphql-ruby.org/pro/checksums/graphql-pro-#{version}.txt")
44
- docs_digest = Net::HTTP.get(docs_uri).chomp
98
+ github_digest = Validate.fetch_published_digest(URI("https://raw.githubusercontent.com/rmosolgo/graphql-ruby/master/guides/pro/checksums/graphql-pro-#{version}.txt"))
99
+ docs_digest = Validate.fetch_published_digest(URI("https://graphql-ruby.org/pro/checksums/graphql-pro-#{version}.txt"))
45
100
 
46
101
  if docs_digest == gem_digest && github_digest == gem_digest
47
102
  puts " #{check} validated from GitHub"
@@ -49,11 +104,11 @@ module GraphQL
49
104
  else
50
105
  puts " #{ex} SHA mismatch:"
51
106
  puts " Downloaded: #{gem_digest}"
52
- puts " GitHub: #{github_digest}"
53
- puts " graphql-ruby.org: #{docs_digest}"
107
+ puts " GitHub: #{github_digest || "(not found)"}"
108
+ puts " graphql-ruby.org: #{docs_digest || "(not found)"}"
54
109
  puts ""
55
110
  puts " This download of graphql-pro is invalid, please open an issue:"
56
- puts " https://github.com/rmosolgo/graphql-ruby/issues/new?title=graphql-pro%20digest%20mismatch%20(#{version})"
111
+ puts " https://github.com/rmosolgo/graphql-ruby/issues/new?title=#{ERB::Util.url_encode("graphql-pro digest mismatch (#{version})")}"
57
112
  exit(1)
58
113
  end
59
114
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require "fileutils"
3
4
  require "rake"
4
5
  require "graphql/rake_task/validate"
@@ -11,21 +12,32 @@ module GraphQL
11
12
  #
12
13
  # Use `load_context:` and `visible?` to dump schemas under certain visibility constraints.
13
14
  #
14
- # @example Dump a Schema to .graphql + .json files
15
- # require "graphql/rake_task"
16
- # GraphQL::RakeTask.new(schema_name: "MySchema")
15
+ # **Examples**
17
16
  #
18
- # # $ rake graphql:schema:dump
19
- # # Schema IDL dumped to ./schema.graphql
20
- # # Schema JSON dumped to ./schema.json
17
+ # **Example: Dump a Schema to .graphql + .json files**
21
18
  #
22
- # @example Invoking the task from Ruby
23
- # require "rake"
24
- # Rake::Task["graphql:schema:dump"].invoke
19
+ # ```ruby
20
+ # require "graphql/rake_task"
21
+ # GraphQL::RakeTask.new(schema_name: "MySchema")
25
22
  #
26
- # @example Providing arguments to build the introspection query
27
- # require "graphql/rake_task"
28
- # GraphQL::RakeTask.new(schema_name: "MySchema", include_is_one_of: true)
23
+ # # $ rake graphql:schema:dump
24
+ # # Schema IDL dumped to ./schema.graphql
25
+ # # Schema JSON dumped to ./schema.json
26
+ # ```
27
+ #
28
+ # **Example: Invoking the task from Ruby**
29
+ #
30
+ # ```ruby
31
+ # require "rake"
32
+ # Rake::Task["graphql:schema:dump"].invoke
33
+ # ```
34
+ #
35
+ # **Example: Providing arguments to build the introspection query**
36
+ #
37
+ # ```ruby
38
+ # require "graphql/rake_task"
39
+ # GraphQL::RakeTask.new(schema_name: "MySchema", include_is_one_of: true)
40
+ # ```
29
41
  class RakeTask
30
42
  include Rake::DSL
31
43
 
@@ -45,37 +57,57 @@ module GraphQL
45
57
  include_is_one_of: false
46
58
  }
47
59
 
48
- # @return [String] Namespace for generated tasks
60
+ # **Returns**
61
+ #
62
+ # - `String` — Namespace for generated tasks
49
63
  attr_writer :namespace
50
64
 
51
65
  def rake_namespace
52
66
  @namespace
53
67
  end
54
68
 
55
- # @return [Array<String>]
69
+ # **Returns**
70
+ #
71
+ # - `Array<String>`
56
72
  attr_accessor :dependencies
57
73
 
58
- # @return [String] By default, used to find the schema as a constant.
59
- # @see {#load_schema} for loading a schema another way
74
+ # See [load_schema](rdoc-ref:#load_schema) for loading a schema another way
75
+ #
76
+ # **Returns**
77
+ #
78
+ # - `String` — By default, used to find the schema as a constant.
60
79
  attr_accessor :schema_name
61
80
 
62
- # @return [<#call(task)>] A proc for loading the target GraphQL schema
81
+ # **Returns**
82
+ #
83
+ # - `<#call(task)>` — A proc for loading the target GraphQL schema
63
84
  attr_accessor :load_schema
64
85
 
65
- # @return [<#call(task)>] A callable for loading the query context
86
+ # **Returns**
87
+ #
88
+ # - `<#call(task)>` — A callable for loading the query context
66
89
  attr_accessor :load_context
67
90
 
68
- # @return [String] target for IDL task
91
+ # **Returns**
92
+ #
93
+ # - `String` — target for IDL task
69
94
  attr_accessor :idl_outfile
70
95
 
71
- # @return [String] target for JSON task
96
+ # **Returns**
97
+ #
98
+ # - `String` — target for JSON task
72
99
  attr_accessor :json_outfile
73
100
 
74
- # @return [String] directory for IDL & JSON files
101
+ # **Returns**
102
+ #
103
+ # - `String` — directory for IDL & JSON files
75
104
  attr_accessor :directory
76
105
 
77
- # @return [Boolean] Options for additional fields in the introspection query JSON response
78
- # @see GraphQL::Schema.as_json
106
+ # See [GraphQL::Schema.as_json](rdoc-ref:GraphQL::Schema.as_json).
107
+ #
108
+ # **Returns**
109
+ #
110
+ # - `Boolean` — Options for additional fields in the introspection query JSON response
79
111
  attr_accessor :include_deprecated_args, :include_schema_description, :include_is_repeatable, :include_specified_by_url, :include_is_one_of
80
112
 
81
113
  # Set the parameters of this task by passing keyword arguments
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Relay
4
5
  # This provides some isolation from `GraphQL::Relay` internals.
@@ -8,32 +9,42 @@ module GraphQL
8
9
  # The connection doesn't receive outside arguments, so the list of items
9
10
  # should be ordered and paginated before providing it here.
10
11
  #
11
- # @example Adding a comment to list of comments
12
- # post = Post.find(args[:post_id])
13
- # comments = post.comments
14
- # new_comment = comments.build(body: args[:body])
15
- # new_comment.save!
12
+ # **Examples**
16
13
  #
17
- # range_add = GraphQL::Relay::RangeAdd.new(
18
- # parent: post,
19
- # collection: comments,
20
- # item: new_comment,
21
- # context: context,
22
- # )
14
+ # **Example: Adding a comment to list of comments**
23
15
  #
24
- # response = {
25
- # post: post,
26
- # comments_connection: range_add.connection,
27
- # new_comment_edge: range_add.edge,
28
- # }
16
+ # ```ruby
17
+ # post = Post.find(args[:post_id])
18
+ # comments = post.comments
19
+ # new_comment = comments.build(body: args[:body])
20
+ # new_comment.save!
21
+ #
22
+ # range_add = GraphQL::Relay::RangeAdd.new(
23
+ # parent: post,
24
+ # collection: comments,
25
+ # item: new_comment,
26
+ # context: context,
27
+ # )
28
+ #
29
+ # response = {
30
+ # post: post,
31
+ # comments_connection: range_add.connection,
32
+ # new_comment_edge: range_add.edge,
33
+ # }
34
+ # ```
29
35
  class RangeAdd
30
36
  attr_reader :edge, :connection, :parent
31
37
 
32
- # @param collection [Object] The list of items to wrap in a connection
33
- # @param item [Object] The newly-added item (will be wrapped in `edge_class`)
34
- # @param context [GraphQL::Query::Context] The surrounding `ctx`, will be passed to the connection
35
- # @param parent [Object] The owner of `collection`, will be passed to the connection if provided
36
- # @param edge_class [Class] The class to wrap `item` with (defaults to the connection's edge class)
38
+ # **Parameters**
39
+ #
40
+ # - `collection` (`Object`) — The list of items to wrap in a connection
41
+ # - `item` (`Object`) — The newly-added item (will be wrapped in `edge_class`)
42
+ # - `context` (`GraphQL::Query::Context`) — The surrounding `ctx`, will be passed to the connection
43
+ # - `parent` (`Object`) — The owner of `collection`, will be passed to the connection if provided
44
+ # - `edge_class` (`Class`) — The class to wrap `item` with (defaults to the connection's edge class)
45
+ #
46
+ # :call-seq:
47
+ # initialize(Object collection:, Object item:, GraphQL::Query::Context context:, Object parent:, Class edge_class:)
37
48
  def initialize(collection:, item:, context:, parent: nil, edge_class: nil)
38
49
  conn_class = context.schema.connections.wrapper_for(collection)
39
50
  # The rest will be added by ConnectionExtension
data/lib/graphql/relay.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require 'graphql/relay/range_add'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require "rubocop"
3
4
 
4
5
  module GraphQL
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require_relative "base_cop"
3
4
 
4
5
  module GraphQL
@@ -11,15 +12,17 @@ module GraphQL
11
12
  # to non-null fields (`null: false`) without a breaking change. (The opposite change, from `null: false`
12
13
  # to `null: true`, change.)
13
14
  #
14
- # @example
15
- # # Both of these define `name: String` in GraphQL:
15
+ # **Examples**
16
16
  #
17
- # # bad
18
- # field :name, String, null: true
17
+ # **Example: # Both of these define `name: String` in GraphQL:**
19
18
  #
20
- # # good
21
- # field :name, String
19
+ # ```ruby
20
+ # # bad
21
+ # field :name, String, null: true
22
22
  #
23
+ # # good
24
+ # field :name, String
25
+ # ```
23
26
  class DefaultNullTrue < BaseCop
24
27
  MSG = "`null: true` is the default and can be removed."
25
28
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require_relative "./base_cop"
3
4
 
4
5
  module GraphQL
@@ -11,15 +12,17 @@ module GraphQL
11
12
  # to optional arguments (`required: false`) without a breaking change. (The opposite change, from `required: false`
12
13
  # to `required: true`, change.)
13
14
  #
14
- # @example
15
- # # Both of these define `id: ID!` in GraphQL:
15
+ # **Examples**
16
16
  #
17
- # # bad
18
- # argument :id, ID, required: true
17
+ # **Example: # Both of these define `id: ID!` in GraphQL:**
19
18
  #
20
- # # good
21
- # argument :id, ID
19
+ # ```ruby
20
+ # # bad
21
+ # argument :id, ID, required: true
22
22
  #
23
+ # # good
24
+ # argument :id, ID
25
+ # ```
23
26
  class DefaultRequiredTrue < BaseCop
24
27
  MSG = "`required: true` is the default and can be removed."
25
28
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require_relative "./base_cop"
3
4
 
4
5
  module GraphQL
@@ -7,15 +8,18 @@ module GraphQL
7
8
  # Identify (and auto-correct) any field whose type configuration isn't given
8
9
  # in the configuration block.
9
10
  #
10
- # @example
11
- # # bad, immediately causes Rails to load `app/graphql/types/thing.rb`
12
- # field :thing, Types::Thing
11
+ # **Examples**
13
12
  #
14
- # # good, defers loading until the file is needed
15
- # field :thing do
16
- # type(Types::Thing)
17
- # end
13
+ # **Example: # bad, immediately causes Rails to load `app/graphql/types/thing.rb`**
18
14
  #
15
+ # ```ruby
16
+ # field :thing, Types::Thing
17
+ #
18
+ # # good, defers loading until the file is needed
19
+ # field :thing do
20
+ # type(Types::Thing)
21
+ # end
22
+ # ```
19
23
  class FieldTypeInBlock < BaseCop
20
24
  MSG = "type configuration can be moved to a block to defer loading the type's file"
21
25
 
@@ -133,7 +137,7 @@ module GraphQL
133
137
  field_indent << " "
134
138
  indent_test_idx -= 1
135
139
  if indent_test_idx == 0
136
- raise "Invariant: somehow backtracted to beginning of class when looking for field indent (source: #{node_source.inspect})"
140
+ raise "Invariant: somehow backtracted to beginning of class when looking for field indent (source: #{type_defn_source.inspect})"
137
141
  end
138
142
  end
139
143
  field_indent
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require_relative "./base_cop"
3
4
 
4
5
  module GraphQL
@@ -6,13 +7,16 @@ module GraphQL
6
7
  module GraphQL
7
8
  # Identify (and auto-correct) any root types in your schema file.
8
9
  #
9
- # @example
10
- # # bad, immediately causes Rails to load `app/graphql/types/query.rb`
11
- # query Types::Query
10
+ # **Examples**
12
11
  #
13
- # # good, defers loading until the file is needed
14
- # query { Types::Query }
12
+ # **Example: # bad, immediately causes Rails to load `app/graphql/types/query.rb`**
15
13
  #
14
+ # ```ruby
15
+ # query Types::Query
16
+ #
17
+ # # good, defers loading until the file is needed
18
+ # query { Types::Query }
19
+ # ```
16
20
  class RootTypesInBlock < BaseCop
17
21
  MSG = "type configuration can be moved to a block to defer loading the type's file"
18
22
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require "graphql/rubocop/graphql/default_null_true"
4
5
  require "graphql/rubocop/graphql/default_required_true"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class RuntimeError < Error
4
5
  include GraphQL::Execution::Finalizer
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  class RuntimeTypeError < GraphQL::Error
4
5
  end