graphql 1.13.10 → 2.0.2
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.
- checksums.yaml +4 -4
- 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 +1 -1
- data/lib/graphql/analysis/ast.rb +0 -10
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/table.rb +0 -18
- data/lib/graphql/backtrace/tracer.rb +1 -2
- data/lib/graphql/backtrace.rb +2 -8
- data/lib/graphql/dataloader/null_dataloader.rb +3 -1
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +1 -9
- data/lib/graphql/execution/interpreter/runtime.rb +17 -31
- data/lib/graphql/execution/interpreter.rb +0 -22
- data/lib/graphql/execution/lazy.rb +1 -1
- data/lib/graphql/execution/lookahead.rb +6 -13
- data/lib/graphql/execution/multiplex.rb +50 -107
- data/lib/graphql/execution.rb +11 -3
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +2 -15
- data/lib/graphql/language/document_from_schema_definition.rb +0 -17
- data/lib/graphql/pagination/connections.rb +2 -28
- data/lib/graphql/query/context.rb +97 -194
- data/lib/graphql/query/input_validation_result.rb +10 -1
- data/lib/graphql/query/validation_pipeline.rb +8 -37
- data/lib/graphql/query/variables.rb +22 -18
- data/lib/graphql/query.rb +5 -36
- data/lib/graphql/railtie.rb +0 -104
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/schema/addition.rb +1 -8
- data/lib/graphql/schema/argument.rb +5 -26
- data/lib/graphql/schema/build_from_definition.rb +0 -1
- data/lib/graphql/schema/directive.rb +0 -21
- data/lib/graphql/schema/enum.rb +4 -23
- data/lib/graphql/schema/enum_value.rb +0 -22
- data/lib/graphql/schema/field.rb +70 -230
- data/lib/graphql/schema/input_object.rb +21 -68
- data/lib/graphql/schema/interface.rb +0 -25
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +2 -2
- data/lib/graphql/schema/list.rb +2 -7
- data/lib/graphql/schema/loader.rb +0 -1
- data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
- data/lib/graphql/schema/member/build_type.rb +4 -6
- data/lib/graphql/schema/member/has_arguments.rb +50 -24
- data/lib/graphql/schema/member/has_fields.rb +2 -2
- data/lib/graphql/schema/member/has_interfaces.rb +1 -3
- data/lib/graphql/schema/member/validates_input.rb +2 -2
- data/lib/graphql/schema/member.rb +0 -6
- data/lib/graphql/schema/mutation.rb +0 -9
- data/lib/graphql/schema/non_null.rb +1 -7
- data/lib/graphql/schema/object.rb +7 -42
- data/lib/graphql/schema/relay_classic_mutation.rb +49 -42
- data/lib/graphql/schema/resolver/has_payload_type.rb +11 -1
- data/lib/graphql/schema/resolver.rb +23 -45
- data/lib/graphql/schema/scalar.rb +4 -19
- data/lib/graphql/schema/subscription.rb +0 -7
- data/lib/graphql/schema/union.rb +0 -16
- data/lib/graphql/schema/warden.rb +2 -2
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +106 -944
- data/lib/graphql/static_validation/base_visitor.rb +4 -21
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
- data/lib/graphql/static_validation/validator.rb +2 -24
- data/lib/graphql/static_validation.rb +0 -2
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
- data/lib/graphql/subscriptions/event.rb +1 -1
- data/lib/graphql/subscriptions/instrumentation.rb +0 -51
- data/lib/graphql/subscriptions.rb +14 -16
- data/lib/graphql/tracing/platform_tracing.rb +0 -23
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
- data/lib/graphql/types/relay/default_relay.rb +0 -10
- data/lib/graphql/types/relay/node_behaviors.rb +5 -1
- data/lib/graphql/types/relay.rb +0 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +1 -65
- metadata +2 -128
- 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 -240
- 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/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/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/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.2
|
|
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-
|
|
11
|
+
date: 2022-03-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: benchmark-ips
|
|
@@ -136,20 +136,6 @@ dependencies:
|
|
|
136
136
|
- - '='
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '1.12'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: parser
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - ">="
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0'
|
|
153
139
|
- !ruby/object:Gem::Dependency
|
|
154
140
|
name: jekyll
|
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -291,7 +277,6 @@ files:
|
|
|
291
277
|
- lib/generators/graphql/union_generator.rb
|
|
292
278
|
- lib/graphql.rb
|
|
293
279
|
- lib/graphql/analysis.rb
|
|
294
|
-
- lib/graphql/analysis/analyze_query.rb
|
|
295
280
|
- lib/graphql/analysis/ast.rb
|
|
296
281
|
- lib/graphql/analysis/ast/analyzer.rb
|
|
297
282
|
- lib/graphql/analysis/ast/field_usage.rb
|
|
@@ -300,66 +285,24 @@ files:
|
|
|
300
285
|
- lib/graphql/analysis/ast/query_complexity.rb
|
|
301
286
|
- lib/graphql/analysis/ast/query_depth.rb
|
|
302
287
|
- 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
288
|
- lib/graphql/analysis_error.rb
|
|
310
|
-
- lib/graphql/argument.rb
|
|
311
|
-
- lib/graphql/authorization.rb
|
|
312
289
|
- lib/graphql/backtrace.rb
|
|
313
290
|
- lib/graphql/backtrace/inspect_result.rb
|
|
314
|
-
- lib/graphql/backtrace/legacy_tracer.rb
|
|
315
291
|
- lib/graphql/backtrace/table.rb
|
|
316
292
|
- lib/graphql/backtrace/traced_error.rb
|
|
317
293
|
- lib/graphql/backtrace/tracer.rb
|
|
318
|
-
- lib/graphql/backwards_compatibility.rb
|
|
319
|
-
- lib/graphql/base_type.rb
|
|
320
|
-
- lib/graphql/boolean_type.rb
|
|
321
294
|
- 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
295
|
- lib/graphql/dataloader.rb
|
|
333
296
|
- lib/graphql/dataloader/null_dataloader.rb
|
|
334
297
|
- lib/graphql/dataloader/request.rb
|
|
335
298
|
- lib/graphql/dataloader/request_all.rb
|
|
336
299
|
- lib/graphql/dataloader/source.rb
|
|
337
300
|
- 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
301
|
- lib/graphql/deprecation.rb
|
|
352
302
|
- 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
303
|
- lib/graphql/execution.rb
|
|
359
304
|
- lib/graphql/execution/directive_checks.rb
|
|
360
305
|
- lib/graphql/execution/errors.rb
|
|
361
|
-
- lib/graphql/execution/execute.rb
|
|
362
|
-
- lib/graphql/execution/flatten.rb
|
|
363
306
|
- lib/graphql/execution/instrumentation.rb
|
|
364
307
|
- lib/graphql/execution/interpreter.rb
|
|
365
308
|
- lib/graphql/execution/interpreter/argument_value.rb
|
|
@@ -374,26 +317,10 @@ files:
|
|
|
374
317
|
- lib/graphql/execution/lazy/resolve.rb
|
|
375
318
|
- lib/graphql/execution/lookahead.rb
|
|
376
319
|
- lib/graphql/execution/multiplex.rb
|
|
377
|
-
- lib/graphql/execution/typecast.rb
|
|
378
320
|
- lib/graphql/execution_error.rb
|
|
379
|
-
- lib/graphql/field.rb
|
|
380
|
-
- lib/graphql/field/resolve.rb
|
|
381
321
|
- 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
322
|
- lib/graphql/integer_decoding_error.rb
|
|
388
323
|
- 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
324
|
- lib/graphql/introspection.rb
|
|
398
325
|
- lib/graphql/introspection/base_object.rb
|
|
399
326
|
- lib/graphql/introspection/directive_location_enum.rb
|
|
@@ -424,11 +351,8 @@ files:
|
|
|
424
351
|
- lib/graphql/language/sanitized_printer.rb
|
|
425
352
|
- lib/graphql/language/token.rb
|
|
426
353
|
- lib/graphql/language/visitor.rb
|
|
427
|
-
- lib/graphql/list_type.rb
|
|
428
354
|
- lib/graphql/load_application_object_failed_error.rb
|
|
429
355
|
- lib/graphql/name_validator.rb
|
|
430
|
-
- lib/graphql/non_null_type.rb
|
|
431
|
-
- lib/graphql/object_type.rb
|
|
432
356
|
- lib/graphql/pagination.rb
|
|
433
357
|
- lib/graphql/pagination/active_record_relation_connection.rb
|
|
434
358
|
- lib/graphql/pagination/array_connection.rb
|
|
@@ -439,20 +363,11 @@ files:
|
|
|
439
363
|
- lib/graphql/pagination/sequel_dataset_connection.rb
|
|
440
364
|
- lib/graphql/parse_error.rb
|
|
441
365
|
- lib/graphql/query.rb
|
|
442
|
-
- lib/graphql/query/arguments.rb
|
|
443
|
-
- lib/graphql/query/arguments_cache.rb
|
|
444
366
|
- lib/graphql/query/context.rb
|
|
445
|
-
- lib/graphql/query/executor.rb
|
|
446
367
|
- lib/graphql/query/fingerprint.rb
|
|
447
368
|
- lib/graphql/query/input_validation_result.rb
|
|
448
|
-
- lib/graphql/query/literal_input.rb
|
|
449
369
|
- lib/graphql/query/null_context.rb
|
|
450
370
|
- 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
371
|
- lib/graphql/query/validation_pipeline.rb
|
|
457
372
|
- lib/graphql/query/variable_validation_error.rb
|
|
458
373
|
- lib/graphql/query/variables.rb
|
|
@@ -460,31 +375,12 @@ files:
|
|
|
460
375
|
- lib/graphql/rake_task.rb
|
|
461
376
|
- lib/graphql/rake_task/validate.rb
|
|
462
377
|
- 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
378
|
- lib/graphql/relay/range_add.rb
|
|
480
|
-
- lib/graphql/relay/relation_connection.rb
|
|
481
|
-
- lib/graphql/relay/type_extensions.rb
|
|
482
379
|
- lib/graphql/rubocop.rb
|
|
483
380
|
- lib/graphql/rubocop/graphql/base_cop.rb
|
|
484
381
|
- lib/graphql/rubocop/graphql/default_null_true.rb
|
|
485
382
|
- lib/graphql/rubocop/graphql/default_required_true.rb
|
|
486
383
|
- lib/graphql/runtime_type_error.rb
|
|
487
|
-
- lib/graphql/scalar_type.rb
|
|
488
384
|
- lib/graphql/schema.rb
|
|
489
385
|
- lib/graphql/schema/addition.rb
|
|
490
386
|
- lib/graphql/schema/argument.rb
|
|
@@ -494,9 +390,6 @@ files:
|
|
|
494
390
|
- lib/graphql/schema/build_from_definition/resolve_map.rb
|
|
495
391
|
- lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb
|
|
496
392
|
- 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
393
|
- lib/graphql/schema/directive.rb
|
|
501
394
|
- lib/graphql/schema/directive/deprecated.rb
|
|
502
395
|
- lib/graphql/schema/directive/feature.rb
|
|
@@ -520,10 +413,8 @@ files:
|
|
|
520
413
|
- lib/graphql/schema/list.rb
|
|
521
414
|
- lib/graphql/schema/loader.rb
|
|
522
415
|
- lib/graphql/schema/member.rb
|
|
523
|
-
- lib/graphql/schema/member/accepts_definition.rb
|
|
524
416
|
- lib/graphql/schema/member/base_dsl_methods.rb
|
|
525
417
|
- lib/graphql/schema/member/build_type.rb
|
|
526
|
-
- lib/graphql/schema/member/cached_graphql_definition.rb
|
|
527
418
|
- lib/graphql/schema/member/graphql_type_names.rb
|
|
528
419
|
- lib/graphql/schema/member/has_arguments.rb
|
|
529
420
|
- lib/graphql/schema/member/has_ast_node.rb
|
|
@@ -534,32 +425,25 @@ files:
|
|
|
534
425
|
- lib/graphql/schema/member/has_path.rb
|
|
535
426
|
- lib/graphql/schema/member/has_unresolved_type_error.rb
|
|
536
427
|
- lib/graphql/schema/member/has_validators.rb
|
|
537
|
-
- lib/graphql/schema/member/instrumentation.rb
|
|
538
428
|
- lib/graphql/schema/member/relay_shortcuts.rb
|
|
539
429
|
- lib/graphql/schema/member/scoped.rb
|
|
540
430
|
- lib/graphql/schema/member/type_system_helpers.rb
|
|
541
431
|
- lib/graphql/schema/member/validates_input.rb
|
|
542
|
-
- lib/graphql/schema/middleware_chain.rb
|
|
543
432
|
- lib/graphql/schema/mutation.rb
|
|
544
433
|
- lib/graphql/schema/non_null.rb
|
|
545
434
|
- lib/graphql/schema/null_mask.rb
|
|
546
435
|
- lib/graphql/schema/object.rb
|
|
547
|
-
- lib/graphql/schema/possible_types.rb
|
|
548
436
|
- lib/graphql/schema/printer.rb
|
|
549
437
|
- lib/graphql/schema/relay_classic_mutation.rb
|
|
550
|
-
- lib/graphql/schema/rescue_middleware.rb
|
|
551
438
|
- lib/graphql/schema/resolver.rb
|
|
552
439
|
- lib/graphql/schema/resolver/has_payload_type.rb
|
|
553
440
|
- lib/graphql/schema/scalar.rb
|
|
554
441
|
- lib/graphql/schema/subscription.rb
|
|
555
442
|
- lib/graphql/schema/timeout.rb
|
|
556
|
-
- lib/graphql/schema/timeout_middleware.rb
|
|
557
|
-
- lib/graphql/schema/traversal.rb
|
|
558
443
|
- lib/graphql/schema/type_expression.rb
|
|
559
444
|
- lib/graphql/schema/type_membership.rb
|
|
560
445
|
- lib/graphql/schema/union.rb
|
|
561
446
|
- lib/graphql/schema/unique_within_type.rb
|
|
562
|
-
- lib/graphql/schema/validation.rb
|
|
563
447
|
- lib/graphql/schema/validator.rb
|
|
564
448
|
- lib/graphql/schema/validator/allow_blank_validator.rb
|
|
565
449
|
- lib/graphql/schema/validator/allow_null_validator.rb
|
|
@@ -574,12 +458,10 @@ files:
|
|
|
574
458
|
- lib/graphql/static_validation.rb
|
|
575
459
|
- lib/graphql/static_validation/all_rules.rb
|
|
576
460
|
- lib/graphql/static_validation/base_visitor.rb
|
|
577
|
-
- lib/graphql/static_validation/default_visitor.rb
|
|
578
461
|
- lib/graphql/static_validation/definition_dependencies.rb
|
|
579
462
|
- lib/graphql/static_validation/error.rb
|
|
580
463
|
- lib/graphql/static_validation/interpreter_visitor.rb
|
|
581
464
|
- lib/graphql/static_validation/literal_validator.rb
|
|
582
|
-
- lib/graphql/static_validation/no_validate_visitor.rb
|
|
583
465
|
- lib/graphql/static_validation/rules/argument_literals_are_compatible.rb
|
|
584
466
|
- lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb
|
|
585
467
|
- lib/graphql/static_validation/rules/argument_names_are_unique.rb
|
|
@@ -643,7 +525,6 @@ files:
|
|
|
643
525
|
- lib/graphql/static_validation/validation_timeout_error.rb
|
|
644
526
|
- lib/graphql/static_validation/validator.rb
|
|
645
527
|
- lib/graphql/string_encoding_error.rb
|
|
646
|
-
- lib/graphql/string_type.rb
|
|
647
528
|
- lib/graphql/subscriptions.rb
|
|
648
529
|
- lib/graphql/subscriptions/action_cable_subscriptions.rb
|
|
649
530
|
- lib/graphql/subscriptions/broadcast_analyzer.rb
|
|
@@ -651,7 +532,6 @@ files:
|
|
|
651
532
|
- lib/graphql/subscriptions/event.rb
|
|
652
533
|
- lib/graphql/subscriptions/instrumentation.rb
|
|
653
534
|
- lib/graphql/subscriptions/serialize.rb
|
|
654
|
-
- lib/graphql/subscriptions/subscription_root.rb
|
|
655
535
|
- lib/graphql/tracing.rb
|
|
656
536
|
- lib/graphql/tracing/active_support_notifications_tracing.rb
|
|
657
537
|
- lib/graphql/tracing/appoptics_tracing.rb
|
|
@@ -663,7 +543,6 @@ files:
|
|
|
663
543
|
- lib/graphql/tracing/prometheus_tracing.rb
|
|
664
544
|
- lib/graphql/tracing/prometheus_tracing/graphql_collector.rb
|
|
665
545
|
- lib/graphql/tracing/scout_tracing.rb
|
|
666
|
-
- lib/graphql/tracing/skylight_tracing.rb
|
|
667
546
|
- lib/graphql/tracing/statsd_tracing.rb
|
|
668
547
|
- lib/graphql/type_kinds.rb
|
|
669
548
|
- lib/graphql/types.rb
|
|
@@ -685,17 +564,12 @@ files:
|
|
|
685
564
|
- lib/graphql/types/relay/has_nodes_field.rb
|
|
686
565
|
- lib/graphql/types/relay/node.rb
|
|
687
566
|
- lib/graphql/types/relay/node_behaviors.rb
|
|
688
|
-
- lib/graphql/types/relay/node_field.rb
|
|
689
|
-
- lib/graphql/types/relay/nodes_field.rb
|
|
690
567
|
- lib/graphql/types/relay/page_info.rb
|
|
691
568
|
- lib/graphql/types/relay/page_info_behaviors.rb
|
|
692
569
|
- lib/graphql/types/string.rb
|
|
693
570
|
- lib/graphql/unauthorized_error.rb
|
|
694
571
|
- lib/graphql/unauthorized_field_error.rb
|
|
695
|
-
- lib/graphql/union_type.rb
|
|
696
572
|
- lib/graphql/unresolved_type_error.rb
|
|
697
|
-
- lib/graphql/upgrader/member.rb
|
|
698
|
-
- lib/graphql/upgrader/schema.rb
|
|
699
573
|
- lib/graphql/version.rb
|
|
700
574
|
- readme.md
|
|
701
575
|
homepage: https://github.com/rmosolgo/graphql-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
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module GraphQL
|
|
3
|
-
module Analysis
|
|
4
|
-
# A query reducer for measuring the depth of a given query.
|
|
5
|
-
#
|
|
6
|
-
# @example Logging the depth of a query
|
|
7
|
-
# Schema.query_analyzers << GraphQL::Analysis::QueryDepth.new { |query, depth| puts "GraphQL query depth: #{depth}" }
|
|
8
|
-
# Schema.execute(query_str)
|
|
9
|
-
# # GraphQL query depth: 8
|
|
10
|
-
#
|
|
11
|
-
class QueryDepth
|
|
12
|
-
def initialize(&block)
|
|
13
|
-
@depth_handler = block
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def initial_value(query)
|
|
17
|
-
{
|
|
18
|
-
max_depth: 0,
|
|
19
|
-
current_depth: 0,
|
|
20
|
-
query: query,
|
|
21
|
-
}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def call(memo, visit_type, irep_node)
|
|
25
|
-
if irep_node.ast_node.is_a?(GraphQL::Language::Nodes::Field)
|
|
26
|
-
if visit_type == :enter
|
|
27
|
-
memo[:current_depth] += 1
|
|
28
|
-
else
|
|
29
|
-
if memo[:max_depth] < memo[:current_depth]
|
|
30
|
-
memo[:max_depth] = memo[:current_depth]
|
|
31
|
-
end
|
|
32
|
-
memo[:current_depth] -= 1
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
memo
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def final_value(memo)
|
|
39
|
-
@depth_handler.call(memo[:query], memo[:max_depth])
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module GraphQL
|
|
3
|
-
module Analysis
|
|
4
|
-
class ReducerState
|
|
5
|
-
attr_reader :reducer
|
|
6
|
-
attr_accessor :memo, :errors
|
|
7
|
-
|
|
8
|
-
def initialize(reducer, query)
|
|
9
|
-
@reducer = reducer
|
|
10
|
-
@memo = initialize_reducer(reducer, query)
|
|
11
|
-
@errors = []
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def call(visit_type, irep_node)
|
|
15
|
-
@memo = @reducer.call(@memo, visit_type, irep_node)
|
|
16
|
-
rescue AnalysisError => err
|
|
17
|
-
@errors << err
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Respond with any errors, if found. Otherwise, if the reducer accepts
|
|
21
|
-
# `final_value`, send it the last memo value.
|
|
22
|
-
# Otherwise, use the last value from the traversal.
|
|
23
|
-
# @return [Any] final memo value
|
|
24
|
-
def finalize_reducer
|
|
25
|
-
if @errors.any?
|
|
26
|
-
@errors
|
|
27
|
-
elsif reducer.respond_to?(:final_value)
|
|
28
|
-
reducer.final_value(@memo)
|
|
29
|
-
else
|
|
30
|
-
@memo
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
# If the reducer has an `initial_value` method, call it and store
|
|
37
|
-
# the result as `memo`. Otherwise, use `nil` as memo.
|
|
38
|
-
# @return [Any] initial memo value
|
|
39
|
-
def initialize_reducer(reducer, query)
|
|
40
|
-
if reducer.respond_to?(:initial_value)
|
|
41
|
-
reducer.initial_value(query)
|
|
42
|
-
else
|
|
43
|
-
nil
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|