graphql 1.9.21 → 2.0.16

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.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (403) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +21 -10
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +45 -8
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +49 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  25. data/lib/generators/graphql/templates/base_field.erb +2 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  28. data/lib/generators/graphql/templates/base_object.erb +2 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  30. data/lib/generators/graphql/templates/base_union.erb +2 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +2 -0
  36. data/lib/generators/graphql/templates/mutation.erb +3 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +9 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +3 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +25 -27
  45. data/lib/generators/graphql/templates/union.erb +6 -2
  46. data/lib/generators/graphql/type_generator.rb +47 -10
  47. data/lib/generators/graphql/union_generator.rb +5 -5
  48. data/lib/graphql/analysis/ast/field_usage.rb +31 -2
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +175 -68
  51. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  52. data/lib/graphql/analysis/ast/visitor.rb +17 -8
  53. data/lib/graphql/analysis/ast.rb +14 -14
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  56. data/lib/graphql/backtrace/table.rb +37 -16
  57. data/lib/graphql/backtrace/traced_error.rb +0 -1
  58. data/lib/graphql/backtrace/tracer.rb +39 -9
  59. data/lib/graphql/backtrace.rb +20 -17
  60. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  61. data/lib/graphql/dataloader/request.rb +19 -0
  62. data/lib/graphql/dataloader/request_all.rb +19 -0
  63. data/lib/graphql/dataloader/source.rb +164 -0
  64. data/lib/graphql/dataloader.rb +311 -0
  65. data/lib/graphql/date_encoding_error.rb +16 -0
  66. data/lib/graphql/deprecation.rb +9 -0
  67. data/lib/graphql/dig.rb +1 -1
  68. data/lib/graphql/execution/directive_checks.rb +2 -2
  69. data/lib/graphql/execution/errors.rb +77 -45
  70. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  71. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  72. data/lib/graphql/execution/interpreter/arguments_cache.rb +105 -0
  73. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  74. data/lib/graphql/execution/interpreter/resolve.rb +44 -25
  75. data/lib/graphql/execution/interpreter/runtime.rb +755 -395
  76. data/lib/graphql/execution/interpreter.rb +201 -74
  77. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  78. data/lib/graphql/execution/lazy.rb +5 -9
  79. data/lib/graphql/execution/lookahead.rb +65 -136
  80. data/lib/graphql/execution/multiplex.rb +5 -152
  81. data/lib/graphql/execution.rb +11 -4
  82. data/lib/graphql/filter.rb +1 -1
  83. data/lib/graphql/integer_decoding_error.rb +17 -0
  84. data/lib/graphql/integer_encoding_error.rb +18 -2
  85. data/lib/graphql/introspection/base_object.rb +2 -5
  86. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  87. data/lib/graphql/introspection/directive_type.rb +11 -5
  88. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  89. data/lib/graphql/introspection/entry_points.rb +5 -18
  90. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  91. data/lib/graphql/introspection/field_type.rb +9 -5
  92. data/lib/graphql/introspection/input_value_type.rb +41 -11
  93. data/lib/graphql/introspection/introspection_query.rb +6 -92
  94. data/lib/graphql/introspection/schema_type.rb +10 -10
  95. data/lib/graphql/introspection/type_type.rb +34 -17
  96. data/lib/graphql/introspection.rb +100 -0
  97. data/lib/graphql/invalid_null_error.rb +18 -0
  98. data/lib/graphql/language/block_string.rb +20 -5
  99. data/lib/graphql/language/cache.rb +37 -0
  100. data/lib/graphql/language/definition_slice.rb +21 -10
  101. data/lib/graphql/language/document_from_schema_definition.rb +104 -68
  102. data/lib/graphql/language/lexer.rb +83 -40
  103. data/lib/graphql/language/lexer.rl +31 -9
  104. data/lib/graphql/language/nodes.rb +64 -93
  105. data/lib/graphql/language/parser.rb +940 -896
  106. data/lib/graphql/language/parser.y +130 -103
  107. data/lib/graphql/language/printer.rb +48 -23
  108. data/lib/graphql/language/sanitized_printer.rb +222 -0
  109. data/lib/graphql/language/token.rb +0 -4
  110. data/lib/graphql/language/visitor.rb +2 -2
  111. data/lib/graphql/language.rb +3 -1
  112. data/lib/graphql/name_validator.rb +2 -7
  113. data/lib/graphql/pagination/active_record_relation_connection.rb +85 -0
  114. data/lib/graphql/pagination/array_connection.rb +79 -0
  115. data/lib/graphql/pagination/connection.rb +253 -0
  116. data/lib/graphql/pagination/connections.rb +135 -0
  117. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  118. data/lib/graphql/pagination/relation_connection.rb +228 -0
  119. data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
  120. data/lib/graphql/pagination.rb +6 -0
  121. data/lib/graphql/parse_error.rb +0 -1
  122. data/lib/graphql/query/context.rb +172 -198
  123. data/lib/graphql/query/fingerprint.rb +26 -0
  124. data/lib/graphql/query/input_validation_result.rb +33 -7
  125. data/lib/graphql/query/null_context.rb +21 -8
  126. data/lib/graphql/query/validation_pipeline.rb +16 -38
  127. data/lib/graphql/query/variable_validation_error.rb +3 -3
  128. data/lib/graphql/query/variables.rb +39 -12
  129. data/lib/graphql/query.rb +74 -38
  130. data/lib/graphql/railtie.rb +6 -102
  131. data/lib/graphql/rake_task/validate.rb +4 -1
  132. data/lib/graphql/rake_task.rb +41 -10
  133. data/lib/graphql/relay/range_add.rb +17 -10
  134. data/lib/graphql/relay.rb +0 -15
  135. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  136. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  137. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  138. data/lib/graphql/rubocop.rb +4 -0
  139. data/lib/graphql/schema/addition.rb +245 -0
  140. data/lib/graphql/schema/argument.rb +286 -31
  141. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  142. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
  143. data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
  144. data/lib/graphql/schema/build_from_definition.rb +334 -220
  145. data/lib/graphql/schema/built_in_types.rb +5 -5
  146. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  147. data/lib/graphql/schema/directive/feature.rb +1 -1
  148. data/lib/graphql/schema/directive/flagged.rb +57 -0
  149. data/lib/graphql/schema/directive/include.rb +2 -2
  150. data/lib/graphql/schema/directive/one_of.rb +12 -0
  151. data/lib/graphql/schema/directive/skip.rb +2 -2
  152. data/lib/graphql/schema/directive/transform.rb +14 -2
  153. data/lib/graphql/schema/directive.rb +117 -14
  154. data/lib/graphql/schema/enum.rb +113 -22
  155. data/lib/graphql/schema/enum_value.rb +16 -21
  156. data/lib/graphql/schema/field/connection_extension.rb +50 -20
  157. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  158. data/lib/graphql/schema/field.rb +491 -329
  159. data/lib/graphql/schema/field_extension.rb +89 -2
  160. data/lib/graphql/schema/find_inherited_value.rb +17 -1
  161. data/lib/graphql/schema/finder.rb +16 -14
  162. data/lib/graphql/schema/input_object.rb +182 -60
  163. data/lib/graphql/schema/interface.rb +28 -43
  164. data/lib/graphql/schema/introspection_system.rb +101 -38
  165. data/lib/graphql/schema/late_bound_type.rb +7 -2
  166. data/lib/graphql/schema/list.rb +61 -3
  167. data/lib/graphql/schema/loader.rb +144 -102
  168. data/lib/graphql/schema/member/base_dsl_methods.rb +33 -32
  169. data/lib/graphql/schema/member/build_type.rb +24 -15
  170. data/lib/graphql/schema/member/has_arguments.rb +261 -24
  171. data/lib/graphql/schema/member/has_ast_node.rb +20 -0
  172. data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
  173. data/lib/graphql/schema/member/has_directives.rb +113 -0
  174. data/lib/graphql/schema/member/has_fields.rb +99 -34
  175. data/lib/graphql/schema/member/has_interfaces.rb +88 -0
  176. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  177. data/lib/graphql/schema/member/has_validators.rb +31 -0
  178. data/lib/graphql/schema/member/relay_shortcuts.rb +28 -2
  179. data/lib/graphql/schema/member/type_system_helpers.rb +3 -3
  180. data/lib/graphql/schema/member/validates_input.rb +33 -0
  181. data/lib/graphql/schema/member.rb +11 -6
  182. data/lib/graphql/schema/mutation.rb +4 -9
  183. data/lib/graphql/schema/non_null.rb +34 -4
  184. data/lib/graphql/schema/object.rb +38 -60
  185. data/lib/graphql/schema/printer.rb +16 -35
  186. data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
  187. data/lib/graphql/schema/resolver/has_payload_type.rb +46 -6
  188. data/lib/graphql/schema/resolver.rb +146 -93
  189. data/lib/graphql/schema/scalar.rb +40 -15
  190. data/lib/graphql/schema/subscription.rb +55 -26
  191. data/lib/graphql/schema/timeout.rb +29 -15
  192. data/lib/graphql/schema/type_expression.rb +21 -13
  193. data/lib/graphql/schema/type_membership.rb +22 -5
  194. data/lib/graphql/schema/union.rb +48 -14
  195. data/lib/graphql/schema/unique_within_type.rb +1 -2
  196. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  197. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  198. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  199. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  200. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  201. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  202. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  203. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  204. data/lib/graphql/schema/validator.rb +171 -0
  205. data/lib/graphql/schema/warden.rb +187 -33
  206. data/lib/graphql/schema/wrapper.rb +0 -5
  207. data/lib/graphql/schema.rb +773 -892
  208. data/lib/graphql/static_validation/all_rules.rb +3 -0
  209. data/lib/graphql/static_validation/base_visitor.rb +21 -31
  210. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  211. data/lib/graphql/static_validation/error.rb +3 -1
  212. data/lib/graphql/static_validation/literal_validator.rb +55 -26
  213. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +45 -83
  214. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  215. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
  216. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  217. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  218. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -14
  219. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  220. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
  221. data/lib/graphql/static_validation/rules/fields_will_merge.rb +94 -51
  222. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  223. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  224. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  225. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  226. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  227. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  228. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  229. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  230. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  231. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  232. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +9 -10
  233. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  234. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
  235. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
  236. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  237. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
  238. data/lib/graphql/static_validation/type_stack.rb +2 -2
  239. data/lib/graphql/static_validation/validation_context.rb +13 -3
  240. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  241. data/lib/graphql/static_validation/validator.rb +31 -19
  242. data/lib/graphql/static_validation.rb +1 -2
  243. data/lib/graphql/string_encoding_error.rb +13 -3
  244. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +129 -22
  245. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  246. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  247. data/lib/graphql/subscriptions/event.rb +85 -31
  248. data/lib/graphql/subscriptions/instrumentation.rb +0 -47
  249. data/lib/graphql/subscriptions/serialize.rb +53 -6
  250. data/lib/graphql/subscriptions.rb +137 -57
  251. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
  252. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  253. data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
  254. data/lib/graphql/tracing/data_dog_tracing.rb +34 -2
  255. data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
  256. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  257. data/lib/graphql/tracing/platform_tracing.rb +67 -38
  258. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
  259. data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
  260. data/lib/graphql/tracing/scout_tracing.rb +19 -0
  261. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  262. data/lib/graphql/tracing.rb +15 -36
  263. data/lib/graphql/types/big_int.rb +5 -1
  264. data/lib/graphql/types/int.rb +10 -3
  265. data/lib/graphql/types/iso_8601_date.rb +20 -9
  266. data/lib/graphql/types/iso_8601_date_time.rb +36 -10
  267. data/lib/graphql/types/relay/base_connection.rb +18 -90
  268. data/lib/graphql/types/relay/base_edge.rb +2 -34
  269. data/lib/graphql/types/relay/connection_behaviors.rb +158 -0
  270. data/lib/graphql/types/relay/default_relay.rb +27 -0
  271. data/lib/graphql/types/relay/edge_behaviors.rb +65 -0
  272. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  273. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  274. data/lib/graphql/types/relay/node.rb +2 -4
  275. data/lib/graphql/types/relay/node_behaviors.rb +19 -0
  276. data/lib/graphql/types/relay/page_info.rb +2 -14
  277. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  278. data/lib/graphql/types/relay.rb +11 -5
  279. data/lib/graphql/types/string.rb +8 -2
  280. data/lib/graphql/unauthorized_error.rb +2 -2
  281. data/lib/graphql/unresolved_type_error.rb +2 -2
  282. data/lib/graphql/version.rb +1 -1
  283. data/lib/graphql.rb +41 -58
  284. data/readme.md +3 -6
  285. metadata +103 -237
  286. data/lib/graphql/analysis/analyze_query.rb +0 -91
  287. data/lib/graphql/analysis/field_usage.rb +0 -45
  288. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  289. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  290. data/lib/graphql/analysis/query_complexity.rb +0 -88
  291. data/lib/graphql/analysis/query_depth.rb +0 -43
  292. data/lib/graphql/analysis/reducer_state.rb +0 -48
  293. data/lib/graphql/argument.rb +0 -159
  294. data/lib/graphql/authorization.rb +0 -82
  295. data/lib/graphql/backwards_compatibility.rb +0 -60
  296. data/lib/graphql/base_type.rb +0 -226
  297. data/lib/graphql/boolean_type.rb +0 -2
  298. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  299. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  300. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  301. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  302. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  303. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -91
  304. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  305. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  306. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  307. data/lib/graphql/compatibility.rb +0 -5
  308. data/lib/graphql/define/assign_argument.rb +0 -12
  309. data/lib/graphql/define/assign_connection.rb +0 -13
  310. data/lib/graphql/define/assign_enum_value.rb +0 -18
  311. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  312. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  313. data/lib/graphql/define/assign_object_field.rb +0 -42
  314. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  315. data/lib/graphql/define/instance_definable.rb +0 -311
  316. data/lib/graphql/define/no_definition_error.rb +0 -7
  317. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  318. data/lib/graphql/define/type_definer.rb +0 -31
  319. data/lib/graphql/define.rb +0 -31
  320. data/lib/graphql/deprecated_dsl.rb +0 -42
  321. data/lib/graphql/directive/deprecated_directive.rb +0 -13
  322. data/lib/graphql/directive/include_directive.rb +0 -2
  323. data/lib/graphql/directive/skip_directive.rb +0 -2
  324. data/lib/graphql/directive.rb +0 -104
  325. data/lib/graphql/enum_type.rb +0 -193
  326. data/lib/graphql/execution/execute.rb +0 -326
  327. data/lib/graphql/execution/flatten.rb +0 -40
  328. data/lib/graphql/execution/instrumentation.rb +0 -92
  329. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  330. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  331. data/lib/graphql/execution/typecast.rb +0 -50
  332. data/lib/graphql/field/resolve.rb +0 -59
  333. data/lib/graphql/field.rb +0 -330
  334. data/lib/graphql/float_type.rb +0 -2
  335. data/lib/graphql/function.rb +0 -153
  336. data/lib/graphql/id_type.rb +0 -2
  337. data/lib/graphql/input_object_type.rb +0 -154
  338. data/lib/graphql/int_type.rb +0 -2
  339. data/lib/graphql/interface_type.rb +0 -86
  340. data/lib/graphql/internal_representation/document.rb +0 -27
  341. data/lib/graphql/internal_representation/node.rb +0 -206
  342. data/lib/graphql/internal_representation/print.rb +0 -51
  343. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  344. data/lib/graphql/internal_representation/scope.rb +0 -88
  345. data/lib/graphql/internal_representation/visit.rb +0 -36
  346. data/lib/graphql/internal_representation.rb +0 -7
  347. data/lib/graphql/list_type.rb +0 -80
  348. data/lib/graphql/literal_validation_error.rb +0 -6
  349. data/lib/graphql/non_null_type.rb +0 -81
  350. data/lib/graphql/object_type.rb +0 -141
  351. data/lib/graphql/query/arguments.rb +0 -187
  352. data/lib/graphql/query/arguments_cache.rb +0 -25
  353. data/lib/graphql/query/executor.rb +0 -53
  354. data/lib/graphql/query/literal_input.rb +0 -116
  355. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  356. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  357. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  358. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  359. data/lib/graphql/query/serial_execution.rb +0 -39
  360. data/lib/graphql/relay/array_connection.rb +0 -85
  361. data/lib/graphql/relay/base_connection.rb +0 -172
  362. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  363. data/lib/graphql/relay/connection_resolve.rb +0 -43
  364. data/lib/graphql/relay/connection_type.rb +0 -40
  365. data/lib/graphql/relay/edge.rb +0 -27
  366. data/lib/graphql/relay/edge_type.rb +0 -18
  367. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  368. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  369. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  370. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  371. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  372. data/lib/graphql/relay/mutation/result.rb +0 -38
  373. data/lib/graphql/relay/mutation.rb +0 -190
  374. data/lib/graphql/relay/node.rb +0 -36
  375. data/lib/graphql/relay/page_info.rb +0 -7
  376. data/lib/graphql/relay/relation_connection.rb +0 -190
  377. data/lib/graphql/relay/type_extensions.rb +0 -30
  378. data/lib/graphql/scalar_type.rb +0 -133
  379. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  380. data/lib/graphql/schema/default_parse_error.rb +0 -10
  381. data/lib/graphql/schema/default_type_error.rb +0 -15
  382. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  383. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -26
  384. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  385. data/lib/graphql/schema/middleware_chain.rb +0 -82
  386. data/lib/graphql/schema/possible_types.rb +0 -39
  387. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  388. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  389. data/lib/graphql/schema/traversal.rb +0 -228
  390. data/lib/graphql/schema/validation.rb +0 -303
  391. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  392. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  393. data/lib/graphql/string_type.rb +0 -2
  394. data/lib/graphql/subscriptions/subscription_root.rb +0 -74
  395. data/lib/graphql/tracing/skylight_tracing.rb +0 -62
  396. data/lib/graphql/types/relay/base_field.rb +0 -22
  397. data/lib/graphql/types/relay/base_interface.rb +0 -29
  398. data/lib/graphql/types/relay/base_object.rb +0 -26
  399. data/lib/graphql/types/relay/node_field.rb +0 -43
  400. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  401. data/lib/graphql/union_type.rb +0 -135
  402. data/lib/graphql/upgrader/member.rb +0 -936
  403. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,190 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/relay/mutation/instrumentation"
