graphql 1.13.14 → 2.0.19

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 (261) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/install_generator.rb +1 -1
  3. data/lib/generators/graphql/relay.rb +3 -17
  4. data/lib/generators/graphql/templates/schema.erb +3 -0
  5. data/lib/graphql/analysis/ast/field_usage.rb +3 -1
  6. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  7. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  8. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  9. data/lib/graphql/analysis/ast/visitor.rb +43 -36
  10. data/lib/graphql/analysis/ast.rb +2 -12
  11. data/lib/graphql/analysis.rb +0 -7
  12. data/lib/graphql/backtrace/table.rb +2 -20
  13. data/lib/graphql/backtrace/tracer.rb +2 -3
  14. data/lib/graphql/backtrace.rb +2 -8
  15. data/lib/graphql/dataloader/null_dataloader.rb +3 -1
  16. data/lib/graphql/dataloader/source.rb +9 -0
  17. data/lib/graphql/dataloader.rb +4 -1
  18. data/lib/graphql/dig.rb +1 -1
  19. data/lib/graphql/execution/errors.rb +12 -82
  20. data/lib/graphql/execution/interpreter/resolve.rb +26 -0
  21. data/lib/graphql/execution/interpreter/runtime.rb +163 -120
  22. data/lib/graphql/execution/interpreter.rb +187 -78
  23. data/lib/graphql/execution/lazy.rb +7 -21
  24. data/lib/graphql/execution/lookahead.rb +44 -40
  25. data/lib/graphql/execution/multiplex.rb +3 -174
  26. data/lib/graphql/execution.rb +11 -4
  27. data/lib/graphql/introspection/directive_type.rb +2 -2
  28. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  29. data/lib/graphql/introspection/entry_points.rb +2 -15
  30. data/lib/graphql/introspection/field_type.rb +1 -1
  31. data/lib/graphql/introspection/schema_type.rb +2 -2
  32. data/lib/graphql/introspection/type_type.rb +13 -6
  33. data/lib/graphql/introspection.rb +4 -3
  34. data/lib/graphql/language/document_from_schema_definition.rb +18 -35
  35. data/lib/graphql/language/lexer.rb +216 -1488
  36. data/lib/graphql/language/lexer.ri +744 -0
  37. data/lib/graphql/language/nodes.rb +41 -33
  38. data/lib/graphql/language/parser.rb +375 -363
  39. data/lib/graphql/language/parser.y +48 -43
  40. data/lib/graphql/language/printer.rb +37 -21
  41. data/lib/graphql/language/visitor.rb +191 -83
  42. data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
  43. data/lib/graphql/pagination/array_connection.rb +4 -2
  44. data/lib/graphql/pagination/connection.rb +31 -4
  45. data/lib/graphql/pagination/connections.rb +3 -28
  46. data/lib/graphql/pagination/relation_connection.rb +2 -0
  47. data/lib/graphql/query/context.rb +155 -196
  48. data/lib/graphql/query/input_validation_result.rb +10 -1
  49. data/lib/graphql/query/null_context.rb +0 -3
  50. data/lib/graphql/query/validation_pipeline.rb +12 -37
  51. data/lib/graphql/query/variable_validation_error.rb +2 -2
  52. data/lib/graphql/query/variables.rb +35 -21
  53. data/lib/graphql/query.rb +32 -43
  54. data/lib/graphql/railtie.rb +0 -104
  55. data/lib/graphql/rake_task/validate.rb +1 -1
  56. data/lib/graphql/rake_task.rb +29 -1
  57. data/lib/graphql/relay/range_add.rb +9 -20
  58. data/lib/graphql/relay.rb +0 -15
  59. data/lib/graphql/schema/addition.rb +7 -9
  60. data/lib/graphql/schema/argument.rb +36 -43
  61. data/lib/graphql/schema/build_from_definition.rb +32 -18
  62. data/lib/graphql/schema/directive/one_of.rb +12 -0
  63. data/lib/graphql/schema/directive/transform.rb +1 -1
  64. data/lib/graphql/schema/directive.rb +12 -23
  65. data/lib/graphql/schema/enum.rb +29 -41
  66. data/lib/graphql/schema/enum_value.rb +5 -25
  67. data/lib/graphql/schema/field/connection_extension.rb +4 -0
  68. data/lib/graphql/schema/field.rb +245 -343
  69. data/lib/graphql/schema/input_object.rb +57 -69
  70. data/lib/graphql/schema/interface.rb +0 -35
  71. data/lib/graphql/schema/introspection_system.rb +3 -8
  72. data/lib/graphql/schema/late_bound_type.rb +8 -2
  73. data/lib/graphql/schema/list.rb +18 -9
  74. data/lib/graphql/schema/loader.rb +1 -2
  75. data/lib/graphql/schema/member/base_dsl_methods.rb +15 -19
  76. data/lib/graphql/schema/member/build_type.rb +5 -7
  77. data/lib/graphql/schema/member/has_arguments.rb +146 -55
  78. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  79. data/lib/graphql/schema/member/has_directives.rb +71 -56
  80. data/lib/graphql/schema/member/has_fields.rb +16 -4
  81. data/lib/graphql/schema/member/has_interfaces.rb +49 -10
  82. data/lib/graphql/schema/member/has_validators.rb +31 -5
  83. data/lib/graphql/schema/member/relay_shortcuts.rb +28 -2
  84. data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
  85. data/lib/graphql/schema/member/validates_input.rb +3 -3
  86. data/lib/graphql/schema/member.rb +0 -6
  87. data/lib/graphql/schema/mutation.rb +0 -9
  88. data/lib/graphql/schema/non_null.rb +3 -9
  89. data/lib/graphql/schema/object.rb +15 -52
  90. data/lib/graphql/schema/relay_classic_mutation.rb +53 -42
  91. data/lib/graphql/schema/resolver/has_payload_type.rb +20 -10
  92. data/lib/graphql/schema/resolver.rb +41 -42
  93. data/lib/graphql/schema/scalar.rb +8 -23
  94. data/lib/graphql/schema/subscription.rb +0 -7
  95. data/lib/graphql/schema/timeout.rb +24 -28
  96. data/lib/graphql/schema/type_membership.rb +3 -0
  97. data/lib/graphql/schema/union.rb +10 -17
  98. data/lib/graphql/schema/warden.rb +34 -8
  99. data/lib/graphql/schema/wrapper.rb +0 -5
  100. data/lib/graphql/schema.rb +240 -968
  101. data/lib/graphql/static_validation/all_rules.rb +1 -0
  102. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  103. data/lib/graphql/static_validation/definition_dependencies.rb +7 -1
  104. data/lib/graphql/static_validation/error.rb +2 -2
  105. data/lib/graphql/static_validation/literal_validator.rb +19 -1
  106. data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
  107. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  108. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  109. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  110. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +12 -6
  111. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  112. data/lib/graphql/static_validation/validator.rb +3 -25
  113. data/lib/graphql/static_validation.rb +0 -2
  114. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +7 -1
  115. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  116. data/lib/graphql/subscriptions/event.rb +3 -8
  117. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  118. data/lib/graphql/subscriptions.rb +32 -20
  119. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  120. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  121. data/lib/graphql/tracing/appsignal_trace.rb +66 -0
  122. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  123. data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
  124. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  125. data/lib/graphql/tracing/notifications_trace.rb +41 -0
  126. data/lib/graphql/tracing/platform_trace.rb +107 -0
  127. data/lib/graphql/tracing/platform_tracing.rb +26 -40
  128. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  129. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  130. data/lib/graphql/tracing/scout_trace.rb +72 -0
  131. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  132. data/lib/graphql/tracing.rb +136 -41
  133. data/lib/graphql/type_kinds.rb +6 -3
  134. data/lib/graphql/types/iso_8601_date.rb +4 -1
  135. data/lib/graphql/types/iso_8601_date_time.rb +4 -0
  136. data/lib/graphql/types/relay/base_connection.rb +16 -6
  137. data/lib/graphql/types/relay/connection_behaviors.rb +5 -25
  138. data/lib/graphql/types/relay/default_relay.rb +5 -9
  139. data/lib/graphql/types/relay/edge_behaviors.rb +1 -4
  140. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  141. data/lib/graphql/types/relay.rb +0 -2
  142. data/lib/graphql/types/string.rb +1 -1
  143. data/lib/graphql/version.rb +1 -1
  144. data/lib/graphql.rb +11 -72
  145. metadata +31 -133
  146. data/lib/graphql/analysis/analyze_query.rb +0 -98
  147. data/lib/graphql/analysis/field_usage.rb +0 -45
  148. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  149. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  150. data/lib/graphql/analysis/query_complexity.rb +0 -88
  151. data/lib/graphql/analysis/query_depth.rb +0 -43
  152. data/lib/graphql/analysis/reducer_state.rb +0 -48
  153. data/lib/graphql/argument.rb +0 -131
  154. data/lib/graphql/authorization.rb +0 -82
  155. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  156. data/lib/graphql/backwards_compatibility.rb +0 -61
  157. data/lib/graphql/base_type.rb +0 -232
  158. data/lib/graphql/boolean_type.rb +0 -2
  159. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  160. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  161. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  162. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  163. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  164. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  165. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  166. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  167. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  168. data/lib/graphql/compatibility.rb +0 -5
  169. data/lib/graphql/define/assign_argument.rb +0 -12
  170. data/lib/graphql/define/assign_connection.rb +0 -13
  171. data/lib/graphql/define/assign_enum_value.rb +0 -18
  172. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  173. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  174. data/lib/graphql/define/assign_object_field.rb +0 -42
  175. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  176. data/lib/graphql/define/instance_definable.rb +0 -255
  177. data/lib/graphql/define/no_definition_error.rb +0 -7
  178. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  179. data/lib/graphql/define/type_definer.rb +0 -31
  180. data/lib/graphql/define.rb +0 -31
  181. data/lib/graphql/deprecated_dsl.rb +0 -55
  182. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  183. data/lib/graphql/directive/include_directive.rb +0 -2
  184. data/lib/graphql/directive/skip_directive.rb +0 -2
  185. data/lib/graphql/directive.rb +0 -107
  186. data/lib/graphql/enum_type.rb +0 -133
  187. data/lib/graphql/execution/execute.rb +0 -333
  188. data/lib/graphql/execution/flatten.rb +0 -40
  189. data/lib/graphql/execution/instrumentation.rb +0 -92
  190. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  191. data/lib/graphql/execution/typecast.rb +0 -50
  192. data/lib/graphql/field/resolve.rb +0 -59
  193. data/lib/graphql/field.rb +0 -226
  194. data/lib/graphql/float_type.rb +0 -2
  195. data/lib/graphql/function.rb +0 -128
  196. data/lib/graphql/id_type.rb +0 -2
  197. data/lib/graphql/input_object_type.rb +0 -138
  198. data/lib/graphql/int_type.rb +0 -2
  199. data/lib/graphql/interface_type.rb +0 -72
  200. data/lib/graphql/internal_representation/document.rb +0 -27
  201. data/lib/graphql/internal_representation/node.rb +0 -206
  202. data/lib/graphql/internal_representation/print.rb +0 -51
  203. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  204. data/lib/graphql/internal_representation/scope.rb +0 -88
  205. data/lib/graphql/internal_representation/visit.rb +0 -36
  206. data/lib/graphql/internal_representation.rb +0 -7
  207. data/lib/graphql/language/lexer.rl +0 -260
  208. data/lib/graphql/list_type.rb +0 -80
  209. data/lib/graphql/non_null_type.rb +0 -71
  210. data/lib/graphql/object_type.rb +0 -130
  211. data/lib/graphql/query/arguments.rb +0 -189
  212. data/lib/graphql/query/arguments_cache.rb +0 -24
  213. data/lib/graphql/query/executor.rb +0 -52
  214. data/lib/graphql/query/literal_input.rb +0 -136
  215. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  216. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  217. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  218. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  219. data/lib/graphql/query/serial_execution.rb +0 -40
  220. data/lib/graphql/relay/array_connection.rb +0 -83
  221. data/lib/graphql/relay/base_connection.rb +0 -189
  222. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  223. data/lib/graphql/relay/connection_resolve.rb +0 -43
  224. data/lib/graphql/relay/connection_type.rb +0 -54
  225. data/lib/graphql/relay/edge.rb +0 -27
  226. data/lib/graphql/relay/edge_type.rb +0 -19
  227. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  228. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  229. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  230. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  231. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  232. data/lib/graphql/relay/mutation/result.rb +0 -38
  233. data/lib/graphql/relay/mutation.rb +0 -106
  234. data/lib/graphql/relay/node.rb +0 -39
  235. data/lib/graphql/relay/page_info.rb +0 -7
  236. data/lib/graphql/relay/relation_connection.rb +0 -188
  237. data/lib/graphql/relay/type_extensions.rb +0 -32
  238. data/lib/graphql/scalar_type.rb +0 -91
  239. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  240. data/lib/graphql/schema/default_parse_error.rb +0 -10
  241. data/lib/graphql/schema/default_type_error.rb +0 -17
  242. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  243. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  244. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  245. data/lib/graphql/schema/middleware_chain.rb +0 -82
  246. data/lib/graphql/schema/possible_types.rb +0 -44
  247. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  248. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  249. data/lib/graphql/schema/traversal.rb +0 -228
  250. data/lib/graphql/schema/validation.rb +0 -313
  251. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  252. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  253. data/lib/graphql/string_type.rb +0 -2
  254. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  255. data/lib/graphql/tracing/opentelemetry_tracing.rb +0 -101
  256. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  257. data/lib/graphql/types/relay/node_field.rb +0 -24
  258. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  259. data/lib/graphql/union_type.rb +0 -115
  260. data/lib/graphql/upgrader/member.rb +0 -937
  261. data/lib/graphql/upgrader/schema.rb +0 -38
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.14
4
+ version: 2.0.19
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-06-20 00:00:00.000000000 Z
11
+ date: 2023-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -112,44 +112,44 @@ dependencies:
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '12'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '12'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: rubocop
126
+ name: rake-compiler
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '1.12'
131
+ version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '1.12'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: parser
140
+ name: rubocop
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: '1.12'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: '1.12'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: jekyll
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -291,7 +291,6 @@ files:
291
291
  - lib/generators/graphql/union_generator.rb
