graphql 1.10.2 → 2.0.21

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 (402) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +21 -10
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +45 -8
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +49 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  25. data/lib/generators/graphql/templates/base_field.erb +2 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  28. data/lib/generators/graphql/templates/base_object.erb +2 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  30. data/lib/generators/graphql/templates/base_union.erb +2 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +2 -0
  36. data/lib/generators/graphql/templates/mutation.erb +3 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +9 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +3 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +24 -33
  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 +30 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
  51. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  52. data/lib/graphql/analysis/ast/visitor.rb +52 -36
  53. data/lib/graphql/analysis/ast.rb +7 -8
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  56. data/lib/graphql/backtrace/table.rb +31 -18
  57. data/lib/graphql/backtrace/trace.rb +96 -0
  58. data/lib/graphql/backtrace/traced_error.rb +0 -1
  59. data/lib/graphql/backtrace/tracer.rb +39 -9
  60. data/lib/graphql/backtrace.rb +26 -18
  61. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  62. data/lib/graphql/dataloader/request.rb +19 -0
  63. data/lib/graphql/dataloader/request_all.rb +19 -0
  64. data/lib/graphql/dataloader/source.rb +164 -0
  65. data/lib/graphql/dataloader.rb +311 -0
  66. data/lib/graphql/date_encoding_error.rb +16 -0
  67. data/lib/graphql/deprecation.rb +9 -0
  68. data/lib/graphql/dig.rb +1 -1
  69. data/lib/graphql/execution/errors.rb +77 -44
  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 +104 -0
  73. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  74. data/lib/graphql/execution/interpreter/resolve.rb +62 -24
  75. data/lib/graphql/execution/interpreter/runtime.rb +826 -464
  76. data/lib/graphql/execution/interpreter.rb +206 -68
  77. data/lib/graphql/execution/lazy.rb +11 -21
  78. data/lib/graphql/execution/lookahead.rb +55 -136
  79. data/lib/graphql/execution/multiplex.rb +6 -162
  80. data/lib/graphql/execution.rb +11 -4
  81. data/lib/graphql/filter.rb +7 -2
  82. data/lib/graphql/integer_decoding_error.rb +17 -0
  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 +11 -5
  86. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  87. data/lib/graphql/introspection/entry_points.rb +4 -17
  88. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  89. data/lib/graphql/introspection/field_type.rb +9 -5
  90. data/lib/graphql/introspection/input_value_type.rb +15 -3
  91. data/lib/graphql/introspection/introspection_query.rb +6 -92
  92. data/lib/graphql/introspection/schema_type.rb +11 -6
  93. data/lib/graphql/introspection/type_type.rb +31 -14
  94. data/lib/graphql/introspection.rb +100 -0
  95. data/lib/graphql/invalid_null_error.rb +18 -0
  96. data/lib/graphql/language/block_string.rb +20 -5
  97. data/lib/graphql/language/cache.rb +37 -0
  98. data/lib/graphql/language/document_from_schema_definition.rb +96 -44
  99. data/lib/graphql/language/lexer.rb +216 -1462
  100. data/lib/graphql/language/nodes.rb +126 -129
  101. data/lib/graphql/language/parser.rb +997 -933
  102. data/lib/graphql/language/parser.y +148 -118
  103. data/lib/graphql/language/printer.rb +48 -23
  104. data/lib/graphql/language/sanitized_printer.rb +222 -0
  105. data/lib/graphql/language/token.rb +0 -4
  106. data/lib/graphql/language/visitor.rb +192 -84
  107. data/lib/graphql/language.rb +2 -0
  108. data/lib/graphql/name_validator.rb +2 -7
  109. data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
  110. data/lib/graphql/pagination/array_connection.rb +6 -4
  111. data/lib/graphql/pagination/connection.rb +105 -23
  112. data/lib/graphql/pagination/connections.rb +62 -35
  113. data/lib/graphql/pagination/relation_connection.rb +88 -36
  114. data/lib/graphql/parse_error.rb +0 -1
  115. data/lib/graphql/query/context.rb +203 -198
  116. data/lib/graphql/query/fingerprint.rb +26 -0
  117. data/lib/graphql/query/input_validation_result.rb +33 -7
  118. data/lib/graphql/query/null_context.rb +22 -9
  119. data/lib/graphql/query/validation_pipeline.rb +16 -38
  120. data/lib/graphql/query/variable_validation_error.rb +3 -3
  121. data/lib/graphql/query/variables.rb +36 -12
  122. data/lib/graphql/query.rb +92 -44
  123. data/lib/graphql/railtie.rb +6 -102
  124. data/lib/graphql/rake_task/validate.rb +1 -1
  125. data/lib/graphql/rake_task.rb +41 -10
  126. data/lib/graphql/relay/range_add.rb +17 -10
  127. data/lib/graphql/relay.rb +0 -15
  128. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  129. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  130. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  131. data/lib/graphql/rubocop.rb +4 -0
  132. data/lib/graphql/schema/addition.rb +245 -0
  133. data/lib/graphql/schema/argument.rb +250 -46
  134. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  135. data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
  136. data/lib/graphql/schema/build_from_definition.rb +243 -89
  137. data/lib/graphql/schema/directive/deprecated.rb +1 -1
  138. data/lib/graphql/schema/directive/feature.rb +1 -1
  139. data/lib/graphql/schema/directive/flagged.rb +57 -0
  140. data/lib/graphql/schema/directive/include.rb +1 -1
  141. data/lib/graphql/schema/directive/one_of.rb +12 -0
  142. data/lib/graphql/schema/directive/skip.rb +1 -1
  143. data/lib/graphql/schema/directive/transform.rb +14 -2
  144. data/lib/graphql/schema/directive.rb +108 -20
  145. data/lib/graphql/schema/enum.rb +105 -44
  146. data/lib/graphql/schema/enum_value.rb +15 -25
  147. data/lib/graphql/schema/field/connection_extension.rb +50 -30
  148. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  149. data/lib/graphql/schema/field.rb +476 -331
  150. data/lib/graphql/schema/field_extension.rb +86 -2
  151. data/lib/graphql/schema/find_inherited_value.rb +6 -8
  152. data/lib/graphql/schema/finder.rb +5 -5
  153. data/lib/graphql/schema/input_object.rb +133 -121
  154. data/lib/graphql/schema/interface.rb +17 -45
  155. data/lib/graphql/schema/introspection_system.rb +3 -8
  156. data/lib/graphql/schema/late_bound_type.rb +8 -2
  157. data/lib/graphql/schema/list.rb +25 -8
  158. data/lib/graphql/schema/loader.rb +139 -103
  159. data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
  160. data/lib/graphql/schema/member/build_type.rb +19 -14
  161. data/lib/graphql/schema/member/has_arguments.rb +310 -26
  162. data/lib/graphql/schema/member/has_ast_node.rb +16 -1
  163. data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
  164. data/lib/graphql/schema/member/has_directives.rb +118 -0
  165. data/lib/graphql/schema/member/has_fields.rb +164 -42
  166. data/lib/graphql/schema/member/has_interfaces.rb +129 -0
  167. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  168. data/lib/graphql/schema/member/has_validators.rb +57 -0
  169. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  170. data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
  171. data/lib/graphql/schema/member/validates_input.rb +3 -3
  172. data/lib/graphql/schema/member.rb +6 -6
  173. data/lib/graphql/schema/mutation.rb +4 -9
  174. data/lib/graphql/schema/non_null.rb +12 -7
  175. data/lib/graphql/schema/object.rb +35 -69
  176. data/lib/graphql/schema/printer.rb +16 -34
  177. data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
  178. data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
  179. data/lib/graphql/schema/resolver.rb +144 -79
  180. data/lib/graphql/schema/scalar.rb +27 -18
  181. data/lib/graphql/schema/subscription.rb +55 -26
  182. data/lib/graphql/schema/timeout.rb +45 -35
  183. data/lib/graphql/schema/type_expression.rb +1 -1
  184. data/lib/graphql/schema/type_membership.rb +21 -4
  185. data/lib/graphql/schema/union.rb +48 -13
  186. data/lib/graphql/schema/unique_within_type.rb +1 -2
  187. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  188. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  189. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  190. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  191. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  192. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  193. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  194. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  195. data/lib/graphql/schema/validator.rb +171 -0
  196. data/lib/graphql/schema/warden.rb +185 -32
  197. data/lib/graphql/schema/wrapper.rb +0 -5
  198. data/lib/graphql/schema.rb +471 -1116
  199. data/lib/graphql/static_validation/all_rules.rb +3 -0
  200. data/lib/graphql/static_validation/base_visitor.rb +13 -27
  201. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  202. data/lib/graphql/static_validation/error.rb +3 -1
  203. data/lib/graphql/static_validation/literal_validator.rb +69 -26
  204. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
  205. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  206. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
  207. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  208. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  209. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  210. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  211. data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
  212. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  213. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  214. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  215. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  216. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  217. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  218. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  219. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  220. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  221. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
  222. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  223. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
  224. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
  225. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
  226. data/lib/graphql/static_validation/validation_context.rb +13 -3
  227. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  228. data/lib/graphql/static_validation/validator.rb +32 -20
  229. data/lib/graphql/static_validation.rb +1 -2
  230. data/lib/graphql/string_encoding_error.rb +13 -3
  231. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
  232. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  233. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  234. data/lib/graphql/subscriptions/event.rb +81 -35
  235. data/lib/graphql/subscriptions/instrumentation.rb +0 -52
  236. data/lib/graphql/subscriptions/serialize.rb +53 -6
  237. data/lib/graphql/subscriptions.rb +113 -58
  238. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  239. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
  240. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  241. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  242. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  243. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  244. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  245. data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
  246. data/lib/graphql/tracing/legacy_trace.rb +65 -0
  247. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  248. data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
  249. data/lib/graphql/tracing/notifications_trace.rb +42 -0
  250. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  251. data/lib/graphql/tracing/platform_trace.rb +109 -0
  252. data/lib/graphql/tracing/platform_tracing.rb +64 -43
  253. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  254. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
  255. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  256. data/lib/graphql/tracing/scout_trace.rb +72 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +11 -0
  258. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  259. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  260. data/lib/graphql/tracing/trace.rb +75 -0
  261. data/lib/graphql/tracing.rb +23 -71
  262. data/lib/graphql/type_kinds.rb +6 -3
  263. data/lib/graphql/types/big_int.rb +5 -1
  264. data/lib/graphql/types/int.rb +10 -3
  265. data/lib/graphql/types/iso_8601_date.rb +20 -9
  266. data/lib/graphql/types/iso_8601_date_time.rb +36 -10
  267. data/lib/graphql/types/relay/base_connection.rb +18 -92
  268. data/lib/graphql/types/relay/base_edge.rb +2 -34
  269. data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
  270. data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
  271. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  272. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  273. data/lib/graphql/types/relay/node.rb +2 -4
  274. data/lib/graphql/types/relay/node_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay/page_info.rb +2 -14
  276. data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
  277. data/lib/graphql/types/relay.rb +10 -5
  278. data/lib/graphql/types/string.rb +8 -2
  279. data/lib/graphql/unauthorized_error.rb +2 -2
  280. data/lib/graphql/version.rb +1 -1
  281. data/lib/graphql.rb +54 -65
  282. data/readme.md +3 -6
  283. metadata +116 -236
  284. data/lib/graphql/analysis/analyze_query.rb +0 -91
  285. data/lib/graphql/analysis/field_usage.rb +0 -45
  286. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  287. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  288. data/lib/graphql/analysis/query_complexity.rb +0 -88
  289. data/lib/graphql/analysis/query_depth.rb +0 -43
  290. data/lib/graphql/analysis/reducer_state.rb +0 -48
  291. data/lib/graphql/argument.rb +0 -131
  292. data/lib/graphql/authorization.rb +0 -82
  293. data/lib/graphql/backwards_compatibility.rb +0 -60
  294. data/lib/graphql/base_type.rb +0 -230
  295. data/lib/graphql/boolean_type.rb +0 -2
  296. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  297. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  298. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  299. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  300. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  301. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  302. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  303. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  304. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  305. data/lib/graphql/compatibility.rb +0 -5
  306. data/lib/graphql/define/assign_argument.rb +0 -12
  307. data/lib/graphql/define/assign_connection.rb +0 -13
  308. data/lib/graphql/define/assign_enum_value.rb +0 -18
  309. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  310. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  311. data/lib/graphql/define/assign_object_field.rb +0 -42
  312. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  313. data/lib/graphql/define/instance_definable.rb +0 -210
  314. data/lib/graphql/define/no_definition_error.rb +0 -7
  315. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  316. data/lib/graphql/define/type_definer.rb +0 -31
  317. data/lib/graphql/define.rb +0 -31
  318. data/lib/graphql/deprecated_dsl.rb +0 -42
  319. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  320. data/lib/graphql/directive/include_directive.rb +0 -2
  321. data/lib/graphql/directive/skip_directive.rb +0 -2
  322. data/lib/graphql/directive.rb +0 -107
  323. data/lib/graphql/enum_type.rb +0 -127
  324. data/lib/graphql/execution/execute.rb +0 -326
  325. data/lib/graphql/execution/flatten.rb +0 -40
  326. data/lib/graphql/execution/instrumentation.rb +0 -92
  327. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  328. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  329. data/lib/graphql/execution/typecast.rb +0 -50
  330. data/lib/graphql/field/resolve.rb +0 -59
  331. data/lib/graphql/field.rb +0 -222
  332. data/lib/graphql/float_type.rb +0 -2
  333. data/lib/graphql/function.rb +0 -124
  334. data/lib/graphql/id_type.rb +0 -2
  335. data/lib/graphql/input_object_type.rb +0 -132
  336. data/lib/graphql/int_type.rb +0 -2
  337. data/lib/graphql/interface_type.rb +0 -65
  338. data/lib/graphql/internal_representation/document.rb +0 -27
  339. data/lib/graphql/internal_representation/node.rb +0 -206
  340. data/lib/graphql/internal_representation/print.rb +0 -51
  341. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  342. data/lib/graphql/internal_representation/scope.rb +0 -88
  343. data/lib/graphql/internal_representation/visit.rb +0 -36
  344. data/lib/graphql/internal_representation.rb +0 -7
  345. data/lib/graphql/language/lexer.rl +0 -258
  346. data/lib/graphql/list_type.rb +0 -80
  347. data/lib/graphql/literal_validation_error.rb +0 -6
  348. data/lib/graphql/non_null_type.rb +0 -71
  349. data/lib/graphql/object_type.rb +0 -121
  350. data/lib/graphql/query/arguments.rb +0 -188
  351. data/lib/graphql/query/arguments_cache.rb +0 -25
  352. data/lib/graphql/query/executor.rb +0 -53
  353. data/lib/graphql/query/literal_input.rb +0 -136
  354. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  355. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  356. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  357. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  358. data/lib/graphql/query/serial_execution.rb +0 -39
  359. data/lib/graphql/relay/array_connection.rb +0 -85
  360. data/lib/graphql/relay/base_connection.rb +0 -176
  361. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  362. data/lib/graphql/relay/connection_resolve.rb +0 -43
  363. data/lib/graphql/relay/connection_type.rb +0 -41
  364. data/lib/graphql/relay/edge.rb +0 -27
  365. data/lib/graphql/relay/edge_type.rb +0 -19
  366. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  367. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  368. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  369. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  370. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  371. data/lib/graphql/relay/mutation/result.rb +0 -38
  372. data/lib/graphql/relay/mutation.rb +0 -105
  373. data/lib/graphql/relay/node.rb +0 -36
  374. data/lib/graphql/relay/page_info.rb +0 -7
  375. data/lib/graphql/relay/relation_connection.rb +0 -190
  376. data/lib/graphql/relay/type_extensions.rb +0 -30
  377. data/lib/graphql/scalar_type.rb +0 -76
  378. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  379. data/lib/graphql/schema/default_parse_error.rb +0 -10
  380. data/lib/graphql/schema/default_type_error.rb +0 -15
  381. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  382. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  383. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  384. data/lib/graphql/schema/middleware_chain.rb +0 -82
  385. data/lib/graphql/schema/possible_types.rb +0 -39
  386. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  387. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  388. data/lib/graphql/schema/traversal.rb +0 -228
  389. data/lib/graphql/schema/validation.rb +0 -303
  390. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  391. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  392. data/lib/graphql/string_type.rb +0 -2
  393. data/lib/graphql/subscriptions/subscription_root.rb +0 -65
  394. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  395. data/lib/graphql/types/relay/base_field.rb +0 -22
  396. data/lib/graphql/types/relay/base_interface.rb +0 -29
  397. data/lib/graphql/types/relay/base_object.rb +0 -26
  398. data/lib/graphql/types/relay/node_field.rb +0 -43
  399. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  400. data/lib/graphql/union_type.rb +0 -113
  401. data/lib/graphql/upgrader/member.rb +0 -936
  402. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -2,10 +2,10 @@ class GraphQL::Language::Parser