3
- require "graphql/relay/mutation/resolve"
4
- require "graphql/relay/mutation/result"
5
-
6
- module GraphQL
7
- module Relay
8
- # Define a Relay mutation:
9
- # - give it a name (used for derived inputs & outputs)
10
- # - declare its inputs
11
- # - declare its outputs
12
- # - declare the mutation procedure
13
- #
14
- # `resolve` should return a hash with a key for each of the `return_field`s
15
- #
16
- # Inputs may also contain a `clientMutationId`
17
- #
18
- # @example Updating the name of an item
19
- # UpdateNameMutation = GraphQL::Relay::Mutation.define do
20
- # name "UpdateName"
21
- #
22
- # input_field :name, !types.String
23
- # input_field :itemId, !types.ID
24
- #
25
- # return_field :item, ItemType
26
- #
27
- # resolve ->(inputs, ctx) {
28
- # item = Item.find_by_id(inputs[:id])
29
- # item.update(name: inputs[:name])
30
- # {item: item}
31
- # }
32
- # end
33
- #
34
- # MutationType = GraphQL::ObjectType.define do
35
- # # The mutation object exposes a field:
36
- # field :updateName, field: UpdateNameMutation.field
37
- # end
38
- #
39
- # # Then query it:
40
- # query_string = %|
41
- # mutation updateName {
42
- # updateName(input: {itemId: 1, name: "new name", clientMutationId: "1234"}) {
43
- # item { name }
44
- # clientMutationId
45
- # }|
46
- #
47
- # GraphQL::Query.new(MySchema, query_string).result
48
- # # {"data" => {
49
- # # "updateName" => {
50
- # # "item" => { "name" => "new name"},
51
- # # "clientMutationId" => "1234"
52
- # # }
53
- # # }}
54
- #
55
- # @example Using a GraphQL::Function
56
- # class UpdateAttributes < GraphQL::Function
57
- # attr_reader :model, :return_as, :arguments
58
- #
59
- # def initialize(model:, return_as:, attributes:)
60
- # @model = model
61
- # @arguments = {}
62
- # attributes.each do |name, type|
63
- # arg_name = name.to_s
64
- # @arguments[arg_name] = GraphQL::Argument.define(name: arg_name, type: type)
65
- # end
66
- # @arguments["id"] = GraphQL::Argument.define(name: "id", type: !GraphQL::ID_TYPE)
67
- # @return_as = return_as
68
- # @attributes = attributes
69
- # end
70
- #
71
- # def type
72
- # fn = self
73
- # GraphQL::ObjectType.define do
74
- # name "Update#{fn.model.name}AttributesResponse"
75
- # field :clientMutationId, types.ID
76
- # field fn.return_as.keys[0], fn.return_as.values[0]
77
- # end
78
- # end
79
- #
80
- # def call(obj, args, ctx)
81
- # record = @model.find(args[:inputs][:id])
82
- # new_values = {}
83
- # @attributes.each { |a| new_values[a] = args[a] }
84
- # record.update(new_values)
85
- # { @return_as => record }
86
- # end
87
- # end
88
- #
89
- # UpdateNameMutation = GraphQL::Relay::Mutation.define do
90
- # name "UpdateName"
91
- # function UpdateAttributes.new(model: Item, return_as: { item: ItemType }, attributes: {name: !types.String})
92
- # end
93
-
94
- class Mutation
95
- include GraphQL::Define::InstanceDefinable
96
- accepts_definitions(
97
- :name, :description, :resolve,
98
- :return_type,
99
- :return_interfaces,
100
- input_field: GraphQL::Define::AssignArgument,
101
- return_field: GraphQL::Define::AssignObjectField,
102
- function: GraphQL::Define::AssignMutationFunction,
103
- )
104
- attr_accessor :name, :description, :fields, :arguments
105
- attr_writer :return_type, :return_interfaces
106
-
107
- ensure_defined(
108
- :input_fields, :return_fields, :name, :description,
109
- :fields, :arguments, :return_type,
110
- :return_interfaces, :resolve=,
111
- :field, :result_class, :input_type
112
- )
113
- # For backwards compat, but do we need this separate API?
114
- alias :return_fields :fields
115
- alias :input_fields :arguments
116
-
117
- def initialize
118
- @fields = {}
119
- @arguments = {}
120
- @has_generated_return_type = false
121
- end
122
-
123
- def has_generated_return_type?
124
- # Trigger the generation of the return type, if it is dynamically generated:
125
- return_type
126
- @has_generated_return_type
127
- end
128
-
129
- def resolve=(new_resolve_proc)
130
- @resolve_proc = new_resolve_proc
131
- end
132
-
133
- def field
134
- @field ||= begin
135
- relay_mutation = self
136
- field_resolve_proc = @resolve_proc
137
- GraphQL::Field.define do
138
- type(relay_mutation.return_type)
139
- description(relay_mutation.description)
140
- argument :input, !relay_mutation.input_type
141
- resolve(field_resolve_proc)
142
- mutation(relay_mutation)
143
- end
144
- end
145
- end
146
-
147
- def return_interfaces
148
- @return_interfaces ||= []
149
- end
150
-
151
- def return_type
152
- @return_type ||= begin
153
- @has_generated_return_type = true
154
- relay_mutation = self
155
- GraphQL::ObjectType.define do
156
- name("#{relay_mutation.name}Payload")
157
- description("Autogenerated return type of #{relay_mutation.name}")
158
- field :clientMutationId, types.String, "A unique identifier for the client performing the mutation.", property: :client_mutation_id
159
- interfaces relay_mutation.return_interfaces
160
- relay_mutation.return_fields.each do |name, field_obj|
161
- field name, field: field_obj
162
- end
163
- mutation(relay_mutation)
164
- end
165
- end
166
- end
167
-
168
- def input_type
169
- @input_type ||= begin
170
- relay_mutation = self
171
- input_object_type = GraphQL::InputObjectType.define do
172
- name("#{relay_mutation.name}Input")
173
- description("Autogenerated input type of #{relay_mutation.name}")
174
- input_field :clientMutationId, types.String, "A unique identifier for the client performing the mutation."
175
- mutation(relay_mutation)
176
- end
177
- input_fields.each do |name, arg|
178
- input_object_type.arguments[name] = arg
179
- end
180
-
181
- input_object_type
182
- end
183
- end
184
-
185
- def result_class
186
- @result_class ||= Result.define_subclass(self)
187
- end
188
- end
189
- end
190
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Helpers for working with Relay-specific Node objects.
5
- module Node
6
- # @return [GraphQL::Field] a field for finding objects by their global ID.
7
- def self.field(**kwargs, &block)
8
- # We have to define it fresh each time because
9
- # its name will be modified and its description
10
- # _may_ be modified.
11
- field = GraphQL::Types::Relay::NodeField.graphql_definition
12
-
13
- if kwargs.any? || block
14
- field = field.redefine(**kwargs, &block)
15
- end
16
-
17
- field
18
- end
19
-
20
- def self.plural_field(**kwargs, &block)
21
- field = GraphQL::Types::Relay::NodesField.graphql_definition
22
-
23
- if kwargs.any? || block
24
- field = field.redefine(**kwargs, &block)
25
- end
26
-
27
- field
28
- end
29
-
30
- # @return [GraphQL::InterfaceType] The interface which all Relay types must implement
31
- def self.interface
32
- @interface ||= GraphQL::Types::Relay::Node.graphql_definition
33
- end
34
- end
35
- end
36
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Wrap a Connection and expose its page info
5
- PageInfo = GraphQL::Types::Relay::PageInfo.graphql_definition
6
- end
7
- end
@@ -1,190 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # A connection implementation to expose SQL collection objects.
5
- # It works for:
6
- # - `ActiveRecord::Relation`
7
- # - `Sequel::Dataset`
8
- class RelationConnection < BaseConnection
9
- def cursor_from_node(item)
10
- item_index = paged_nodes.index(item)
11
- if item_index.nil?
12
- raise("Can't generate cursor, item not found in connection: #{item}")
13
- else
14
- offset = item_index + 1 + ((paged_nodes_offset || 0) - (relation_offset(sliced_nodes) || 0))
15
-
16
- if after
17
- offset += offset_from_cursor(after)
18
- elsif before
19
- offset += offset_from_cursor(before) - 1 - sliced_nodes_count
20
- end
21
-
22
- encode(offset.to_s)
23
- end
24
- end
25
-
26
- def has_next_page
27
- if first
28
- if defined?(ActiveRecord::Relation) && nodes.is_a?(ActiveRecord::Relation)
29
- initial_offset = after ? offset_from_cursor(after) : 0
30
- return paged_nodes.length >= first && nodes.offset(first + initial_offset).exists?
31
- end
32
- return paged_nodes.length >= first && sliced_nodes_count > first
33
- end
34
- if GraphQL::Relay::ConnectionType.bidirectional_pagination && last
35
- return sliced_nodes_count >= last
36
- end
37
- false
38
- end
39
-
40
- def has_previous_page
41
- if last
42
- paged_nodes.length >= last && sliced_nodes_count > last
43
- elsif GraphQL::Relay::ConnectionType.bidirectional_pagination && after
44
- # We've already paginated through the collection a bit,
45
- # there are nodes behind us
46
- offset_from_cursor(after) > 0
47
- else
48
- false
49
- end
50
- end
51
-
52
- def first
53
- return @first if defined? @first
54
-
55
- @first = get_limited_arg(:first)
56
- @first = max_page_size if @first && max_page_size && @first > max_page_size
57
- @first
58
- end
59
-
60
- def last
61
- return @last if defined? @last
62
-
63
- @last = get_limited_arg(:last)
64
- @last = max_page_size if @last && max_page_size && @last > max_page_size
65
- @last
66
- end
67
-
68
- private
69
-
70
- # apply first / last limit results
71
- # @return [Array]
72
- def paged_nodes
73
- return @paged_nodes if defined? @paged_nodes
74
-
75
- items = sliced_nodes
76
-
77
- if first
78
- if relation_limit(items).nil? || relation_limit(items) > first
79
- items = items.limit(first)
80
- end
81
- end
82
-
83
- if last
84
- if relation_limit(items)
85
- if last <= relation_limit(items)
86
- offset = (relation_offset(items) || 0) + (relation_limit(items) - last)
87
- items = items.offset(offset).limit(last)
88
- end
89
- else
90
- slice_count = relation_count(items)
91
- offset = (relation_offset(items) || 0) + slice_count - [last, slice_count].min
92
- items = items.offset(offset).limit(last)
93
- end
94
- end
95
-
96
- if max_page_size && !first && !last
97
- if relation_limit(items).nil? || relation_limit(items) > max_page_size
98
- items = items.limit(max_page_size)
99
- end
100
- end
101
-
102
- # Store this here so we can convert the relation to an Array
103
- # (this avoids an extra DB call on Sequel)
104
- @paged_nodes_offset = relation_offset(items)
105
- @paged_nodes = items.to_a
106
- end
107
-
108
- def paged_nodes_offset
109
- paged_nodes && @paged_nodes_offset
110
- end
111
-
112
- def relation_offset(relation)
113
- if relation.respond_to?(:offset_value)
114
- relation.offset_value
115
- else
116
- relation.opts[:offset]
117
- end
118
- end
119
-
120
- def relation_limit(relation)
121
- if relation.respond_to?(:limit_value)
122
- relation.limit_value
123
- else
124
- relation.opts[:limit]
125
- end
126
- end
127
-
128
- # If a relation contains a `.group` clause, a `.count` will return a Hash.
129
- def relation_count(relation)
130
- count_or_hash = if(defined?(ActiveRecord::Relation) && relation.is_a?(ActiveRecord::Relation))
131
- relation.respond_to?(:unscope)? relation.unscope(:order).count(:all) : relation.count(:all)
132
- else # eg, Sequel::Dataset, don't mess up others
133
- relation.count
134
- end
135
- count_or_hash.is_a?(Integer) ? count_or_hash : count_or_hash.length
136
- end
137
-
138
- # Apply cursors to edges
139
- def sliced_nodes
140
- return @sliced_nodes if defined? @sliced_nodes
141
-
142
- @sliced_nodes = nodes
143
-
144
- if after
145
- offset = (relation_offset(@sliced_nodes) || 0) + offset_from_cursor(after)
146
- @sliced_nodes = @sliced_nodes.offset(offset)
147
- end
148
-
149
- if before && after
150
- if offset_from_cursor(after) < offset_from_cursor(before)
151
- @sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - offset_from_cursor(after) - 1)
152
- else
153
- @sliced_nodes = limit_nodes(@sliced_nodes, 0)
154
- end
155
-
156
- elsif before
157
- @sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - 1)
158
- end
159
-
160
- @sliced_nodes
161
- end
162
-
163
- def limit_nodes(sliced_nodes, limit)
164
- if limit > 0 || defined?(ActiveRecord::Relation) && sliced_nodes.is_a?(ActiveRecord::Relation)
165
- sliced_nodes.limit(limit)
166
- else
167
- sliced_nodes.where(false)
168
- end
169
- end
170
-
171
- def sliced_nodes_count
172
- return @sliced_nodes_count if defined? @sliced_nodes_count
173
-
174
- # If a relation contains a `.group` clause, a `.count` will return a Hash.
175
- @sliced_nodes_count = relation_count(sliced_nodes)
176
- end
177
-
178
- def offset_from_cursor(cursor)
179
- decode(cursor).to_i
180
- end
181
- end
182
-
183
- if defined?(ActiveRecord::Relation)
184
- BaseConnection.register_connection_implementation(ActiveRecord::Relation, RelationConnection)
185
- end
186
- if defined?(Sequel::Dataset)
187
- BaseConnection.register_connection_implementation(Sequel::Dataset, RelationConnection)
188
- end
189
- end
190
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Mixin for Relay-related methods in type objects
5
- # (used by BaseType and Schema::Member).
6
- module TypeExtensions
7
- # @return [GraphQL::ObjectType] The default connection type for this object type
8
- def connection_type
9
- @connection_type ||= define_connection
10
- end
11
-
12
- # Define a custom connection type for this object type
13
- # @return [GraphQL::ObjectType]
14
- def define_connection(**kwargs, &block)
15
- GraphQL::Relay::ConnectionType.create_type(self, **kwargs, &block)
16
- end
17
-
18
- # @return [GraphQL::ObjectType] The default edge type for this object type
19
- def edge_type
20
- @edge_type ||= define_edge
21
- end
22
-
23
- # Define a custom edge type for this object type
24
- # @return [GraphQL::ObjectType]
25
- def define_edge(**kwargs, &block)
26
- GraphQL::Relay::EdgeType.create_type(self, **kwargs, &block)
27
- end
28
- end
29
- end
30
- end
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # # GraphQL::ScalarType
4
- #
5
- # Scalars are plain values. They are leaf nodes in a GraphQL query tree.
6
- #
7
- # ## Built-in Scalars
8
- #
9
- # `GraphQL` comes with standard built-in scalars:
10
- #
11
- # |Constant | `.define` helper|
12
- # |-------|--------|
13
- # |`GraphQL::STRING_TYPE` | `types.String`|
14
- # |`GraphQL::INT_TYPE` | `types.Int`|
15
- # |`GraphQL::FLOAT_TYPE` | `types.Float`|
16
- # |`GraphQL::ID_TYPE` | `types.ID`|
17
- # |`GraphQL::BOOLEAN_TYPE` | `types.Boolean`|
18
- #
19
- # (`types` is an instance of `GraphQL::Definition::TypeDefiner`; `.String`, `.Float`, etc are methods which return built-in scalars.)
20
- #
21
- # ## Custom Scalars
22
- #
23
- # You can define custom scalars for your GraphQL server. It requires some special functions:
24
- #
25
- # - `coerce_input` is used to prepare incoming values for GraphQL execution. (Incoming values come from variables or literal values in the query string.)
26
- # - `coerce_result` is used to turn Ruby values _back_ into serializable values for query responses.
27
- #
28
- # @example defining a type for Time
29
- # TimeType = GraphQL::ScalarType.define do
30
- # name "Time"
31
- # description "Time since epoch in seconds"
32
- #
33
- # coerce_input ->(value, ctx) { Time.at(Float(value)) }
34
- # coerce_result ->(value, ctx) { value.to_f }
35
- # end
36
- #
37
- #
38
- # You can customize the error message for invalid input values by raising a `GraphQL::CoercionError` within `coerce_input`:
39
- #
40
- # @example raising a custom error message
41
- # TimeType = GraphQL::ScalarType.define do
42
- # name "Time"
43
- # description "Time since epoch in seconds"
44
- #
45
- # coerce_input ->(value, ctx) do
46
- # begin
47
- # Time.at(Float(value))
48
- # rescue ArgumentError
49
- # raise GraphQL::CoercionError, "cannot coerce `#{value.inspect}` to Float"
50
- # end
51
- # end
52
- #
53
- # coerce_result ->(value, ctx) { value.to_f }
54
- # end
55
- #
56
- # This will result in the message of the `GraphQL::CoercionError` being used in the error response:
57
- #
58
- # @example custom error response
59
- # {"message"=>"cannot coerce `"2"` to Float", "locations"=>[{"line"=>3, "column"=>9}], "fields"=>["arg"]}
60
- #
61
- class ScalarType < GraphQL::BaseType
62
- accepts_definitions :coerce, :coerce_input, :coerce_result
63
- ensure_defined :coerce_non_null_input, :coerce_result
64
-
65
- module NoOpCoerce
66
- def self.call(val, ctx)
67
- val
68
- end
69
- end
70
-
71
- def initialize
72
- super
73
- self.coerce = NoOpCoerce
74
- end
75
-
76
- def coerce=(proc)
77
- self.coerce_input = proc
78
- self.coerce_result = proc
79
- end
80
-
81
- def coerce_input=(coerce_input_fn)
82
- if !coerce_input_fn.nil?
83
- @coerce_input_proc = ensure_two_arg(coerce_input_fn, :coerce_input)
84
- end
85
- end
86
-
87
- def coerce_result(value, ctx = nil)
88
- if ctx.nil?
89
- warn_deprecated_coerce("coerce_isolated_result")
90
- ctx = GraphQL::Query::NullContext
91
- end
92
- @coerce_result_proc.call(value, ctx)
93
- end
94
-
95
- def coerce_result=(coerce_result_fn)
96
- if !coerce_result_fn.nil?
97
- @coerce_result_proc = ensure_two_arg(coerce_result_fn, :coerce_result)
98
- end
99
- end
100
-
101
- def kind
102
- GraphQL::TypeKinds::SCALAR
103
- end
104
-
105
- private
106
-
107
- def ensure_two_arg(callable, method_name)
108
- GraphQL::BackwardsCompatibility.wrap_arity(callable, from: 1, to: 2, name: "#{name}.#{method_name}(val, ctx)")
109
- end
110
-
111
- def coerce_non_null_input(value, ctx)
112
- @coerce_input_proc.call(raw_coercion_input(value), ctx)
113
- end
114
-
115
- def raw_coercion_input(value)
116
- if value.is_a?(GraphQL::Language::Nodes::InputObject)
117
- value.to_h
118
- elsif value.is_a?(Array)
119
- value.map { |element| raw_coercion_input(element) }
120
- else
121
- value
122
- end
123
- end
124
-
125
- def validate_non_null_input(value, ctx)
126
- result = Query::InputValidationResult.new
127
- if value.is_a?(GraphQL::Language::Nodes::Enum) || coerce_non_null_input(value, ctx).nil?
128
- result.add_problem("Could not coerce value #{GraphQL::Language.serialize(value)} to #{name}")
129
- end
130
- result
131
- end
132
- end
133
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- # In early GraphQL versions, errors would be "automatically"
5
- # rescued and replaced with `"Internal error"`. That behavior
6
- # was undesirable but this middleware is offered for people who
7
- # want to preserve it.
8
- #
9
- # It has a couple of differences from the previous behavior:
10
- #
11
- # - Other parts of the query _will_ be run (previously,
12
- # execution would stop when the error was raised and the result
13
- # would have no `"data"` key at all)
14
- # - The entry in {Query::Context#errors} is a {GraphQL::ExecutionError}, _not_
15
- # the originally-raised error.
16
- # - The entry in the `"errors"` key includes the location of the field
17
- # which raised the errors.
18
- #
19
- # @example Use CatchallMiddleware with your schema
20
- # # All errors will be suppressed and replaced with "Internal error" messages
21
- # MySchema.middleware << GraphQL::Schema::CatchallMiddleware
22
- #
23
- module CatchallMiddleware
24
- MESSAGE = "Internal error"
25
-
26
- # Rescue any error and replace it with a {GraphQL::ExecutionError}
27
- # whose message is {MESSAGE}
28
- def self.call(parent_type, parent_object, field_definition, field_args, query_context)
29
- yield
30
- rescue StandardError
31
- GraphQL::ExecutionError.new(MESSAGE)
32
- end
33
- end
34
- end
35
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- module DefaultParseError
5
- def self.call(parse_error, ctx)
6
- ctx.errors.push(parse_error)
7
- end
8
- end
9
- end
10
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- module DefaultTypeError
5
- def self.call(type_error, ctx)
6
- case type_error
7
- when GraphQL::InvalidNullError
8
- ctx.errors << type_error
9
- when GraphQL::UnresolvedTypeError, GraphQL::StringEncodingError, GraphQL::IntegerEncodingError
10
- raise type_error
11
- end
12
- end
13
- end
14
- end
15
- end