292
292
  - lib/graphql.rb
293
293
  - lib/graphql/analysis.rb
294
- - lib/graphql/analysis/analyze_query.rb
295
294
  - lib/graphql/analysis/ast.rb
296
295
  - lib/graphql/analysis/ast/analyzer.rb
297
296
  - lib/graphql/analysis/ast/field_usage.rb
@@ -300,67 +299,24 @@ files:
300
299
  - lib/graphql/analysis/ast/query_complexity.rb
301
300
  - lib/graphql/analysis/ast/query_depth.rb
302
301
  - lib/graphql/analysis/ast/visitor.rb
303
- - lib/graphql/analysis/field_usage.rb
304
- - lib/graphql/analysis/max_query_complexity.rb
305
- - lib/graphql/analysis/max_query_depth.rb
306
- - lib/graphql/analysis/query_complexity.rb
307
- - lib/graphql/analysis/query_depth.rb
308
- - lib/graphql/analysis/reducer_state.rb
309
302
  - lib/graphql/analysis_error.rb
310
- - lib/graphql/argument.rb
311
- - lib/graphql/authorization.rb
312
303
  - lib/graphql/backtrace.rb
313
304
  - lib/graphql/backtrace/inspect_result.rb
314
- - lib/graphql/backtrace/legacy_tracer.rb
315
305
  - lib/graphql/backtrace/table.rb
