graphql 1.12.12 → 2.2.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.

Potentially problematic release.


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

Files changed (392) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +3 -8
  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 +14 -4
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  12. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_generator.rb +5 -30
  14. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  15. data/lib/generators/graphql/object_generator.rb +10 -38
  16. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  17. data/lib/generators/graphql/relay.rb +23 -12
  18. data/lib/generators/graphql/scalar_generator.rb +4 -2
  19. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  20. data/lib/generators/graphql/templates/base_connection.erb +2 -0
  21. data/lib/generators/graphql/templates/base_edge.erb +2 -0
  22. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  23. data/lib/generators/graphql/templates/base_field.erb +2 -0
  24. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  25. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  26. data/lib/generators/graphql/templates/base_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_resolver.erb +6 -0
  28. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  29. data/lib/generators/graphql/templates/base_union.erb +2 -0
  30. data/lib/generators/graphql/templates/enum.erb +5 -1
  31. data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
  32. data/lib/generators/graphql/templates/input.erb +9 -0
  33. data/lib/generators/graphql/templates/interface.erb +4 -2
  34. data/lib/generators/graphql/templates/loader.erb +2 -0
  35. data/lib/generators/graphql/templates/mutation.erb +3 -1
  36. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  37. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  39. data/lib/generators/graphql/templates/node_type.erb +2 -0
  40. data/lib/generators/graphql/templates/object.erb +4 -2
  41. data/lib/generators/graphql/templates/query_type.erb +2 -0
  42. data/lib/generators/graphql/templates/scalar.erb +3 -1
  43. data/lib/generators/graphql/templates/schema.erb +19 -2
  44. data/lib/generators/graphql/templates/union.erb +4 -2
  45. data/lib/generators/graphql/type_generator.rb +46 -10
  46. data/lib/generators/graphql/union_generator.rb +5 -5
  47. data/lib/graphql/analysis/ast/analyzer.rb +7 -0
  48. data/lib/graphql/analysis/ast/field_usage.rb +55 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +88 -140
  51. data/lib/graphql/analysis/ast/query_depth.rb +7 -3
  52. data/lib/graphql/analysis/ast/visitor.rb +50 -42
  53. data/lib/graphql/analysis/ast.rb +26 -23
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/table.rb +4 -22
  56. data/lib/graphql/backtrace/trace.rb +93 -0
  57. data/lib/graphql/backtrace/tracer.rb +8 -6
  58. data/lib/graphql/backtrace.rb +3 -8
  59. data/lib/graphql/coercion_error.rb +1 -9
  60. data/lib/graphql/dataloader/async_dataloader.rb +85 -0
  61. data/lib/graphql/dataloader/null_dataloader.rb +3 -1
  62. data/lib/graphql/dataloader/request.rb +5 -0
  63. data/lib/graphql/dataloader/source.rb +120 -31
  64. data/lib/graphql/dataloader.rb +168 -142
  65. data/lib/graphql/date_encoding_error.rb +16 -0
  66. data/lib/graphql/dig.rb +1 -1
  67. data/lib/graphql/duration_encoding_error.rb +16 -0
  68. data/lib/graphql/execution/errors.rb +12 -81
  69. data/lib/graphql/execution/interpreter/arguments.rb +2 -2
  70. data/lib/graphql/execution/interpreter/arguments_cache.rb +36 -34
  71. data/lib/graphql/execution/interpreter/resolve.rb +32 -2
  72. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +170 -0
  73. data/lib/graphql/execution/interpreter/runtime.rb +414 -341
  74. data/lib/graphql/execution/interpreter.rb +122 -80
  75. data/lib/graphql/execution/lazy.rb +11 -21
  76. data/lib/graphql/execution/lookahead.rb +125 -54
  77. data/lib/graphql/execution/multiplex.rb +4 -172
  78. data/lib/graphql/execution.rb +11 -4
  79. data/lib/graphql/integer_encoding_error.rb +18 -2
  80. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  81. data/lib/graphql/introspection/directive_type.rb +5 -3
  82. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  83. data/lib/graphql/introspection/entry_points.rb +11 -18
  84. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  85. data/lib/graphql/introspection/field_type.rb +3 -3
  86. data/lib/graphql/introspection/input_value_type.rb +10 -4
  87. data/lib/graphql/introspection/schema_type.rb +12 -5
  88. data/lib/graphql/introspection/type_type.rb +25 -12
  89. data/lib/graphql/introspection.rb +6 -2
  90. data/lib/graphql/language/block_string.rb +37 -25
  91. data/lib/graphql/language/definition_slice.rb +1 -1
  92. data/lib/graphql/language/document_from_schema_definition.rb +78 -65
  93. data/lib/graphql/language/lexer.rb +345 -1467
  94. data/lib/graphql/language/nodes.rb +145 -91
  95. data/lib/graphql/language/parser.rb +701 -1921
  96. data/lib/graphql/language/printer.rb +351 -155
  97. data/lib/graphql/language/sanitized_printer.rb +25 -27
  98. data/lib/graphql/language/static_visitor.rb +167 -0
  99. data/lib/graphql/language/token.rb +0 -4
  100. data/lib/graphql/language/visitor.rb +188 -141
  101. data/lib/graphql/language.rb +1 -0
  102. data/lib/graphql/load_application_object_failed_error.rb +5 -1
  103. data/lib/graphql/name_validator.rb +0 -4
  104. data/lib/graphql/pagination/active_record_relation_connection.rb +37 -8
  105. data/lib/graphql/pagination/array_connection.rb +8 -6
  106. data/lib/graphql/pagination/connection.rb +61 -7
  107. data/lib/graphql/pagination/connections.rb +22 -23
  108. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
  109. data/lib/graphql/pagination/relation_connection.rb +60 -28
  110. data/lib/graphql/query/context/scoped_context.rb +101 -0
  111. data/lib/graphql/query/context.rb +109 -189
  112. data/lib/graphql/query/input_validation_result.rb +10 -1
  113. data/lib/graphql/query/null_context.rb +14 -29
  114. data/lib/graphql/query/validation_pipeline.rb +15 -39
  115. data/lib/graphql/query/variable_validation_error.rb +2 -2
  116. data/lib/graphql/query/variables.rb +35 -17
  117. data/lib/graphql/query.rb +78 -65
  118. data/lib/graphql/railtie.rb +8 -109
  119. data/lib/graphql/rake_task/validate.rb +1 -1
  120. data/lib/graphql/rake_task.rb +30 -11
  121. data/lib/graphql/relay/range_add.rb +9 -16
  122. data/lib/graphql/relay.rb +0 -15
  123. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  124. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  125. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  126. data/lib/graphql/rubocop.rb +4 -0
  127. data/lib/graphql/schema/addition.rb +78 -45
  128. data/lib/graphql/schema/always_visible.rb +10 -0
  129. data/lib/graphql/schema/argument.rb +134 -80
  130. data/lib/graphql/schema/base_64_encoder.rb +3 -5
  131. data/lib/graphql/schema/build_from_definition.rb +60 -38
  132. data/lib/graphql/schema/directive/feature.rb +1 -1
  133. data/lib/graphql/schema/directive/flagged.rb +2 -2
  134. data/lib/graphql/schema/directive/include.rb +1 -1
  135. data/lib/graphql/schema/directive/one_of.rb +24 -0
  136. data/lib/graphql/schema/directive/skip.rb +1 -1
  137. data/lib/graphql/schema/directive/specified_by.rb +14 -0
  138. data/lib/graphql/schema/directive/transform.rb +2 -2
  139. data/lib/graphql/schema/directive.rb +33 -21
  140. data/lib/graphql/schema/enum.rb +93 -46
  141. data/lib/graphql/schema/enum_value.rb +4 -21
  142. data/lib/graphql/schema/field/connection_extension.rb +6 -16
  143. data/lib/graphql/schema/field/scope_extension.rb +8 -1
  144. data/lib/graphql/schema/field.rb +432 -337
  145. data/lib/graphql/schema/field_extension.rb +86 -2
  146. data/lib/graphql/schema/find_inherited_value.rb +3 -7
  147. data/lib/graphql/schema/finder.rb +5 -5
  148. data/lib/graphql/schema/has_single_input_argument.rb +156 -0
  149. data/lib/graphql/schema/input_object.rb +88 -90
  150. data/lib/graphql/schema/interface.rb +19 -59
  151. data/lib/graphql/schema/introspection_system.rb +6 -9
  152. data/lib/graphql/schema/late_bound_type.rb +8 -2
  153. data/lib/graphql/schema/list.rb +18 -7
  154. data/lib/graphql/schema/loader.rb +3 -3
  155. data/lib/graphql/schema/member/base_dsl_methods.rb +18 -19
  156. data/lib/graphql/schema/member/build_type.rb +16 -13
  157. data/lib/graphql/schema/member/has_arguments.rb +288 -84
  158. data/lib/graphql/schema/member/has_ast_node.rb +12 -0
  159. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  160. data/lib/graphql/schema/member/has_directives.rb +81 -61
  161. data/lib/graphql/schema/member/has_fields.rb +149 -31
  162. data/lib/graphql/schema/member/has_interfaces.rb +143 -0
  163. data/lib/graphql/schema/member/has_validators.rb +32 -6
  164. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  165. data/lib/graphql/schema/member/scoped.rb +19 -0
  166. data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
  167. data/lib/graphql/schema/member/validates_input.rb +6 -6
  168. data/lib/graphql/schema/member.rb +1 -6
  169. data/lib/graphql/schema/mutation.rb +0 -9
  170. data/lib/graphql/schema/non_null.rb +7 -7
  171. data/lib/graphql/schema/object.rb +30 -119
  172. data/lib/graphql/schema/printer.rb +23 -25
  173. data/lib/graphql/schema/relay_classic_mutation.rb +13 -90
  174. data/lib/graphql/schema/resolver/has_payload_type.rb +46 -11
  175. data/lib/graphql/schema/resolver.rb +101 -102
  176. data/lib/graphql/schema/scalar.rb +20 -21
  177. data/lib/graphql/schema/subscription.rb +45 -17
  178. data/lib/graphql/schema/timeout.rb +25 -29
  179. data/lib/graphql/schema/type_expression.rb +1 -1
  180. data/lib/graphql/schema/type_membership.rb +21 -4
  181. data/lib/graphql/schema/union.rb +15 -15
  182. data/lib/graphql/schema/unique_within_type.rb +1 -1
  183. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  184. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  185. data/lib/graphql/schema/validator/exclusion_validator.rb +3 -1
  186. data/lib/graphql/schema/validator/format_validator.rb +4 -5
  187. data/lib/graphql/schema/validator/inclusion_validator.rb +3 -1
  188. data/lib/graphql/schema/validator/length_validator.rb +5 -3
  189. data/lib/graphql/schema/validator/numericality_validator.rb +13 -2
  190. data/lib/graphql/schema/validator/required_validator.rb +29 -15
  191. data/lib/graphql/schema/validator.rb +35 -27
  192. data/lib/graphql/schema/warden.rb +259 -132
  193. data/lib/graphql/schema/wrapper.rb +0 -5
  194. data/lib/graphql/schema.rb +658 -989
  195. data/lib/graphql/static_validation/all_rules.rb +3 -1
  196. data/lib/graphql/static_validation/base_visitor.rb +14 -28
  197. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  198. data/lib/graphql/static_validation/error.rb +3 -1
  199. data/lib/graphql/static_validation/literal_validator.rb +21 -4
  200. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
  201. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +1 -1
  202. data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
  203. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  204. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  205. data/lib/graphql/static_validation/rules/fields_will_merge.rb +54 -28
  206. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  207. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  208. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  209. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  210. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  211. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  212. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -3
  213. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -4
  214. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  215. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  216. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +13 -7
  217. data/lib/graphql/static_validation/validation_context.rb +16 -6
  218. data/lib/graphql/static_validation/validator.rb +11 -27
  219. data/lib/graphql/static_validation.rb +0 -3
  220. data/lib/graphql/string_encoding_error.rb +13 -3
  221. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +46 -9
  222. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  223. data/lib/graphql/subscriptions/event.rb +75 -37
  224. data/lib/graphql/subscriptions/serialize.rb +25 -3
  225. data/lib/graphql/subscriptions.rb +59 -47
  226. data/lib/graphql/testing/helpers.rb +129 -0
  227. data/lib/graphql/testing.rb +2 -0
  228. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  229. data/lib/graphql/tracing/active_support_notifications_tracing.rb +6 -20
  230. data/lib/graphql/tracing/appoptics_trace.rb +251 -0
  231. data/lib/graphql/tracing/appoptics_tracing.rb +2 -2
  232. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  233. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  234. data/lib/graphql/tracing/data_dog_trace.rb +183 -0
  235. data/lib/graphql/tracing/data_dog_tracing.rb +25 -15
  236. data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +10 -28
  237. data/lib/graphql/tracing/legacy_trace.rb +69 -0
  238. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  239. data/lib/graphql/tracing/notifications_trace.rb +45 -0
  240. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  241. data/lib/graphql/tracing/platform_trace.rb +118 -0
  242. data/lib/graphql/tracing/platform_tracing.rb +46 -49
  243. data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +4 -2
  244. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  245. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  246. data/lib/graphql/tracing/scout_trace.rb +72 -0
  247. data/lib/graphql/tracing/sentry_trace.rb +112 -0
  248. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  249. data/lib/graphql/tracing/trace.rb +76 -0
  250. data/lib/graphql/tracing.rb +20 -41
  251. data/lib/graphql/type_kinds.rb +6 -3
  252. data/lib/graphql/types/big_int.rb +5 -1
  253. data/lib/graphql/types/int.rb +1 -1
  254. data/lib/graphql/types/iso_8601_date.rb +17 -6
  255. data/lib/graphql/types/iso_8601_date_time.rb +12 -1
  256. data/lib/graphql/types/iso_8601_duration.rb +77 -0
  257. data/lib/graphql/types/relay/base_connection.rb +16 -6
  258. data/lib/graphql/types/relay/connection_behaviors.rb +82 -32
  259. data/lib/graphql/types/relay/edge_behaviors.rb +36 -7
  260. data/lib/graphql/types/relay/has_node_field.rb +2 -2
  261. data/lib/graphql/types/relay/has_nodes_field.rb +2 -2
  262. data/lib/graphql/types/relay/node_behaviors.rb +12 -2
  263. data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
  264. data/lib/graphql/types/relay.rb +0 -3
  265. data/lib/graphql/types/string.rb +2 -2
  266. data/lib/graphql/types.rb +1 -0
  267. data/lib/graphql/unauthorized_error.rb +1 -1
  268. data/lib/graphql/version.rb +1 -1
  269. data/lib/graphql.rb +33 -95
  270. data/readme.md +13 -6
  271. metadata +102 -185
  272. data/lib/graphql/analysis/analyze_query.rb +0 -98
  273. data/lib/graphql/analysis/field_usage.rb +0 -45
  274. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  275. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  276. data/lib/graphql/analysis/query_complexity.rb +0 -88
  277. data/lib/graphql/analysis/query_depth.rb +0 -43
  278. data/lib/graphql/analysis/reducer_state.rb +0 -48
  279. data/lib/graphql/argument.rb +0 -131
  280. data/lib/graphql/authorization.rb +0 -82
  281. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  282. data/lib/graphql/backwards_compatibility.rb +0 -61
  283. data/lib/graphql/base_type.rb +0 -230
  284. data/lib/graphql/boolean_type.rb +0 -2
  285. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  286. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  287. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  288. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  289. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  290. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  291. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  292. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  293. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  294. data/lib/graphql/compatibility.rb +0 -5
  295. data/lib/graphql/define/assign_argument.rb +0 -12
  296. data/lib/graphql/define/assign_connection.rb +0 -13
  297. data/lib/graphql/define/assign_enum_value.rb +0 -18
  298. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  299. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  300. data/lib/graphql/define/assign_object_field.rb +0 -42
  301. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  302. data/lib/graphql/define/instance_definable.rb +0 -240
  303. data/lib/graphql/define/no_definition_error.rb +0 -7
  304. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  305. data/lib/graphql/define/type_definer.rb +0 -31
  306. data/lib/graphql/define.rb +0 -31
  307. data/lib/graphql/deprecated_dsl.rb +0 -47
  308. data/lib/graphql/deprecation.rb +0 -13
  309. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  310. data/lib/graphql/directive/include_directive.rb +0 -2
  311. data/lib/graphql/directive/skip_directive.rb +0 -2
  312. data/lib/graphql/directive.rb +0 -111
  313. data/lib/graphql/enum_type.rb +0 -129
  314. data/lib/graphql/execution/execute.rb +0 -333
  315. data/lib/graphql/execution/flatten.rb +0 -40
  316. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  317. data/lib/graphql/execution/typecast.rb +0 -50
  318. data/lib/graphql/field/resolve.rb +0 -59
  319. data/lib/graphql/field.rb +0 -226
  320. data/lib/graphql/filter.rb +0 -53
  321. data/lib/graphql/float_type.rb +0 -2
  322. data/lib/graphql/function.rb +0 -128
  323. data/lib/graphql/id_type.rb +0 -2
  324. data/lib/graphql/input_object_type.rb +0 -138
  325. data/lib/graphql/int_type.rb +0 -2
  326. data/lib/graphql/interface_type.rb +0 -72
  327. data/lib/graphql/internal_representation/document.rb +0 -27
  328. data/lib/graphql/internal_representation/node.rb +0 -206
  329. data/lib/graphql/internal_representation/print.rb +0 -51
  330. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  331. data/lib/graphql/internal_representation/scope.rb +0 -88
  332. data/lib/graphql/internal_representation/visit.rb +0 -36
  333. data/lib/graphql/internal_representation.rb +0 -7
  334. data/lib/graphql/language/lexer.rl +0 -262
  335. data/lib/graphql/language/parser.y +0 -543
  336. data/lib/graphql/list_type.rb +0 -80
  337. data/lib/graphql/non_null_type.rb +0 -71
  338. data/lib/graphql/object_type.rb +0 -130
  339. data/lib/graphql/query/arguments.rb +0 -189
  340. data/lib/graphql/query/arguments_cache.rb +0 -24
  341. data/lib/graphql/query/executor.rb +0 -52
  342. data/lib/graphql/query/literal_input.rb +0 -136
  343. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  344. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  345. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  346. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  347. data/lib/graphql/query/serial_execution.rb +0 -40
  348. data/lib/graphql/relay/array_connection.rb +0 -83
  349. data/lib/graphql/relay/base_connection.rb +0 -189
  350. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  351. data/lib/graphql/relay/connection_resolve.rb +0 -43
  352. data/lib/graphql/relay/connection_type.rb +0 -41
  353. data/lib/graphql/relay/edge.rb +0 -27
  354. data/lib/graphql/relay/edge_type.rb +0 -19
  355. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  356. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  357. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  358. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  359. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  360. data/lib/graphql/relay/mutation/result.rb +0 -38
  361. data/lib/graphql/relay/mutation.rb +0 -106
  362. data/lib/graphql/relay/node.rb +0 -39
  363. data/lib/graphql/relay/page_info.rb +0 -7
  364. data/lib/graphql/relay/relation_connection.rb +0 -188
  365. data/lib/graphql/relay/type_extensions.rb +0 -32
  366. data/lib/graphql/scalar_type.rb +0 -91
  367. data/lib/graphql/schema/base_64_bp.rb +0 -26
  368. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  369. data/lib/graphql/schema/default_parse_error.rb +0 -10
  370. data/lib/graphql/schema/default_type_error.rb +0 -17
  371. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  372. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  373. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  374. data/lib/graphql/schema/middleware_chain.rb +0 -82
  375. data/lib/graphql/schema/possible_types.rb +0 -44
  376. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  377. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  378. data/lib/graphql/schema/traversal.rb +0 -228
  379. data/lib/graphql/schema/validation.rb +0 -313
  380. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  381. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  382. data/lib/graphql/static_validation/type_stack.rb +0 -216
  383. data/lib/graphql/string_type.rb +0 -2
  384. data/lib/graphql/subscriptions/instrumentation.rb +0 -79
  385. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  386. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  387. data/lib/graphql/types/relay/default_relay.rb +0 -27
  388. data/lib/graphql/types/relay/node_field.rb +0 -25
  389. data/lib/graphql/types/relay/nodes_field.rb +0 -27
  390. data/lib/graphql/union_type.rb +0 -115
  391. data/lib/graphql/upgrader/member.rb +0 -937
  392. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -2,6 +2,7 @@
