graphql 1.13.8 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- 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 +1 -25
- data/lib/graphql/schema/build_from_definition.rb +0 -1
- data/lib/graphql/schema/directive.rb +4 -21
- data/lib/graphql/schema/enum.rb +4 -23
- data/lib/graphql/schema/enum_value.rb +0 -22
- data/lib/graphql/schema/field.rb +75 -234
- data/lib/graphql/schema/input_object.rb +22 -69
- 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 +0 -2
- 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 +0 -40
- data/lib/graphql/schema/relay_classic_mutation.rb +49 -42
- data/lib/graphql/schema/resolver/has_payload_type.rb +1 -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 +6 -132
- 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 -41
- 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 -18
- 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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-02-21 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
|
@@ -707,7 +581,7 @@ metadata:
|
|
707
581
|
source_code_uri: https://github.com/rmosolgo/graphql-ruby
|
708
582
|
bug_tracker_uri: https://github.com/rmosolgo/graphql-ruby/issues
|
709
583
|
mailing_list_uri: https://tinyletter.com/graphql-ruby
|
710
|
-
post_install_message:
|
584
|
+
post_install_message:
|
711
585
|
rdoc_options: []
|
712
586
|
require_paths:
|
713
587
|
- lib
|
@@ -722,8 +596,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
722
596
|
- !ruby/object:Gem::Version
|
723
597
|
version: '0'
|
724
598
|
requirements: []
|
725
|
-
rubygems_version: 3.
|
726
|
-
signing_key:
|
599
|
+
rubygems_version: 3.1.6
|
600
|
+
signing_key:
|
727
601
|
specification_version: 4
|
728
602
|
summary: A GraphQL language and runtime for Ruby
|
729
603
|
test_files: []
|
@@ -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
|