316
306
  - lib/graphql/backtrace/traced_error.rb
317
307
  - lib/graphql/backtrace/tracer.rb
318
- - lib/graphql/backwards_compatibility.rb
319
- - lib/graphql/base_type.rb
320
- - lib/graphql/boolean_type.rb
321
308
  - lib/graphql/coercion_error.rb
322
- - lib/graphql/compatibility.rb
323
- - lib/graphql/compatibility/execution_specification.rb
324
- - lib/graphql/compatibility/execution_specification/counter_schema.rb
325
- - lib/graphql/compatibility/execution_specification/specification_schema.rb
326
- - lib/graphql/compatibility/lazy_execution_specification.rb
327
- - lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb
328
- - lib/graphql/compatibility/query_parser_specification.rb
329
- - lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb
330
- - lib/graphql/compatibility/query_parser_specification/query_assertions.rb
331
- - lib/graphql/compatibility/schema_parser_specification.rb
332
309
  - lib/graphql/dataloader.rb
333
310
  - lib/graphql/dataloader/null_dataloader.rb
334
311
  - lib/graphql/dataloader/request.rb
335
312
  - lib/graphql/dataloader/request_all.rb
336
313
  - lib/graphql/dataloader/source.rb
337
314
  - lib/graphql/date_encoding_error.rb
