graphql 2.0.13 → 2.3.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/install/mutation_root_generator.rb +2 -2
  3. data/lib/generators/graphql/install/templates/base_mutation.erb +2 -0
  4. data/lib/generators/graphql/install/templates/mutation_type.erb +2 -0
  5. data/lib/generators/graphql/install_generator.rb +3 -0
  6. data/lib/generators/graphql/mutation_delete_generator.rb +1 -1
  7. data/lib/generators/graphql/mutation_update_generator.rb +1 -1
  8. data/lib/generators/graphql/relay.rb +18 -1
  9. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  10. data/lib/generators/graphql/templates/base_connection.erb +2 -0
  11. data/lib/generators/graphql/templates/base_edge.erb +2 -0
  12. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  13. data/lib/generators/graphql/templates/base_field.erb +2 -0
  14. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  15. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  16. data/lib/generators/graphql/templates/base_object.erb +2 -0
  17. data/lib/generators/graphql/templates/base_resolver.erb +6 -0
  18. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  19. data/lib/generators/graphql/templates/base_union.erb +2 -0
  20. data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
  21. data/lib/generators/graphql/templates/loader.erb +2 -0
  22. data/lib/generators/graphql/templates/mutation.erb +2 -0
  23. data/lib/generators/graphql/templates/node_type.erb +2 -0
  24. data/lib/generators/graphql/templates/query_type.erb +2 -0
  25. data/lib/generators/graphql/templates/schema.erb +8 -0
  26. data/lib/graphql/analysis/analyzer.rb +89 -0
  27. data/lib/graphql/analysis/field_usage.rb +82 -0
  28. data/lib/graphql/analysis/max_query_complexity.rb +20 -0
  29. data/lib/graphql/analysis/max_query_depth.rb +20 -0
  30. data/lib/graphql/analysis/query_complexity.rb +183 -0
  31. data/lib/graphql/analysis/query_depth.rb +58 -0
  32. data/lib/graphql/analysis/visitor.rb +283 -0
  33. data/lib/graphql/analysis.rb +92 -1
  34. data/lib/graphql/backtrace/inspect_result.rb +0 -12
  35. data/lib/graphql/backtrace/table.rb +2 -2
  36. data/lib/graphql/backtrace/trace.rb +93 -0
  37. data/lib/graphql/backtrace/tracer.rb +1 -1
  38. data/lib/graphql/backtrace.rb +2 -1
  39. data/lib/graphql/coercion_error.rb +1 -9
  40. data/lib/graphql/dataloader/async_dataloader.rb +88 -0
  41. data/lib/graphql/dataloader/null_dataloader.rb +1 -1
  42. data/lib/graphql/dataloader/request.rb +5 -0
  43. data/lib/graphql/dataloader/source.rb +89 -45
  44. data/lib/graphql/dataloader.rb +115 -142
  45. data/lib/graphql/duration_encoding_error.rb +16 -0
  46. data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
  47. data/lib/graphql/execution/interpreter/arguments.rb +1 -1
  48. data/lib/graphql/execution/interpreter/arguments_cache.rb +33 -33
  49. data/lib/graphql/execution/interpreter/resolve.rb +19 -0
  50. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +175 -0
  51. data/lib/graphql/execution/interpreter/runtime.rb +331 -455
  52. data/lib/graphql/execution/interpreter.rb +125 -61
  53. data/lib/graphql/execution/lazy.rb +6 -12
  54. data/lib/graphql/execution/lookahead.rb +124 -46
  55. data/lib/graphql/execution/multiplex.rb +3 -117
  56. data/lib/graphql/execution.rb +0 -1
  57. data/lib/graphql/introspection/directive_type.rb +3 -3
  58. data/lib/graphql/introspection/dynamic_fields.rb +1 -1
  59. data/lib/graphql/introspection/entry_points.rb +11 -5
  60. data/lib/graphql/introspection/field_type.rb +2 -2
  61. data/lib/graphql/introspection/schema_type.rb +10 -13
  62. data/lib/graphql/introspection/type_type.rb +17 -10
  63. data/lib/graphql/introspection.rb +3 -2
  64. data/lib/graphql/language/block_string.rb +34 -18
  65. data/lib/graphql/language/definition_slice.rb +1 -1
  66. data/lib/graphql/language/document_from_schema_definition.rb +75 -59
  67. data/lib/graphql/language/lexer.rb +358 -1506
  68. data/lib/graphql/language/nodes.rb +166 -93
  69. data/lib/graphql/language/parser.rb +795 -1953
  70. data/lib/graphql/language/printer.rb +340 -160
  71. data/lib/graphql/language/sanitized_printer.rb +21 -23
  72. data/lib/graphql/language/static_visitor.rb +167 -0
  73. data/lib/graphql/language/visitor.rb +188 -141
  74. data/lib/graphql/language.rb +61 -1
  75. data/lib/graphql/load_application_object_failed_error.rb +5 -1
  76. data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
  77. data/lib/graphql/pagination/array_connection.rb +6 -6
  78. data/lib/graphql/pagination/connection.rb +33 -6
  79. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
  80. data/lib/graphql/query/context/scoped_context.rb +101 -0
  81. data/lib/graphql/query/context.rb +117 -112
  82. data/lib/graphql/query/null_context.rb +12 -25
  83. data/lib/graphql/query/validation_pipeline.rb +6 -5
  84. data/lib/graphql/query/variables.rb +3 -3
  85. data/lib/graphql/query.rb +86 -30
  86. data/lib/graphql/railtie.rb +9 -6
  87. data/lib/graphql/rake_task.rb +29 -11
  88. data/lib/graphql/rubocop/graphql/base_cop.rb +1 -1
  89. data/lib/graphql/schema/addition.rb +59 -23
  90. data/lib/graphql/schema/always_visible.rb +11 -0
  91. data/lib/graphql/schema/argument.rb +55 -26
  92. data/lib/graphql/schema/base_64_encoder.rb +3 -5
  93. data/lib/graphql/schema/build_from_definition.rb +56 -32
  94. data/lib/graphql/schema/directive/one_of.rb +24 -0
  95. data/lib/graphql/schema/directive/specified_by.rb +14 -0
  96. data/lib/graphql/schema/directive/transform.rb +1 -1
  97. data/lib/graphql/schema/directive.rb +15 -3
  98. data/lib/graphql/schema/enum.rb +35 -24
  99. data/lib/graphql/schema/enum_value.rb +2 -3
  100. data/lib/graphql/schema/field/connection_extension.rb +2 -16
  101. data/lib/graphql/schema/field/scope_extension.rb +8 -1
  102. data/lib/graphql/schema/field.rb +147 -107
  103. data/lib/graphql/schema/field_extension.rb +1 -4
  104. data/lib/graphql/schema/find_inherited_value.rb +2 -7
  105. data/lib/graphql/schema/has_single_input_argument.rb +158 -0
  106. data/lib/graphql/schema/input_object.rb +47 -11
  107. data/lib/graphql/schema/interface.rb +15 -21
  108. data/lib/graphql/schema/introspection_system.rb +7 -17
  109. data/lib/graphql/schema/late_bound_type.rb +10 -0
  110. data/lib/graphql/schema/list.rb +2 -2
  111. data/lib/graphql/schema/loader.rb +2 -3
  112. data/lib/graphql/schema/member/base_dsl_methods.rb +18 -14
  113. data/lib/graphql/schema/member/build_type.rb +11 -3
  114. data/lib/graphql/schema/member/has_arguments.rb +170 -130
  115. data/lib/graphql/schema/member/has_ast_node.rb +12 -0
  116. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  117. data/lib/graphql/schema/member/has_directives.rb +81 -61
  118. data/lib/graphql/schema/member/has_fields.rb +100 -38
  119. data/lib/graphql/schema/member/has_interfaces.rb +65 -10
  120. data/lib/graphql/schema/member/has_unresolved_type_error.rb +5 -1
  121. data/lib/graphql/schema/member/has_validators.rb +32 -6
  122. data/lib/graphql/schema/member/relay_shortcuts.rb +19 -0
  123. data/lib/graphql/schema/member/scoped.rb +19 -0
  124. data/lib/graphql/schema/member/type_system_helpers.rb +16 -0
  125. data/lib/graphql/schema/member/validates_input.rb +3 -3
  126. data/lib/graphql/schema/mutation.rb +7 -0
  127. data/lib/graphql/schema/object.rb +16 -5
  128. data/lib/graphql/schema/printer.rb +11 -8
  129. data/lib/graphql/schema/relay_classic_mutation.rb +7 -129
  130. data/lib/graphql/schema/resolver/has_payload_type.rb +9 -9
  131. data/lib/graphql/schema/resolver.rb +47 -32
  132. data/lib/graphql/schema/scalar.rb +3 -3
  133. data/lib/graphql/schema/subscription.rb +11 -4
  134. data/lib/graphql/schema/subset.rb +397 -0
  135. data/lib/graphql/schema/timeout.rb +25 -29
  136. data/lib/graphql/schema/type_expression.rb +2 -2
  137. data/lib/graphql/schema/type_membership.rb +3 -0
  138. data/lib/graphql/schema/union.rb +11 -2
  139. data/lib/graphql/schema/unique_within_type.rb +1 -1
  140. data/lib/graphql/schema/validator/all_validator.rb +60 -0
  141. data/lib/graphql/schema/validator.rb +4 -2
  142. data/lib/graphql/schema/warden.rb +238 -93
  143. data/lib/graphql/schema.rb +498 -103
  144. data/lib/graphql/static_validation/all_rules.rb +2 -1
  145. data/lib/graphql/static_validation/base_visitor.rb +7 -6
  146. data/lib/graphql/static_validation/definition_dependencies.rb +7 -1
  147. data/lib/graphql/static_validation/literal_validator.rb +24 -7
  148. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
  149. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +1 -1
  150. data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -2
  151. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +1 -1
  152. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  153. data/lib/graphql/static_validation/rules/fields_will_merge.rb +10 -10
  154. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  155. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +1 -1
  156. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
  157. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
  158. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  159. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  160. data/lib/graphql/static_validation/rules/query_root_exists.rb +1 -1
  161. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -4
  162. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +5 -5
  163. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +1 -1
  164. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +18 -27
  165. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +1 -1
  166. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  167. data/lib/graphql/static_validation/validation_context.rb +5 -5
  168. data/lib/graphql/static_validation/validator.rb +4 -1
  169. data/lib/graphql/static_validation.rb +0 -1
  170. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +11 -4
  171. data/lib/graphql/subscriptions/broadcast_analyzer.rb +11 -5
  172. data/lib/graphql/subscriptions/event.rb +11 -10
  173. data/lib/graphql/subscriptions/serialize.rb +2 -0
  174. data/lib/graphql/subscriptions.rb +20 -13
  175. data/lib/graphql/testing/helpers.rb +151 -0
  176. data/lib/graphql/testing.rb +2 -0
  177. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  178. data/lib/graphql/tracing/appoptics_trace.rb +251 -0
  179. data/lib/graphql/tracing/appoptics_tracing.rb +2 -2
  180. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  181. data/lib/graphql/tracing/data_dog_trace.rb +183 -0
  182. data/lib/graphql/tracing/data_dog_tracing.rb +9 -21
  183. data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +10 -28
  184. data/lib/graphql/tracing/legacy_trace.rb +69 -0
  185. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  186. data/lib/graphql/tracing/notifications_trace.rb +45 -0
  187. data/lib/graphql/tracing/platform_trace.rb +118 -0
  188. data/lib/graphql/tracing/platform_tracing.rb +17 -3
  189. data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +4 -2
  190. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  191. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  192. data/lib/graphql/tracing/scout_trace.rb +72 -0
  193. data/lib/graphql/tracing/sentry_trace.rb +112 -0
  194. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  195. data/lib/graphql/tracing/trace.rb +76 -0
  196. data/lib/graphql/tracing.rb +20 -40
  197. data/lib/graphql/type_kinds.rb +7 -4
  198. data/lib/graphql/types/iso_8601_duration.rb +77 -0
  199. data/lib/graphql/types/relay/base_connection.rb +1 -1
  200. data/lib/graphql/types/relay/connection_behaviors.rb +68 -6
  201. data/lib/graphql/types/relay/edge_behaviors.rb +33 -5
  202. data/lib/graphql/types/relay/node_behaviors.rb +8 -2
  203. data/lib/graphql/types/relay/page_info_behaviors.rb +11 -2
  204. data/lib/graphql/types/relay.rb +0 -1
  205. data/lib/graphql/types/string.rb +1 -1
  206. data/lib/graphql/types.rb +1 -0
  207. data/lib/graphql/version.rb +1 -1
  208. data/lib/graphql.rb +27 -20
  209. data/readme.md +13 -3
  210. metadata +96 -47
  211. data/lib/graphql/analysis/ast/analyzer.rb +0 -84
  212. data/lib/graphql/analysis/ast/field_usage.rb +0 -57
  213. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -22
  214. data/lib/graphql/analysis/ast/max_query_depth.rb +0 -22
  215. data/lib/graphql/analysis/ast/query_complexity.rb +0 -230
  216. data/lib/graphql/analysis/ast/query_depth.rb +0 -55
  217. data/lib/graphql/analysis/ast/visitor.rb +0 -269
  218. data/lib/graphql/analysis/ast.rb +0 -81
  219. data/lib/graphql/deprecation.rb +0 -9
  220. data/lib/graphql/filter.rb +0 -53
  221. data/lib/graphql/language/lexer.rl +0 -280
  222. data/lib/graphql/language/parser.y +0 -554
  223. data/lib/graphql/language/token.rb +0 -34
  224. data/lib/graphql/schema/base_64_bp.rb +0 -26
  225. data/lib/graphql/schema/invalid_type_error.rb +0 -7
  226. data/lib/graphql/static_validation/type_stack.rb +0 -216
  227. data/lib/graphql/subscriptions/instrumentation.rb +0 -28
  228. data/lib/graphql/types/relay/default_relay.rb +0 -21
