graphql_cody 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +5 -0
  3. data/MIT-LICENSE +20 -0
  4. data/lib/generators/graphql/core.rb +74 -0
  5. data/lib/generators/graphql/enum_generator.rb +33 -0
  6. data/lib/generators/graphql/install_generator.rb +190 -0
  7. data/lib/generators/graphql/interface_generator.rb +27 -0
  8. data/lib/generators/graphql/loader_generator.rb +21 -0
  9. data/lib/generators/graphql/mutation_generator.rb +55 -0
  10. data/lib/generators/graphql/object_generator.rb +79 -0
  11. data/lib/generators/graphql/relay.rb +63 -0
  12. data/lib/generators/graphql/relay_generator.rb +21 -0
  13. data/lib/generators/graphql/scalar_generator.rb +20 -0
  14. data/lib/generators/graphql/templates/base_argument.erb +6 -0
  15. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  16. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  17. data/lib/generators/graphql/templates/base_enum.erb +6 -0
  18. data/lib/generators/graphql/templates/base_field.erb +7 -0
  19. data/lib/generators/graphql/templates/base_input_object.erb +7 -0
  20. data/lib/generators/graphql/templates/base_interface.erb +9 -0
  21. data/lib/generators/graphql/templates/base_mutation.erb +10 -0
  22. data/lib/generators/graphql/templates/base_object.erb +7 -0
  23. data/lib/generators/graphql/templates/base_scalar.erb +6 -0
  24. data/lib/generators/graphql/templates/base_union.erb +6 -0
  25. data/lib/generators/graphql/templates/enum.erb +7 -0
  26. data/lib/generators/graphql/templates/graphql_controller.erb +52 -0
  27. data/lib/generators/graphql/templates/interface.erb +8 -0
  28. data/lib/generators/graphql/templates/loader.erb +19 -0
  29. data/lib/generators/graphql/templates/mutation.erb +16 -0
  30. data/lib/generators/graphql/templates/mutation_type.erb +12 -0
  31. data/lib/generators/graphql/templates/node_type.erb +9 -0
  32. data/lib/generators/graphql/templates/object.erb +8 -0
  33. data/lib/generators/graphql/templates/query_type.erb +15 -0
  34. data/lib/generators/graphql/templates/scalar.erb +15 -0
  35. data/lib/generators/graphql/templates/schema.erb +27 -0
  36. data/lib/generators/graphql/templates/union.erb +7 -0
  37. data/lib/generators/graphql/type_generator.rb +98 -0
  38. data/lib/generators/graphql/union_generator.rb +33 -0
  39. data/lib/graphql/analysis/analyze_query.rb +98 -0
  40. data/lib/graphql/analysis/ast/analyzer.rb +84 -0
  41. data/lib/graphql/analysis/ast/field_usage.rb +51 -0
  42. data/lib/graphql/analysis/ast/max_query_complexity.rb +23 -0
  43. data/lib/graphql/analysis/ast/max_query_depth.rb +22 -0
  44. data/lib/graphql/analysis/ast/query_complexity.rb +230 -0
  45. data/lib/graphql/analysis/ast/query_depth.rb +56 -0
  46. data/lib/graphql/analysis/ast/visitor.rb +268 -0
  47. data/lib/graphql/analysis/ast.rb +91 -0
  48. data/lib/graphql/analysis/field_usage.rb +45 -0
  49. data/lib/graphql/analysis/max_query_complexity.rb +26 -0
  50. data/lib/graphql/analysis/max_query_depth.rb +26 -0
  51. data/lib/graphql/analysis/query_complexity.rb +88 -0
  52. data/lib/graphql/analysis/query_depth.rb +43 -0
  53. data/lib/graphql/analysis/reducer_state.rb +48 -0
  54. data/lib/graphql/analysis.rb +9 -0
  55. data/lib/graphql/analysis_error.rb +5 -0
  56. data/lib/graphql/argument.rb +131 -0
  57. data/lib/graphql/authorization.rb +82 -0
  58. data/lib/graphql/backtrace/inspect_result.rb +50 -0
  59. data/lib/graphql/backtrace/legacy_tracer.rb +56 -0
  60. data/lib/graphql/backtrace/table.rb +159 -0
  61. data/lib/graphql/backtrace/traced_error.rb +54 -0
  62. data/lib/graphql/backtrace/tracer.rb +81 -0
  63. data/lib/graphql/backtrace.rb +64 -0
  64. data/lib/graphql/backwards_compatibility.rb +61 -0
  65. data/lib/graphql/base_type.rb +230 -0
  66. data/lib/graphql/boolean_type.rb +2 -0
  67. data/lib/graphql/coercion_error.rb +13 -0
  68. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +53 -0
  69. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +200 -0
  70. data/lib/graphql/compatibility/execution_specification.rb +436 -0
  71. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +111 -0
  72. data/lib/graphql/compatibility/lazy_execution_specification.rb +215 -0
  73. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +87 -0
  74. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +79 -0
  75. data/lib/graphql/compatibility/query_parser_specification.rb +266 -0
  76. data/lib/graphql/compatibility/schema_parser_specification.rb +682 -0
  77. data/lib/graphql/compatibility.rb +5 -0
  78. data/lib/graphql/dataloader/null_dataloader.rb +22 -0
  79. data/lib/graphql/dataloader/request.rb +19 -0
  80. data/lib/graphql/dataloader/request_all.rb +19 -0
  81. data/lib/graphql/dataloader/source.rb +155 -0
  82. data/lib/graphql/dataloader.rb +308 -0
  83. data/lib/graphql/define/assign_argument.rb +12 -0
  84. data/lib/graphql/define/assign_connection.rb +13 -0
  85. data/lib/graphql/define/assign_enum_value.rb +18 -0
  86. data/lib/graphql/define/assign_global_id_field.rb +11 -0
  87. data/lib/graphql/define/assign_mutation_function.rb +34 -0
  88. data/lib/graphql/define/assign_object_field.rb +42 -0
  89. data/lib/graphql/define/defined_object_proxy.rb +53 -0
  90. data/lib/graphql/define/instance_definable.rb +240 -0
  91. data/lib/graphql/define/no_definition_error.rb +7 -0
  92. data/lib/graphql/define/non_null_with_bang.rb +16 -0
  93. data/lib/graphql/define/type_definer.rb +31 -0
  94. data/lib/graphql/define.rb +31 -0
  95. data/lib/graphql/deprecated_dsl.rb +55 -0
  96. data/lib/graphql/deprecation.rb +9 -0
  97. data/lib/graphql/dig.rb +19 -0
  98. data/lib/graphql/directive/deprecated_directive.rb +2 -0
  99. data/lib/graphql/directive/include_directive.rb +2 -0
  100. data/lib/graphql/directive/skip_directive.rb +2 -0
  101. data/lib/graphql/directive.rb +107 -0
  102. data/lib/graphql/enum_type.rb +133 -0
  103. data/lib/graphql/execution/directive_checks.rb +37 -0
  104. data/lib/graphql/execution/errors.rb +163 -0
  105. data/lib/graphql/execution/execute.rb +333 -0
  106. data/lib/graphql/execution/flatten.rb +40 -0
  107. data/lib/graphql/execution/instrumentation.rb +92 -0
  108. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  109. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  110. data/lib/graphql/execution/interpreter/arguments_cache.rb +103 -0
  111. data/lib/graphql/execution/interpreter/execution_errors.rb +29 -0
  112. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  113. data/lib/graphql/execution/interpreter/resolve.rb +70 -0
  114. data/lib/graphql/execution/interpreter/runtime.rb +949 -0
  115. data/lib/graphql/execution/interpreter.rb +122 -0
  116. data/lib/graphql/execution/lazy/lazy_method_map.rb +98 -0
  117. data/lib/graphql/execution/lazy/resolve.rb +91 -0
  118. data/lib/graphql/execution/lazy.rb +83 -0
  119. data/lib/graphql/execution/lookahead.rb +307 -0
  120. data/lib/graphql/execution/multiplex.rb +214 -0
  121. data/lib/graphql/execution/typecast.rb +50 -0
  122. data/lib/graphql/execution.rb +11 -0
  123. data/lib/graphql/execution_error.rb +58 -0
  124. data/lib/graphql/field/resolve.rb +59 -0
  125. data/lib/graphql/field.rb +226 -0
  126. data/lib/graphql/filter.rb +53 -0
  127. data/lib/graphql/float_type.rb +2 -0
  128. data/lib/graphql/function.rb +128 -0
  129. data/lib/graphql/id_type.rb +2 -0
  130. data/lib/graphql/input_object_type.rb +138 -0
  131. data/lib/graphql/int_type.rb +2 -0
  132. data/lib/graphql/integer_decoding_error.rb +17 -0
  133. data/lib/graphql/integer_encoding_error.rb +36 -0
  134. data/lib/graphql/interface_type.rb +72 -0
  135. data/lib/graphql/internal_representation/document.rb +27 -0
  136. data/lib/graphql/internal_representation/node.rb +206 -0
  137. data/lib/graphql/internal_representation/print.rb +51 -0
  138. data/lib/graphql/internal_representation/rewrite.rb +184 -0
  139. data/lib/graphql/internal_representation/scope.rb +88 -0
  140. data/lib/graphql/internal_representation/visit.rb +36 -0
  141. data/lib/graphql/internal_representation.rb +7 -0
  142. data/lib/graphql/introspection/base_object.rb +13 -0
  143. data/lib/graphql/introspection/directive_location_enum.rb +15 -0
  144. data/lib/graphql/introspection/directive_type.rb +29 -0
  145. data/lib/graphql/introspection/dynamic_fields.rb +17 -0
  146. data/lib/graphql/introspection/entry_points.rb +35 -0
  147. data/lib/graphql/introspection/enum_value_type.rb +23 -0
  148. data/lib/graphql/introspection/field_type.rb +28 -0
  149. data/lib/graphql/introspection/input_value_type.rb +67 -0
  150. data/lib/graphql/introspection/introspection_query.rb +7 -0
  151. data/lib/graphql/introspection/schema_type.rb +44 -0
  152. data/lib/graphql/introspection/type_kind_enum.rb +13 -0
  153. data/lib/graphql/introspection/type_type.rb +95 -0
  154. data/lib/graphql/introspection.rb +114 -0
  155. data/lib/graphql/invalid_name_error.rb +11 -0
  156. data/lib/graphql/invalid_null_error.rb +50 -0
  157. data/lib/graphql/language/block_string.rb +99 -0
  158. data/lib/graphql/language/cache.rb +37 -0
  159. data/lib/graphql/language/definition_slice.rb +41 -0
  160. data/lib/graphql/language/document_from_schema_definition.rb +347 -0
  161. data/lib/graphql/language/generation.rb +24 -0
  162. data/lib/graphql/language/lexer.rb +1467 -0
  163. data/lib/graphql/language/lexer.rl +258 -0
  164. data/lib/graphql/language/nodes.rb +707 -0
  165. data/lib/graphql/language/parser.rb +1974 -0
  166. data/lib/graphql/language/parser.y +544 -0
  167. data/lib/graphql/language/printer.rb +366 -0
  168. data/lib/graphql/language/sanitized_printer.rb +222 -0
  169. data/lib/graphql/language/token.rb +34 -0
  170. data/lib/graphql/language/visitor.rb +242 -0
  171. data/lib/graphql/language.rb +36 -0
  172. data/lib/graphql/list_type.rb +80 -0
  173. data/lib/graphql/load_application_object_failed_error.rb +22 -0
  174. data/lib/graphql/name_validator.rb +11 -0
  175. data/lib/graphql/non_null_type.rb +71 -0
  176. data/lib/graphql/object_type.rb +130 -0
  177. data/lib/graphql/pagination/active_record_relation_connection.rb +48 -0
  178. data/lib/graphql/pagination/array_connection.rb +77 -0
  179. data/lib/graphql/pagination/connection.rb +226 -0
  180. data/lib/graphql/pagination/connections.rb +160 -0
  181. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  182. data/lib/graphql/pagination/relation_connection.rb +196 -0
  183. data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
  184. data/lib/graphql/pagination.rb +6 -0
  185. data/lib/graphql/parse_error.rb +24 -0
  186. data/lib/graphql/query/arguments.rb +189 -0
  187. data/lib/graphql/query/arguments_cache.rb +24 -0
  188. data/lib/graphql/query/context.rb +371 -0
  189. data/lib/graphql/query/executor.rb +52 -0
  190. data/lib/graphql/query/fingerprint.rb +26 -0
  191. data/lib/graphql/query/input_validation_result.rb +43 -0
  192. data/lib/graphql/query/literal_input.rb +136 -0
  193. data/lib/graphql/query/null_context.rb +55 -0
  194. data/lib/graphql/query/result.rb +63 -0
  195. data/lib/graphql/query/serial_execution/field_resolution.rb +92 -0
  196. data/lib/graphql/query/serial_execution/operation_resolution.rb +19 -0
  197. data/lib/graphql/query/serial_execution/selection_resolution.rb +23 -0
  198. data/lib/graphql/query/serial_execution/value_resolution.rb +87 -0
  199. data/lib/graphql/query/serial_execution.rb +40 -0
  200. data/lib/graphql/query/validation_pipeline.rb +139 -0
  201. data/lib/graphql/query/variable_validation_error.rb +44 -0
  202. data/lib/graphql/query/variables.rb +78 -0
  203. data/lib/graphql/query.rb +454 -0
  204. data/lib/graphql/railtie.rb +117 -0
  205. data/lib/graphql/rake_task/validate.rb +63 -0
  206. data/lib/graphql/rake_task.rb +145 -0
  207. data/lib/graphql/relay/array_connection.rb +83 -0
  208. data/lib/graphql/relay/base_connection.rb +189 -0
  209. data/lib/graphql/relay/connection_instrumentation.rb +54 -0
  210. data/lib/graphql/relay/connection_resolve.rb +43 -0
  211. data/lib/graphql/relay/connection_type.rb +41 -0
  212. data/lib/graphql/relay/edge.rb +27 -0
  213. data/lib/graphql/relay/edge_type.rb +19 -0
  214. data/lib/graphql/relay/edges_instrumentation.rb +39 -0
  215. data/lib/graphql/relay/global_id_resolve.rb +18 -0
  216. data/lib/graphql/relay/mongo_relation_connection.rb +50 -0
  217. data/lib/graphql/relay/mutation/instrumentation.rb +23 -0
  218. data/lib/graphql/relay/mutation/resolve.rb +56 -0
  219. data/lib/graphql/relay/mutation/result.rb +38 -0
  220. data/lib/graphql/relay/mutation.rb +106 -0
  221. data/lib/graphql/relay/node.rb +39 -0
  222. data/lib/graphql/relay/page_info.rb +7 -0
  223. data/lib/graphql/relay/range_add.rb +59 -0
  224. data/lib/graphql/relay/relation_connection.rb +188 -0
  225. data/lib/graphql/relay/type_extensions.rb +32 -0
  226. data/lib/graphql/relay.rb +18 -0
  227. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  228. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  229. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  230. data/lib/graphql/rubocop.rb +4 -0
  231. data/lib/graphql/runtime_type_error.rb +5 -0
  232. data/lib/graphql/scalar_type.rb +91 -0
  233. data/lib/graphql/schema/addition.rb +247 -0
  234. data/lib/graphql/schema/argument.rb +383 -0
  235. data/lib/graphql/schema/base_64_bp.rb +26 -0
  236. data/lib/graphql/schema/base_64_encoder.rb +21 -0
  237. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +47 -0
  238. data/lib/graphql/schema/build_from_definition/resolve_map.rb +78 -0
  239. data/lib/graphql/schema/build_from_definition.rb +477 -0
  240. data/lib/graphql/schema/built_in_types.rb +12 -0
  241. data/lib/graphql/schema/catchall_middleware.rb +35 -0
  242. data/lib/graphql/schema/default_parse_error.rb +10 -0
  243. data/lib/graphql/schema/default_type_error.rb +17 -0
  244. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  245. data/lib/graphql/schema/directive/feature.rb +66 -0
  246. data/lib/graphql/schema/directive/flagged.rb +57 -0
  247. data/lib/graphql/schema/directive/include.rb +25 -0
  248. data/lib/graphql/schema/directive/skip.rb +25 -0
  249. data/lib/graphql/schema/directive/transform.rb +60 -0
  250. data/lib/graphql/schema/directive.rb +210 -0
  251. data/lib/graphql/schema/enum.rb +193 -0
  252. data/lib/graphql/schema/enum_value.rb +97 -0
  253. data/lib/graphql/schema/field/connection_extension.rb +76 -0
  254. data/lib/graphql/schema/field/scope_extension.rb +22 -0
  255. data/lib/graphql/schema/field.rb +880 -0
  256. data/lib/graphql/schema/field_extension.rb +69 -0
  257. data/lib/graphql/schema/find_inherited_value.rb +36 -0
  258. data/lib/graphql/schema/finder.rb +155 -0
  259. data/lib/graphql/schema/input_object.rb +253 -0
  260. data/lib/graphql/schema/interface.rb +136 -0
  261. data/lib/graphql/schema/introspection_system.rb +169 -0
  262. data/lib/graphql/schema/invalid_type_error.rb +7 -0
  263. data/lib/graphql/schema/late_bound_type.rb +33 -0
  264. data/lib/graphql/schema/list.rb +75 -0
  265. data/lib/graphql/schema/loader.rb +226 -0
  266. data/lib/graphql/schema/member/accepts_definition.rb +159 -0
  267. data/lib/graphql/schema/member/base_dsl_methods.rb +129 -0
  268. data/lib/graphql/schema/member/build_type.rb +180 -0
  269. data/lib/graphql/schema/member/cached_graphql_definition.rb +31 -0
  270. data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
  271. data/lib/graphql/schema/member/has_arguments.rb +332 -0
  272. data/lib/graphql/schema/member/has_ast_node.rb +20 -0
  273. data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
  274. data/lib/graphql/schema/member/has_directives.rb +98 -0
  275. data/lib/graphql/schema/member/has_fields.rb +163 -0
  276. data/lib/graphql/schema/member/has_interfaces.rb +90 -0
  277. data/lib/graphql/schema/member/has_path.rb +25 -0
  278. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  279. data/lib/graphql/schema/member/has_validators.rb +31 -0
  280. data/lib/graphql/schema/member/instrumentation.rb +131 -0
  281. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -0
  282. data/lib/graphql/schema/member/scoped.rb +21 -0
  283. data/lib/graphql/schema/member/type_system_helpers.rb +38 -0
  284. data/lib/graphql/schema/member/validates_input.rb +33 -0
  285. data/lib/graphql/schema/member.rb +161 -0
  286. data/lib/graphql/schema/middleware_chain.rb +82 -0
  287. data/lib/graphql/schema/mutation.rb +94 -0
  288. data/lib/graphql/schema/non_null.rb +67 -0
  289. data/lib/graphql/schema/null_mask.rb +11 -0
  290. data/lib/graphql/schema/object.rb +150 -0
  291. data/lib/graphql/schema/possible_types.rb +44 -0
  292. data/lib/graphql/schema/printer.rb +100 -0
  293. data/lib/graphql/schema/relay_classic_mutation.rb +160 -0
  294. data/lib/graphql/schema/rescue_middleware.rb +60 -0
  295. data/lib/graphql/schema/resolver/has_payload_type.rb +96 -0
  296. data/lib/graphql/schema/resolver.rb +397 -0
  297. data/lib/graphql/schema/scalar.rb +69 -0
  298. data/lib/graphql/schema/subscription.rb +155 -0
  299. data/lib/graphql/schema/timeout.rb +123 -0
  300. data/lib/graphql/schema/timeout_middleware.rb +88 -0
  301. data/lib/graphql/schema/traversal.rb +228 -0
  302. data/lib/graphql/schema/type_expression.rb +43 -0
  303. data/lib/graphql/schema/type_membership.rb +48 -0
  304. data/lib/graphql/schema/union.rb +95 -0
  305. data/lib/graphql/schema/unique_within_type.rb +34 -0
  306. data/lib/graphql/schema/validation.rb +313 -0
  307. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  308. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  309. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  310. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  311. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  312. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  313. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  314. data/lib/graphql/schema/validator/required_validator.rb +68 -0
  315. data/lib/graphql/schema/validator.rb +174 -0
  316. data/lib/graphql/schema/warden.rb +409 -0
  317. data/lib/graphql/schema/wrapper.rb +29 -0
  318. data/lib/graphql/schema.rb +1945 -0
  319. data/lib/graphql/static_validation/all_rules.rb +40 -0
  320. data/lib/graphql/static_validation/base_visitor.rb +217 -0
  321. data/lib/graphql/static_validation/default_visitor.rb +15 -0
  322. data/lib/graphql/static_validation/definition_dependencies.rb +198 -0
  323. data/lib/graphql/static_validation/error.rb +46 -0
  324. data/lib/graphql/static_validation/interpreter_visitor.rb +14 -0
  325. data/lib/graphql/static_validation/literal_validator.rb +139 -0
  326. data/lib/graphql/static_validation/no_validate_visitor.rb +10 -0
  327. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +66 -0
  328. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +48 -0
  329. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +31 -0
  330. data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +30 -0
  331. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +71 -0
  332. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +37 -0
  333. data/lib/graphql/static_validation/rules/directives_are_defined.rb +23 -0
  334. data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +29 -0
  335. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +65 -0
  336. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +31 -0
  337. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +30 -0
  338. data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +32 -0
  339. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +73 -0
  340. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +31 -0
  341. data/lib/graphql/static_validation/rules/fields_will_merge.rb +418 -0
  342. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +53 -0
  343. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +30 -0
  344. data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +29 -0
  345. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +73 -0
  346. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +35 -0
  347. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +39 -0
  348. data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +29 -0
  349. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +21 -0
  350. data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +29 -0
  351. data/lib/graphql/static_validation/rules/fragments_are_named.rb +16 -0
  352. data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +26 -0
  353. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +37 -0
  354. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +30 -0
  355. data/lib/graphql/static_validation/rules/fragments_are_used.rb +32 -0
  356. data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +29 -0
  357. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  358. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  359. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +17 -0
  360. data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +26 -0
  361. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +41 -0
  362. data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +25 -0
  363. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +36 -0
  364. data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +28 -0
  365. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +37 -0
  366. data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +35 -0
  367. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +59 -0
  368. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +35 -0
  369. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +17 -0
  370. data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +26 -0
  371. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +50 -0
  372. data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +29 -0
  373. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +46 -0
  374. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +39 -0
  375. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +24 -0
  376. data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +29 -0
  377. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +153 -0
  378. data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +38 -0
  379. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +39 -0
  380. data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +32 -0
  381. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +155 -0
  382. data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +37 -0
  383. data/lib/graphql/static_validation/type_stack.rb +216 -0
  384. data/lib/graphql/static_validation/validation_context.rb +49 -0
  385. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  386. data/lib/graphql/static_validation/validator.rb +96 -0
  387. data/lib/graphql/static_validation.rb +19 -0
  388. data/lib/graphql/string_encoding_error.rb +20 -0
  389. data/lib/graphql/string_type.rb +2 -0
  390. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +245 -0
  391. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  392. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +21 -0
  393. data/lib/graphql/subscriptions/event.rb +144 -0
  394. data/lib/graphql/subscriptions/instrumentation.rb +79 -0
  395. data/lib/graphql/subscriptions/serialize.rb +138 -0
  396. data/lib/graphql/subscriptions/subscription_root.rb +76 -0
  397. data/lib/graphql/subscriptions.rb +299 -0
  398. data/lib/graphql/tracing/active_support_notifications_tracing.rb +35 -0
  399. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  400. data/lib/graphql/tracing/appsignal_tracing.rb +51 -0
  401. data/lib/graphql/tracing/data_dog_tracing.rb +76 -0
  402. data/lib/graphql/tracing/new_relic_tracing.rb +51 -0
  403. data/lib/graphql/tracing/platform_tracing.rb +139 -0
  404. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +32 -0
  405. data/lib/graphql/tracing/prometheus_tracing.rb +67 -0
  406. data/lib/graphql/tracing/scout_tracing.rb +54 -0
  407. data/lib/graphql/tracing/skylight_tracing.rb +70 -0
  408. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  409. data/lib/graphql/tracing.rb +95 -0
  410. data/lib/graphql/type_kinds.rb +77 -0
  411. data/lib/graphql/types/big_int.rb +23 -0
  412. data/lib/graphql/types/boolean.rb +18 -0
  413. data/lib/graphql/types/float.rb +19 -0
  414. data/lib/graphql/types/id.rb +24 -0
  415. data/lib/graphql/types/int.rb +36 -0
  416. data/lib/graphql/types/iso_8601_date.rb +34 -0
  417. data/lib/graphql/types/iso_8601_date_time.rb +65 -0
  418. data/lib/graphql/types/json.rb +25 -0
  419. data/lib/graphql/types/relay/base_connection.rb +39 -0
  420. data/lib/graphql/types/relay/base_edge.rb +29 -0
  421. data/lib/graphql/types/relay/connection_behaviors.rb +156 -0
  422. data/lib/graphql/types/relay/default_relay.rb +27 -0
  423. data/lib/graphql/types/relay/edge_behaviors.rb +53 -0
  424. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  425. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  426. data/lib/graphql/types/relay/node.rb +15 -0
  427. data/lib/graphql/types/relay/node_behaviors.rb +15 -0
  428. data/lib/graphql/types/relay/node_field.rb +25 -0
  429. data/lib/graphql/types/relay/nodes_field.rb +27 -0
  430. data/lib/graphql/types/relay/page_info.rb +11 -0
  431. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  432. data/lib/graphql/types/relay.rb +41 -0
  433. data/lib/graphql/types/string.rb +29 -0
  434. data/lib/graphql/types.rb +11 -0
  435. data/lib/graphql/unauthorized_error.rb +29 -0
  436. data/lib/graphql/unauthorized_field_error.rb +23 -0
  437. data/lib/graphql/union_type.rb +115 -0
  438. data/lib/graphql/unresolved_type_error.rb +35 -0
  439. data/lib/graphql/upgrader/member.rb +937 -0
  440. data/lib/graphql/upgrader/schema.rb +38 -0
  441. data/lib/graphql/version.rb +4 -0
  442. data/lib/graphql.rb +168 -0
  443. data/readme.md +49 -0
  444. metadata +714 -0