338
- - lib/graphql/define.rb
339
- - lib/graphql/define/assign_argument.rb
340
- - lib/graphql/define/assign_connection.rb
341
- - lib/graphql/define/assign_enum_value.rb
342
- - lib/graphql/define/assign_global_id_field.rb
343
- - lib/graphql/define/assign_mutation_function.rb
344
- - lib/graphql/define/assign_object_field.rb
345
- - lib/graphql/define/defined_object_proxy.rb
346
- - lib/graphql/define/instance_definable.rb
347
- - lib/graphql/define/no_definition_error.rb
348
- - lib/graphql/define/non_null_with_bang.rb
349
- - lib/graphql/define/type_definer.rb
350
- - lib/graphql/deprecated_dsl.rb
351
315
  - lib/graphql/deprecation.rb
352
316
  - lib/graphql/dig.rb
353
- - lib/graphql/directive.rb
354
- - lib/graphql/directive/deprecated_directive.rb
355
- - lib/graphql/directive/include_directive.rb
356
- - lib/graphql/directive/skip_directive.rb
357
- - lib/graphql/enum_type.rb
358
317
  - lib/graphql/execution.rb
359
318
  - lib/graphql/execution/directive_checks.rb
360
319
  - lib/graphql/execution/errors.rb
361
- - lib/graphql/execution/execute.rb
362
- - lib/graphql/execution/flatten.rb
363
- - lib/graphql/execution/instrumentation.rb
364
320
  - lib/graphql/execution/interpreter.rb
365
321
  - lib/graphql/execution/interpreter/argument_value.rb
366
322
  - lib/graphql/execution/interpreter/arguments.rb
@@ -371,29 +327,12 @@ files:
371
327
  - lib/graphql/execution/interpreter/runtime.rb
372
328
  - lib/graphql/execution/lazy.rb
373
329
  - lib/graphql/execution/lazy/lazy_method_map.rb
374
- - lib/graphql/execution/lazy/resolve.rb
375
330
  - lib/graphql/execution/lookahead.rb
376
331
  - lib/graphql/execution/multiplex.rb
377
- - lib/graphql/execution/typecast.rb
378
332
  - lib/graphql/execution_error.rb
379
- - lib/graphql/field.rb
380
- - lib/graphql/field/resolve.rb
381
333
  - lib/graphql/filter.rb
382
- - lib/graphql/float_type.rb
383
- - lib/graphql/function.rb
384
- - lib/graphql/id_type.rb
385
- - lib/graphql/input_object_type.rb
386
- - lib/graphql/int_type.rb
387
334
  - lib/graphql/integer_decoding_error.rb
388
335
  - lib/graphql/integer_encoding_error.rb
389
- - lib/graphql/interface_type.rb
390
- - lib/graphql/internal_representation.rb
391
- - lib/graphql/internal_representation/document.rb
392
- - lib/graphql/internal_representation/node.rb
393
- - lib/graphql/internal_representation/print.rb
394
- - lib/graphql/internal_representation/rewrite.rb
395
- - lib/graphql/internal_representation/scope.rb
396
- - lib/graphql/internal_representation/visit.rb
397
336
  - lib/graphql/introspection.rb
398
337
  - lib/graphql/introspection/base_object.rb
399
338
  - lib/graphql/introspection/directive_location_enum.rb
@@ -416,7 +355,7 @@ files:
416
355
  - lib/graphql/language/document_from_schema_definition.rb
417
356
  - lib/graphql/language/generation.rb
418
357
  - lib/graphql/language/lexer.rb
419
- - lib/graphql/language/lexer.rl
358
+ - lib/graphql/language/lexer.ri
420
359
  - lib/graphql/language/nodes.rb
421
360
  - lib/graphql/language/parser.rb
422
361
  - lib/graphql/language/parser.y
@@ -424,11 +363,8 @@ files:
424
363
  - lib/graphql/language/sanitized_printer.rb
425
364
  - lib/graphql/language/token.rb
426
365
  - lib/graphql/language/visitor.rb
427
- - lib/graphql/list_type.rb
428
366
  - lib/graphql/load_application_object_failed_error.rb
429
367
  - lib/graphql/name_validator.rb
430
- - lib/graphql/non_null_type.rb
431
- - lib/graphql/object_type.rb
432
368
  - lib/graphql/pagination.rb
433
369
  - lib/graphql/pagination/active_record_relation_connection.rb
434
370
  - lib/graphql/pagination/array_connection.rb
@@ -439,20 +375,11 @@ files:
439
375
  - lib/graphql/pagination/sequel_dataset_connection.rb
440
376
  - lib/graphql/parse_error.rb
441
377
  - lib/graphql/query.rb
442
- - lib/graphql/query/arguments.rb
443
- - lib/graphql/query/arguments_cache.rb
444
378
  - lib/graphql/query/context.rb
445
- - lib/graphql/query/executor.rb
446
379
  - lib/graphql/query/fingerprint.rb
447
380
  - lib/graphql/query/input_validation_result.rb
