graphql 1.9.21 → 2.0.0

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 (397) 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 +44 -7
  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 +63 -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 +22 -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 +29 -2
  49. data/lib/graphql/analysis/ast/query_complexity.rb +175 -68
  50. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  51. data/lib/graphql/analysis/ast/visitor.rb +17 -8
  52. data/lib/graphql/analysis/ast.rb +14 -14
  53. data/lib/graphql/analysis.rb +0 -7
  54. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  55. data/lib/graphql/backtrace/table.rb +37 -16
  56. data/lib/graphql/backtrace/traced_error.rb +0 -1
  57. data/lib/graphql/backtrace/tracer.rb +39 -9
  58. data/lib/graphql/backtrace.rb +20 -17
  59. data/lib/graphql/dataloader/null_dataloader.rb +22 -0
  60. data/lib/graphql/dataloader/request.rb +19 -0
  61. data/lib/graphql/dataloader/request_all.rb +19 -0
  62. data/lib/graphql/dataloader/source.rb +155 -0
  63. data/lib/graphql/dataloader.rb +308 -0
  64. data/lib/graphql/date_encoding_error.rb +16 -0
  65. data/lib/graphql/deprecation.rb +9 -0
  66. data/lib/graphql/dig.rb +1 -1
  67. data/lib/graphql/execution/directive_checks.rb +2 -2
  68. data/lib/graphql/execution/errors.rb +108 -14
  69. data/lib/graphql/execution/instrumentation.rb +1 -1
  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 +37 -25
  75. data/lib/graphql/execution/interpreter/runtime.rb +715 -387
  76. data/lib/graphql/execution/interpreter.rb +32 -31
  77. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  78. data/lib/graphql/execution/lazy.rb +5 -1
  79. data/lib/graphql/execution/lookahead.rb +32 -114
  80. data/lib/graphql/execution/multiplex.rb +60 -92
  81. data/lib/graphql/execution.rb +11 -3
  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 +27 -17
  96. data/lib/graphql/introspection.rb +99 -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 +99 -63
  102. data/lib/graphql/language/lexer.rb +53 -27
  103. data/lib/graphql/language/lexer.rl +5 -3
  104. data/lib/graphql/language/nodes.rb +64 -93
  105. data/lib/graphql/language/parser.rb +929 -896
  106. data/lib/graphql/language/parser.y +125 -102
  107. data/lib/graphql/language/printer.rb +11 -2
  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 +77 -0
  115. data/lib/graphql/pagination/connection.rb +226 -0
  116. data/lib/graphql/pagination/connections.rb +134 -0
  117. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  118. data/lib/graphql/pagination/relation_connection.rb +226 -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 +51 -190
  123. data/lib/graphql/query/fingerprint.rb +26 -0
  124. data/lib/graphql/query/input_validation_result.rb +23 -6
  125. data/lib/graphql/query/literal_input.rb +26 -11
  126. data/lib/graphql/query/null_context.rb +24 -8
  127. data/lib/graphql/query/validation_pipeline.rb +12 -38
  128. data/lib/graphql/query/variable_validation_error.rb +2 -2
  129. data/lib/graphql/query/variables.rb +26 -9
  130. data/lib/graphql/query.rb +62 -32
  131. data/lib/graphql/railtie.rb +6 -102
  132. data/lib/graphql/rake_task/validate.rb +3 -0
  133. data/lib/graphql/rake_task.rb +12 -9
  134. data/lib/graphql/relay/range_add.rb +23 -9
  135. data/lib/graphql/relay.rb +0 -15
  136. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  137. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  138. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  139. data/lib/graphql/rubocop.rb +4 -0
  140. data/lib/graphql/schema/addition.rb +240 -0
  141. data/lib/graphql/schema/argument.rb +262 -28
  142. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  143. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
  144. data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
  145. data/lib/graphql/schema/build_from_definition.rb +319 -220
  146. data/lib/graphql/schema/built_in_types.rb +5 -5
  147. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  148. data/lib/graphql/schema/directive/feature.rb +1 -1
  149. data/lib/graphql/schema/directive/flagged.rb +57 -0
  150. data/lib/graphql/schema/directive/include.rb +2 -2
  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 +115 -22
  155. data/lib/graphql/schema/enum_value.rb +16 -21
  156. data/lib/graphql/schema/field/connection_extension.rb +46 -20
  157. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  158. data/lib/graphql/schema/field.rb +376 -291
  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 +147 -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 +3 -2
  166. data/lib/graphql/schema/list.rb +46 -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 +23 -14
  170. data/lib/graphql/schema/member/has_arguments.rb +212 -23
  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 +98 -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/type_system_helpers.rb +3 -3
  179. data/lib/graphql/schema/member/validates_input.rb +33 -0
  180. data/lib/graphql/schema/member.rb +11 -6
  181. data/lib/graphql/schema/mutation.rb +4 -9
  182. data/lib/graphql/schema/non_null.rb +34 -4
  183. data/lib/graphql/schema/object.rb +38 -65
  184. data/lib/graphql/schema/printer.rb +16 -35
  185. data/lib/graphql/schema/relay_classic_mutation.rb +57 -32
  186. data/lib/graphql/schema/resolver/has_payload_type.rb +34 -4
  187. data/lib/graphql/schema/resolver.rb +133 -79
  188. data/lib/graphql/schema/scalar.rb +40 -15
  189. data/lib/graphql/schema/subscription.rb +57 -21
  190. data/lib/graphql/schema/timeout.rb +29 -15
  191. data/lib/graphql/schema/type_expression.rb +21 -13
  192. data/lib/graphql/schema/type_membership.rb +19 -5
  193. data/lib/graphql/schema/union.rb +39 -14
  194. data/lib/graphql/schema/unique_within_type.rb +1 -2
  195. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  196. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  197. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  198. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  199. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  200. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  201. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  202. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  203. data/lib/graphql/schema/validator.rb +171 -0
  204. data/lib/graphql/schema/warden.rb +182 -32
  205. data/lib/graphql/schema/wrapper.rb +0 -5
  206. data/lib/graphql/schema.rb +687 -891
  207. data/lib/graphql/static_validation/all_rules.rb +2 -0
  208. data/lib/graphql/static_validation/base_visitor.rb +21 -31
  209. data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
  210. data/lib/graphql/static_validation/error.rb +3 -1
  211. data/lib/graphql/static_validation/literal_validator.rb +51 -26
  212. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +45 -83
  213. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  214. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
  215. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  216. data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -1
  217. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -14
  218. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  219. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
  220. data/lib/graphql/static_validation/rules/fields_will_merge.rb +94 -51
  221. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  222. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  223. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  224. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  225. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  226. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  227. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  228. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  229. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +9 -10
  230. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +1 -1
  231. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
  232. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
  233. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  234. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
  235. data/lib/graphql/static_validation/type_stack.rb +2 -2
  236. data/lib/graphql/static_validation/validation_context.rb +13 -3
  237. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  238. data/lib/graphql/static_validation/validator.rb +31 -19
  239. data/lib/graphql/static_validation.rb +1 -2
  240. data/lib/graphql/string_encoding_error.rb +13 -3
  241. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +123 -22
  242. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  243. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  244. data/lib/graphql/subscriptions/event.rb +85 -31
  245. data/lib/graphql/subscriptions/instrumentation.rb +0 -47
  246. data/lib/graphql/subscriptions/serialize.rb +53 -6
  247. data/lib/graphql/subscriptions.rb +111 -52
  248. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
  249. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  250. data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
  251. data/lib/graphql/tracing/data_dog_tracing.rb +14 -1
  252. data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
  253. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  254. data/lib/graphql/tracing/platform_tracing.rb +57 -29
  255. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
  256. data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +19 -0
  258. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  259. data/lib/graphql/tracing.rb +15 -36
  260. data/lib/graphql/types/big_int.rb +5 -1
  261. data/lib/graphql/types/int.rb +10 -3
  262. data/lib/graphql/types/iso_8601_date.rb +16 -8
  263. data/lib/graphql/types/iso_8601_date_time.rb +32 -10
  264. data/lib/graphql/types/relay/base_connection.rb +6 -88
  265. data/lib/graphql/types/relay/base_edge.rb +2 -34
  266. data/lib/graphql/types/relay/connection_behaviors.rb +170 -0
  267. data/lib/graphql/types/relay/default_relay.rb +21 -0
  268. data/lib/graphql/types/relay/edge_behaviors.rb +64 -0
  269. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  270. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  271. data/lib/graphql/types/relay/node.rb +2 -4
  272. data/lib/graphql/types/relay/node_behaviors.rb +19 -0
  273. data/lib/graphql/types/relay/page_info.rb +2 -14
  274. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay.rb +11 -5
  276. data/lib/graphql/types/string.rb +8 -2
  277. data/lib/graphql/unauthorized_error.rb +2 -2
  278. data/lib/graphql/unresolved_type_error.rb +2 -2
  279. data/lib/graphql/version.rb +1 -1
  280. data/lib/graphql.rb +41 -58
  281. data/readme.md +3 -6
  282. metadata +97 -231
  283. data/lib/graphql/analysis/analyze_query.rb +0 -91
  284. data/lib/graphql/analysis/field_usage.rb +0 -45
  285. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  286. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  287. data/lib/graphql/analysis/query_complexity.rb +0 -88
  288. data/lib/graphql/analysis/query_depth.rb +0 -43
  289. data/lib/graphql/analysis/reducer_state.rb +0 -48
  290. data/lib/graphql/argument.rb +0 -159
  291. data/lib/graphql/authorization.rb +0 -82
  292. data/lib/graphql/backwards_compatibility.rb +0 -60
  293. data/lib/graphql/base_type.rb +0 -226
  294. data/lib/graphql/boolean_type.rb +0 -2
  295. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  296. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  297. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  298. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  299. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  300. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -91
  301. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  302. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  303. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  304. data/lib/graphql/compatibility.rb +0 -5
  305. data/lib/graphql/define/assign_argument.rb +0 -12
  306. data/lib/graphql/define/assign_connection.rb +0 -13
  307. data/lib/graphql/define/assign_enum_value.rb +0 -18
  308. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  309. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  310. data/lib/graphql/define/assign_object_field.rb +0 -42
  311. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  312. data/lib/graphql/define/instance_definable.rb +0 -311
  313. data/lib/graphql/define/no_definition_error.rb +0 -7
  314. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  315. data/lib/graphql/define/type_definer.rb +0 -31
  316. data/lib/graphql/define.rb +0 -31
  317. data/lib/graphql/deprecated_dsl.rb +0 -42
  318. data/lib/graphql/directive/deprecated_directive.rb +0 -13
  319. data/lib/graphql/directive/include_directive.rb +0 -2
  320. data/lib/graphql/directive/skip_directive.rb +0 -2
  321. data/lib/graphql/directive.rb +0 -104
  322. data/lib/graphql/enum_type.rb +0 -193
  323. data/lib/graphql/execution/execute.rb +0 -326
  324. data/lib/graphql/execution/flatten.rb +0 -40
  325. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  326. data/lib/graphql/execution/typecast.rb +0 -50
  327. data/lib/graphql/field/resolve.rb +0 -59
  328. data/lib/graphql/field.rb +0 -330
  329. data/lib/graphql/float_type.rb +0 -2
  330. data/lib/graphql/function.rb +0 -153
  331. data/lib/graphql/id_type.rb +0 -2
  332. data/lib/graphql/input_object_type.rb +0 -154
  333. data/lib/graphql/int_type.rb +0 -2
  334. data/lib/graphql/interface_type.rb +0 -86
  335. data/lib/graphql/internal_representation/document.rb +0 -27
  336. data/lib/graphql/internal_representation/node.rb +0 -206
  337. data/lib/graphql/internal_representation/print.rb +0 -51
  338. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  339. data/lib/graphql/internal_representation/scope.rb +0 -88
  340. data/lib/graphql/internal_representation/visit.rb +0 -36
  341. data/lib/graphql/internal_representation.rb +0 -7
  342. data/lib/graphql/list_type.rb +0 -80
  343. data/lib/graphql/literal_validation_error.rb +0 -6
  344. data/lib/graphql/non_null_type.rb +0 -81
  345. data/lib/graphql/object_type.rb +0 -141
  346. data/lib/graphql/query/arguments.rb +0 -187
  347. data/lib/graphql/query/arguments_cache.rb +0 -25
  348. data/lib/graphql/query/executor.rb +0 -53
  349. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  350. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  351. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  352. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  353. data/lib/graphql/query/serial_execution.rb +0 -39
  354. data/lib/graphql/relay/array_connection.rb +0 -85
  355. data/lib/graphql/relay/base_connection.rb +0 -172
  356. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  357. data/lib/graphql/relay/connection_resolve.rb +0 -43
  358. data/lib/graphql/relay/connection_type.rb +0 -40
  359. data/lib/graphql/relay/edge.rb +0 -27
  360. data/lib/graphql/relay/edge_type.rb +0 -18
  361. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  362. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  363. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  364. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  365. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  366. data/lib/graphql/relay/mutation/result.rb +0 -38
  367. data/lib/graphql/relay/mutation.rb +0 -190
  368. data/lib/graphql/relay/node.rb +0 -36
  369. data/lib/graphql/relay/page_info.rb +0 -7
  370. data/lib/graphql/relay/relation_connection.rb +0 -190
  371. data/lib/graphql/relay/type_extensions.rb +0 -30
  372. data/lib/graphql/scalar_type.rb +0 -133
  373. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  374. data/lib/graphql/schema/default_parse_error.rb +0 -10
  375. data/lib/graphql/schema/default_type_error.rb +0 -15
  376. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  377. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -26
  378. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  379. data/lib/graphql/schema/middleware_chain.rb +0 -82
  380. data/lib/graphql/schema/possible_types.rb +0 -39
  381. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  382. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  383. data/lib/graphql/schema/traversal.rb +0 -228
  384. data/lib/graphql/schema/validation.rb +0 -303
  385. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  386. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  387. data/lib/graphql/string_type.rb +0 -2
  388. data/lib/graphql/subscriptions/subscription_root.rb +0 -74
  389. data/lib/graphql/tracing/skylight_tracing.rb +0 -62
  390. data/lib/graphql/types/relay/base_field.rb +0 -22
  391. data/lib/graphql/types/relay/base_interface.rb +0 -29
  392. data/lib/graphql/types/relay/base_object.rb +0 -26
  393. data/lib/graphql/types/relay/node_field.rb +0 -43
  394. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  395. data/lib/graphql/union_type.rb +0 -135
  396. data/lib/graphql/upgrader/member.rb +0 -936
  397. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Execution