2
2
  module GraphQL
3
3
  module Language
4
4
  module Nodes
5
+ NONE = GraphQL::EmptyObjects::EMPTY_ARRAY
5
6
  # {AbstractNode} is the base class for all nodes in a GraphQL AST.
6
7
  #
7
8
  # It provides some APIs for working with ASTs:
@@ -9,32 +10,36 @@ module GraphQL
9
10
  # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
10
11
  # - `to_query_string` turns an AST node into a GraphQL string
11
12
  class AbstractNode
13
+
12
14
  module DefinitionNode
13
15
  # This AST node's {#line} returns the first line, which may be the description.
14
16
  # @return [Integer] The first line of the definition (not the description)
15
17
  attr_reader :definition_line
16
18
 
17
- def initialize(options = {})
18
- @definition_line = options.delete(:definition_line)
19
- super(options)
19
+ def initialize(definition_line: nil, **_rest)
20
+ @definition_line = definition_line
21
+ super(**_rest)
20
22
  end
21
23
  end
22
24
 
23
- attr_reader :line, :col, :filename
25
+ attr_reader :filename
24
26
 
25
- # Initialize a node by extracting its position,
26
- # then calling the class's `initialize_node` method.
27
- # @param options [Hash] Initial attributes for this node
28
- def initialize(options = {})
29
- if options.key?(:position_source)
30
- position_source = options.delete(:position_source)
31
- @line = position_source.line
32
- @col = position_source.col
33
- end
27
+ def line
28
+ @line ||= (@source_string && @pos) ? @source_string[0..@pos].count("\n") + 1 : nil
29
+ end
34
30
 