448
- - lib/graphql/query/literal_input.rb
449
381
  - lib/graphql/query/null_context.rb
450
382
  - lib/graphql/query/result.rb
451
- - lib/graphql/query/serial_execution.rb
452
- - lib/graphql/query/serial_execution/field_resolution.rb
453
- - lib/graphql/query/serial_execution/operation_resolution.rb
454
- - lib/graphql/query/serial_execution/selection_resolution.rb
455
- - lib/graphql/query/serial_execution/value_resolution.rb
456
383
  - lib/graphql/query/validation_pipeline.rb
457
384
  - lib/graphql/query/variable_validation_error.rb
458
385
  - lib/graphql/query/variables.rb
@@ -460,31 +387,12 @@ files:
460
387
  - lib/graphql/rake_task.rb
461
388
  - lib/graphql/rake_task/validate.rb
462
389
  - lib/graphql/relay.rb
463
- - lib/graphql/relay/array_connection.rb
464
- - lib/graphql/relay/base_connection.rb
465
- - lib/graphql/relay/connection_instrumentation.rb
466
- - lib/graphql/relay/connection_resolve.rb
467
- - lib/graphql/relay/connection_type.rb
468
- - lib/graphql/relay/edge.rb
469
- - lib/graphql/relay/edge_type.rb
470
- - lib/graphql/relay/edges_instrumentation.rb
471
- - lib/graphql/relay/global_id_resolve.rb
472
- - lib/graphql/relay/mongo_relation_connection.rb
473
- - lib/graphql/relay/mutation.rb
474
- - lib/graphql/relay/mutation/instrumentation.rb
475
- - lib/graphql/relay/mutation/resolve.rb
476
- - lib/graphql/relay/mutation/result.rb
477
- - lib/graphql/relay/node.rb
478
- - lib/graphql/relay/page_info.rb
479
390
  - lib/graphql/relay/range_add.rb
480
- - lib/graphql/relay/relation_connection.rb
481
- - lib/graphql/relay/type_extensions.rb
482
391
  - lib/graphql/rubocop.rb
483
392
  - lib/graphql/rubocop/graphql/base_cop.rb
484
393
  - lib/graphql/rubocop/graphql/default_null_true.rb
485
394
  - lib/graphql/rubocop/graphql/default_required_true.rb
486
395
  - lib/graphql/runtime_type_error.rb
487
- - lib/graphql/scalar_type.rb
488
396
  - lib/graphql/schema.rb
489
397
  - lib/graphql/schema/addition.rb
490
398
  - lib/graphql/schema/argument.rb
@@ -494,14 +402,12 @@ files:
494
402
  - lib/graphql/schema/build_from_definition/resolve_map.rb
495
403
  - lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb
496
404
  - lib/graphql/schema/built_in_types.rb
497
- - lib/graphql/schema/catchall_middleware.rb
498
- - lib/graphql/schema/default_parse_error.rb
499
- - lib/graphql/schema/default_type_error.rb
500
405
  - lib/graphql/schema/directive.rb
501
406
  - lib/graphql/schema/directive/deprecated.rb
502
407
  - lib/graphql/schema/directive/feature.rb
503
408
  - lib/graphql/schema/directive/flagged.rb
504
409
  - lib/graphql/schema/directive/include.rb
410
+ - lib/graphql/schema/directive/one_of.rb
505
411
  - lib/graphql/schema/directive/skip.rb
506
412
  - lib/graphql/schema/directive/transform.rb
507
413
  - lib/graphql/schema/enum.rb
@@ -520,10 +426,8 @@ files:
520
426
  - lib/graphql/schema/list.rb
521
427
  - lib/graphql/schema/loader.rb
522
428
  - lib/graphql/schema/member.rb
523
- - lib/graphql/schema/member/accepts_definition.rb
524
429
  - lib/graphql/schema/member/base_dsl_methods.rb
525
430
  - lib/graphql/schema/member/build_type.rb
526
- - lib/graphql/schema/member/cached_graphql_definition.rb
527
431
  - lib/graphql/schema/member/graphql_type_names.rb
528
432
  - lib/graphql/schema/member/has_arguments.rb
529
433
  - lib/graphql/schema/member/has_ast_node.rb
@@ -534,32 +438,25 @@ files:
534
438
  - lib/graphql/schema/member/has_path.rb
535
439
  - lib/graphql/schema/member/has_unresolved_type_error.rb
536
440
  - lib/graphql/schema/member/has_validators.rb
537
- - lib/graphql/schema/member/instrumentation.rb
538
441
  - lib/graphql/schema/member/relay_shortcuts.rb
539
442
  - lib/graphql/schema/member/scoped.rb
540
443
  - lib/graphql/schema/member/type_system_helpers.rb
541
444
  - lib/graphql/schema/member/validates_input.rb
542
- - lib/graphql/schema/middleware_chain.rb
543
445
  - lib/graphql/schema/mutation.rb
544
446
  - lib/graphql/schema/non_null.rb
545
447
  - lib/graphql/schema/null_mask.rb
546
448
  - lib/graphql/schema/object.rb
547
- - lib/graphql/schema/possible_types.rb
548
449
  - lib/graphql/schema/printer.rb
549
450
  - lib/graphql/schema/relay_classic_mutation.rb
550
- - lib/graphql/schema/rescue_middleware.rb
551
451
  - lib/graphql/schema/resolver.rb
552
452
  - lib/graphql/schema/resolver/has_payload_type.rb
553
453
  - lib/graphql/schema/scalar.rb
554
454
  - lib/graphql/schema/subscription.rb
