graphql 1.9.21 → 2.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

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