2
2
  rule
3
3
  target: document
4
4
 
5
- document: definitions_list { return make_node(:Document, definitions: val[0])}
5
+ document: definitions_list { result = make_node(:Document, definitions: val[0])}
6
6
 
7
7
  definitions_list:
8
- definition { return [val[0]]}
8
+ definition { result = [val[0]]}
9
9
  | definitions_list definition { val[0] << val[1] }
10
10
 
11
11
  definition:
@@ -19,7 +19,7 @@ rule
19
19
 
20
20
  operation_definition:
21
21
  operation_type operation_name_opt variable_definitions_opt directives_list_opt selection_set {
22
- return make_node(
22
+ result = make_node(
23
23
  :OperationDefinition, {
24
24
  operation_type: val[0],
25
25
  name: val[1],
@@ -31,7 +31,7 @@ rule
31
31
  )
32
32
  }
33
33
  | LCURLY selection_list RCURLY {
34
- return make_node(
34
+ result = make_node(
35
35
  :OperationDefinition, {
36
36
  operation_type: "query",
37
37
  selections: val[1],
@@ -40,7 +40,7 @@ rule
40
40
  )
41
41
  }
42
42
  | LCURLY RCURLY {
43
- return make_node(
43
+ result = make_node(
44
44
  :OperationDefinition, {
45
45
  operation_type: "query",
46
46
  selections: [],
@@ -55,20 +55,20 @@ rule
55
55
  | SUBSCRIPTION
56
56
 
57
57
  operation_name_opt:
58
- /* none */ { return nil }
58
+ /* none */ { result = nil }
59
59
  | name
60
60
 
61
61
  variable_definitions_opt:
62
- /* none */ { return EMPTY_ARRAY }
63
- | LPAREN variable_definitions_list RPAREN { return val[1] }
62
+ /* none */ { result = EMPTY_ARRAY }
63
+ | LPAREN variable_definitions_list RPAREN { result = val[1] }
64
64
 
65
65
  variable_definitions_list:
66
- variable_definition { return [val[0]] }
66
+ variable_definition { result = [val[0]] }
67
67
  | variable_definitions_list variable_definition { val[0] << val[1] }
68
68
 
69
69
  variable_definition:
70
70
  VAR_SIGN name COLON type default_value_opt {
71
- return make_node(:VariableDefinition, {
71
+ result = make_node(:VariableDefinition, {
72
72
  name: val[1],
73
73
  type: val[3],
74
74
  default_value: val[4],
@@ -77,26 +77,26 @@ rule
77
77
  }
78
78
 
79
79
  type:
80
- nullable_type { return val[0] }
81
- | nullable_type BANG { return make_node(:NonNullType, of_type: val[0]) }
80
+ nullable_type { result = val[0] }
81
+ | nullable_type BANG { result = make_node(:NonNullType, of_type: val[0]) }
82
82
 
83
83
  nullable_type:
84
- name { return make_node(:TypeName, name: val[0])}
85
- | LBRACKET type RBRACKET { return make_node(:ListType, of_type: val[1]) }
84
+ name { result = make_node(:TypeName, name: val[0])}
85
+ | LBRACKET type RBRACKET { result = make_node(:ListType, of_type: val[1]) }
86
86
 
87
87
  default_value_opt:
88
- /* none */ { return nil }
89
- | EQUALS literal_value { return val[1] }
88
+ /* none */ { result = nil }
89
+ | EQUALS literal_value { result = val[1] }
90
90
 
91
91
  selection_set:
92
- LCURLY selection_list RCURLY { return val[1] }
92
+ LCURLY selection_list RCURLY { result = val[1] }
93
93
 
94
94
  selection_set_opt:
95
- /* none */ { return EMPTY_ARRAY }
96
- | selection_set { return val[0] }
95
+ /* none */ { result = EMPTY_ARRAY }
96
+ | selection_set { result = val[0] }
97
97
 
98
98
  selection_list:
99
- selection { return [result] }
99
+ selection { result = [result] }
100
100
  | selection_list selection { val[0] << val[1] }
101
101
 
102
102
  selection:
@@ -106,7 +106,7 @@ rule
106
106
 
107
107
  field:
108
108
  name arguments_opt directives_list_opt selection_set_opt {
109
- return make_node(
109
+ result = make_node(
110
110
  :Field, {
111
111
  name: val[0],
112
112
  arguments: val[1],
@@ -117,7 +117,7 @@ rule
117
117
  )
118
118
  }
119
119
  | name COLON name arguments_opt directives_list_opt selection_set_opt {
120
- return make_node(
120
+ result = make_node(
121
121
  :Field, {
122
122
  alias: val[0],
123
123
  name: val[2],
@@ -147,6 +147,7 @@ rule
147
147
  name_without_on:
148
148
  IDENTIFIER
149
149
  | FRAGMENT
150
+ | REPEATABLE
150
151
  | TRUE
151
152
  | FALSE
152
153
  | operation_type
@@ -155,34 +156,35 @@ rule
155
156
  enum_name: /* any identifier, but not "true", "false" or "null" */
156
157
  IDENTIFIER
157
158
  | FRAGMENT
159
+ | REPEATABLE
158
160
  | ON
159
161
  | operation_type
160
162
  | schema_keyword
161
163
 
162
164
  enum_value_definition:
163
- description_opt enum_name directives_list_opt { return make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1]) }
165
+ description_opt enum_name directives_list_opt { result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1]) }
164
166
 
165
167
  enum_value_definitions:
166
- enum_value_definition { return [val[0]] }
167
- | enum_value_definitions enum_value_definition { return val[0] << val[1] }
168
+ enum_value_definition { result = [val[0]] }
169
+ | enum_value_definitions enum_value_definition { result = val[0] << val[1] }
168
170
 
169
171
  arguments_opt:
170
- /* none */ { return EMPTY_ARRAY }
171
- | LPAREN arguments_list RPAREN { return val[1] }
172
+ /* none */ { result = EMPTY_ARRAY }
173
+ | LPAREN arguments_list RPAREN { result = val[1] }
172
174
 
173
175
  arguments_list:
174
- argument { return [val[0]] }
176
+ argument { result = [val[0]] }
175
177
  | arguments_list argument { val[0] << val[1] }
176
178
 
177
179
  argument:
178
- name COLON input_value { return make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
180
+ name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
179
181
 
180
182
  literal_value:
181
- FLOAT { return val[0].to_f }
182
- | INT { return val[0].to_i }
183
- | STRING { return val[0].to_s }
184
- | TRUE { return true }
185
- | FALSE { return false }
183
+ FLOAT { result = val[0][3].to_f }
184
+ | INT { result = val[0][3].to_i }
185
+ | STRING { result = val[0][3] }
186
+ | TRUE { result = true }
187
+ | FALSE { result = false }
186
188
  | null_value
187
189
  | enum_value
188
190
  | list_value
@@ -193,58 +195,58 @@ rule
193
195
  | variable
194
196
  | object_value
195
197
 
196
- null_value: NULL { return make_node(:NullValue, name: val[0], position_source: val[0]) }
197
- variable: VAR_SIGN name { return make_node(:VariableIdentifier, name: val[1], position_source: val[0]) }
198
+ null_value: NULL { result = make_node(:NullValue, name: val[0], position_source: val[0]) }
199
+ variable: VAR_SIGN name { result = make_node(:VariableIdentifier, name: val[1], position_source: val[0]) }
198
200
 
199
201
  list_value:
200
- LBRACKET RBRACKET { return EMPTY_ARRAY }
201
- | LBRACKET list_value_list RBRACKET { return val[1] }
202
+ LBRACKET RBRACKET { result = EMPTY_ARRAY }
203
+ | LBRACKET list_value_list RBRACKET { result = val[1] }
202
204
 
203
205
  list_value_list:
204
- input_value { return [val[0]] }
206
+ input_value { result = [val[0]] }
205
207
  | list_value_list input_value { val[0] << val[1] }
206
208
 
207
209
  object_value:
208
- LCURLY RCURLY { return make_node(:InputObject, arguments: [], position_source: val[0])}
209
- | LCURLY object_value_list RCURLY { return make_node(:InputObject, arguments: val[1], position_source: val[0])}
210
+ LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
211
+ | LCURLY object_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
210
212
 
211
213
  object_value_list:
212
- object_value_field { return [val[0]] }
214
+ object_value_field { result = [val[0]] }
213
215
  | object_value_list object_value_field { val[0] << val[1] }
214
216
 
215
217
  object_value_field:
216
- name COLON input_value { return make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
218
+ name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
217
219
 
218
220
  /* like the previous, but with literals only: */
219
221
  object_literal_value:
220
- LCURLY RCURLY { return make_node(:InputObject, arguments: [], position_source: val[0])}
221
- | LCURLY object_literal_value_list RCURLY { return make_node(:InputObject, arguments: val[1], position_source: val[0])}
222
+ LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
223
+ | LCURLY object_literal_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
222
224
 
223
225
  object_literal_value_list:
224
- object_literal_value_field { return [val[0]] }
226
+ object_literal_value_field { result = [val[0]] }
225
227
  | object_literal_value_list object_literal_value_field { val[0] << val[1] }
226
228
 
227
229
  object_literal_value_field:
228
- name COLON literal_value { return make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
230
+ name COLON literal_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
229
231
 
230
- enum_value: enum_name { return make_node(:Enum, name: val[0], position_source: val[0]) }
232
+ enum_value: enum_name { result = make_node(:Enum, name: val[0], position_source: val[0]) }
231
233
 
232
234
  directives_list_opt:
233
- /* none */ { return EMPTY_ARRAY }
235
+ /* none */ { result = EMPTY_ARRAY }
234
236
  | directives_list
235
237
 
236
238
  directives_list:
237
- directive { return [val[0]] }
239
+ directive { result = [val[0]] }
238
240
  | directives_list directive { val[0] << val[1] }
239
241
 
240
- directive: DIR_SIGN name arguments_opt { return make_node(:Directive, name: val[1], arguments: val[2], position_source: val[0]) }
242
+ directive: DIR_SIGN name arguments_opt { result = make_node(:Directive, name: val[1], arguments: val[2], position_source: val[0]) }
241
243
 
242
244
  fragment_spread:
243
- ELLIPSIS name_without_on directives_list_opt { return make_node(:FragmentSpread, name: val[1], directives: val[2], position_source: val[0]) }
245
+ ELLIPSIS name_without_on directives_list_opt { result = make_node(:FragmentSpread, name: val[1], directives: val[2], position_source: val[0]) }
244
246
 
245
247
  inline_fragment:
246
248
  ELLIPSIS ON type directives_list_opt selection_set {
247
- return make_node(:InlineFragment, {
249
+ result = make_node(:InlineFragment, {
248
250
  type: val[2],
249
251
  directives: val[3],
250
252
  selections: val[4],
@@ -252,7 +254,7 @@ rule
252
254
  })
253
255
  }
254
256
  | ELLIPSIS directives_list_opt selection_set {
255
- return make_node(:InlineFragment, {
257
+ result = make_node(:InlineFragment, {
256
258
  type: nil,
257
259
  directives: val[1],
258
260
  selections: val[2],
@@ -262,7 +264,7 @@ rule
262
264
 
263
265
  fragment_definition:
264
266
  FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
265
- return make_node(:FragmentDefinition, {
267
+ result = make_node(:FragmentDefinition, {
266
268
  name: val[1],
267
269
  type: val[3],
268
270
  directives: val[4],
@@ -273,7 +275,7 @@ rule
273
275
  }
274
276
 
275
277
  fragment_name_opt:
276
- /* none */ { return nil }
278
+ /* none */ { result = nil }
277
279
  | name_without_on
278
280
 
279
281
  type_system_definition:
@@ -282,14 +284,18 @@ rule
282
284
  | directive_definition
283
285
 
284
286
  schema_definition:
285
- SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { return make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3]) }
287
+ SCHEMA directives_list_opt operation_type_definition_list_opt { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0][1], directives: val[1], **val[2]) }
288
+
289
+ operation_type_definition_list_opt:
290
+ /* none */ { result = {} }
291
+ | LCURLY operation_type_definition_list RCURLY { result = val[1] }
286
292
 
287
293
  operation_type_definition_list:
288
294
  operation_type_definition
289
- | operation_type_definition_list operation_type_definition { return val[0].merge(val[1]) }
295
+ | operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
290
296
 
291
297
  operation_type_definition:
292
- operation_type COLON name { return { val[0].to_s.to_sym => val[2] } }
298
+ operation_type COLON name { result = { val[0][3].to_sym => val[2] } }
293
299
 
294
300
  type_definition:
295
301
  scalar_type_definition
@@ -304,8 +310,8 @@ rule
304
310
  | type_extension
305
311
 
306
312
  schema_extension:
307
- EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { return make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
308
- | EXTEND SCHEMA directives_list { return make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
313
+ EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
314
+ | EXTEND SCHEMA directives_list { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
309
315
 
310
316
  type_extension:
311
317
  scalar_type_extension
@@ -315,30 +321,31 @@ rule
315
321
  | enum_type_extension
316
322
  | input_object_type_extension
317
323
 
318
- scalar_type_extension: EXTEND SCALAR name directives_list { return make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
324
+ scalar_type_extension: EXTEND SCALAR name directives_list { result = make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
319
325
 
320
326
  object_type_extension:
321
327
  /* TODO - This first one shouldn't be necessary but parser is getting confused */
322
- EXTEND TYPE name implements LCURLY field_definition_list RCURLY { return make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: val[5], position_source: val[0]) }
323
- | EXTEND TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY { return make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], position_source: val[0]) }
324
- | EXTEND TYPE name implements_opt directives_list { return make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
325
- | EXTEND TYPE name implements { return make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
328
+ EXTEND TYPE name implements field_definition_list_opt { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: val[4], position_source: val[0]) }
329
+ | EXTEND TYPE name implements_opt directives_list_opt field_definition_list_opt { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], position_source: val[0]) }
330
+ | EXTEND TYPE name implements_opt directives_list { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
331
+ | EXTEND TYPE name implements { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
326
332
 
327
333
  interface_type_extension:
328
- EXTEND INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY { return make_node(:InterfaceTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
329
- | EXTEND INTERFACE name directives_list { return make_node(:InterfaceTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
334
+ EXTEND INTERFACE name implements_opt directives_list_opt field_definition_list_opt { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], position_source: val[0]) }
335
+ | EXTEND INTERFACE name implements_opt directives_list { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
336
+ | EXTEND INTERFACE name implements { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
330
337
 
331
338
  union_type_extension:
332
- EXTEND UNION name directives_list_opt EQUALS union_members { return make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: val[5], position_source: val[0]) }
333
- | EXTEND UNION name directives_list { return make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
339
+ EXTEND UNION name directives_list_opt EQUALS union_members { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: val[5], position_source: val[0]) }
340
+ | EXTEND UNION name directives_list { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
334
341
 
335
342
  enum_type_extension:
336
- EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY { return make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: val[5], position_source: val[0]) }
337
- | EXTEND ENUM name directives_list { return make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
343
+ EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: val[5], position_source: val[0]) }
344
+ | EXTEND ENUM name directives_list { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
338
345
 
339
346
  input_object_type_extension:
340
- EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { return make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
341
- | EXTEND INPUT name directives_list { return make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
347
+ EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
348
+ | EXTEND INPUT name directives_list { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
342
349
 
343
350
  description: STRING
344
351
 
@@ -348,86 +355,94 @@ rule
348
355
 
349
356
  scalar_type_definition:
350
357
  description_opt SCALAR name directives_list_opt {
351
- return make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
358
+ result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
352
359
  }
353
360
 
354
361
  object_type_definition:
355
- description_opt TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
356
- return make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
362
+ description_opt TYPE name implements_opt directives_list_opt field_definition_list_opt {
363
+ result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
357
364
  }
358
365
 
359
366
  implements_opt:
360
- /* none */ { return EMPTY_ARRAY }
367
+ /* none */ { result = EMPTY_ARRAY }
361
368
  | implements
362
369
 
363
370
  implements:
364
- IMPLEMENTS AMP interfaces_list { return val[2] }
365
- | IMPLEMENTS interfaces_list { return val[1] }
366
- | IMPLEMENTS legacy_interfaces_list { return val[1] }
371
+ IMPLEMENTS AMP interfaces_list { result = val[2] }
372
+ | IMPLEMENTS interfaces_list { result = val[1] }
373
+ | IMPLEMENTS legacy_interfaces_list { result = val[1] }
367
374
 
368
375
  interfaces_list:
369
- name { return [make_node(:TypeName, name: val[0], position_source: val[0])] }
376
+ name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
370
377
  | interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
371
378
 
372
379
  legacy_interfaces_list:
373
- name { return [make_node(:TypeName, name: val[0], position_source: val[0])] }
380
+ name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
374
381
  | legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
375
382
 
376
383
  input_value_definition:
377
384
  description_opt name COLON type default_value_opt directives_list_opt {
378
- return make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
385
+ result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
379
386
  }
380
387
 
381
388
  input_value_definition_list:
382
- input_value_definition { return [val[0]] }
389
+ input_value_definition { result = [val[0]] }
383
390
  | input_value_definition_list input_value_definition { val[0] << val[1] }
384
391
 
385
392
  arguments_definitions_opt:
386
- /* none */ { return EMPTY_ARRAY }
387
- | LPAREN input_value_definition_list RPAREN { return val[1] }
393
+ /* none */ { result = EMPTY_ARRAY }
394
+ | LPAREN input_value_definition_list RPAREN { result = val[1] }
388
395
 
389
396
  field_definition:
390
397
  description_opt name arguments_definitions_opt COLON type directives_list_opt {
391
- return make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
398
+ result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
392
399
  }
393
400
 
401
+ field_definition_list_opt:
402
+ /* none */ { result = EMPTY_ARRAY }
403
+ | LCURLY field_definition_list RCURLY { result = val[1] }
404
+
394
405
  field_definition_list:
395
- /* none */ { return EMPTY_ARRAY }
396
- | field_definition { return [val[0]] }
406
+ /* none - this is not actually valid but graphql-ruby used to print this */ { result = EMPTY_ARRAY }
407
+ | field_definition { result = [val[0]] }
397
408
  | field_definition_list field_definition { val[0] << val[1] }
398
409
 
399
410
  interface_type_definition:
400
- description_opt INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
401
- return make_node(:InterfaceTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
411
+ description_opt INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
412
+ result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
402
413
  }
403
414
 
404
415
  union_members:
405
- name { return [make_node(:TypeName, name: val[0], position_source: val[0])]}
416
+ name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
406
417
  | union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
407
418
 
408
419
  union_type_definition:
409
420
  description_opt UNION name directives_list_opt EQUALS union_members {
410
- return make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
421
+ result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
411
422
  }
412
423
 
413
424
  enum_type_definition:
414
425
  description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
415
- return make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
426
+ result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
416
427
  }
417
428
 
418
429
  input_object_type_definition:
419
430
  description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
420
- return make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
431
+ result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
421
432
  }
422
433
 
423
434
  directive_definition:
424
- description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
425
- return make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
435
+ description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
436
+ result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
426
437
  }
427
438
 
439
+ directive_repeatable_opt:
440
+ /* nothing */
441
+ | REPEATABLE
442
+
428
443
  directive_locations:
429
- name { return [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])] }
430
- | directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2]) }
444
+ name { result = [make_node(:DirectiveLocation, name: val[0][3], position_source: val[0])] }
445
+ | directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2][3], position_source: val[2]) }
431
446
  end
432
447
 
433
448
  ---- header ----
@@ -437,22 +452,22 @@ end
437
452
 
438
453
  EMPTY_ARRAY = [].freeze
439
454
 
440
- def initialize(query_string, filename:, tracer: Tracing::NullTracer)
455
+ def initialize(query_string, filename:, trace: Tracing::NullTrace)
441
456
  raise GraphQL::ParseError.new("No query string was present", nil, nil, query_string) if query_string.nil?
442
457
  @query_string = query_string
443
458
  @filename = filename
444
- @tracer = tracer
459
+ @trace = trace
445
460
  @reused_next_token = [nil, nil]
446
461
  end
447
462
 
448
463
  def parse_document
449
464
  @document ||= begin
450
465
  # Break the string into tokens
451
- @tracer.trace("lex", {query_string: @query_string}) do
452
- @tokens ||= GraphQL.scan(@query_string)
466
+ @trace.lex(query_string: @query_string) do
467
+ @tokens ||= GraphQL::Language::Lexer.tokenize(@query_string)
453
468
  end
454
469
  # From the tokens, build an AST
455
- @tracer.trace("parse", {query_string: @query_string}) do
470
+ @trace.parse(query_string: @query_string) do
456
471
  if @tokens.empty?
457
472
  raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
458
473
  else
@@ -462,8 +477,22 @@ def parse_document
462
477
  end
463
478
  end
464
479
 
465
- def self.parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
466
- self.new(query_string, filename: filename, tracer: tracer).parse_document
480
+ class << self
481
+ attr_accessor :cache
482
+
483
+ def parse(query_string, filename: nil, trace: GraphQL::Tracing::NullTrace)
484
+ new(query_string, filename: filename, trace: trace).parse_document
485
+ end
486
+
487
+ def parse_file(filename, trace: GraphQL::Tracing::NullTrace)
488
+ if cache
489
+ cache.fetch(filename) do
490
+ parse(File.read(filename), filename: filename, trace: trace)
491
+ end
492
+ else
493
+ parse(File.read(filename), filename: filename, trace: trace)
494
+ end
495
+ end
467
496
  end
468
497
 
469
498
  private
@@ -473,7 +502,7 @@ def next_token
473
502
  if lexer_token.nil?
474
503
  nil
475
504
  else
476
- @reused_next_token[0] = lexer_token.name
505
+ @reused_next_token[0] = lexer_token[0]
477
506
  @reused_next_token[1] = lexer_token
478
507
  @reused_next_token
479
508
  end
@@ -484,13 +513,13 @@ def get_description(token)
484
513
 
485
514
  loop do
486
515
  prev_token = token
487
- token = token.prev_token
516
+ token = token[4]
488
517
 
489
518
  break if token.nil?
490
- break if token.name != :COMMENT
491
- break if prev_token.line != token.line + 1
519
+ break if token[0] != :COMMENT
520
+ break if prev_token[1] != token[1] + 1
492
521
 
493
- comments.unshift(token.to_s.sub(/^#\s*/, ""))
522
+ comments.unshift(token[3].sub(/^#\s*/, ""))
494
523
  end
495
524
 
496
525
  return nil if comments.empty?
@@ -506,11 +535,12 @@ def on_error(parser_token_id, lexer_token, vstack)
506
535
  if parser_token_name.nil?
507
536
  raise GraphQL::ParseError.new("Parse Error on unknown token: {token_id: #{parser_token_id}, lexer_token: #{lexer_token}} from #{@query_string}", nil, nil, @query_string, filename: @filename)
508
537
  else
509
- line, col = lexer_token.line_and_column
510
- if lexer_token.name == :BAD_UNICODE_ESCAPE
511
- raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
538
+ line = lexer_token[1]
539
+ col = lexer_token[2]
540
+ if lexer_token[0] == :BAD_UNICODE_ESCAPE
541
+ raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
512
542
  else
513
- raise GraphQL::ParseError.new("Parse error on #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
543
+ raise GraphQL::ParseError.new("Parse error on #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
514
544
  end
515
545
  end
516
546
  end
@@ -518,8 +548,8 @@ end
518
548
 
519
549
  def make_node(node_name, assigns)
520
550
  assigns.each do |key, value|
521
- if key != :position_source && value.is_a?(GraphQL::Language::Token)
522
- assigns[key] = value.to_s
551
+ if key != :position_source && value.is_a?(Array) && value[0].is_a?(Symbol)
552
+ assigns[key] = value[3]
523
553
  end
524
554
  end
525
555