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.
- checksums.yaml +4 -4
- data/lib/generators/graphql/install_generator.rb +1 -1
- data/lib/generators/graphql/relay.rb +3 -17
- data/lib/generators/graphql/templates/schema.erb +3 -0
- data/lib/graphql/analysis/ast/field_usage.rb +3 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +43 -36
- data/lib/graphql/analysis/ast.rb +2 -12
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/table.rb +2 -20
- data/lib/graphql/backtrace/tracer.rb +2 -3
- data/lib/graphql/backtrace.rb +2 -8
- data/lib/graphql/dataloader/null_dataloader.rb +3 -1
- data/lib/graphql/dataloader/source.rb +9 -0
- data/lib/graphql/dataloader.rb +4 -1
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +12 -82
- data/lib/graphql/execution/interpreter/resolve.rb +26 -0
- data/lib/graphql/execution/interpreter/runtime.rb +163 -120
- data/lib/graphql/execution/interpreter.rb +187 -78
- data/lib/graphql/execution/lazy.rb +7 -21
- data/lib/graphql/execution/lookahead.rb +44 -40
- data/lib/graphql/execution/multiplex.rb +3 -174
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/introspection/directive_type.rb +2 -2
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +2 -15
- data/lib/graphql/introspection/field_type.rb +1 -1
- data/lib/graphql/introspection/schema_type.rb +2 -2
- data/lib/graphql/introspection/type_type.rb +13 -6
- data/lib/graphql/introspection.rb +4 -3
- data/lib/graphql/language/document_from_schema_definition.rb +18 -35
- data/lib/graphql/language/lexer.rb +216 -1488
- data/lib/graphql/language/lexer.ri +744 -0
- data/lib/graphql/language/nodes.rb +41 -33
- data/lib/graphql/language/parser.rb +375 -363
- data/lib/graphql/language/parser.y +48 -43
- data/lib/graphql/language/printer.rb +37 -21
- data/lib/graphql/language/visitor.rb +191 -83
- data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
- data/lib/graphql/pagination/array_connection.rb +4 -2
- data/lib/graphql/pagination/connection.rb +31 -4
- data/lib/graphql/pagination/connections.rb +3 -28
- data/lib/graphql/pagination/relation_connection.rb +2 -0
- data/lib/graphql/query/context.rb +155 -196
- data/lib/graphql/query/input_validation_result.rb +10 -1
- data/lib/graphql/query/null_context.rb +0 -3
- data/lib/graphql/query/validation_pipeline.rb +12 -37
- data/lib/graphql/query/variable_validation_error.rb +2 -2
- data/lib/graphql/query/variables.rb +35 -21
- data/lib/graphql/query.rb +32 -43
- data/lib/graphql/railtie.rb +0 -104
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +29 -1
- data/lib/graphql/relay/range_add.rb +9 -20
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/schema/addition.rb +7 -9
- data/lib/graphql/schema/argument.rb +36 -43
- data/lib/graphql/schema/build_from_definition.rb +32 -18
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/transform.rb +1 -1
- data/lib/graphql/schema/directive.rb +12 -23
- data/lib/graphql/schema/enum.rb +29 -41
- data/lib/graphql/schema/enum_value.rb +5 -25
- data/lib/graphql/schema/field/connection_extension.rb +4 -0
- data/lib/graphql/schema/field.rb +245 -343
- data/lib/graphql/schema/input_object.rb +57 -69
- data/lib/graphql/schema/interface.rb +0 -35
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +8 -2
- data/lib/graphql/schema/list.rb +18 -9
- data/lib/graphql/schema/loader.rb +1 -2
- data/lib/graphql/schema/member/base_dsl_methods.rb +15 -19
- data/lib/graphql/schema/member/build_type.rb +5 -7
- data/lib/graphql/schema/member/has_arguments.rb +146 -55
- data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
- data/lib/graphql/schema/member/has_directives.rb +71 -56
- data/lib/graphql/schema/member/has_fields.rb +16 -4
- data/lib/graphql/schema/member/has_interfaces.rb +49 -10
- data/lib/graphql/schema/member/has_validators.rb +31 -5
- data/lib/graphql/schema/member/relay_shortcuts.rb +28 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +0 -6
- data/lib/graphql/schema/mutation.rb +0 -9
- data/lib/graphql/schema/non_null.rb +3 -9
- data/lib/graphql/schema/object.rb +15 -52
- data/lib/graphql/schema/relay_classic_mutation.rb +53 -42
- data/lib/graphql/schema/resolver/has_payload_type.rb +20 -10
- data/lib/graphql/schema/resolver.rb +41 -42
- data/lib/graphql/schema/scalar.rb +8 -23
- data/lib/graphql/schema/subscription.rb +0 -7
- data/lib/graphql/schema/timeout.rb +24 -28
- data/lib/graphql/schema/type_membership.rb +3 -0
- data/lib/graphql/schema/union.rb +10 -17
- data/lib/graphql/schema/warden.rb +34 -8
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +240 -968
- data/lib/graphql/static_validation/all_rules.rb +1 -0
- data/lib/graphql/static_validation/base_visitor.rb +4 -21
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -1
- data/lib/graphql/static_validation/error.rb +2 -2
- data/lib/graphql/static_validation/literal_validator.rb +19 -1
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +12 -6
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
- data/lib/graphql/static_validation/validator.rb +3 -25
- data/lib/graphql/static_validation.rb +0 -2
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +7 -1
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
- data/lib/graphql/subscriptions/event.rb +3 -8
- data/lib/graphql/subscriptions/instrumentation.rb +0 -51
- data/lib/graphql/subscriptions.rb +32 -20
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appsignal_trace.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/notifications_trace.rb +41 -0
- data/lib/graphql/tracing/platform_trace.rb +107 -0
- data/lib/graphql/tracing/platform_tracing.rb +26 -40
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing.rb +136 -41
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/iso_8601_date.rb +4 -1
- data/lib/graphql/types/iso_8601_date_time.rb +4 -0
- data/lib/graphql/types/relay/base_connection.rb +16 -6
- data/lib/graphql/types/relay/connection_behaviors.rb +5 -25
- data/lib/graphql/types/relay/default_relay.rb +5 -9
- data/lib/graphql/types/relay/edge_behaviors.rb +1 -4
- data/lib/graphql/types/relay/node_behaviors.rb +5 -1
- data/lib/graphql/types/relay.rb +0 -2
- data/lib/graphql/types/string.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +11 -72
- metadata +31 -133
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backwards_compatibility.rb +0 -61
- data/lib/graphql/base_type.rb +0 -232
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -255
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -55
- data/lib/graphql/directive/deprecated_directive.rb +0 -2
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -107
- data/lib/graphql/enum_type.rb +0 -133
- data/lib/graphql/execution/execute.rb +0 -333
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/instrumentation.rb +0 -92
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -260
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -130
- data/lib/graphql/query/arguments.rb +0 -189
- data/lib/graphql/query/arguments_cache.rb +0 -24
- data/lib/graphql/query/executor.rb +0 -52
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -40
- data/lib/graphql/relay/array_connection.rb +0 -83
- data/lib/graphql/relay/base_connection.rb +0 -189
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -54
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -19
- data/lib/graphql/relay/edges_instrumentation.rb +0 -39
- data/lib/graphql/relay/global_id_resolve.rb +0 -17
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -106
- data/lib/graphql/relay/node.rb +0 -39
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -188
- data/lib/graphql/relay/type_extensions.rb +0 -32
- data/lib/graphql/scalar_type.rb +0 -91
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -17
- data/lib/graphql/schema/member/accepts_definition.rb +0 -164
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
- data/lib/graphql/schema/member/instrumentation.rb +0 -131
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -44
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -88
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -313
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/opentelemetry_tracing.rb +0 -101
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/node_field.rb +0 -24
- data/lib/graphql/types/relay/nodes_field.rb +0 -43
- data/lib/graphql/union_type.rb +0 -115
- data/lib/graphql/upgrader/member.rb +0 -937
- 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:
|
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:
|
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: '
|
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: '
|
124
|
+
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: rake-compiler
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
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: '
|
138
|
+
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rubocop
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
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: '
|
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.
|
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/
|
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/
|
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.
|
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
|