35
- @filename = options.delete(:filename)
31
+ def col
32
+ @col ||= if @source_string && @pos
33
+ if @pos == 0
34
+ 1
35
+ else
36
+ @source_string[0..@pos].split("\n").last.length
37
+ end
38
+ end
39
+ end
36
40
 
37
- initialize_node(**options)
41
+ def definition_line
42
+ @definition_line ||= (@source_string && @definition_pos) ? @source_string[0..@definition_pos].count("\n") + 1 : nil
38
43
  end
39
44
 
40
45
  # Value equality
@@ -46,7 +51,7 @@ module GraphQL
46
51
  other.children == self.children
47
52
  end
48
53
 
49
- NO_CHILDREN = [].freeze
54
+ NO_CHILDREN = GraphQL::EmptyObjects::EMPTY_ARRAY
50
55
 
51
56
  # @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
52
57
  def children
@@ -141,18 +146,26 @@ module GraphQL
141
146
  .gsub(/([a-z])([A-Z])/,'\1_\2') # insert underscores
142
147
  .downcase # remove caps
143
148
 
144
- child_class.module_eval <<-RUBY
149
+ child_class.module_eval <<-RUBY, __FILE__, __LINE__
145
150
  def visit_method
146
151
  :on_#{name_underscored}
147
152
  end
