graphql 1.9.21 → 2.0.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.

Potentially problematic release.


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

Files changed (397) 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 +44 -7
  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 +63 -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 +22 -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 +29 -2
  49. data/lib/graphql/analysis/ast/query_complexity.rb +175 -68
  50. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  51. data/lib/graphql/analysis/ast/visitor.rb +17 -8
  52. data/lib/graphql/analysis/ast.rb +14 -14
  53. data/lib/graphql/analysis.rb +0 -7
  54. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  55. data/lib/graphql/backtrace/table.rb +37 -16
  56. data/lib/graphql/backtrace/traced_error.rb +0 -1
  57. data/lib/graphql/backtrace/tracer.rb +39 -9
  58. data/lib/graphql/backtrace.rb +20 -17
  59. data/lib/graphql/dataloader/null_dataloader.rb +22 -0
  60. data/lib/graphql/dataloader/request.rb +19 -0
  61. data/lib/graphql/dataloader/request_all.rb +19 -0
  62. data/lib/graphql/dataloader/source.rb +155 -0
  63. data/lib/graphql/dataloader.rb +308 -0
  64. data/lib/graphql/date_encoding_error.rb +16 -0
  65. data/lib/graphql/deprecation.rb +9 -0
  66. data/lib/graphql/dig.rb +1 -1
  67. data/lib/graphql/execution/directive_checks.rb +2 -2
  68. data/lib/graphql/execution/errors.rb +108 -14
  69. data/lib/graphql/execution/instrumentation.rb +1 -1
  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 +37 -25
  75. data/lib/graphql/execution/interpreter/runtime.rb +715 -387
  76. data/lib/graphql/execution/interpreter.rb +32 -31
  77. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  78. data/lib/graphql/execution/lazy.rb +5 -1
  79. data/lib/graphql/execution/lookahead.rb +32 -114
  80. data/lib/graphql/execution/multiplex.rb +60 -92
  81. data/lib/graphql/execution.rb +11 -3
  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 +27 -17
  96. data/lib/graphql/introspection.rb +99 -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 +99 -63
  102. data/lib/graphql/language/lexer.rb +53 -27
  103. data/lib/graphql/language/lexer.rl +5 -3
  104. data/lib/graphql/language/nodes.rb +64 -93
  105. data/lib/graphql/language/parser.rb +929 -896
  106. data/lib/graphql/language/parser.y +125 -102
  107. data/lib/graphql/language/printer.rb +11 -2
  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 +77 -0
  115. data/lib/graphql/pagination/connection.rb +226 -0
  116. data/lib/graphql/pagination/connections.rb +134 -0
  117. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  118. data/lib/graphql/pagination/relation_connection.rb +226 -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 +51 -190
  123. data/lib/graphql/query/fingerprint.rb +26 -0
  124. data/lib/graphql/query/input_validation_result.rb +23 -6
  125. data/lib/graphql/query/literal_input.rb +26 -11
  126. data/lib/graphql/query/null_context.rb +24 -8
  127. data/lib/graphql/query/validation_pipeline.rb +12 -38
  128. data/lib/graphql/query/variable_validation_error.rb +2 -2
  129. data/lib/graphql/query/variables.rb +26 -9
  130. data/lib/graphql/query.rb +62 -32
  131. data/lib/graphql/railtie.rb +6 -102
  132. data/lib/graphql/rake_task/validate.rb +3 -0
  133. data/lib/graphql/rake_task.rb +12 -9
  134. data/lib/graphql/relay/range_add.rb +23 -9
  135. data/lib/graphql/relay.rb +0 -15
  136. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  137. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  138. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  139. data/lib/graphql/rubocop.rb +4 -0
  140. data/lib/graphql/schema/addition.rb +240 -0
  141. data/lib/graphql/schema/argument.rb +262 -28
  142. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  143. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
  144. data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
  145. data/lib/graphql/schema/build_from_definition.rb +319 -220
  146. data/lib/graphql/schema/built_in_types.rb +5 -5
  147. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  148. data/lib/graphql/schema/directive/feature.rb +1 -1
  149. data/lib/graphql/schema/directive/flagged.rb +57 -0
  150. data/lib/graphql/schema/directive/include.rb +2 -2
  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 +115 -22
  155. data/lib/graphql/schema/enum_value.rb +16 -21
  156. data/lib/graphql/schema/field/connection_extension.rb +46 -20
  157. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  158. data/lib/graphql/schema/field.rb +376 -291
  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 +147 -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 +3 -2
  166. data/lib/graphql/schema/list.rb +46 -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 +23 -14
  170. data/lib/graphql/schema/member/has_arguments.rb +212 -23
  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 +98 -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/type_system_helpers.rb +3 -3
  179. data/lib/graphql/schema/member/validates_input.rb +33 -0
  180. data/lib/graphql/schema/member.rb +11 -6
  181. data/lib/graphql/schema/mutation.rb +4 -9
  182. data/lib/graphql/schema/non_null.rb +34 -4
  183. data/lib/graphql/schema/object.rb +38 -65
  184. data/lib/graphql/schema/printer.rb +16 -35
  185. data/lib/graphql/schema/relay_classic_mutation.rb +57 -32
  186. data/lib/graphql/schema/resolver/has_payload_type.rb +34 -4
  187. data/lib/graphql/schema/resolver.rb +133 -79
  188. data/lib/graphql/schema/scalar.rb +40 -15
  189. data/lib/graphql/schema/subscription.rb +57 -21
  190. data/lib/graphql/schema/timeout.rb +29 -15
  191. data/lib/graphql/schema/type_expression.rb +21 -13
  192. data/lib/graphql/schema/type_membership.rb +19 -5
  193. data/lib/graphql/schema/union.rb +39 -14
  194. data/lib/graphql/schema/unique_within_type.rb +1 -2
  195. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  196. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  197. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  198. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  199. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  200. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  201. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  202. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  203. data/lib/graphql/schema/validator.rb +171 -0
  204. data/lib/graphql/schema/warden.rb +182 -32
  205. data/lib/graphql/schema/wrapper.rb +0 -5
  206. data/lib/graphql/schema.rb +687 -891
  207. data/lib/graphql/static_validation/all_rules.rb +2 -0
  208. data/lib/graphql/static_validation/base_visitor.rb +21 -31
  209. data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
  210. data/lib/graphql/static_validation/error.rb +3 -1
  211. data/lib/graphql/static_validation/literal_validator.rb +51 -26
  212. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +45 -83
  213. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  214. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
  215. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  216. data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -1
  217. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -14
  218. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  219. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
  220. data/lib/graphql/static_validation/rules/fields_will_merge.rb +94 -51
  221. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  222. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  223. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  224. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  225. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  226. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  227. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  228. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  229. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +9 -10
  230. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +1 -1
  231. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
  232. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
  233. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  234. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
  235. data/lib/graphql/static_validation/type_stack.rb +2 -2
  236. data/lib/graphql/static_validation/validation_context.rb +13 -3
  237. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  238. data/lib/graphql/static_validation/validator.rb +31 -19
  239. data/lib/graphql/static_validation.rb +1 -2
  240. data/lib/graphql/string_encoding_error.rb +13 -3
  241. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +123 -22
  242. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  243. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  244. data/lib/graphql/subscriptions/event.rb +85 -31
  245. data/lib/graphql/subscriptions/instrumentation.rb +0 -47
  246. data/lib/graphql/subscriptions/serialize.rb +53 -6
  247. data/lib/graphql/subscriptions.rb +111 -52
  248. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
  249. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  250. data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
  251. data/lib/graphql/tracing/data_dog_tracing.rb +14 -1
  252. data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
  253. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  254. data/lib/graphql/tracing/platform_tracing.rb +57 -29
  255. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
  256. data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +19 -0
  258. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  259. data/lib/graphql/tracing.rb +15 -36
  260. data/lib/graphql/types/big_int.rb +5 -1
  261. data/lib/graphql/types/int.rb +10 -3
  262. data/lib/graphql/types/iso_8601_date.rb +16 -8
  263. data/lib/graphql/types/iso_8601_date_time.rb +32 -10
  264. data/lib/graphql/types/relay/base_connection.rb +6 -88
  265. data/lib/graphql/types/relay/base_edge.rb +2 -34
  266. data/lib/graphql/types/relay/connection_behaviors.rb +170 -0
  267. data/lib/graphql/types/relay/default_relay.rb +21 -0
  268. data/lib/graphql/types/relay/edge_behaviors.rb +64 -0
  269. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  270. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  271. data/lib/graphql/types/relay/node.rb +2 -4
  272. data/lib/graphql/types/relay/node_behaviors.rb +19 -0
  273. data/lib/graphql/types/relay/page_info.rb +2 -14
  274. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay.rb +11 -5
  276. data/lib/graphql/types/string.rb +8 -2
  277. data/lib/graphql/unauthorized_error.rb +2 -2
  278. data/lib/graphql/unresolved_type_error.rb +2 -2
  279. data/lib/graphql/version.rb +1 -1
  280. data/lib/graphql.rb +41 -58
  281. data/readme.md +3 -6
  282. metadata +97 -231
  283. data/lib/graphql/analysis/analyze_query.rb +0 -91
  284. data/lib/graphql/analysis/field_usage.rb +0 -45
  285. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  286. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  287. data/lib/graphql/analysis/query_complexity.rb +0 -88
  288. data/lib/graphql/analysis/query_depth.rb +0 -43
  289. data/lib/graphql/analysis/reducer_state.rb +0 -48
  290. data/lib/graphql/argument.rb +0 -159
  291. data/lib/graphql/authorization.rb +0 -82
  292. data/lib/graphql/backwards_compatibility.rb +0 -60
  293. data/lib/graphql/base_type.rb +0 -226
  294. data/lib/graphql/boolean_type.rb +0 -2
  295. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  296. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  297. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  298. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  299. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  300. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -91
  301. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  302. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  303. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  304. data/lib/graphql/compatibility.rb +0 -5
  305. data/lib/graphql/define/assign_argument.rb +0 -12
  306. data/lib/graphql/define/assign_connection.rb +0 -13
  307. data/lib/graphql/define/assign_enum_value.rb +0 -18
  308. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  309. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  310. data/lib/graphql/define/assign_object_field.rb +0 -42
  311. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  312. data/lib/graphql/define/instance_definable.rb +0 -311
  313. data/lib/graphql/define/no_definition_error.rb +0 -7
  314. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  315. data/lib/graphql/define/type_definer.rb +0 -31
  316. data/lib/graphql/define.rb +0 -31
  317. data/lib/graphql/deprecated_dsl.rb +0 -42
  318. data/lib/graphql/directive/deprecated_directive.rb +0 -13
  319. data/lib/graphql/directive/include_directive.rb +0 -2
  320. data/lib/graphql/directive/skip_directive.rb +0 -2
  321. data/lib/graphql/directive.rb +0 -104
  322. data/lib/graphql/enum_type.rb +0 -193
  323. data/lib/graphql/execution/execute.rb +0 -326
  324. data/lib/graphql/execution/flatten.rb +0 -40
  325. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  326. data/lib/graphql/execution/typecast.rb +0 -50
  327. data/lib/graphql/field/resolve.rb +0 -59
  328. data/lib/graphql/field.rb +0 -330
  329. data/lib/graphql/float_type.rb +0 -2
  330. data/lib/graphql/function.rb +0 -153
  331. data/lib/graphql/id_type.rb +0 -2
  332. data/lib/graphql/input_object_type.rb +0 -154
  333. data/lib/graphql/int_type.rb +0 -2
  334. data/lib/graphql/interface_type.rb +0 -86
  335. data/lib/graphql/internal_representation/document.rb +0 -27
  336. data/lib/graphql/internal_representation/node.rb +0 -206
  337. data/lib/graphql/internal_representation/print.rb +0 -51
  338. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  339. data/lib/graphql/internal_representation/scope.rb +0 -88
  340. data/lib/graphql/internal_representation/visit.rb +0 -36
  341. data/lib/graphql/internal_representation.rb +0 -7
  342. data/lib/graphql/list_type.rb +0 -80
  343. data/lib/graphql/literal_validation_error.rb +0 -6
  344. data/lib/graphql/non_null_type.rb +0 -81
  345. data/lib/graphql/object_type.rb +0 -141
  346. data/lib/graphql/query/arguments.rb +0 -187
  347. data/lib/graphql/query/arguments_cache.rb +0 -25
  348. data/lib/graphql/query/executor.rb +0 -53
  349. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  350. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  351. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  352. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  353. data/lib/graphql/query/serial_execution.rb +0 -39
  354. data/lib/graphql/relay/array_connection.rb +0 -85
  355. data/lib/graphql/relay/base_connection.rb +0 -172
  356. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  357. data/lib/graphql/relay/connection_resolve.rb +0 -43
  358. data/lib/graphql/relay/connection_type.rb +0 -40
  359. data/lib/graphql/relay/edge.rb +0 -27
  360. data/lib/graphql/relay/edge_type.rb +0 -18
  361. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  362. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  363. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  364. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  365. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  366. data/lib/graphql/relay/mutation/result.rb +0 -38
  367. data/lib/graphql/relay/mutation.rb +0 -190
  368. data/lib/graphql/relay/node.rb +0 -36
  369. data/lib/graphql/relay/page_info.rb +0 -7
  370. data/lib/graphql/relay/relation_connection.rb +0 -190
  371. data/lib/graphql/relay/type_extensions.rb +0 -30
  372. data/lib/graphql/scalar_type.rb +0 -133
  373. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  374. data/lib/graphql/schema/default_parse_error.rb +0 -10
  375. data/lib/graphql/schema/default_type_error.rb +0 -15
  376. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  377. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -26
  378. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  379. data/lib/graphql/schema/middleware_chain.rb +0 -82
  380. data/lib/graphql/schema/possible_types.rb +0 -39
  381. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  382. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  383. data/lib/graphql/schema/traversal.rb +0 -228
  384. data/lib/graphql/schema/validation.rb +0 -303
  385. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  386. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  387. data/lib/graphql/string_type.rb +0 -2
  388. data/lib/graphql/subscriptions/subscription_root.rb +0 -74
  389. data/lib/graphql/tracing/skylight_tracing.rb +0 -62
  390. data/lib/graphql/types/relay/base_field.rb +0 -22
  391. data/lib/graphql/types/relay/base_interface.rb +0 -29
  392. data/lib/graphql/types/relay/base_object.rb +0 -26
  393. data/lib/graphql/types/relay/node_field.rb +0 -43
  394. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  395. data/lib/graphql/union_type.rb +0 -135
  396. data/lib/graphql/upgrader/member.rb +0 -936
  397. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,226 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/relay/type_extensions"
