graphql 1.12.12 → 2.4.8

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