555
455
  - lib/graphql/schema/timeout.rb
556
- - lib/graphql/schema/timeout_middleware.rb
557
- - lib/graphql/schema/traversal.rb
558
456
  - lib/graphql/schema/type_expression.rb
559
457
  - lib/graphql/schema/type_membership.rb
560
458
  - lib/graphql/schema/union.rb
561
459
  - lib/graphql/schema/unique_within_type.rb
562
- - lib/graphql/schema/validation.rb
563
460
  - lib/graphql/schema/validator.rb
564
461
  - lib/graphql/schema/validator/allow_blank_validator.rb
565
462
  - lib/graphql/schema/validator/allow_null_validator.rb
@@ -574,12 +471,10 @@ files:
574
471
  - lib/graphql/static_validation.rb
575
472
  - lib/graphql/static_validation/all_rules.rb
576
473
  - lib/graphql/static_validation/base_visitor.rb
577
- - lib/graphql/static_validation/default_visitor.rb
578
474
  - lib/graphql/static_validation/definition_dependencies.rb
579
475
  - lib/graphql/static_validation/error.rb
580
476
  - lib/graphql/static_validation/interpreter_visitor.rb
581
477
  - lib/graphql/static_validation/literal_validator.rb
582
- - lib/graphql/static_validation/no_validate_visitor.rb
583
478
  - lib/graphql/static_validation/rules/argument_literals_are_compatible.rb
584
479
  - lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb
585
480
  - lib/graphql/static_validation/rules/argument_names_are_unique.rb
@@ -616,6 +511,8 @@ files:
616
511
  - lib/graphql/static_validation/rules/mutation_root_exists_error.rb
617
512
  - lib/graphql/static_validation/rules/no_definitions_are_present.rb
618
513
  - lib/graphql/static_validation/rules/no_definitions_are_present_error.rb
514
+ - lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb
515
+ - lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb
619
516
  - lib/graphql/static_validation/rules/operation_names_are_valid.rb
620
517
  - lib/graphql/static_validation/rules/operation_names_are_valid_error.rb
621
518
  - lib/graphql/static_validation/rules/query_root_exists.rb
@@ -643,7 +540,6 @@ files:
643
540
  - lib/graphql/static_validation/validation_timeout_error.rb
644
541
  - lib/graphql/static_validation/validator.rb
645
542
  - lib/graphql/string_encoding_error.rb
646
- - lib/graphql/string_type.rb
647
543
  - lib/graphql/subscriptions.rb
648
544
  - lib/graphql/subscriptions/action_cable_subscriptions.rb
649
545
  - lib/graphql/subscriptions/broadcast_analyzer.rb
@@ -651,20 +547,27 @@ files:
651
547
  - lib/graphql/subscriptions/event.rb
652
548
  - lib/graphql/subscriptions/instrumentation.rb
653
549
  - lib/graphql/subscriptions/serialize.rb
654
- - lib/graphql/subscriptions/subscription_root.rb
655
550
  - lib/graphql/tracing.rb
551
+ - lib/graphql/tracing/active_support_notifications_trace.rb
656
552
  - lib/graphql/tracing/active_support_notifications_tracing.rb
553
+ - lib/graphql/tracing/appoptics_trace.rb
657
554
  - lib/graphql/tracing/appoptics_tracing.rb
555
+ - lib/graphql/tracing/appsignal_trace.rb
658
556
  - lib/graphql/tracing/appsignal_tracing.rb
557
+ - lib/graphql/tracing/data_dog_trace.rb
659
558
  - lib/graphql/tracing/data_dog_tracing.rb
559
+ - lib/graphql/tracing/new_relic_trace.rb
660
560
  - lib/graphql/tracing/new_relic_tracing.rb
561
+ - lib/graphql/tracing/notifications_trace.rb
661
562
  - lib/graphql/tracing/notifications_tracing.rb
662
- - lib/graphql/tracing/opentelemetry_tracing.rb
563
+ - lib/graphql/tracing/platform_trace.rb
663
564
  - lib/graphql/tracing/platform_tracing.rb
565
+ - lib/graphql/tracing/prometheus_trace.rb
664
566
  - lib/graphql/tracing/prometheus_tracing.rb
665
567
  - lib/graphql/tracing/prometheus_tracing/graphql_collector.rb
568
+ - lib/graphql/tracing/scout_trace.rb
666
569
  - lib/graphql/tracing/scout_tracing.rb
667
- - lib/graphql/tracing/skylight_tracing.rb
570
+ - lib/graphql/tracing/statsd_trace.rb
668
571
  - lib/graphql/tracing/statsd_tracing.rb
669
572
  - lib/graphql/type_kinds.rb
670
573
  - lib/graphql/types.rb
@@ -686,17 +589,12 @@ files:
686
589
  - lib/graphql/types/relay/has_nodes_field.rb
687
590
  - lib/graphql/types/relay/node.rb
688
591
  - lib/graphql/types/relay/node_behaviors.rb
689
- - lib/graphql/types/relay/node_field.rb
690
- - lib/graphql/types/relay/nodes_field.rb
691
592
  - lib/graphql/types/relay/page_info.rb
692
593
  - lib/graphql/types/relay/page_info_behaviors.rb
693
594
  - lib/graphql/types/string.rb
694
595
  - lib/graphql/unauthorized_error.rb
695
596
  - lib/graphql/unauthorized_field_error.rb
696
- - lib/graphql/union_type.rb
697
597
  - lib/graphql/unresolved_type_error.rb