3
-
4
- module GraphQL
5
- # The parent for all type classes.
6
- class BaseType
7
- include GraphQL::Define::NonNullWithBang
8
- include GraphQL::Define::InstanceDefinable
9
- include GraphQL::Relay::TypeExtensions
10
-
11
- accepts_definitions :name, :description,
12
- :introspection,
13
- :default_scalar,
14
- :default_relay,
15
- {
16
- connection: GraphQL::Define::AssignConnection,
17
- global_id_field: GraphQL::Define::AssignGlobalIdField,
18
- }
19
-
20
- ensure_defined(:graphql_name, :name, :description, :introspection?, :default_scalar?)
21
-
22
- attr_accessor :ast_node
23
-
24
- def initialize
25
- @introspection = false
26
- @default_scalar = false
27
- @default_relay = false
28
- end
29
-
30
- def initialize_copy(other)
31
- super
32
- # Reset these derived defaults
33
- @connection_type = nil
34
- @edge_type = nil
35
- end
36
-
37
- # @return [String] the name of this type, must be unique within a Schema
38
- attr_reader :name
39
- # Future-compatible alias
40
- # @see {GraphQL::SchemaMember}
41
- alias :graphql_name :name
42
- # Future-compatible alias
43
- # @see {GraphQL::SchemaMember}
44
- alias :graphql_definition :itself
45
-
46
- def name=(name)
47
- GraphQL::NameValidator.validate!(name)
48
- @name = name
49
- end
50
-
51
- # @return [String, nil] a description for this type
52
- attr_accessor :description
53
-
54
- # @return [Boolean] Is this type a predefined introspection type?
55
- def introspection?
56
- @introspection
57
- end
58
-
59
- # @return [Boolean] Is this type a built-in scalar type? (eg, `String`, `Int`)
60
- def default_scalar?
61
- @default_scalar
62
- end
63
-
64
- # @return [Boolean] Is this type a built-in Relay type? (`Node`, `PageInfo`)
65
- def default_relay?
66
- @default_relay
67
- end
68
-
69
- # @api private
70
- attr_writer :introspection, :default_scalar, :default_relay
71
-
72
- # @param other [GraphQL::BaseType] compare to this object
73
- # @return [Boolean] are these types equivalent? (incl. non-null, list)
74
- # @see {ModifiesAnotherType#==} for override on List & NonNull types
75
- def ==(other)
76
- other.is_a?(GraphQL::BaseType) && self.name == other.name
77
- end
78
-
79
- # If this type is modifying an underlying type,
80
- # return the underlying type. (Otherwise, return `self`.)
81
- def unwrap
82
- self
83
- end
84
-
85
- # @return [GraphQL::NonNullType] a non-null version of this type
86
- def to_non_null_type
87
- GraphQL::NonNullType.new(of_type: self)
88
- end
89
-
90
- # @return [GraphQL::ListType] a list version of this type
91
- def to_list_type
92
- GraphQL::ListType.new(of_type: self)
93
- end
94
-
95
- module ModifiesAnotherType
96
- def unwrap
97
- self.of_type.unwrap
98
- end
99
-
100
- def ==(other)
101
- other.is_a?(ModifiesAnotherType) && other.of_type == of_type
102
- end
103
- end
104
-
105
- # Find out which possible type to use for `value`.
106
- # Returns self if there are no possible types (ie, not Union or Interface)
107
- def resolve_type(value, ctx)
108
- self
109
- end
110
-
111
- # Print the human-readable name of this type using the query-string naming pattern
112
- def to_s
113
- name
114
- end
115
-
116
- alias :inspect :to_s
117
- alias :to_type_signature :to_s
118
-
119
- def valid_isolated_input?(value)
120
- valid_input?(value, GraphQL::Query::NullContext)
121
- end
122
-
123
- def validate_isolated_input(value)
124
- validate_input(value, GraphQL::Query::NullContext)
125
- end
126
-
127
- def coerce_isolated_input(value)
128
- coerce_input(value, GraphQL::Query::NullContext)
129
- end
130
-
131
- def coerce_isolated_result(value)
132
- coerce_result(value, GraphQL::Query::NullContext)
133
- end
134
-
135
- def valid_input?(value, ctx = nil)
136
- if ctx.nil?
137
- warn_deprecated_coerce("valid_isolated_input?")
138
- ctx = GraphQL::Query::NullContext
139
- end
140
-
141
- validate_input(value, ctx).valid?
142
- end
143
-
144
- def validate_input(value, ctx = nil)
145
- if ctx.nil?
146
- warn_deprecated_coerce("validate_isolated_input")
147
- ctx = GraphQL::Query::NullContext
148
- end
149
-
150
- if value.nil?
151
- GraphQL::Query::InputValidationResult.new
152
- else
153
- validate_non_null_input(value, ctx)
154
- end
155
- end
156
-
157
- def coerce_input(value, ctx = nil)
158
- if value.nil?
159
- nil
160
- else
161
- if ctx.nil?
162
- warn_deprecated_coerce("coerce_isolated_input")
163
- ctx = GraphQL::Query::NullContext
164
- end
165
- coerce_non_null_input(value, ctx)
166
- end
167
- end
168
-
169
- def coerce_result(value, ctx)
170
- raise GraphQL::RequiredImplementationMissingError
171
- end
172
-
173
- # Types with fields may override this
174
- # @param name [String] field name to lookup for this type
175
- # @return [GraphQL::Field, nil]
176
- def get_field(name)
177
- nil
178
- end
179
-
180
- # During schema definition, types can be defined inside procs or as strings.
181
- # This function converts it to a type instance
182
- # @return [GraphQL::BaseType]
183
- def self.resolve_related_type(type_arg)
184
- case type_arg
185
- when Proc
186
- # lazy-eval it, then try again
187
- resolve_related_type(type_arg.call)
188
- when String
189
- # Get a constant by this name
190
- resolve_related_type(Object.const_get(type_arg))
191
- else
192
- if type_arg.respond_to?(:graphql_definition)
193
- type_arg.graphql_definition
194
- else
195
- type_arg
196
- end
197
- end
198
- end
199
-
200
- # Return a GraphQL string for the type definition
201
- # @param schema [GraphQL::Schema]
202
- # @param printer [GraphQL::Schema::Printer]
203
- # @see {GraphQL::Schema::Printer#initialize for additional options}
204
- # @return [String] type definition
205
- def to_definition(schema, printer: nil, **args)
206
- printer ||= GraphQL::Schema::Printer.new(schema, **args)
207
- printer.print_type(self)
208
- end
209
-
210
- # Returns true if this is a non-nullable type. A nullable list of non-nullables is considered nullable.
211
- def non_null?
212
- false
213
- end
214
-
215
- # Returns true if this is a list type. A non-nullable list is considered a list.
216
- def list?
217
- false
218
- end
219
-
220
- private
221
-
222
- def warn_deprecated_coerce(alt_method_name)
223
- warn("Coercing without a context is deprecated; use `#{alt_method_name}` if you don't want context-awareness")
224
- end
225
- end
226
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::BOOLEAN_TYPE = GraphQL::Types::Boolean.graphql_definition
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module ExecutionSpecification
5
- module CounterSchema
6
- def self.build(execution_strategy)
7
- counter_type = nil
8
- schema = nil
9
-
10
- has_count_interface = GraphQL::InterfaceType.define do
11
- name "HasCount"
12
- field :count, types.Int
13
- field :counter, ->{ has_count_interface }
14
- end
15
-
16
- counter_type = GraphQL::ObjectType.define do
17
- name "Counter"
18
- interfaces [has_count_interface]
19
- field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
20
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
21
- end
22
-
23
- alt_counter_type = GraphQL::ObjectType.define do
24
- name "AltCounter"
25
- interfaces [has_count_interface]
26
- field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
27
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
28
- end
29
-
30
- has_counter_interface = GraphQL::InterfaceType.define do
31
- name "HasCounter"
32
- field :counter, has_count_interface
33
- end
34
-
35
- query_type = GraphQL::ObjectType.define do
36
- name "Query"
37
- interfaces [has_counter_interface]
38
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
39
- end
40
-
41
- schema = GraphQL::Schema.define(
42
- query: query_type,
43
- resolve_type: ->(t, o, c) { o == :counter ? counter_type : nil },
44
- orphan_types: [alt_counter_type, counter_type],
45
- query_execution_strategy: execution_strategy,
46
- )
47
- schema.metadata[:count] = 0
48
- schema
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,200 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module ExecutionSpecification
5
- module SpecificationSchema
6
- BOGUS_NODE = OpenStruct.new({ bogus: true })
7
-
8
- DATA = {
9
- "1001" => OpenStruct.new({
10
- name: "Fannie Lou Hamer",
11
- birthdate: Time.new(1917, 10, 6),
12
- organization_ids: [],
13
- }),
14
- "1002" => OpenStruct.new({
15
- name: "John Lewis",
16
- birthdate: Time.new(1940, 2, 21),
17
- organization_ids: ["2001"],
18
- }),
19
- "1003" => OpenStruct.new({
20
- name: "Diane Nash",
21
- birthdate: Time.new(1938, 5, 15),
22
- organization_ids: ["2001", "2002"],
23
- }),
24
- "1004" => OpenStruct.new({
25
- name: "Ralph Abernathy",
26
- birthdate: Time.new(1926, 3, 11),
27
- organization_ids: ["2002"],
28
- }),
29
- "2001" => OpenStruct.new({
30
- name: "SNCC",
31
- leader_id: nil, # fail on purpose
32
- }),
33
- "2002" => OpenStruct.new({
34
- name: "SCLC",
35
- leader_id: "1004",
36
- }),
37
- "2003" => BOGUS_NODE,
38
- }
39
-
40
- # A list object must implement #each
41
- class CustomCollection
42
- def initialize(storage)
43
- @storage = storage
44
- end
45
-
46
- def each
47
- @storage.each { |i| yield(i) }
48
- end
49
- end
50
-
51
- module TestMiddleware
52
- def self.call(parent_type, parent_object, field_definition, field_args, query_context, &next_middleware)
53
- query_context[:middleware_log] && query_context[:middleware_log] << field_definition.name
54
- next_middleware.call
55
- end
56
- end
57
-
58
- def self.build(execution_strategy)
59
- organization_type = nil
60
-
61
- timestamp_type = GraphQL::ScalarType.define do
62
- name "Timestamp"
63
- coerce_input ->(value, _ctx) { Time.at(value.to_i) }
64
- coerce_result ->(value, _ctx) { value.to_i }
65
- end
66
-
67
- named_entity_interface_type = GraphQL::InterfaceType.define do
68
- name "NamedEntity"
69
- field :name, !types.String
70
- end
71
-
72
- person_type = GraphQL::ObjectType.define do
73
- name "Person"
74
- interfaces [named_entity_interface_type]
75
- field :name, !types.String
76
- field :birthdate, timestamp_type
77
- field :age, types.Int do
78
- argument :on, !timestamp_type
79
- resolve ->(obj, args, ctx) {
80
- if obj.birthdate.nil?
81
- nil
82
- else
83
- age_on = args[:on]
84
- age_years = age_on.year - obj.birthdate.year
85
- this_year_birthday = Time.new(age_on.year, obj.birthdate.month, obj.birthdate.day)
86
- if this_year_birthday > age_on
87
- age_years -= 1
88
- end
89
- end
90
- age_years
91
- }
92
- end
93
- field :organizations, types[organization_type] do
94
- resolve ->(obj, args, ctx) {
95
- CustomCollection.new(obj.organization_ids.map { |id| DATA[id] })
96
- }
97
- end
98
- field :first_organization, !organization_type do
99
- resolve ->(obj, args, ctx) {
100
- DATA[obj.organization_ids.first]
101
- }
102
- end
103
- end
104
-
105
- organization_type = GraphQL::ObjectType.define do
106
- name "Organization"
107
- interfaces [named_entity_interface_type]
108
- field :name, !types.String
109
- field :leader, !person_type do
110
- resolve ->(obj, args, ctx) {
111
- DATA[obj.leader_id] || (ctx[:return_error] ? ExecutionError.new("Error on Nullable") : nil)
112
- }
113
- end
114
- field :returnedError, types.String do
115
- resolve ->(o, a, c) {
116
- GraphQL::ExecutionError.new("This error was returned")
117
- }
118
- end
119
- field :raisedError, types.String do
120
- resolve ->(o, a, c) {
121
- raise GraphQL::ExecutionError.new("This error was raised")
122
- }
123
- end
124
-
125
- field :nodePresence, !types[!types.Boolean] do
126
- resolve ->(o, a, ctx) {
127
- [
128
- ctx.irep_node.is_a?(GraphQL::InternalRepresentation::Node),
129
- ctx.ast_node.is_a?(GraphQL::Language::Nodes::AbstractNode),
130
- false, # just testing
131
- ]
132
- }
133
- end
134
- end
135
-
136
- node_union_type = GraphQL::UnionType.define do
137
- name "Node"
138
- possible_types [person_type, organization_type]
139
- end
140
-
141
- query_type = GraphQL::ObjectType.define do
142
- name "Query"
143
- field :node, node_union_type do
144
- argument :id, !types.ID
145
- resolve ->(obj, args, ctx) {
146
- obj[args[:id]]
147
- }
148
- end
149
-
150
- field :requiredNode, node_union_type.to_non_null_type do
151
- argument :id, !types.ID
152
- resolve ->(obj, args, ctx) {
153
- obj[args[:id]]
154
- }
155
- end
156
-
157
- field :organization, !organization_type do
158
- argument :id, !types.ID
159
- resolve ->(obj, args, ctx) {
160
- if args[:id].start_with?("2")
161
- obj[args[:id]]
162
- else
163
- # test context.skip
164
- ctx.skip
165
- end
166
- }
167
- end
168
-
169
- field :organizations, types[organization_type] do
170
- resolve ->(obj, args, ctx) {
171
- [obj["2001"], obj["2002"]]
172
- }
173
- end
174
- end
175
-
176
- GraphQL::Schema.define do
177
- query_execution_strategy execution_strategy
178
- query query_type
179
-
180
- resolve_type ->(type, obj, ctx) {
181
- if obj.respond_to?(:birthdate)
182
- person_type
183
- elsif obj.respond_to?(:leader_id)
184
- organization_type
185
- else
186
- nil
187
- end
188
- }
189
-
190
- type_error ->(err, ctx) {
191
- ctx[:type_errors] && (ctx[:type_errors] << err.value)
192
- ctx[:gobble] || GraphQL::Schema::DefaultTypeError.call(err, ctx)
193
- }
194
- middleware(TestMiddleware)
195
- end
196
- end
197
- end
198
- end
199
- end
200
- end