@@ -0,0 +1,707 @@
1
+ # frozen_string_literal: true
2
+ module GraphQL
3
+ module Language
4
+ module Nodes
5
+ # {AbstractNode} is the base class for all nodes in a GraphQL AST.
6
+ #
7
+ # It provides some APIs for working with ASTs:
8
+ # - `children` returns all AST nodes attached to this one. Used for tree traversal.
9
+ # - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
10
+ # - `to_query_string` turns an AST node into a GraphQL string
11
+ class AbstractNode
12
+ module DefinitionNode
13
+ # This AST node's {#line} returns the first line, which may be the description.
14
+ # @return [Integer] The first line of the definition (not the description)
15
+ attr_reader :definition_line
16
+
17
+ def initialize(options = {})
18
+ @definition_line = options.delete(:definition_line)
19
+ super(options)
20
+ end
21
+ end
22
+
23
+ attr_reader :line, :col, :filename
24
+
25
+ # Initialize a node by extracting its position,
26
+ # then calling the class's `initialize_node` method.
27
+ # @param options [Hash] Initial attributes for this node
28
+ def initialize(options = {})
29
+ if options.key?(:position_source)
30
+ position_source = options.delete(:position_source)
31
+ @line = position_source.line
32
+ @col = position_source.col
33
+ end
34
+
35
+ @filename = options.delete(:filename)
36
+
37
+ initialize_node(**options)
38
+ end
39
+
40
+ # Value equality
41
+ # @return [Boolean] True if `self` is equivalent to `other`
42
+ def ==(other)
43
+ return true if equal?(other)
44
+ other.kind_of?(self.class) &&
45
+ other.scalars == self.scalars &&
46
+ other.children == self.children
47
+ end
48
+
49
+ NO_CHILDREN = [].freeze
50
+
51
+ # @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
52
+ def children
53
+ NO_CHILDREN
54
+ end
55
+
56
+ # @return [Array<Integer, Float, String, Boolean, Array>] Scalar values attached to this node
57
+ def scalars
58
+ NO_CHILDREN
59
+ end
60
+
61
+ # This might be unnecessary, but its easiest to add it here.
62
+ def initialize_copy(other)
63
+ @children = nil
64
+ @scalars = nil
65
+ @query_string = nil
66
+ end
67
+
68
+ def children_method_name
69
+ self.class.children_method_name
70
+ end
71
+
72
+ def position
73
+ [line, col]
74
+ end
75
+
76
+ def to_query_string(printer: GraphQL::Language::Printer.new)
77
+ if printer.is_a?(GraphQL::Language::Printer)
78
+ @query_string ||= printer.print(self)
79
+ else
80
+ printer.print(self)
81
+ end
82
+ end
83
+
84
+ # This creates a copy of `self`, with `new_options` applied.
85
+ # @param new_options [Hash]
86
+ # @return [AbstractNode] a shallow copy of `self`
87
+ def merge(new_options)
88
+ dup.merge!(new_options)
89
+ end
90
+
91
+ # Copy `self`, but modify the copy so that `previous_child` is replaced by `new_child`
92
+ def replace_child(previous_child, new_child)
93
+ # Figure out which list `previous_child` may be found in
94
+ method_name = previous_child.children_method_name
95
+ # Get the value from this (original) node
96
+ prev_children = public_send(method_name)
97
+ if prev_children.is_a?(Array)
98
+ # Copy that list, and replace `previous_child` with `new_child`
99
+ # in the list.
100
+ new_children = prev_children.dup
101
+ prev_idx = new_children.index(previous_child)
102
+ new_children[prev_idx] = new_child
103
+ else
104
+ # Use the new value for the given attribute
105
+ new_children = new_child
106
+ end
107
+ # Copy this node, but with the new child value
108
+ copy_of_self = merge(method_name => new_children)
109
+ # Return the copy:
110
+ copy_of_self
111
+ end
112
+
113
+ # TODO DRY with `replace_child`
114
+ def delete_child(previous_child)
115
+ # Figure out which list `previous_child` may be found in
116
+ method_name = previous_child.children_method_name
117
+ # Copy that list, and delete previous_child
118
+ new_children = public_send(method_name).dup
119
+ new_children.delete(previous_child)
120
+ # Copy this node, but with the new list of children:
121
+ copy_of_self = merge(method_name => new_children)
122
+ # Return the copy:
123
+ copy_of_self
124
+ end
125
+
126
+ protected
127
+
128
+ def merge!(new_options)
129
+ new_options.each do |key, value|
130
+ instance_variable_set(:"@#{key}", value)
131
+ end
132
+ self
133
+ end
134
+
135
+ class << self
136
+ # Add a default `#visit_method` and `#children_method_name` using the class name
137
+ def inherited(child_class)
138
+ super
139
+ name_underscored = child_class.name
140
+ .split("::").last
141
+ .gsub(/([a-z])([A-Z])/,'\1_\2') # insert underscores
142
+ .downcase # remove caps
143
+
144
+ child_class.module_eval <<-RUBY
145
+ def visit_method
146
+ :on_#{name_underscored}
147
+ end
148
+
149
+ class << self
150
+ attr_accessor :children_method_name
151
+ end
152
+ self.children_method_name = :#{name_underscored}s
153
+ RUBY
154
+ end
155
+
156
+ private
157
+
158
+ # Name accessors which return lists of nodes,
159
+ # along with the kind of node they return, if possible.
160
+ # - Add a reader for these children
161
+ # - Add a persistent update method to add a child
162
+ # - Generate a `#children` method
163
+ def children_methods(children_of_type)
164
+ if defined?(@children_methods)
165
+ raise "Can't re-call .children_methods for #{self} (already have: #{@children_methods})"
166
+ else
167
+ @children_methods = children_of_type
168
+ end
169
+
170
+ if children_of_type == false
171
+ @children_methods = {}
172
+ # skip
173
+ else
174
+
175
+ children_of_type.each do |method_name, node_type|
176
+ module_eval <<-RUBY, __FILE__, __LINE__
177
+ # A reader for these children
178
+ attr_reader :#{method_name}
179
+ RUBY
180
+
181
+ if node_type
182
+ # Only generate a method if we know what kind of node to make
183
+ module_eval <<-RUBY, __FILE__, __LINE__
184
+ # Singular method: create a node with these options
185
+ # and return a new `self` which includes that node in this list.
186
+ def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
187
+ merge(#{method_name}: #{method_name} + [#{node_type.name}.new(node_opts)])
188
+ end
189
+ RUBY
190
+ end
191
+ end
192
+
193
+ if children_of_type.size == 1
194
+ module_eval <<-RUBY, __FILE__, __LINE__
195
+ alias :children #{children_of_type.keys.first}
196
+ RUBY
197
+ else
198
+ module_eval <<-RUBY, __FILE__, __LINE__
199
+ def children
200
+ @children ||= (#{children_of_type.keys.map { |k| "@#{k}" }.join(" + ")}).freeze
201
+ end
202
+ RUBY
203
+ end
204
+ end
205
+
206
+ if defined?(@scalar_methods)
207
+ if !method_defined?(:initialize_node)
208
+ generate_initialize_node
209
+ else
210
+ # This method was defined manually
211
+ end
212
+ else
213
+ raise "Can't generate_initialize_node because scalar_methods wasn't called; call it before children_methods"
214
+ end
215
+ end
216
+
217
+ # These methods return a plain Ruby value, not another node
218
+ # - Add reader methods
219
+ # - Add a `#scalars` method
220
+ def scalar_methods(*method_names)
221
+ if defined?(@scalar_methods)
222
+ raise "Can't re-call .scalar_methods for #{self} (already have: #{@scalar_methods})"
223
+ else
224
+ @scalar_methods = method_names
225
+ end
226
+
227
+ if method_names == [false]
228
+ @scalar_methods = []
229
+ # skip it
230
+ else
231
+ module_eval <<-RUBY, __FILE__, __LINE__
232
+ # add readers for each scalar
233
+ attr_reader #{method_names.map { |m| ":#{m}"}.join(", ")}
234
+
235
+ def scalars
236
+ @scalars ||= [#{method_names.map { |k| "@#{k}" }.join(", ")}].freeze
237
+ end
238
+ RUBY
239
+ end
240
+ end
241
+
242
+ def generate_initialize_node
243
+ scalar_method_names = @scalar_methods
244
+ # TODO: These probably should be scalar methods, but `types` returns an array
245
+ [:types, :description].each do |extra_method|
246
+ if method_defined?(extra_method)
247
+ scalar_method_names += [extra_method]
248
+ end
249
+ end
250
+
251
+ all_method_names = scalar_method_names + @children_methods.keys
252
+ if all_method_names.include?(:alias)
253
+ # Rather than complicating this special case,
254
+ # let it be overridden (in field)
255
+ return
256
+ else
257
+ arguments = scalar_method_names.map { |m| "#{m}: nil"} +
258
+ @children_methods.keys.map { |m| "#{m}: NO_CHILDREN" }
259
+
260
+ assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
261
+ @children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
262
+
263
+ module_eval <<-RUBY, __FILE__, __LINE__
264
+ def initialize_node #{arguments.join(", ")}
265
+ #{assignments.join("\n")}
266
+ end
267
+ RUBY
268
+ end
269
+ end
270
+ end
271
+ end
272
+
273
+ # Base class for non-null type names and list type names
274
+ class WrapperType < AbstractNode
275
+ scalar_methods :of_type
276
+ children_methods(false)
277
+ end
278
+
279
+ # Base class for nodes whose only value is a name (no child nodes or other scalars)
280
+ class NameOnlyNode < AbstractNode
281
+ scalar_methods :name
282
+ children_methods(false)
283
+ end
284
+
285
+ # A key-value pair for a field's inputs
286
+ class Argument < AbstractNode
287
+ scalar_methods :name, :value
288
+ children_methods(false)
289
+
290
+ # @!attribute name
291
+ # @return [String] the key for this argument
292
+
293
+ # @!attribute value
294
+ # @return [String, Float, Integer, Boolean, Array, InputObject] The value passed for this key
295
+
296
+ def children
297
+ @children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
298
+ end
299
+ end
300
+
301
+ class Directive < AbstractNode
302
+ scalar_methods :name
303
+ children_methods(arguments: GraphQL::Language::Nodes::Argument)
304
+ end
305
+
306
+ class DirectiveLocation < NameOnlyNode
307
+ end
308
+
309
+ class DirectiveDefinition < AbstractNode
310
+ include DefinitionNode
311
+ attr_reader :description
312
+ scalar_methods :name
313
+ children_methods(
314
+ locations: Nodes::DirectiveLocation,
315
+ arguments: Nodes::Argument,
316
+ )
317
+ end
318
+
319
+ # This is the AST root for normal queries
320
+ #
321
+ # @example Deriving a document by parsing a string
322
+ # document = GraphQL.parse(query_string)
323
+ #
324
+ # @example Creating a string from a document
325
+ # document.to_query_string
326
+ # # { ... }
327
+ #
328
+ # @example Creating a custom string from a document
329
+ # class VariableScrubber < GraphQL::Language::Printer
330
+ # def print_argument(arg)
331
+ # "#{arg.name}: <HIDDEN>"
332
+ # end
333
+ # end
334
+ #
335
+ # document.to_query_string(printer: VariableSrubber.new)
336
+ #
337
+ class Document < AbstractNode
338
+ scalar_methods false
339
+ children_methods(definitions: nil)
340
+ # @!attribute definitions
341
+ # @return [Array<OperationDefinition, FragmentDefinition>] top-level GraphQL units: operations or fragments
342
+
343
+ def slice_definition(name)
344
+ GraphQL::Language::DefinitionSlice.slice(self, name)
345
+ end
346
+ end
347
+
348
+ # An enum value. The string is available as {#name}.
349
+ class Enum < NameOnlyNode
350
+ end
351
+
352
+ # A null value literal.
353
+ class NullValue < NameOnlyNode
354
+ end
355
+
356
+ # A single selection in a GraphQL query.
357
+ class Field < AbstractNode
358
+ NONE = [].freeze
359
+
360
+ scalar_methods :name, :alias
361
+ children_methods({
362
+ arguments: GraphQL::Language::Nodes::Argument,
363
+ selections: GraphQL::Language::Nodes::Field,
364
+ directives: GraphQL::Language::Nodes::Directive,
365
+ })
366
+
367
+ # @!attribute selections
368
+ # @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
369
+
370
+ def initialize_node(attributes)
371
+ @name = attributes[:name]
372
+ @arguments = attributes[:arguments] || NONE
373
+ @directives = attributes[:directives] || NONE
374
+ @selections = attributes[:selections] || NONE
375
+ # oops, alias is a keyword:
376
+ @alias = attributes[:alias]
377
+ end
378
+
379
+ # Override this because default is `:fields`
380
+ self.children_method_name = :selections
381
+ end
382
+
383
+ # A reusable fragment, defined at document-level.
384
+ class FragmentDefinition < AbstractNode
385
+ # @!attribute name
386
+ # @return [String] the identifier for this fragment, which may be applied with `...#{name}`
387
+
388
+ # @!attribute type
389
+ # @return [String] the type condition for this fragment (name of type which it may apply to)
390
+ def initialize_node(name: nil, type: nil, directives: [], selections: [])
391
+ @name = name
392
+ @type = type
393
+ @directives = directives
394
+ @selections = selections
395
+ end
396
+
397
+ scalar_methods :name, :type
398
+ children_methods({
399
+ selections: GraphQL::Language::Nodes::Field,
400
+ directives: GraphQL::Language::Nodes::Directive,
401
+ })
402
+
403
+ self.children_method_name = :definitions
404
+ end
405
+
406
+ # Application of a named fragment in a selection
407
+ class FragmentSpread < AbstractNode
408
+ scalar_methods :name
409
+ children_methods(directives: GraphQL::Language::Nodes::Directive)
410
+
411
+ self.children_method_name = :selections
412
+
413
+ # @!attribute name
414
+ # @return [String] The identifier of the fragment to apply, corresponds with {FragmentDefinition#name}
415
+ end
416
+
417
+ # An unnamed fragment, defined directly in the query with `... { }`
418
+ class InlineFragment < AbstractNode
419
+ scalar_methods :type
420
+ children_methods({
421
+ selections: GraphQL::Language::Nodes::Field,
422
+ directives: GraphQL::Language::Nodes::Directive,
423
+ })
424
+
425
+ self.children_method_name = :selections
426
+
427
+ # @!attribute type
428
+ # @return [String, nil] Name of the type this fragment applies to, or `nil` if this fragment applies to any type
429
+ end
430
+
431
+ # A collection of key-value inputs which may be a field argument
432
+ class InputObject < AbstractNode
433
+ scalar_methods(false)
434
+ children_methods(arguments: GraphQL::Language::Nodes::Argument)
435
+
436
+ # @!attribute arguments
437
+ # @return [Array<Nodes::Argument>] A list of key-value pairs inside this input object
438
+
439
+ # @return [Hash<String, Any>] Recursively turn this input object into a Ruby Hash
440
+ def to_h(options={})
441
+ arguments.inject({}) do |memo, pair|
442
+ v = pair.value
443
+ memo[pair.name] = serialize_value_for_hash v
444
+ memo
445
+ end
446
+ end
447
+
448
+ self.children_method_name = :value
449
+
450
+ private
451
+
452
+ def serialize_value_for_hash(value)
453
+ case value
454
+ when InputObject
455
+ value.to_h
456
+ when Array
457
+ value.map do |v|
458
+ serialize_value_for_hash v
459
+ end
460
+ when Enum
461
+ value.name
462
+ when NullValue
463
+ nil
464
+ else
465
+ value
466
+ end
467
+ end
468
+ end
469
+
470
+ # A list type definition, denoted with `[...]` (used for variable type definitions)
471
+ class ListType < WrapperType
472
+ end
473
+
474
+ # A non-null type definition, denoted with `...!` (used for variable type definitions)
475
+ class NonNullType < WrapperType
476
+ end
477
+
478
+ # An operation-level query variable
479
+ class VariableDefinition < AbstractNode
480
+ scalar_methods :name, :type, :default_value
481
+ children_methods false
482
+ # @!attribute default_value
483
+ # @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
484
+
485
+ # @!attribute type
486
+ # @return [TypeName, NonNullType, ListType] The expected type of this value
487
+
488
+ # @!attribute name
489
+ # @return [String] The identifier for this variable, _without_ `$`
490
+
491
+ self.children_method_name = :variables
492
+ end
493
+
494
+ # A query, mutation or subscription.
495
+ # May be anonymous or named.
496
+ # May be explicitly typed (eg `mutation { ... }`) or implicitly a query (eg `{ ... }`).
497
+ class OperationDefinition < AbstractNode
498
+ scalar_methods :operation_type, :name
499
+ children_methods({
500
+ variables: GraphQL::Language::Nodes::VariableDefinition,
501
+ selections: GraphQL::Language::Nodes::Field,
502
+ directives: GraphQL::Language::Nodes::Directive,
503
+ })
504
+
505
+ # @!attribute variables
506
+ # @return [Array<VariableDefinition>] Variable $definitions for this operation
507
+
508
+ # @!attribute selections
509
+ # @return [Array<Field>] Root-level fields on this operation
510
+
511
+ # @!attribute operation_type
512
+ # @return [String, nil] The root type for this operation, or `nil` for implicit `"query"`
513
+
514
+ # @!attribute name
515
+ # @return [String, nil] The name for this operation, or `nil` if unnamed
516
+
517
+ self.children_method_name = :definitions
518
+ end
519
+
520
+ # A type name, used for variable definitions
521
+ class TypeName < NameOnlyNode
522
+ end
523
+
524
+ # Usage of a variable in a query. Name does _not_ include `$`.
525
+ class VariableIdentifier < NameOnlyNode
526
+ self.children_method_name = :value
527
+ end
528
+
529
+ class SchemaDefinition < AbstractNode
530
+ include DefinitionNode
531
+ scalar_methods :query, :mutation, :subscription
532
+ children_methods({
533
+ directives: GraphQL::Language::Nodes::Directive,
534
+ })
535
+ self.children_method_name = :definitions
536
+ end
537
+
538
+ class SchemaExtension < AbstractNode
539
+ scalar_methods :query, :mutation, :subscription
540
+ children_methods({
541
+ directives: GraphQL::Language::Nodes::Directive,
542
+ })
543
+ self.children_method_name = :definitions
544
+ end
545
+
546
+ class ScalarTypeDefinition < AbstractNode
547
+ include DefinitionNode
548
+ attr_reader :description
549
+ scalar_methods :name
550
+ children_methods({
551
+ directives: GraphQL::Language::Nodes::Directive,
552
+ })
553
+ self.children_method_name = :definitions
554
+ end
555
+
556
+ class ScalarTypeExtension < AbstractNode
557
+ scalar_methods :name
558
+ children_methods({
559
+ directives: GraphQL::Language::Nodes::Directive,
560
+ })
561
+ self.children_method_name = :definitions
562
+ end
563
+
564
+ class InputValueDefinition < AbstractNode
565
+ include DefinitionNode
566
+ attr_reader :description
567
+ scalar_methods :name, :type, :default_value
568
+ children_methods({
569
+ directives: GraphQL::Language::Nodes::Directive,
570
+ })
571
+ self.children_method_name = :fields
572
+ end
573
+
574
+ class FieldDefinition < AbstractNode
575
+ include DefinitionNode
576
+ attr_reader :description
577
+ scalar_methods :name, :type
578
+ children_methods({
579
+ directives: GraphQL::Language::Nodes::Directive,
580
+ arguments: GraphQL::Language::Nodes::InputValueDefinition,
581
+ })
582
+ self.children_method_name = :fields
583
+
584
+ # this is so that `children_method_name` of `InputValueDefinition` works properly
585
+ # with `#replace_child`
586
+ alias :fields :arguments
587
+ def merge(new_options)
588
+ if (f = new_options.delete(:fields))
589
+ new_options[:arguments] = f
590
+ end
591
+ super
592
+ end
593
+ end
594
+
595
+ class ObjectTypeDefinition < AbstractNode
596
+ include DefinitionNode
597
+ attr_reader :description
598
+ scalar_methods :name, :interfaces
599
+ children_methods({
600
+ directives: GraphQL::Language::Nodes::Directive,
601
+ fields: GraphQL::Language::Nodes::FieldDefinition,
602
+ })
603
+ self.children_method_name = :definitions
604
+ end
605
+
606
+ class ObjectTypeExtension < AbstractNode
607
+ scalar_methods :name, :interfaces
608
+ children_methods({
609
+ directives: GraphQL::Language::Nodes::Directive,
610
+ fields: GraphQL::Language::Nodes::FieldDefinition,
611
+ })
612
+ self.children_method_name = :definitions
613
+ end
614
+
615
+ class InterfaceTypeDefinition < AbstractNode
616
+ include DefinitionNode
617
+ attr_reader :description
618
+ scalar_methods :name
619
+ children_methods({
620
+ interfaces: GraphQL::Language::Nodes::TypeName,
621
+ directives: GraphQL::Language::Nodes::Directive,
622
+ fields: GraphQL::Language::Nodes::FieldDefinition,
623
+ })
624
+ self.children_method_name = :definitions
625
+ end
626
+
627
+ class InterfaceTypeExtension < AbstractNode
628
+ scalar_methods :name
629
+ children_methods({
630
+ interfaces: GraphQL::Language::Nodes::TypeName,
631
+ directives: GraphQL::Language::Nodes::Directive,
632
+ fields: GraphQL::Language::Nodes::FieldDefinition,
633
+ })
634
+ self.children_method_name = :definitions
635
+ end
636
+
637
+ class UnionTypeDefinition < AbstractNode
638
+ include DefinitionNode
639
+ attr_reader :description, :types
640
+ scalar_methods :name
641
+ children_methods({
642
+ directives: GraphQL::Language::Nodes::Directive,
643
+ })
644
+ self.children_method_name = :definitions
645
+ end
646
+
647
+ class UnionTypeExtension < AbstractNode
648
+ attr_reader :types
649
+ scalar_methods :name
650
+ children_methods({
651
+ directives: GraphQL::Language::Nodes::Directive,
652
+ })
653
+ self.children_method_name = :definitions
654
+ end
655
+
656
+ class EnumValueDefinition < AbstractNode
657
+ include DefinitionNode
658
+ attr_reader :description
659
+ scalar_methods :name
660
+ children_methods({
661
+ directives: GraphQL::Language::Nodes::Directive,
662
+ })
663
+ self.children_method_name = :values
664
+ end
665
+
666
+ class EnumTypeDefinition < AbstractNode
667
+ include DefinitionNode
668
+ attr_reader :description
669
+ scalar_methods :name
670
+ children_methods({
671
+ directives: GraphQL::Language::Nodes::Directive,
672
+ values: GraphQL::Language::Nodes::EnumValueDefinition,
673
+ })
674
+ self.children_method_name = :definitions
675
+ end
676
+
677
+ class EnumTypeExtension < AbstractNode
678
+ scalar_methods :name
679
+ children_methods({
680
+ directives: GraphQL::Language::Nodes::Directive,
681
+ values: GraphQL::Language::Nodes::EnumValueDefinition,
682
+ })
683
+ self.children_method_name = :definitions
684
+ end
685
+
686
+ class InputObjectTypeDefinition < AbstractNode
687
+ include DefinitionNode
688
+ attr_reader :description
689
+ scalar_methods :name
690
+ children_methods({
691
+ directives: GraphQL::Language::Nodes::Directive,
692
+ fields: GraphQL::Language::Nodes::InputValueDefinition,
693
+ })
694
+ self.children_method_name = :definitions
695
+ end
696
+
697
+ class InputObjectTypeExtension < AbstractNode
698
+ scalar_methods :name
699
+ children_methods({
700
+ directives: GraphQL::Language::Nodes::Directive,
701
+ fields: GraphQL::Language::Nodes::InputValueDefinition,
702
+ })
703
+ self.children_method_name = :definitions
704
+ end
705
+ end
706
+ end
707
+ end