148
153
 
149
154
  class << self
150
155
  attr_accessor :children_method_name
156
+
157
+ def visit_method
158
+ :on_#{name_underscored}
159
+ end
151
160
  end
152
161
  self.children_method_name = :#{name_underscored}s
153
162
  RUBY
154
163
  end
155
164
 
165
+ def children_of_type
166
+ @children_methods
167
+ end
168
+
156
169
  private
157
170
 
158
171
  # Name accessors which return lists of nodes,
@@ -183,8 +196,8 @@ module GraphQL
183
196
  module_eval <<-RUBY, __FILE__, __LINE__
184
197
  # Singular method: create a node with these options
185
198
  # and return a new `self` which includes that node in this list.
186
- def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
187
- merge(#{method_name}: #{method_name} + [#{node_type.name}.new(node_opts)])
199
+ def merge_#{method_name.to_s.sub(/s$/, "")}(**node_opts)
200
+ merge(#{method_name}: #{method_name} + [#{node_type.name}.new(**node_opts)])
188
201
  end
189
202
  RUBY
190
203
  end
@@ -197,20 +210,30 @@ module GraphQL
197
210
  else
198
211
  module_eval <<-RUBY, __FILE__, __LINE__
199
212
  def children
200
- @children ||= (#{children_of_type.keys.map { |k| "@#{k}" }.join(" + ")}).freeze
213
+ @children ||= begin
214
+ if #{children_of_type.keys.map { |k| "@#{k}.any?" }.join(" || ")}
215
+ new_children = []
216
+ #{children_of_type.keys.map { |k| "new_children.concat(@#{k})" }.join("; ")}
217
+ new_children.freeze
218
+ new_children
219
+ else
220
+ NO_CHILDREN
221
+ end
222
+ end
201
223
  end
202
224
  RUBY
203
225
  end
204
226
  end
205
227
 
206
228
  if defined?(@scalar_methods)
207
- if !method_defined?(:initialize_node)
208
- generate_initialize_node
229
+ if !@initialize_was_generated
230
+ @initialize_was_generated = true
231
+ generate_initialize
209
232
  else
210
233
  # This method was defined manually
211
234
  end
212
235
  else
213
- raise "Can't generate_initialize_node because scalar_methods wasn't called; call it before children_methods"
236
+ raise "Can't generate_initialize because scalar_methods wasn't called; call it before children_methods"
214
237
  end
215
238
  end
216
239
 
@@ -239,7 +262,15 @@ module GraphQL
239
262
  end
240
263
  end
241
264
 
242
- def generate_initialize_node
265
+ DEFAULT_INITIALIZE_OPTIONS = [
266
+ "line: nil",
267
+ "col: nil",
268
+ "pos: nil",
269
+ "filename: nil",
270
+ "source_string: nil",
271
+ ]
272
+
273
+ def generate_initialize
243
274
  scalar_method_names = @scalar_methods
244
275
  # TODO: These probably should be scalar methods, but `types` returns an array
245
276
  [:types, :description].each do |extra_method|
@@ -255,15 +286,33 @@ module GraphQL
255
286
  return
256
287
  else
257
288
  arguments = scalar_method_names.map { |m| "#{m}: nil"} +
258
- @children_methods.keys.map { |m| "#{m}: NO_CHILDREN" }
289
+ @children_methods.keys.map { |m| "#{m}: NO_CHILDREN" } +
290
+ DEFAULT_INITIALIZE_OPTIONS
259
291
 
260
292
  assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
261
293
  @children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
262
294
 
295
+ if name.end_with?("Definition") && name != "FragmentDefinition"
296
+ arguments << "definition_pos: nil"
297
+ assignments << "@definition_pos = definition_pos"
298
+ end
299
+
300
+ keywords = scalar_method_names.map { |m| "#{m}: #{m}"} +
301
+ @children_methods.keys.map { |m| "#{m}: #{m}" }
302
+
263
303
  module_eval <<-RUBY, __FILE__, __LINE__
264
- def initialize_node #{arguments.join(", ")}
304
+ def initialize(#{arguments.join(", ")})
305
+ @line = line
306
+ @col = col
307
+ @pos = pos
308
+ @filename = filename
309
+ @source_string = source_string
265
310
  #{assignments.join("\n")}
266
311
  end
312
+
313
+ def self.from_a(filename, line, col, #{(scalar_method_names + @children_methods.keys).join(", ")})
314
+ self.new(filename: filename, line: line, col: col, #{keywords.join(", ")})
315
+ end
267
316
  RUBY
268
317
  end
269
318
  end
@@ -291,10 +340,10 @@ module GraphQL
291
340
  # @return [String] the key for this argument
292
341
 
293
342
  # @!attribute value
294
- # @return [String, Float, Integer, Boolean, Array, InputObject] The value passed for this key
343
+ # @return [String, Float, Integer, Boolean, Array, InputObject, VariableIdentifier] The value passed for this key
295
344
 
296
345
  def children
297
- @children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
346
+ @children ||= Array(value).flatten.tap { _1.select! { |v| v.is_a?(AbstractNode) } }
298
347
  end
299
348
  end
300
349
 
@@ -307,44 +356,14 @@ module GraphQL
307
356
  end
308
357
 
309
358
  class DirectiveDefinition < AbstractNode
310
- include DefinitionNode
311
359
  attr_reader :description
312
- scalar_methods :name
360
+ scalar_methods :name, :repeatable
313
361
  children_methods(
314
- locations: Nodes::DirectiveLocation,
315
362
  arguments: Nodes::Argument,
363
+ locations: Nodes::DirectiveLocation,
316
364
  )
317
365
  end
318
366
 
319
- # This is the AST root for normal queries
320
- #
321
- # @example Deriving a document by parsing a string
322
- # document = GraphQL.parse(query_string)
323
- #
324
- # @example Creating a string from a document
325
- # document.to_query_string
326
- # # { ... }
327
- #
328
- # @example Creating a custom string from a document
329
- # class VariableScrubber < GraphQL::Language::Printer
330
- # def print_argument(arg)
331
- # "#{arg.name}: <HIDDEN>"
332
- # end
333
- # end
334
- #
335
- # document.to_query_string(printer: VariableSrubber.new)
336
- #
337
- class Document < AbstractNode
338
- scalar_methods false
339
- children_methods(definitions: nil)
340
- # @!attribute definitions
341
- # @return [Array<OperationDefinition, FragmentDefinition>] top-level GraphQL units: operations or fragments
342
-
343
- def slice_definition(name)
344
- GraphQL::Language::DefinitionSlice.slice(self, name)
345
- end
346
- end
347
-
348
367
  # An enum value. The string is available as {#name}.
349
368
  class Enum < NameOnlyNode
350
369
  end
@@ -355,8 +374,6 @@ module GraphQL
355
374
 
356
375
  # A single selection in a GraphQL query.
357
376
  class Field < AbstractNode
358
- NONE = [].freeze
359
-
360
377
  scalar_methods :name, :alias
361
378
  children_methods({
362
379
  arguments: GraphQL::Language::Nodes::Argument,
@@ -367,13 +384,22 @@ module GraphQL
367
384
  # @!attribute selections
368
385
  # @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
369
386
 
370
- def initialize_node(attributes)
371
- @name = attributes[:name]
372
- @arguments = attributes[:arguments] || NONE
373
- @directives = attributes[:directives] || NONE
374
- @selections = attributes[:selections] || NONE
387
+ def initialize(name: nil, arguments: NONE, directives: NONE, selections: NONE, field_alias: nil, line: nil, col: nil, pos: nil, filename: nil, source_string: nil)
388
+ @name = name
389
+ @arguments = arguments || NONE
390
+ @directives = directives || NONE
391
+ @selections = selections || NONE
375
392
  # oops, alias is a keyword:
376
- @alias = attributes[:alias]
393
+ @alias = field_alias
394
+ @line = line
395
+ @col = col
396
+ @pos = pos
397
+ @filename = filename
398
+ @source_string = source_string
399
+ end
400
+
401
+ def self.from_a(filename, line, col, field_alias, name, arguments, directives, selections) # rubocop:disable Metrics/ParameterLists
402
+ self.new(filename: filename, line: line, col: col, field_alias: field_alias, name: name, arguments: arguments, directives: directives, selections: selections)
377
403
  end
378
404
 
379
405
  # Override this because default is `:fields`
@@ -382,25 +408,33 @@ module GraphQL
382
408
 
383
409
  # A reusable fragment, defined at document-level.
384
410
  class FragmentDefinition < AbstractNode
411
+ scalar_methods :name, :type
412
+ children_methods({
413
+ selections: GraphQL::Language::Nodes::Field,
414
+ directives: GraphQL::Language::Nodes::Directive,
415
+ })
416
+
417
+ self.children_method_name = :definitions
385
418
  # @!attribute name
386
419
  # @return [String] the identifier for this fragment, which may be applied with `...#{name}`
387
420
 
388
421
  # @!attribute type
389
422
  # @return [String] the type condition for this fragment (name of type which it may apply to)
390
- def initialize_node(name: nil, type: nil, directives: [], selections: [])
423
+ def initialize(name: nil, type: nil, directives: NONE, selections: NONE, filename: nil, pos: nil, source_string: nil, line: nil, col: nil)
391
424
  @name = name
392
425
  @type = type
393
426
  @directives = directives
394
427
  @selections = selections
428
+ @filename = filename
429
+ @pos = pos
430
+ @source_string = source_string
431
+ @line = line
432
+ @col = col
395
433
  end
396
434
 
397
- scalar_methods :name, :type
398
- children_methods({
399
- selections: GraphQL::Language::Nodes::Field,
400
- directives: GraphQL::Language::Nodes::Directive,
401
- })
402
-
403
- self.children_method_name = :definitions
435
+ def self.from_a(filename, line, col, name, type, directives, selections)
436
+ self.new(filename: filename, line: line, col: col, name: name, type: type, directives: directives, selections: selections)
437
+ end
404
438
  end
405
439
 
406
440
  # Application of a named fragment in a selection
@@ -418,8 +452,8 @@ module GraphQL
418
452
  class InlineFragment < AbstractNode
419
453
  scalar_methods :type
420
454
  children_methods({
421
- selections: GraphQL::Language::Nodes::Field,
422
455
  directives: GraphQL::Language::Nodes::Directive,
456
+ selections: GraphQL::Language::Nodes::Field,
423
457
  })
424
458
 
425
459
  self.children_method_name = :selections
@@ -467,7 +501,6 @@ module GraphQL
467
501
  end
468
502
  end
469
503
 
470
-
471
504
  # A list type definition, denoted with `[...]` (used for variable type definitions)
472
505
  class ListType < WrapperType
473
506
  end
@@ -479,7 +512,7 @@ module GraphQL
479
512
  # An operation-level query variable
480
513
  class VariableDefinition < AbstractNode
481
514
  scalar_methods :name, :type, :default_value
482
- children_methods false
515
+ children_methods(directives: Directive)
483
516
  # @!attribute default_value
484
517
  # @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
485
518
 
@@ -499,8 +532,8 @@ module GraphQL
499
532
  scalar_methods :operation_type, :name
500
533
  children_methods({
501
534
  variables: GraphQL::Language::Nodes::VariableDefinition,
502
- selections: GraphQL::Language::Nodes::Field,
503
535
  directives: GraphQL::Language::Nodes::Directive,
536
+ selections: GraphQL::Language::Nodes::Field,
504
537
  })
505
538
 
506
539
  # @!attribute variables
@@ -518,6 +551,35 @@ module GraphQL
518
551
  self.children_method_name = :definitions
519
552
  end
520
553
 
554
+ # This is the AST root for normal queries
555
+ #
556
+ # @example Deriving a document by parsing a string
557
+ # document = GraphQL.parse(query_string)
558
+ #
559
+ # @example Creating a string from a document
560
+ # document.to_query_string
561
+ # # { ... }
562
+ #
563
+ # @example Creating a custom string from a document
564
+ # class VariableScrubber < GraphQL::Language::Printer
565
+ # def print_argument(arg)
566
+ # print_string("#{arg.name}: <HIDDEN>")
567
+ # end
568
+ # end
569
+ #
570
+ # document.to_query_string(printer: VariableScrubber.new)
571
+ #
572
+ class Document < AbstractNode
573
+ scalar_methods false
574
+ children_methods(definitions: nil)
575
+ # @!attribute definitions
576
+ # @return [Array<OperationDefinition, FragmentDefinition>] top-level GraphQL units: operations or fragments
577
+
578
+ def slice_definition(name)
579
+ GraphQL::Language::DefinitionSlice.slice(self, name)
580
+ end
581
+ end
582
+
521
583
  # A type name, used for variable definitions
522
584
  class TypeName < NameOnlyNode
523
585
  end
@@ -528,7 +590,6 @@ module GraphQL
528
590
  end
529
591
 
530
592
  class SchemaDefinition < AbstractNode
531
- include DefinitionNode
532
593
  scalar_methods :query, :mutation, :subscription
533
594
  children_methods({
534
595
  directives: GraphQL::Language::Nodes::Directive,
@@ -545,7 +606,6 @@ module GraphQL
545
606
  end
546
607
 
547
608
  class ScalarTypeDefinition < AbstractNode
548
- include DefinitionNode
549
609
  attr_reader :description
550
610
  scalar_methods :name
551
611
  children_methods({
@@ -563,7 +623,6 @@ module GraphQL
563
623
  end
564
624
 
565
625
  class InputValueDefinition < AbstractNode
566
- include DefinitionNode
567
626
  attr_reader :description
568
627
  scalar_methods :name, :type, :default_value
569
628
  children_methods({
@@ -573,12 +632,11 @@ module GraphQL
573
632
  end
574
633
 
575
634
  class FieldDefinition < AbstractNode
576
- include DefinitionNode
577
635
  attr_reader :description
578
636
  scalar_methods :name, :type
579
637
  children_methods({
580
- directives: GraphQL::Language::Nodes::Directive,
581
638
  arguments: GraphQL::Language::Nodes::InputValueDefinition,
639
+ directives: GraphQL::Language::Nodes::Directive,
582
640
  })
583
641
  self.children_method_name = :fields
584
642
 
@@ -594,7 +652,6 @@ module GraphQL
594
652
  end
595
653
 
596
654
  class ObjectTypeDefinition < AbstractNode
597
- include DefinitionNode
598
655
  attr_reader :description
599
656
  scalar_methods :name, :interfaces
600
657
  children_methods({
@@ -614,10 +671,10 @@ module GraphQL
614
671
  end
615
672
 
616
673
  class InterfaceTypeDefinition < AbstractNode
617
- include DefinitionNode
618
674
  attr_reader :description
619
675
  scalar_methods :name
620
676
  children_methods({
677
+ interfaces: GraphQL::Language::Nodes::TypeName,
621
678
  directives: GraphQL::Language::Nodes::Directive,
622
679
  fields: GraphQL::Language::Nodes::FieldDefinition,
623
680
  })
@@ -627,6 +684,7 @@ module GraphQL
627
684
  class InterfaceTypeExtension < AbstractNode
628
685
  scalar_methods :name
629
686
  children_methods({
687
+ interfaces: GraphQL::Language::Nodes::TypeName,
630
688
  directives: GraphQL::Language::Nodes::Directive,
631
689
  fields: GraphQL::Language::Nodes::FieldDefinition,
632
690
  })
@@ -634,7 +692,6 @@ module GraphQL
634
692
  end
635
693
 
636
694
  class UnionTypeDefinition < AbstractNode
637
- include DefinitionNode
638
695
  attr_reader :description, :types
639
696
  scalar_methods :name
640
697
  children_methods({
@@ -653,7 +710,6 @@ module GraphQL
653
710
  end
654
711
 
655
712
  class EnumValueDefinition < AbstractNode
656
- include DefinitionNode
657
713
  attr_reader :description
658
714
  scalar_methods :name
659
715
  children_methods({
@@ -663,7 +719,6 @@ module GraphQL
663
719
  end
664
720
 
665
721
  class EnumTypeDefinition < AbstractNode
666
- include DefinitionNode
667
722
  attr_reader :description
668
723
  scalar_methods :name
669
724
  children_methods({
@@ -683,7 +738,6 @@ module GraphQL
683
738
  end
684
739
 
685
740
  class InputObjectTypeDefinition < AbstractNode
686
- include DefinitionNode
687
741
  attr_reader :description
688
742
  scalar_methods :name
689
743
  children_methods({