data/lib/graphql.rb CHANGED
@@ -6,14 +6,6 @@ require "singleton"
6
6
  require "forwardable"
7
7
 
8
8
  module GraphQL
9
- # forwards-compat for argument handling
10
- module Ruby2Keywords
11
- if RUBY_VERSION < "2.7"
12
- def ruby2_keywords(*)
13
- end
14
- end
15
- end
16
-
17
9
  class Error < StandardError
18
10
  end
19
11
 
@@ -42,8 +34,8 @@ This is probably a bug in GraphQL-Ruby, please report this error on GitHub: http
42
34
  # Turn a query string or schema definition into an AST
43
35
  # @param graphql_string [String] a GraphQL query string or schema definition
44
36
  # @return [GraphQL::Language::Nodes::Document]
45
- def self.parse(graphql_string, tracer: GraphQL::Tracing::NullTracer)
46
- parse_with_racc(graphql_string, tracer: tracer)
37
+ def self.parse(graphql_string, trace: GraphQL::Tracing::NullTrace, filename: nil, max_tokens: nil)
38
+ default_parser.parse(graphql_string, trace: trace, filename: filename, max_tokens: max_tokens)
47
39
  end
48
40
 
49
41
  # Read the contents of `filename` and parse them as GraphQL
@@ -51,21 +43,36 @@ This is probably a bug in GraphQL-Ruby, please report this error on GitHub: http
51
43
  # @return [GraphQL::Language::Nodes::Document]