4
- # @api private
5
- module Typecast
6
- # @return [Boolean]
7
- def self.subtype?(parent_type, child_type)
8
- if parent_type == child_type
9
- # Equivalent types are subtypes
10
- true
11
- elsif child_type.is_a?(GraphQL::NonNullType)
12
- # A non-null type is a subtype of a nullable type
13
- # if its inner type is a subtype of that type
14
- if parent_type.is_a?(GraphQL::NonNullType)
15
- subtype?(parent_type.of_type, child_type.of_type)
16
- else
17
- subtype?(parent_type, child_type.of_type)
18
- end
19
- else
20
- case parent_type
21
- when GraphQL::InterfaceType
22
- # A type is a subtype of an interface
23
- # if it implements that interface
24
- case child_type
25
- when GraphQL::ObjectType
26
- child_type.interfaces.include?(parent_type)
27
- else
28
- false
29
- end
30
- when GraphQL::UnionType
31
- # A type is a subtype of that union
32
- # if the union includes that type
33
- parent_type.possible_types.include?(child_type)
34
- when GraphQL::ListType
35
- # A list type is a subtype of another list type
36
- # if its inner type is a subtype of the other inner type
37
- case child_type
38
- when GraphQL::ListType
39
- subtype?(parent_type.of_type, child_type.of_type)
40
- else
41
- false
42
- end
43
- else
44
- false
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Field
4
- # Create resolve procs ahead of time based on a {GraphQL::Field}'s `name`, `property`, and `hash_key` configuration.
5
- module Resolve
6
- module_function
7
-
8
- # @param field [GraphQL::Field] A field that needs a resolve proc
9
- # @return [Proc] A resolver for this field, based on its config
10
- def create_proc(field)
11
- if field.property
12
- MethodResolve.new(field)
13
- elsif !field.hash_key.nil?
14
- HashKeyResolve.new(field.hash_key)
15
- else
16
- NameResolve.new(field)
17
- end
18
- end
19
-
20
- # These only require `obj` as input
21
- class BuiltInResolve
22
- end
23
-
24
- # Resolve the field by `public_send`ing `@method_name`
25
- class MethodResolve < BuiltInResolve
26
- def initialize(field)
27
- @method_name = field.property.to_sym
28
- end
29
-
30
- def call(obj, args, ctx)
31
- obj.public_send(@method_name)
32
- end
33
- end
34
-
35
- # Resolve the field by looking up `@hash_key` with `#[]`
36
- class HashKeyResolve < BuiltInResolve
37
- def initialize(hash_key)
38
- @hash_key = hash_key
39
- end
40
-
41
- def call(obj, args, ctx)
42
- obj[@hash_key]
43
- end
44
- end
45
-
46
- # Call the field's name at query-time since
47
- # it might have changed
48
- class NameResolve < BuiltInResolve
49
- def initialize(field)
50
- @field = field
51
- end
52
-
53
- def call(obj, args, ctx)
54
- obj.public_send(@field.name)
55
- end
56
- end
57
- end
58
- end
59
- end
data/lib/graphql/field.rb DELETED
@@ -1,330 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/field/resolve"
3
-
4
- module GraphQL
5
- # {Field}s belong to {ObjectType}s and {InterfaceType}s.
6
- #
7
- # They're usually created with the `field` helper. If you create it by hand, make sure {#name} is a String.
8
- #
9
- # A field must have a return type, but if you want to defer the return type calculation until later,
10
- # you can pass a proc for the return type. That proc will be called when the schema is defined.
11
- #
12
- # @example Lazy type resolution
13
- # # If the field's type isn't defined yet, you can pass a proc
14
- # field :city, -> { TypeForModelName.find("City") }
15
- #
16
- # For complex field definition, you can pass a block to the `field` helper, eg `field :name do ... end`.
17
- # This block is equivalent to calling `GraphQL::Field.define { ... }`.
18
- #
19
- # @example Defining a field with a block
20
- # field :city, CityType do
21
- # # field definition continues inside the block
22
- # end
23
- #
24
- # ## Resolve
25
- #
26
- # Fields have `resolve` functions to determine their values at query-time.
27
- # The default implementation is to call a method on the object based on the field name.
28
- #
29
- # @example Create a field which calls a method with the same name.
30
- # GraphQL::ObjectType.define do
31
- # field :name, types.String, "The name of this thing "
32
- # end
33
- #
34
- # You can specify a custom proc with the `resolve` helper.
35
- #
36
- # There are some shortcuts for common `resolve` implementations:
37
- # - Provide `property:` to call a method with a different name than the field name
38
- # - Provide `hash_key:` to resolve the field by doing a key lookup, eg `obj[:my_hash_key]`
39
- #
40
- # @example Create a field that calls a different method on the object
41
- # GraphQL::ObjectType.define do
42
- # # use the `property` keyword:
43
- # field :firstName, types.String, property: :first_name
44
- # end
45
- #
46
- # @example Create a field looks up with `[hash_key]`
47
- # GraphQL::ObjectType.define do
48
- # # use the `hash_key` keyword:
49
- # field :firstName, types.String, hash_key: :first_name
50
- # end
51
- #
52
- # ## Arguments
53
- #
54
- # Fields can take inputs; they're called arguments. You can define them with the `argument` helper.
55
- #
56
- # @example Create a field with an argument
57
- # field :students, types[StudentType] do
58
- # argument :grade, types.Int
59
- # resolve ->(obj, args, ctx) {
60
- # Student.where(grade: args[:grade])
61
- # }
62
- # end
63
- #
64
- # They can have default values which will be provided to `resolve` if the query doesn't include a value.
65
- #
66
- # @example Argument with a default value
67
- # field :events, types[EventType] do
68
- # # by default, don't include past events
69
- # argument :includePast, types.Boolean, default_value: false
70
- # resolve ->(obj, args, ctx) {
71
- # args[:includePast] # => false if no value was provided in the query
72
- # # ...
73
- # }
74
- # end
75
- #
76
- # Only certain types maybe used for inputs:
77
- #
78
- # - Scalars
79
- # - Enums
80
- # - Input Objects
81
- # - Lists of those types
82
- #
83
- # Input types may also be non-null -- in that case, the query will fail
84
- # if the input is not present.
85
- #
86
- # ## Complexity
87
- #
88
- # Fields can have _complexity_ values which describe the computation cost of resolving the field.
89
- # You can provide the complexity as a constant with `complexity:` or as a proc, with the `complexity` helper.
90
- #
91
- # @example Custom complexity values
92
- # # Complexity can be a number or a proc.
93
- #
94
- # # Complexity can be defined with a keyword:
95
- # field :expensive_calculation, !types.Int, complexity: 10
96
- #
97
- # # Or inside the block:
98
- # field :expensive_calculation_2, !types.Int do
99
- # complexity ->(ctx, args, child_complexity) { ctx[:current_user].staff? ? 0 : 10 }
100
- # end
101
- #
102
- # @example Calculating the complexity of a list field
103
- # field :items, types[ItemType] do
104
- # argument :limit, !types.Int
105
- # # Multiply the child complexity by the possible items on the list
106
- # complexity ->(ctx, args, child_complexity) { child_complexity * args[:limit] }
107
- # end
108
- #
109
- # @example Creating a field, then assigning it to a type
110
- # name_field = GraphQL::Field.define do
111
- # name("Name")
112
- # type(!types.String)
113
- # description("The name of this thing")
114
- # resolve ->(object, arguments, context) { object.name }
115
- # end
116
- #
117
- # NamedType = GraphQL::ObjectType.define do
118
- # # The second argument may be a GraphQL::Field
119
- # field :name, name_field
120
- # end
121
- #
122
- class Field
123
- include GraphQL::Define::InstanceDefinable
124
- accepts_definitions :name, :description, :deprecation_reason,
125
- :resolve, :lazy_resolve,
126
- :type, :arguments,
127
- :property, :hash_key, :complexity,
128
- :mutation, :function,
129
- :edge_class,
130
- :relay_node_field,
131
- :relay_nodes_field,
132
- :subscription_scope,
133
- :trace,
134
- :introspection,
135
- argument: GraphQL::Define::AssignArgument
136
-
137
- ensure_defined(
138
- :name, :deprecation_reason, :description, :description=, :property, :hash_key,
139
- :mutation, :arguments, :complexity, :function,
140
- :resolve, :resolve=, :lazy_resolve, :lazy_resolve=, :lazy_resolve_proc, :resolve_proc,
141
- :type, :type=, :name=, :property=, :hash_key=,
142
- :relay_node_field, :relay_nodes_field, :edges?, :edge_class, :subscription_scope,
143
- :introspection?
144
- )
145
-
146
- # @return [Boolean] True if this is the Relay find-by-id field
147
- attr_accessor :relay_node_field
148
-
149
- # @return [Boolean] True if this is the Relay find-by-ids field
150
- attr_accessor :relay_nodes_field
151
-
152
- # @return [<#call(obj, args, ctx)>] A proc-like object which can be called to return the field's value
153
- attr_reader :resolve_proc
154
-
155
- # @return [<#call(obj, args, ctx)>] A proc-like object which can be called trigger a lazy resolution
156
- attr_reader :lazy_resolve_proc
157
-
158
- # @return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
159
- attr_reader :name
160
- alias :graphql_name :name
161
-
162
- # @return [String, nil] The client-facing description of this field
163
- attr_accessor :description
164
-
165
- # @return [String, nil] The client-facing reason why this field is deprecated (if present, the field is deprecated)
166
- attr_accessor :deprecation_reason
167
-
168
- # @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
169
- attr_accessor :arguments
170
-
171
- # @return [GraphQL::Relay::Mutation, nil] The mutation this field was derived from, if it was derived from a mutation
172
- attr_accessor :mutation
173
-
174
- # @return [Numeric, Proc] The complexity for this field (default: 1), as a constant or a proc like `->(query_ctx, args, child_complexity) { } # Numeric`
175
- attr_accessor :complexity
176
-
177
- # @return [Symbol, nil] The method to call on `obj` to return this field (overrides {#name} if present)
178
- attr_reader :property
179
-
180
- # @return [Object, nil] The key to access with `obj.[]` to resolve this field (overrides {#name} if present)
181
- attr_reader :hash_key
182
-
183
- # @return [Object, GraphQL::Function] The function used to derive this field
184
- attr_accessor :function
185
-
186
- attr_accessor :arguments_class
187
-
188
- attr_writer :connection
189
- attr_writer :introspection
190
-
191
- # @return [nil, String] Prefix for subscription names from this field
192
- attr_accessor :subscription_scope
193
-
194
- # @return [Boolean] True if this field should be traced. By default, fields are only traced if they are not a ScalarType or EnumType.
195
- attr_accessor :trace
196
-
197
- attr_accessor :ast_node
198
-
199
- # @return [Boolean]
200
- def connection?
201
- @connection
202
- end
203
-
204
- # @return [nil, Class]
205
- # @api private
206
- attr_accessor :edge_class
207
-
208
- # @return [Boolean]
209
- def edges?
210
- !!@edge_class
211
- end
212
-
213
- # @return [nil, Integer]
214
- attr_accessor :connection_max_page_size
215
-
216
- def initialize
217
- @complexity = 1
218
- @arguments = {}
219
- @resolve_proc = build_default_resolver
220
- @lazy_resolve_proc = DefaultLazyResolve
221
- @relay_node_field = false
222
- @connection = false
223
- @connection_max_page_size = nil
224
- @edge_class = nil
225
- @trace = nil
226
- @introspection = false
227
- end
228
-
229
- def initialize_copy(other)
230
- ensure_defined
231
- super
232
- @arguments = other.arguments.dup
233
- end
234
-
235
- # @return [Boolean] Is this field a predefined introspection field?
236
- def introspection?
237
- @introspection
238
- end
239
-
240
- # Get a value for this field
241
- # @example resolving a field value
242
- # field.resolve(obj, args, ctx)
243
- #
244
- # @param object [Object] The object this field belongs to
245
- # @param arguments [Hash] Arguments declared in the query
246
- # @param context [GraphQL::Query::Context]
247
- def resolve(object, arguments, context)
248
- resolve_proc.call(object, arguments, context)
249
- end
250
-
251
- # Provide a new callable for this field's resolve function. If `nil`,
252
- # a new resolve proc will be build based on its {#name}, {#property} or {#hash_key}.
253
- # @param new_resolve_proc [<#call(obj, args, ctx)>, nil]
254
- def resolve=(new_resolve_proc)
255
- @resolve_proc = new_resolve_proc || build_default_resolver
256
- end
257
-
258
- def type=(new_return_type)
259
- @clean_type = nil
260
- @dirty_type = new_return_type
261
- end
262
-
263
- # Get the return type for this field.
264
- def type
265
- @clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
266
- end
267
-
268
- def name=(new_name)
269
- old_name = @name
270
- @name = new_name
271
-
272
- if old_name != new_name && @resolve_proc.is_a?(Field::Resolve::NameResolve)
273
- # Since the NameResolve would use the old field name,
274
- # reset resolve proc when the name has changed
275
- self.resolve = nil
276
- end
277
- end
278
-
279
- # @param new_property [Symbol] A method to call to resolve this field. Overrides the existing resolve proc.
280
- def property=(new_property)
281
- @property = new_property
282
- self.resolve = nil # reset resolve proc
283
- end
284
-
285
- # @param new_hash_key [Symbol] A key to access with `#[key]` to resolve this field. Overrides the existing resolve proc.
286
- def hash_key=(new_hash_key)
287
- @hash_key = new_hash_key
288
- self.resolve = nil # reset resolve proc
289
- end
290
-
291
- def to_s
292
- "<Field name:#{name || "not-named"} desc:#{description} resolve:#{resolve_proc}>"
293
- end
294
-
295
- # If {#resolve} returned an object which should be handled lazily,
296
- # this method will be called later to force the object to return its value.
297
- # @param obj [Object] The {#resolve}-provided object, registered with {Schema#lazy_resolve}
298
- # @param args [GraphQL::Query::Arguments] Arguments to this field
299
- # @param ctx [GraphQL::Query::Context] Context for this field
300
- # @return [Object] The result of calling the registered method on `obj`
301
- def lazy_resolve(obj, args, ctx)
302
- @lazy_resolve_proc.call(obj, args, ctx)
303
- end
304
-
305
- # Assign a new resolve proc to this field. Used for {#lazy_resolve}
306
- def lazy_resolve=(new_lazy_resolve_proc)
307
- @lazy_resolve_proc = new_lazy_resolve_proc
308
- end
309
-
310
- # Prepare a lazy value for this field. It may be `then`-ed and resolved later.
311
- # @return [GraphQL::Execution::Lazy] A lazy wrapper around `obj` and its registered method name
312
- def prepare_lazy(obj, args, ctx)
313
- GraphQL::Execution::Lazy.new {
314
- lazy_resolve(obj, args, ctx)
315
- }
316
- end
317
-
318
- private
319
-
320
- def build_default_resolver
321
- GraphQL::Field::Resolve.create_proc(self)
322
- end
323
-
324
- module DefaultLazyResolve
325
- def self.call(obj, args, ctx)
326
- ctx.schema.sync_lazy(obj)
327
- end
328
- end
329
- end
330
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::FLOAT_TYPE = GraphQL::Types::Float.graphql_definition
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # A reusable container for field logic, including arguments, resolve, return type, and documentation.
4
- #
5
- # Class-level values defined with the DSL will be inherited,
6
- # so {GraphQL::Function}s can extend one another.
7
- #
8
- # It's OK to override the instance methods here in order to customize behavior of instances.
9
- #
10
- # @example A reusable GraphQL::Function attached as a field
11
- # class FindRecord < GraphQL::Function
12
- # attr_reader :type
13
- #
14
- # def initialize(model:, type:)
15
- # @model = model
16
- # @type = type
17
- # end
18
- #
19
- # argument :id, GraphQL::ID_TYPE
20
- #
21
- # def call(obj, args, ctx)
22
- # @model.find(args.id)
23
- # end
24
- # end
25
- #
26
- # QueryType = GraphQL::ObjectType.define do
27
- # name "Query"
28
- # field :post, function: FindRecord.new(model: Post, type: PostType)
29
- # field :comment, function: FindRecord.new(model: Comment, type: CommentType)
30
- # end
31
- #
32
- # @see {GraphQL::Schema::Resolver} for a replacement for `GraphQL::Function`
33
- class Function
34
- # @return [Hash<String => GraphQL::Argument>] Arguments, keyed by name
35
- def arguments
36
- self.class.arguments
37
- end
38
-
39
- # @return [GraphQL::BaseType] Return type
40
- def type
41
- self.class.type
42
- end
43
-
44
- # @return [Object] This function's resolver
45
- def call(obj, args, ctx)
46
- raise GraphQL::RequiredImplementationMissingError
47
- end
48
-
49
- # @return [String, nil]
50
- def description
51
- self.class.description
52
- end
53
-
54
- # @return [String, nil]
55
- def deprecation_reason
56
- self.class.deprecation_reason
57
- end
58
-
59
- # @return [Integer, Proc]
60
- def complexity
61
- self.class.complexity || 1
62
- end
63
-
64
- class << self
65
- # Define an argument for this function & its subclasses
66
- # @see {GraphQL::Field} same arguments as the `argument` definition helper
67
- # @return [void]
68
- def argument(*args, **kwargs, &block)
69
- argument = GraphQL::Argument.from_dsl(*args, **kwargs, &block)
70
- own_arguments[argument.name] = argument
71
- nil
72
- end
73
-
74
- # @return [Hash<String => GraphQL::Argument>] Arguments for this function class, including inherited arguments
75
- def arguments
76
- if parent_function?
77
- own_arguments.merge(superclass.arguments)
78
- else
79
- own_arguments.dup
80
- end
81
- end
82
-
83
- # Provides shorthand access to GraphQL's built-in types
84
- def types
85
- GraphQL::Define::TypeDefiner.instance
86
- end
87
-
88
- # Get or set the return type for this function class & descendants
89
- # @return [GraphQL::BaseType]
90
- def type(premade_type = nil, &block)
91
- if block_given?
92
- @type = GraphQL::ObjectType.define(&block)
93
- elsif premade_type
94
- @type = premade_type
95
- elsif parent_function?
96
- @type || superclass.type
97
- else
98
- @type
99
- end
100
- end
101
-
102
- def build_field(function)
103
- GraphQL::Field.define(
104
- arguments: function.arguments,
105
- complexity: function.complexity,
106
- type: function.type,
107
- resolve: function,
108
- description: function.description,
109
- function: function,
110
- deprecation_reason: function.deprecation_reason,
111
- )
112
- end
113
-
114
- # Class-level reader/writer which is inherited
115
- # @api private
116
- def self.inherited_value(name)
117
- self.class_eval <<-RUBY
118
- def #{name}(new_value = nil)
119
- if new_value
120
- @#{name} = new_value
121
- elsif parent_function?
122
- @#{name} || superclass.#{name}
123
- else
124
- @#{name}
125
- end
126
- end
127
- RUBY
128
- end
129
-
130
- # @!method description(new_value = nil)
131
- # Get or set this class's description
132
- inherited_value(:description)
133
- # @!method deprecation_reason(new_value = nil)
134
- # Get or set this class's deprecation_reason
135
- inherited_value(:deprecation_reason)
136
- # @!method complexity(new_value = nil)
137
- # Get or set this class's complexity
138
- inherited_value(:complexity)
139
-
140
- private
141
-
142
- # Does this function inherit from another function?
143
- def parent_function?
144
- superclass <= GraphQL::Function
145
- end
146
-
147
- # Arguments defined on this class (not superclasses)
148
- def own_arguments
149
- @own_arguments ||= {}
150
- end
151
- end
152
- end
153
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::ID_TYPE = GraphQL::Types::ID.graphql_definition