698
- - lib/graphql/upgrader/member.rb
699
- - lib/graphql/upgrader/schema.rb
700
598
  - lib/graphql/version.rb
701
599
  - readme.md
702
600
  homepage: https://github.com/rmosolgo/graphql-ruby
@@ -723,7 +621,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
723
621
  - !ruby/object:Gem::Version
724
622
  version: '0'
725
623
  requirements: []
726
- rubygems_version: 3.2.22
624
+ rubygems_version: 3.4.1
727
625
  signing_key:
728
626
  specification_version: 4
729
627
  summary: A GraphQL language and runtime for Ruby
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- module_function
5
-
6
- def use(schema_class)
7
- schema = schema_class.is_a?(Class) ? schema_class : schema_class.target
8
- schema.analysis_engine = self
9
- end
10
-
11
- # @return [void]
12
- def analyze_multiplex(multiplex, analyzers)
13
- multiplex.trace("analyze_multiplex", { multiplex: multiplex }) do
14
- reducer_states = analyzers.map { |r| ReducerState.new(r, multiplex) }
15
- query_results = multiplex.queries.map do |query|
16
- if query.valid?
17
- analyze_query(query, query.analyzers, multiplex_states: reducer_states)
18
- else
19
- []
20
- end
21
- end
22
-
23
- multiplex_results = reducer_states.map(&:finalize_reducer)
24
- multiplex_errors = analysis_errors(multiplex_results)
25
-
26
- multiplex.queries.each_with_index do |query, idx|
27
- query.analysis_errors = multiplex_errors + analysis_errors(query_results[idx])
28
- end
29
- end
30
- nil
31
- end
32
-
33
- # Visit `query`'s internal representation, calling `analyzers` along the way.
34
- #
35
- # - First, query analyzers are filtered down by calling `.analyze?(query)`, if they respond to that method
36
- # - Then, query analyzers are initialized by calling `.initial_value(query)`, if they respond to that method.
37
- # - Then, they receive `.call(memo, visit_type, irep_node)`, where visit type is `:enter` or `:leave`.
38
- # - Last, they receive `.final_value(memo)`, if they respond to that method.
39
- #
40
- # It returns an array of final `memo` values in the order that `analyzers` were passed in.
41
- #
42
- # @param query [GraphQL::Query]
43
- # @param analyzers [Array<#call>] Objects that respond to `#call(memo, visit_type, irep_node)`
44
- # @return [Array<Any>] Results from those analyzers
45
- def analyze_query(query, analyzers, multiplex_states: [])
46
- GraphQL::Deprecation.warn "Legacy analysis will be removed in GraphQL-Ruby 2.0, please upgrade to AST Analysis: https://graphql-ruby.org/queries/ast_analysis.html (schema: #{query.schema})"
47
-
48
- query.trace("analyze_query", { query: query }) do
49
- analyzers_to_run = analyzers.select do |analyzer|
50
- if analyzer.respond_to?(:analyze?)
51
- analyzer.analyze?(query)
52
- else
53
- true
54
- end
55
- end
56
-
57
- reducer_states = analyzers_to_run.map { |r| ReducerState.new(r, query) } + multiplex_states
58
-
59
- irep = query.internal_representation
60
-
61
- irep.operation_definitions.each do |name, op_node|
62
- reduce_node(op_node, reducer_states)
63
- end
64
-
65
- reducer_states.map(&:finalize_reducer)
66
- end
67
- end
68
-
69
- private
70
-
71
- module_function
72
-
73
- # Enter the node, visit its children, then leave the node.
74
- def reduce_node(irep_node, reducer_states)
75
- visit_analyzers(:enter, irep_node, reducer_states)
76
-
77
- irep_node.typed_children.each do |type_defn, children|
78
- children.each do |name, child_irep_node|
79
- reduce_node(child_irep_node, reducer_states)
80
- end
81
- end
82
-
83
- visit_analyzers(:leave, irep_node, reducer_states)
84
- end
85
-
86
- def visit_analyzers(visit_type, irep_node, reducer_states)
87
- reducer_states.each do |reducer_state|
88
- next_memo = reducer_state.call(visit_type, irep_node)
89
-
90
- reducer_state.memo = next_memo
91
- end
92
- end
93
-
94
- def analysis_errors(results)
95
- results.flatten.select { |r| r.is_a?(GraphQL::AnalysisError) }
96
- end
97
- end
98
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- # A query reducer for tracking both field usage and deprecated field usage.
5
- #
6
- # @example Logging field usage and deprecated field usage
7
- # Schema.query_analyzers << GraphQL::Analysis::FieldUsage.new { |query, used_fields, used_deprecated_fields|
8
- # puts "Used GraphQL fields: #{used_fields.join(', ')}"
9
- # puts "Used deprecated GraphQL fields: #{used_deprecated_fields.join(', ')}"
10
- # }
11
- # Schema.execute(query_str)
12
- # # Used GraphQL fields: Cheese.id, Cheese.fatContent, Query.cheese
13
- # # Used deprecated GraphQL fields: Cheese.fatContent
14
- #
15
- class FieldUsage
16
- def initialize(&block)
17
- @field_usage_handler = block
18
- end
19
-
20
- def initial_value(query)
21
- {
22
- query: query,
23
- used_fields: Set.new,
24
- used_deprecated_fields: Set.new
25
- }
26
- end
27
-
28
- def call(memo, visit_type, irep_node)
29
- if irep_node.ast_node.is_a?(GraphQL::Language::Nodes::Field) && visit_type == :leave
30
- field = "#{irep_node.owner_type.name}.#{irep_node.definition.name}"
31
- memo[:used_fields] << field
32
- if irep_node.definition.deprecation_reason
33
- memo[:used_deprecated_fields] << field
34
- end
35
- end
36
-
37
- memo
38
- end
39
-
40
- def final_value(memo)
41
- @field_usage_handler.call(memo[:query], memo[:used_fields].to_a, memo[:used_deprecated_fields].to_a)
42
- end
43
- end
44
- end
45
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative "./query_complexity"
3
- module GraphQL
4
- module Analysis
5
- # Used under the hood to implement complexity validation,
6
- # see {Schema#max_complexity} and {Query#max_complexity}
7
- #
8
- # @example Assert max complexity of 10
9
- # # DON'T actually do this, graphql-ruby
10
- # # Does this for you based on your `max_complexity` setting
11
- # MySchema.query_analyzers << GraphQL::Analysis::MaxQueryComplexity.new(10)
12
- #
13
- class MaxQueryComplexity < GraphQL::Analysis::QueryComplexity
14
- def initialize(max_complexity)
15
- disallow_excessive_complexity = ->(query, complexity) {
16
- if complexity > max_complexity
17
- GraphQL::AnalysisError.new("Query has complexity of #{complexity}, which exceeds max complexity of #{max_complexity}")
18
- else
19
- nil
20
- end
21
- }
22
- super(&disallow_excessive_complexity)
23
- end
24
- end
25
- end
26
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative "./query_depth"
3
- module GraphQL
4
- module Analysis
5
- # Used under the hood to implement depth validation,
6
- # see {Schema#max_depth} and {Query#max_depth}
7
- #
8
- # @example Assert max depth of 10
9
- # # DON'T actually do this, graphql-ruby
10
- # # Does this for you based on your `max_depth` setting
11
- # MySchema.query_analyzers << GraphQL::Analysis::MaxQueryDepth.new(10)
12
- #
13
- class MaxQueryDepth < GraphQL::Analysis::QueryDepth
14
- def initialize(max_depth)
15
- disallow_excessive_depth = ->(query, depth) {
16
- if depth > max_depth
17
- GraphQL::AnalysisError.new("Query has depth of #{depth}, which exceeds max depth of #{max_depth}")
18
- else
19
- nil
20
- end
21
- }
22
- super(&disallow_excessive_depth)
23
- end
24
- end
25
- end
26
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Analysis
4
- # Calculate the complexity of a query, using {Field#complexity} values.
5
- #
6
- # @example Log the complexity of incoming queries
7
- # MySchema.query_analyzers << GraphQL::Analysis::QueryComplexity.new do |query, complexity|
8
- # Rails.logger.info("Complexity: #{complexity}")
9
- # end
10
- #
11
- class QueryComplexity
12
- # @yield [query, complexity] Called for each query analyzed by the schema, before executing it
13
- # @yieldparam query [GraphQL::Query] The query that was analyzed
14
- # @yieldparam complexity [Numeric] The complexity for this query
15
- def initialize(&block)
16
- @complexity_handler = block
17
- end
18
-
19
- # State for the query complexity calcuation:
20
- # - `target` is passed to handler
21
- # - `complexities_on_type` holds complexity scores for each type in an IRep node
22
- def initial_value(target)
23
- {
24
- target: target,
25
- complexities_on_type: [TypeComplexity.new],
26
- }
27
- end
28
-
29
- # Implement the query analyzer API
30
- def call(memo, visit_type, irep_node)
31
- if irep_node.ast_node.is_a?(GraphQL::Language::Nodes::Field)
32
- if visit_type == :enter
33
- memo[:complexities_on_type].push(TypeComplexity.new)
34
- else
35
- type_complexities = memo[:complexities_on_type].pop
36
- child_complexity = type_complexities.max_possible_complexity
37
- own_complexity = get_complexity(irep_node, child_complexity)
38
- memo[:complexities_on_type].last.merge(irep_node.owner_type, own_complexity)
39
- end
40
- end
41
- memo
42
- end
43
-
44
- # Send the query and complexity to the block
45
- # @return [Object, GraphQL::AnalysisError] Whatever the handler returns
46
- def final_value(reduced_value)
47
- total_complexity = reduced_value[:complexities_on_type].last.max_possible_complexity
48
- @complexity_handler.call(reduced_value[:target], total_complexity)
49
- end
50
-
51
- private
52
-
53
- # Get a complexity value for a field,
54
- # by getting the number or calling its proc
55
- def get_complexity(irep_node, child_complexity)
56
- field_defn = irep_node.definition
57
- defined_complexity = field_defn.complexity
58
- case defined_complexity
59
- when Proc
60
- defined_complexity.call(irep_node.query.context, irep_node.arguments, child_complexity)
61
- when Numeric
62
- defined_complexity + (child_complexity || 0)
63
- else
64
- raise("Invalid complexity: #{defined_complexity.inspect} on #{field_defn.name}")
65
- end
66
- end
67
-
68
- # Selections on an object may apply differently depending on what is _actually_ returned by the resolve function.
69
- # Find the maximum possible complexity among those combinations.
70
- class TypeComplexity
71
- def initialize
72
- @types = Hash.new(0)
73
- end
74
-
75
- # Return the max possible complexity for types in this selection
76
- def max_possible_complexity
77
- @types.each_value.max || 0
78
- end
79
-
80
- # Store the complexity for the branch on `type_defn`.
81
- # Later we will see if this is the max complexity among branches.
82
- def merge(type_defn, complexity)
83
- @types[type_defn] += complexity
84
- end
85
- end
86
- end
87
- end
88
- end