52
44
  def self.parse_file(filename)
53
45
  content = File.read(filename)
54
- parse_with_racc(content, filename: filename)
46
+ default_parser.parse(content, filename: filename)
55
47
  end
56
48
 
57
- def self.parse_with_racc(string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
58
- GraphQL::Language::Parser.parse(string, filename: filename, tracer: tracer)
49
+ # @return [Array<Array>]
50
+ def self.scan(graphql_string)
51
+ default_parser.scan(graphql_string)
59
52
  end
60
53
 
61
- # @return [Array<GraphQL::Language::Token>]
62
- def self.scan(graphql_string)
63
- scan_with_ragel(graphql_string)
54
+ def self.parse_with_racc(string, filename: nil, trace: GraphQL::Tracing::NullTrace)
55
+ warn "`GraphQL.parse_with_racc` is deprecated; GraphQL-Ruby no longer uses racc for parsing. Call `GraphQL.parse` or `GraphQL::Language::Parser.parse` instead."
56
+ GraphQL::Language::Parser.parse(string, filename: filename, trace: trace)
64
57
  end
65
58
 
66
- def self.scan_with_ragel(graphql_string)
59
+ def self.scan_with_ruby(graphql_string)
67
60
  GraphQL::Language::Lexer.tokenize(graphql_string)
68
61
  end
62
+
63
+ NOT_CONFIGURED = Object.new
64
+ private_constant :NOT_CONFIGURED
65
+ module EmptyObjects
66
+ EMPTY_HASH = {}.freeze
67
+ EMPTY_ARRAY = [].freeze
68
+ end
69
+
70
+ class << self
71
+ # If true, the parser should raise when an integer or float is followed immediately by an identifier (instead of a space or punctuation)
72
+ attr_accessor :reject_numbers_followed_by_names
73
+ end
74
+
75
+ self.reject_numbers_followed_by_names = false
69
76
  end
70
77
 
71
78
  # Order matters for these:
@@ -81,6 +88,7 @@ require "graphql/integer_decoding_error"
81
88
  require "graphql/integer_encoding_error"
82
89
  require "graphql/string_encoding_error"
83
90
  require "graphql/date_encoding_error"
91
+ require "graphql/duration_encoding_error"
84
92
  require "graphql/type_kinds"
85
93
  require "graphql/name_validator"
86
94
  require "graphql/language"
@@ -94,9 +102,8 @@ require "graphql/execution"
94
102
  require "graphql/pagination"
95
103
  require "graphql/schema"
96
104
  require "graphql/query"
97
- require "graphql/types"
98
105
  require "graphql/dataloader"
99
- require "graphql/filter"
106
+ require "graphql/types"
100
107
  require "graphql/static_validation"
101
108
  require "graphql/execution"
102
109
  require "graphql/schema/built_in_types"
@@ -113,4 +120,4 @@ require "graphql/backtrace"
113
120
  require "graphql/unauthorized_error"
114
121
  require "graphql/unauthorized_field_error"
115
122
  require "graphql/load_application_object_failed_error"
116
- require "graphql/deprecation"
123
+ require "graphql/testing"
data/readme.md CHANGED
@@ -7,7 +7,7 @@ A Ruby implementation of [GraphQL](https://graphql.org/).
7
7
 
8
8
  - [Website](https://graphql-ruby.org/)
9
9
  - [API Documentation](https://www.rubydoc.info/github/rmosolgo/graphql-ruby)
10
- - [Newsletter](https://tinyletter.com/graphql-ruby)
10
+ - [Newsletter](https://buttondown.email/graphql-ruby)
11
11
 
12
12
  ## Installation
13
13
 
@@ -34,7 +34,17 @@ Or, see ["Getting Started"](https://graphql-ruby.org/getting_started.html).
34
34
 
35
35
  ## Upgrade
36
36
 
37
- I also sell [GraphQL::Pro](https://graphql.pro) which provides several features on top of the GraphQL runtime, including [Pundit authorization](https://graphql-ruby.org/authorization/pundit_integration), [CanCan authorization](https://graphql-ruby.org/authorization/can_can_integration), [Pusher-based subscriptions](https://graphql-ruby.org/subscriptions/pusher_implementation) and [persisted queries](https://graphql-ruby.org/operation_store/overview). Besides that, Pro customers get email support and an opportunity to support graphql-ruby's development!
37
+ I also sell [GraphQL::Pro](https://graphql.pro) which provides several features on top of the GraphQL runtime, including:
38
+
39
+ - [Persisted queries](https://graphql-ruby.org/operation_store/overview)
40
+ - [API versioning](https://graphql-ruby.org/changesets/overview)
41
+ - [Streaming payloads](https://graphql-ruby.org/defer/overview)
42
+ - [Server-side caching](https://graphql-ruby.org/object_cache/overview)
43
+ - [Rate limiters](https://graphql-ruby.org/limiters/overview)
44
+ - Subscriptions backends for [Pusher](https://graphql-ruby.org/subscriptions/pusher_implementation) and [Ably](https://graphql-ruby.org/subscriptions/ably_implementation)
45
+ - Authorization plugins for [Pundit](https://graphql-ruby.org/authorization/pundit_integration) and [CanCan](https://graphql-ruby.org/authorization/can_can_integration)
46
+
47
+ Besides that, Pro customers get email support and an opportunity to support graphql-ruby's development!
38
48
 
39
49
  ## Goals
40
50
 
@@ -44,6 +54,6 @@ I also sell [GraphQL::Pro](https://graphql.pro) which provides several features
44
54
 
45
55
  ## Getting Involved
46
56
 
47
- - __Say hi & ask questions__ in the #graphql-ruby channel on [Discord](https://discord.com/invite/xud7bH9) or [on Twitter](https://twitter.com/rmosolgo)!
57
+ - __Say hi & ask questions__ in the #graphql-ruby channel on [Discord](https://discord.com/invite/xud7bH9).
48
58
  - __Report bugs__ by posting a description, full stack trace, and all relevant code in a [GitHub issue](https://github.com/rmosolgo/graphql-ruby/issues).
49
59
  - __Start hacking__ with the [Development guide](https://graphql-ruby.org/development).
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.13
4
+ version: 2.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-12 00:00:00.000000000 Z
11
+ date: 2024-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: benchmark-ips
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: graphql-batch
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: memory_profiler
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -56,72 +84,72 @@ dependencies:
56
84
  name: minitest
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - "~>"
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: 5.9.0
89
+ version: '0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
- version: 5.9.0
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: minitest-focus
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - "~>"
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '1.1'
103
+ version: '0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - "~>"
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '1.1'
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: minitest-reporters
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - "~>"
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '1.0'
117
+ version: '0'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - "~>"
122
+ - - ">="
95
123
  - !ruby/object:Gem::Version
96
- version: '1.0'
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: racc
126
+ name: rake
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - "~>"
129
+ - - ">="
102
130
  - !ruby/object:Gem::Version
103
- version: '1.4'
131
+ version: '0'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
- - - "~>"
136
+ - - ">="
109
137
  - !ruby/object:Gem::Version
110
- version: '1.4'
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: rake
140
+ name: rake-compiler
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - "~>"
143
+ - - ">="
116
144
  - !ruby/object:Gem::Version
117
- version: '12'
145
+ version: '0'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - "~>"
150
+ - - ">="
123
151
  - !ruby/object:Gem::Version
124
- version: '12'
152
+ version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: rubocop
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -256,6 +284,7 @@ files:
256
284
  - lib/generators/graphql/templates/base_input_object.erb
257
285
  - lib/generators/graphql/templates/base_interface.erb
258
286
  - lib/generators/graphql/templates/base_object.erb
287
+ - lib/generators/graphql/templates/base_resolver.erb
259
288
  - lib/generators/graphql/templates/base_scalar.erb
260
289
  - lib/generators/graphql/templates/base_union.erb
261
290
  - lib/generators/graphql/templates/enum.erb
@@ -277,33 +306,33 @@ files:
277
306
  - lib/generators/graphql/union_generator.rb
278
307
  - lib/graphql.rb
279
308
  - lib/graphql/analysis.rb
280
- - lib/graphql/analysis/ast.rb
281
- - lib/graphql/analysis/ast/analyzer.rb
282
- - lib/graphql/analysis/ast/field_usage.rb
283
- - lib/graphql/analysis/ast/max_query_complexity.rb
284
- - lib/graphql/analysis/ast/max_query_depth.rb
285
- - lib/graphql/analysis/ast/query_complexity.rb
286
- - lib/graphql/analysis/ast/query_depth.rb
287
- - lib/graphql/analysis/ast/visitor.rb
309
+ - lib/graphql/analysis/analyzer.rb
310
+ - lib/graphql/analysis/field_usage.rb
311
+ - lib/graphql/analysis/max_query_complexity.rb
312
+ - lib/graphql/analysis/max_query_depth.rb
313
+ - lib/graphql/analysis/query_complexity.rb
314
+ - lib/graphql/analysis/query_depth.rb
315
+ - lib/graphql/analysis/visitor.rb
288
316
  - lib/graphql/analysis_error.rb
289
317
  - lib/graphql/backtrace.rb
290
318
  - lib/graphql/backtrace/inspect_result.rb
291
319
  - lib/graphql/backtrace/table.rb
320
+ - lib/graphql/backtrace/trace.rb
292
321
  - lib/graphql/backtrace/traced_error.rb
293
322
  - lib/graphql/backtrace/tracer.rb
294
323
  - lib/graphql/coercion_error.rb
295
324
  - lib/graphql/dataloader.rb
325
+ - lib/graphql/dataloader/async_dataloader.rb
296
326
  - lib/graphql/dataloader/null_dataloader.rb
297
327
  - lib/graphql/dataloader/request.rb
298
328
  - lib/graphql/dataloader/request_all.rb
299
329
  - lib/graphql/dataloader/source.rb
300
330
  - lib/graphql/date_encoding_error.rb
301
- - lib/graphql/deprecation.rb
302
331
  - lib/graphql/dig.rb
332
+ - lib/graphql/duration_encoding_error.rb
303
333
  - lib/graphql/execution.rb
304
334
  - lib/graphql/execution/directive_checks.rb
305
335
  - lib/graphql/execution/errors.rb
306
- - lib/graphql/execution/instrumentation.rb
307
336
  - lib/graphql/execution/interpreter.rb
308
337
  - lib/graphql/execution/interpreter/argument_value.rb
309
338
  - lib/graphql/execution/interpreter/arguments.rb
@@ -312,12 +341,12 @@ files:
312
341
  - lib/graphql/execution/interpreter/handles_raw_value.rb
313
342
  - lib/graphql/execution/interpreter/resolve.rb
314
343
  - lib/graphql/execution/interpreter/runtime.rb
344
+ - lib/graphql/execution/interpreter/runtime/graphql_result.rb
315
345
  - lib/graphql/execution/lazy.rb
316
346
  - lib/graphql/execution/lazy/lazy_method_map.rb
317
347
  - lib/graphql/execution/lookahead.rb
318
348
  - lib/graphql/execution/multiplex.rb
319
349
  - lib/graphql/execution_error.rb
320
- - lib/graphql/filter.rb
321
350
  - lib/graphql/integer_decoding_error.rb
322
351
  - lib/graphql/integer_encoding_error.rb
323
352
  - lib/graphql/introspection.rb
@@ -342,13 +371,11 @@ files:
342
371
  - lib/graphql/language/document_from_schema_definition.rb
343
372
  - lib/graphql/language/generation.rb
344
373
  - lib/graphql/language/lexer.rb
345
- - lib/graphql/language/lexer.rl
346
374
  - lib/graphql/language/nodes.rb
347
375
  - lib/graphql/language/parser.rb
348
- - lib/graphql/language/parser.y
349
376
  - lib/graphql/language/printer.rb
350
377
  - lib/graphql/language/sanitized_printer.rb
351
- - lib/graphql/language/token.rb
378
+ - lib/graphql/language/static_visitor.rb
352
379
  - lib/graphql/language/visitor.rb
353
380
  - lib/graphql/load_application_object_failed_error.rb
354
381
  - lib/graphql/name_validator.rb
@@ -363,6 +390,7 @@ files:
363
390
  - lib/graphql/parse_error.rb
364
391
  - lib/graphql/query.rb
365
392
  - lib/graphql/query/context.rb
393
+ - lib/graphql/query/context/scoped_context.rb
366
394
  - lib/graphql/query/fingerprint.rb
367
395
  - lib/graphql/query/input_validation_result.rb
368
396
  - lib/graphql/query/null_context.rb
@@ -382,8 +410,8 @@ files:
382
410
  - lib/graphql/runtime_type_error.rb
383
411
  - lib/graphql/schema.rb
384
412
  - lib/graphql/schema/addition.rb
413
+ - lib/graphql/schema/always_visible.rb
385
414
  - lib/graphql/schema/argument.rb
386
- - lib/graphql/schema/base_64_bp.rb
387
415
  - lib/graphql/schema/base_64_encoder.rb
388
416
  - lib/graphql/schema/build_from_definition.rb
389
417
  - lib/graphql/schema/build_from_definition/resolve_map.rb
@@ -394,7 +422,9 @@ files:
394
422
  - lib/graphql/schema/directive/feature.rb
395
423
  - lib/graphql/schema/directive/flagged.rb
396
424
  - lib/graphql/schema/directive/include.rb
425
+ - lib/graphql/schema/directive/one_of.rb
397
426
  - lib/graphql/schema/directive/skip.rb
427
+ - lib/graphql/schema/directive/specified_by.rb
398
428
  - lib/graphql/schema/directive/transform.rb
399
429
  - lib/graphql/schema/enum.rb
400
430
  - lib/graphql/schema/enum_value.rb
@@ -404,10 +434,10 @@ files:
404
434
  - lib/graphql/schema/field_extension.rb
405
435
  - lib/graphql/schema/find_inherited_value.rb
406
436
  - lib/graphql/schema/finder.rb
437
+ - lib/graphql/schema/has_single_input_argument.rb
407
438
  - lib/graphql/schema/input_object.rb
408
439
  - lib/graphql/schema/interface.rb
409
440
  - lib/graphql/schema/introspection_system.rb
410
- - lib/graphql/schema/invalid_type_error.rb
411
441
  - lib/graphql/schema/late_bound_type.rb
412
442
  - lib/graphql/schema/list.rb
413
443
  - lib/graphql/schema/loader.rb
@@ -438,12 +468,14 @@ files:
438
468
  - lib/graphql/schema/resolver/has_payload_type.rb
439
469
  - lib/graphql/schema/scalar.rb
440
470
  - lib/graphql/schema/subscription.rb
471
+ - lib/graphql/schema/subset.rb
441
472
  - lib/graphql/schema/timeout.rb
442
473
  - lib/graphql/schema/type_expression.rb
443
474
  - lib/graphql/schema/type_membership.rb
444
475
  - lib/graphql/schema/union.rb
445
476
  - lib/graphql/schema/unique_within_type.rb
446
477
  - lib/graphql/schema/validator.rb
478
+ - lib/graphql/schema/validator/all_validator.rb
447
479
  - lib/graphql/schema/validator/allow_blank_validator.rb
448
480
  - lib/graphql/schema/validator/allow_null_validator.rb
449
481
  - lib/graphql/schema/validator/exclusion_validator.rb
@@ -497,6 +529,8 @@ files:
497
529
  - lib/graphql/static_validation/rules/mutation_root_exists_error.rb
498
530
  - lib/graphql/static_validation/rules/no_definitions_are_present.rb
499
531
  - lib/graphql/static_validation/rules/no_definitions_are_present_error.rb
532
+ - lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb
533
+ - lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb
500
534
  - lib/graphql/static_validation/rules/operation_names_are_valid.rb
501
535
  - lib/graphql/static_validation/rules/operation_names_are_valid_error.rb
502
536
  - lib/graphql/static_validation/rules/query_root_exists.rb
@@ -519,7 +553,6 @@ files:
519
553
  - lib/graphql/static_validation/rules/variables_are_input_types_error.rb
520
554
  - lib/graphql/static_validation/rules/variables_are_used_and_defined.rb
521
555
  - lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb
522
- - lib/graphql/static_validation/type_stack.rb
523
556
  - lib/graphql/static_validation/validation_context.rb
524
557
  - lib/graphql/static_validation/validation_timeout_error.rb
525
558
  - lib/graphql/static_validation/validator.rb
@@ -529,20 +562,35 @@ files:
529
562
  - lib/graphql/subscriptions/broadcast_analyzer.rb
530
563
  - lib/graphql/subscriptions/default_subscription_resolve_extension.rb
531
564
  - lib/graphql/subscriptions/event.rb
532
- - lib/graphql/subscriptions/instrumentation.rb
533
565
  - lib/graphql/subscriptions/serialize.rb
566
+ - lib/graphql/testing.rb
567
+ - lib/graphql/testing/helpers.rb
534
568
  - lib/graphql/tracing.rb
569
+ - lib/graphql/tracing/active_support_notifications_trace.rb
535
570
  - lib/graphql/tracing/active_support_notifications_tracing.rb
571
+ - lib/graphql/tracing/appoptics_trace.rb
536
572
  - lib/graphql/tracing/appoptics_tracing.rb
573
+ - lib/graphql/tracing/appsignal_trace.rb
537
574
  - lib/graphql/tracing/appsignal_tracing.rb
575
+ - lib/graphql/tracing/data_dog_trace.rb
538
576
  - lib/graphql/tracing/data_dog_tracing.rb
577
+ - lib/graphql/tracing/legacy_hooks_trace.rb
578
+ - lib/graphql/tracing/legacy_trace.rb
579
+ - lib/graphql/tracing/new_relic_trace.rb
539
580
  - lib/graphql/tracing/new_relic_tracing.rb
581
+ - lib/graphql/tracing/notifications_trace.rb
540
582
  - lib/graphql/tracing/notifications_tracing.rb
583
+ - lib/graphql/tracing/platform_trace.rb
541
584
  - lib/graphql/tracing/platform_tracing.rb
585
+ - lib/graphql/tracing/prometheus_trace.rb
586
+ - lib/graphql/tracing/prometheus_trace/graphql_collector.rb
542
587
  - lib/graphql/tracing/prometheus_tracing.rb
543
- - lib/graphql/tracing/prometheus_tracing/graphql_collector.rb
588
+ - lib/graphql/tracing/scout_trace.rb
544
589
  - lib/graphql/tracing/scout_tracing.rb
590
+ - lib/graphql/tracing/sentry_trace.rb
591
+ - lib/graphql/tracing/statsd_trace.rb
545
592
  - lib/graphql/tracing/statsd_tracing.rb
593
+ - lib/graphql/tracing/trace.rb
546
594
  - lib/graphql/type_kinds.rb
547
595
  - lib/graphql/types.rb
548
596
  - lib/graphql/types/big_int.rb
@@ -552,12 +600,12 @@ files:
552
600
  - lib/graphql/types/int.rb
553
601
  - lib/graphql/types/iso_8601_date.rb
554
602
  - lib/graphql/types/iso_8601_date_time.rb
603
+ - lib/graphql/types/iso_8601_duration.rb
555
604
  - lib/graphql/types/json.rb
556
605
  - lib/graphql/types/relay.rb
557
606
  - lib/graphql/types/relay/base_connection.rb
558
607
  - lib/graphql/types/relay/base_edge.rb
559
608
  - lib/graphql/types/relay/connection_behaviors.rb
560
- - lib/graphql/types/relay/default_relay.rb
561
609
  - lib/graphql/types/relay/edge_behaviors.rb
562
610
  - lib/graphql/types/relay/has_node_field.rb
563
611
  - lib/graphql/types/relay/has_nodes_field.rb
@@ -579,7 +627,8 @@ metadata:
579
627
  changelog_uri: https://github.com/rmosolgo/graphql-ruby/blob/master/CHANGELOG.md
580
628
  source_code_uri: https://github.com/rmosolgo/graphql-ruby
581
629
  bug_tracker_uri: https://github.com/rmosolgo/graphql-ruby/issues
582
- mailing_list_uri: https://tinyletter.com/graphql-ruby
630
+ mailing_list_uri: https://buttondown.email/graphql-ruby
631
+ rubygems_mfa_required: 'true'
583
632
  post_install_message:
584
633
  rdoc_options: []
585
634
  require_paths:
@@ -588,14 +637,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
588
637
  requirements:
589
638
  - - ">="
590
639
  - !ruby/object:Gem::Version
591
- version: 2.4.0
640
+ version: 2.7.0
592
641
  required_rubygems_version: !ruby/object:Gem::Requirement
593
642
  requirements:
594
643
  - - ">="
595
644
  - !ruby/object:Gem::Version
596
645
  version: '0'
597
646
  requirements: []
598
- rubygems_version: 3.2.22
647
+ rubygems_version: 3.5.12
599
648
  signing_key:
600
649
  specification_version: 4
601
650
  summary: A GraphQL language and runtime for Ruby
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- module AST
5
- # Query analyzer for query ASTs. Query analyzers respond to visitor style methods
6
- # but are prefixed by `enter` and `leave`.
7
- #
8
- # When an analyzer is initialized with a Multiplex, you can always get the current query from
9
- # `visitor.query` in the visit methods.
10
- #
11
- # @param [GraphQL::Query, GraphQL::Execution::Multiplex] The query or multiplex to analyze
12
- class Analyzer
13
- def initialize(subject)
14
- @subject = subject
15
-
16
- if subject.is_a?(GraphQL::Query)
17
- @query = subject
18
- @multiplex = nil
19
- else
20
- @multiplex = subject
21
- @query = nil
22
- end
23
- end
24
-
25
- # Analyzer hook to decide at analysis time whether a query should
26
- # be analyzed or not.
27
- # @return [Boolean] If the query should be analyzed or not
28
- def analyze?
29
- true
30
- end
31
-
32
- # The result for this analyzer. Returning {GraphQL::AnalysisError} results
33
- # in a query error.
34
- # @return [Any] The analyzer result
35
- def result
36
- raise GraphQL::RequiredImplementationMissingError
37
- end
38
-
39
- class << self
40
- private
41
-
42
- def build_visitor_hooks(member_name)
43
- class_eval(<<-EOS, __FILE__, __LINE__ + 1)
44
- def on_enter_#{member_name}(node, parent, visitor)
45
- end
46
-
47
- def on_leave_#{member_name}(node, parent, visitor)
48
- end
49
- EOS
50
- end
51
- end
52
-
53
- build_visitor_hooks :argument
54
- build_visitor_hooks :directive
55
- build_visitor_hooks :document
56
- build_visitor_hooks :enum
57
- build_visitor_hooks :field
58
- build_visitor_hooks :fragment_spread
59
- build_visitor_hooks :inline_fragment
60
- build_visitor_hooks :input_object
61
- build_visitor_hooks :list_type
62
- build_visitor_hooks :non_null_type
63
- build_visitor_hooks :null_value
64
- build_visitor_hooks :operation_definition
65
- build_visitor_hooks :type_name
66
- build_visitor_hooks :variable_definition
67
- build_visitor_hooks :variable_identifier
68
- build_visitor_hooks :abstract_node
69
-
70
- protected
71
-
72
- # @return [GraphQL::Query, GraphQL::Execution::Multiplex] Whatever this analyzer is analyzing
73
- attr_reader :subject
74
-
75
- # @return [GraphQL::Query, nil] `nil` if this analyzer is visiting a multiplex
76
- # (When this is `nil`, use `visitor.query` inside visit methods to get the current query)
77
- attr_reader :query
78
-
79
- # @return [GraphQL::Execution::Multiplex, nil] `nil` if this analyzer is visiting a query
80
- attr_reader :multiplex
81
- end
82
- end
83
- end
84
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- module AST
5
- class FieldUsage < Analyzer
6
- def initialize(query)
7
- super
8
- @used_fields = Set.new
9
- @used_deprecated_fields = Set.new
10
- @used_deprecated_arguments = Set.new
11
- end
12
-
13
- def on_leave_field(node, parent, visitor)
14
- field_defn = visitor.field_definition
15
- field = "#{visitor.parent_type_definition.graphql_name}.#{field_defn.graphql_name}"
16
- @used_fields << field
17
- @used_deprecated_fields << field if field_defn.deprecation_reason
18
- arguments = visitor.query.arguments_for(node, visitor.field_definition)
19
- # If there was an error when preparing this argument object,
20
- # then this might be an error or something:
21
- if arguments.respond_to?(:argument_values)
22
- extract_deprecated_arguments(arguments.argument_values)
23
- end
24
- end
25
-
26
- def result
27
- {
28
- used_fields: @used_fields.to_a,
29
- used_deprecated_fields: @used_deprecated_fields.to_a,
30
- used_deprecated_arguments: @used_deprecated_arguments.to_a,
31
- }
32
- end
33
-
34
- private
35
-
36
- def extract_deprecated_arguments(argument_values)
37
- argument_values.each_pair do |_argument_name, argument|
38
- if argument.definition.deprecation_reason
39
- @used_deprecated_arguments << argument.definition.path
40
- end
41
-
42
- next if argument.value.nil?
43
-
44
- if argument.definition.type.kind.input_object?
45
- extract_deprecated_arguments(argument.value.arguments.argument_values) # rubocop:disable Development/ContextIsPassedCop -- runtime args instance
46
- elsif argument.definition.type.list?
47
- argument
48
- .value
49
- .select { |value| value.respond_to?(:arguments) }
50
- .each { |value| extract_deprecated_arguments(value.arguments.argument_values) } # rubocop:disable Development/ContextIsPassedCop -- runtime args instance
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- module AST
5
- # Used under the hood to implement complexity validation,
6
- # see {Schema#max_complexity} and {Query#max_complexity}
7
- class MaxQueryComplexity < QueryComplexity
8
- def result
9
- return if subject.max_complexity.nil?
10
-
11
- total_complexity = max_possible_complexity
12
-
13
- if total_complexity > subject.max_complexity
14
- GraphQL::AnalysisError.new("Query has complexity of #{total_complexity}, which exceeds max complexity of #{subject.max_complexity}")
15
- else
16
- nil
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end