graphql 1.10.2 → 2.0.21
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/core.rb +21 -10
- data/lib/generators/graphql/enum_generator.rb +4 -10
- data/lib/generators/graphql/field_extractor.rb +31 -0
- data/lib/generators/graphql/input_generator.rb +50 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
- data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
- data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +45 -8
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/loader_generator.rb +1 -0
- data/lib/generators/graphql/mutation_create_generator.rb +22 -0
- data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
- data/lib/generators/graphql/mutation_generator.rb +6 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +28 -12
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +49 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- data/lib/generators/graphql/scalar_generator.rb +4 -2
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +8 -0
- data/lib/generators/graphql/templates/base_edge.erb +8 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +7 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +6 -2
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +3 -1
- data/lib/generators/graphql/templates/mutation_create.erb +20 -0
- data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
- data/lib/generators/graphql/templates/mutation_update.erb +21 -0
- data/lib/generators/graphql/templates/node_type.erb +9 -0
- data/lib/generators/graphql/templates/object.erb +7 -3
- data/lib/generators/graphql/templates/query_type.erb +3 -3
- data/lib/generators/graphql/templates/scalar.erb +5 -1
- data/lib/generators/graphql/templates/schema.erb +24 -33
- data/lib/generators/graphql/templates/union.erb +6 -2
- data/lib/generators/graphql/type_generator.rb +47 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/ast/field_usage.rb +30 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +52 -36
- data/lib/graphql/analysis/ast.rb +7 -8
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +31 -18
- data/lib/graphql/backtrace/trace.rb +96 -0
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +26 -18
- data/lib/graphql/dataloader/null_dataloader.rb +24 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +164 -0
- data/lib/graphql/dataloader.rb +311 -0
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +77 -44
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +62 -24
- data/lib/graphql/execution/interpreter/runtime.rb +826 -464
- data/lib/graphql/execution/interpreter.rb +206 -68
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +55 -136
- data/lib/graphql/execution/multiplex.rb +6 -162
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +7 -2
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/directive_location_enum.rb +2 -2
- data/lib/graphql/introspection/directive_type.rb +11 -5
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +4 -17
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +9 -5
- data/lib/graphql/introspection/input_value_type.rb +15 -3
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +11 -6
- data/lib/graphql/introspection/type_type.rb +31 -14
- data/lib/graphql/introspection.rb +100 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +20 -5
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/document_from_schema_definition.rb +96 -44
- data/lib/graphql/language/lexer.rb +216 -1462
- data/lib/graphql/language/nodes.rb +126 -129
- data/lib/graphql/language/parser.rb +997 -933
- data/lib/graphql/language/parser.y +148 -118
- data/lib/graphql/language/printer.rb +48 -23
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +192 -84
- data/lib/graphql/language.rb +2 -0
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
- data/lib/graphql/pagination/array_connection.rb +6 -4
- data/lib/graphql/pagination/connection.rb +105 -23
- data/lib/graphql/pagination/connections.rb +62 -35
- data/lib/graphql/pagination/relation_connection.rb +88 -36
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +203 -198
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +33 -7
- data/lib/graphql/query/null_context.rb +22 -9
- data/lib/graphql/query/validation_pipeline.rb +16 -38
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +36 -12
- data/lib/graphql/query.rb +92 -44
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +41 -10
- data/lib/graphql/relay/range_add.rb +17 -10
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
- data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
- data/lib/graphql/rubocop.rb +4 -0
- data/lib/graphql/schema/addition.rb +245 -0
- data/lib/graphql/schema/argument.rb +250 -46
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
- data/lib/graphql/schema/build_from_definition.rb +243 -89
- data/lib/graphql/schema/directive/deprecated.rb +1 -1
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +57 -0
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +108 -20
- data/lib/graphql/schema/enum.rb +105 -44
- data/lib/graphql/schema/enum_value.rb +15 -25
- data/lib/graphql/schema/field/connection_extension.rb +50 -30
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +476 -331
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +6 -8
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/input_object.rb +133 -121
- data/lib/graphql/schema/interface.rb +17 -45
- 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 +25 -8
- data/lib/graphql/schema/loader.rb +139 -103
- data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
- data/lib/graphql/schema/member/build_type.rb +19 -14
- data/lib/graphql/schema/member/has_arguments.rb +310 -26
- data/lib/graphql/schema/member/has_ast_node.rb +16 -1
- data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
- data/lib/graphql/schema/member/has_directives.rb +118 -0
- data/lib/graphql/schema/member/has_fields.rb +164 -42
- data/lib/graphql/schema/member/has_interfaces.rb +129 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +57 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +6 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +12 -7
- data/lib/graphql/schema/object.rb +35 -69
- data/lib/graphql/schema/printer.rb +16 -34
- data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
- data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
- data/lib/graphql/schema/resolver.rb +144 -79
- data/lib/graphql/schema/scalar.rb +27 -18
- data/lib/graphql/schema/subscription.rb +55 -26
- data/lib/graphql/schema/timeout.rb +45 -35
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +48 -13
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
- data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
- data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
- data/lib/graphql/schema/validator/format_validator.rb +48 -0
- data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
- data/lib/graphql/schema/validator/length_validator.rb +59 -0
- data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
- data/lib/graphql/schema/validator/required_validator.rb +82 -0
- data/lib/graphql/schema/validator.rb +171 -0
- data/lib/graphql/schema/warden.rb +185 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +471 -1116
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +13 -27
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +69 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
- data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
- 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/query_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
- data/lib/graphql/static_validation/validation_context.rb +13 -3
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +32 -20
- data/lib/graphql/static_validation.rb +1 -2
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
- data/lib/graphql/subscriptions/event.rb +81 -35
- data/lib/graphql/subscriptions/instrumentation.rb +0 -52
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +113 -58
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_trace.rb +77 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
- data/lib/graphql/tracing/data_dog_trace.rb +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
- data/lib/graphql/tracing/legacy_trace.rb +65 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
- data/lib/graphql/tracing/notifications_trace.rb +42 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +109 -0
- data/lib/graphql/tracing/platform_tracing.rb +64 -43
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/scout_tracing.rb +11 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +23 -71
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +10 -3
- data/lib/graphql/types/iso_8601_date.rb +20 -9
- data/lib/graphql/types/iso_8601_date_time.rb +36 -10
- data/lib/graphql/types/relay/base_connection.rb +18 -92
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +2 -4
- data/lib/graphql/types/relay/node_behaviors.rb +25 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
- data/lib/graphql/types/relay.rb +10 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +54 -65
- data/readme.md +3 -6
- metadata +116 -236
- data/lib/graphql/analysis/analyze_query.rb +0 -91
- 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/backwards_compatibility.rb +0 -60
- data/lib/graphql/base_type.rb +0 -230
- 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 -435
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
- 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 -264
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
- 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 -210
- 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 -42
- 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 -127
- data/lib/graphql/execution/execute.rb +0 -326
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/instrumentation.rb +0 -92
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- 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 -222
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -124
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -132
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -65
- 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 -258
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -121
- data/lib/graphql/query/arguments.rb +0 -188
- data/lib/graphql/query/arguments_cache.rb +0 -25
- data/lib/graphql/query/executor.rb +0 -53
- 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 -39
- data/lib/graphql/relay/array_connection.rb +0 -85
- data/lib/graphql/relay/base_connection.rb +0 -176
- 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 -40
- 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 -105
- data/lib/graphql/relay/node.rb +0 -36
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -190
- data/lib/graphql/relay/type_extensions.rb +0 -30
- data/lib/graphql/scalar_type.rb +0 -76
- 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 -15
- data/lib/graphql/schema/member/accepts_definition.rb +0 -152
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
- data/lib/graphql/schema/member/instrumentation.rb +0 -132
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -39
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -86
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -303
- 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 -65
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/base_field.rb +0 -22
- data/lib/graphql/types/relay/base_interface.rb +0 -29
- data/lib/graphql/types/relay/base_object.rb +0 -26
- data/lib/graphql/types/relay/node_field.rb +0 -43
- data/lib/graphql/types/relay/nodes_field.rb +0 -45
- data/lib/graphql/union_type.rb +0 -113
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -93,7 +93,7 @@ module GraphQL
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def print_input_object(input_object)
|
96
|
-
"{#{input_object.arguments.map { |a|
|
96
|
+
"{#{input_object.arguments.map { |a| print_argument(a) }.join(", ")}}"
|
97
97
|
end
|
98
98
|
|
99
99
|
def print_list_type(list_type)
|
@@ -132,10 +132,11 @@ module GraphQL
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def print_schema_definition(schema)
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
135
|
+
has_conventional_names = (schema.query.nil? || schema.query == 'Query') &&
|
136
|
+
(schema.mutation.nil? || schema.mutation == 'Mutation') &&
|
137
|
+
(schema.subscription.nil? || schema.subscription == 'Subscription')
|
138
|
+
|
139
|
+
if has_conventional_names && schema.directives.empty?
|
139
140
|
return
|
140
141
|
end
|
141
142
|
|
@@ -145,14 +146,22 @@ module GraphQL
|
|
145
146
|
out << "\n "
|
146
147
|
out << print_node(dir)
|
147
148
|
end
|
148
|
-
|
149
|
-
|
150
|
-
|
149
|
+
if !has_conventional_names
|
150
|
+
out << "\n"
|
151
|
+
end
|
151
152
|
end
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
153
|
+
|
154
|
+
if !has_conventional_names
|
155
|
+
if schema.directives.empty?
|
156
|
+
out << " "
|
157
|
+
end
|
158
|
+
out << "{\n"
|
159
|
+
out << " query: #{schema.query}\n" if schema.query
|
160
|
+
out << " mutation: #{schema.mutation}\n" if schema.mutation
|
161
|
+
out << " subscription: #{schema.subscription}\n" if schema.subscription
|
162
|
+
out << "}"
|
163
|
+
end
|
164
|
+
out
|
156
165
|
end
|
157
166
|
|
158
167
|
def print_scalar_type_definition(scalar_type)
|
@@ -164,11 +173,15 @@ module GraphQL
|
|
164
173
|
def print_object_type_definition(object_type)
|
165
174
|
out = print_description(object_type)
|
166
175
|
out << "type #{object_type.name}"
|
167
|
-
out <<
|
176
|
+
out << print_implements(object_type) unless object_type.interfaces.empty?
|
168
177
|
out << print_directives(object_type.directives)
|
169
178
|
out << print_field_definitions(object_type.fields)
|
170
179
|
end
|
171
180
|
|
181
|
+
def print_implements(type)
|
182
|
+
" implements #{type.interfaces.map(&:name).join(" & ")}"
|
183
|
+
end
|
184
|
+
|
172
185
|
def print_input_value_definition(input_value)
|
173
186
|
out = "#{input_value.name}: #{print_node(input_value.type)}".dup
|
174
187
|
out << " = #{print_node(input_value.default_value)}" unless input_value.default_value.nil?
|
@@ -200,6 +213,7 @@ module GraphQL
|
|
200
213
|
def print_interface_type_definition(interface_type)
|
201
214
|
out = print_description(interface_type)
|
202
215
|
out << "interface #{interface_type.name}"
|
216
|
+
out << print_implements(interface_type) if interface_type.interfaces.any?
|
203
217
|
out << print_directives(interface_type.directives)
|
204
218
|
out << print_field_definitions(interface_type.fields)
|
205
219
|
end
|
@@ -231,12 +245,15 @@ module GraphQL
|
|
231
245
|
out = print_description(input_object_type)
|
232
246
|
out << "input #{input_object_type.name}"
|
233
247
|
out << print_directives(input_object_type.directives)
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
248
|
+
if !input_object_type.fields.empty?
|
249
|
+
out << " {\n"
|
250
|
+
input_object_type.fields.each.with_index do |field, i|
|
251
|
+
out << print_description(field, indent: ' ', first_in_block: i == 0)
|
252
|
+
out << " #{print_input_value_definition(field)}\n"
|
253
|
+
end
|
254
|
+
out << "}"
|
238
255
|
end
|
239
|
-
out
|
256
|
+
out
|
240
257
|
end
|
241
258
|
|
242
259
|
def print_directive_definition(directive)
|
@@ -247,6 +264,10 @@ module GraphQL
|
|
247
264
|
out << print_arguments(directive.arguments)
|
248
265
|
end
|
249
266
|
|
267
|
+
if directive.repeatable
|
268
|
+
out << " repeatable"
|
269
|
+
end
|
270
|
+
|
250
271
|
out << " on #{directive.locations.map(&:name).join(' | ')}"
|
251
272
|
end
|
252
273
|
|
@@ -258,12 +279,16 @@ module GraphQL
|
|
258
279
|
end
|
259
280
|
|
260
281
|
def print_field_definitions(fields)
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
out
|
282
|
+
if fields.empty?
|
283
|
+
""
|
284
|
+
else
|
285
|
+
out = " {\n".dup
|
286
|
+
fields.each.with_index do |field, i|
|
287
|
+
out << print_description(field, indent: ' ', first_in_block: i == 0)
|
288
|
+
out << " #{print_field_definition(field)}\n"
|
289
|
+
end
|
290
|
+
out << "}"
|
265
291
|
end
|
266
|
-
out << "}"
|
267
292
|
end
|
268
293
|
|
269
294
|
def print_directives(directives)
|
@@ -0,0 +1,222 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
module Language
|
4
|
+
# A custom printer used to print sanitized queries. It inlines provided variables
|
5
|
+
# within the query for facilitate logging and analysis of queries.
|
6
|
+
#
|
7
|
+
# The printer returns `nil` if the query is invalid.
|
8
|
+
#
|
9
|
+
# Since the GraphQL Ruby AST for a GraphQL query doesnt contain any reference
|
10
|
+
# on the type of fields or arguments, we have to track the current object, field
|
11
|
+
# and input type while printing the query.
|
12
|
+
#
|
13
|
+
# @example Printing a scrubbed string
|
14
|
+
# printer = QueryPrinter.new(query)
|
15
|
+
# puts printer.sanitized_query_string
|
16
|
+
#
|
17
|
+
# @see {Query#sanitized_query_string}
|
18
|
+
class SanitizedPrinter < GraphQL::Language::Printer
|
19
|
+
|
20
|
+
REDACTED = "\"<REDACTED>\""
|
21
|
+
|
22
|
+
def initialize(query, inline_variables: true)
|
23
|
+
@query = query
|
24
|
+
@current_type = nil
|
25
|
+
@current_field = nil
|
26
|
+
@current_input_type = nil
|
27
|
+
@inline_variables = inline_variables
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String, nil] A scrubbed query string, if the query was valid.
|
31
|
+
def sanitized_query_string
|
32
|
+
if query.valid?
|
33
|
+
print(query.document)
|
34
|
+
else
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def print_node(node, indent: "")
|
40
|
+
case node
|
41
|
+
when FalseClass, Float, Integer, String, TrueClass
|
42
|
+
if @current_argument && redact_argument_value?(@current_argument, node)
|
43
|
+
redacted_argument_value(@current_argument)
|
44
|
+
else
|
45
|
+
super
|
46
|
+
end
|
47
|
+
when Array
|
48
|
+
old_input_type = @current_input_type
|
49
|
+
if @current_input_type && @current_input_type.list?
|
50
|
+
@current_input_type = @current_input_type.of_type
|
51
|
+
@current_input_type = @current_input_type.of_type if @current_input_type.non_null?
|
52
|
+
end
|
53
|
+
|
54
|
+
res = super
|
55
|
+
@current_input_type = old_input_type
|
56
|
+
res
|
57
|
+
else
|
58
|
+
super
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Indicates whether or not to redact non-null values for the given argument. Defaults to redacting all strings
|
63
|
+
# arguments but this can be customized by subclasses.
|
64
|
+
def redact_argument_value?(argument, value)
|
65
|
+
# Default to redacting any strings or custom scalars encoded as strings
|
66
|
+
type = argument.type.unwrap
|
67
|
+
value.is_a?(String) && type.kind.scalar? && (type.graphql_name == "String" || !type.default_scalar?)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns the value to use for redacted versions of the given argument. Defaults to the
|
71
|
+
# string "<REDACTED>".
|
72
|
+
def redacted_argument_value(argument)
|
73
|
+
REDACTED
|
74
|
+
end
|
75
|
+
|
76
|
+
def print_argument(argument)
|
77
|
+
# We won't have type information if we're recursing into a custom scalar
|
78
|
+
return super if @current_input_type && @current_input_type.kind.scalar?
|
79
|
+
|
80
|
+
arg_owner = @current_input_type || @current_directive || @current_field
|
81
|
+
old_current_argument = @current_argument
|
82
|
+
@current_argument = arg_owner.get_argument(argument.name, @query.context)
|
83
|
+
|
84
|
+
old_input_type = @current_input_type
|
85
|
+
@current_input_type = @current_argument.type.non_null? ? @current_argument.type.of_type : @current_argument.type
|
86
|
+
|
87
|
+
argument_value = if coerce_argument_value_to_list?(@current_input_type, argument.value)
|
88
|
+
[argument.value]
|
89
|
+
else
|
90
|
+
argument.value
|
91
|
+
end
|
92
|
+
res = "#{argument.name}: #{print_node(argument_value)}".dup
|
93
|
+
|
94
|
+
@current_input_type = old_input_type
|
95
|
+
@current_argument = old_current_argument
|
96
|
+
res
|
97
|
+
end
|
98
|
+
|
99
|
+
def coerce_argument_value_to_list?(type, value)
|
100
|
+
type.list? &&
|
101
|
+
!value.is_a?(Array) &&
|
102
|
+
!value.nil? &&
|
103
|
+
!value.is_a?(GraphQL::Language::Nodes::VariableIdentifier)
|
104
|
+
end
|
105
|
+
|
106
|
+
def print_variable_identifier(variable_id)
|
107
|
+
if @inline_variables
|
108
|
+
variable_value = query.variables[variable_id.name]
|
109
|
+
print_node(value_to_ast(variable_value, @current_input_type))
|
110
|
+
else
|
111
|
+
super
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def print_field(field, indent: "")
|
116
|
+
@current_field = query.get_field(@current_type, field.name)
|
117
|
+
old_type = @current_type
|
118
|
+
@current_type = @current_field.type.unwrap
|
119
|
+
res = super
|
120
|
+
@current_type = old_type
|
121
|
+
res
|
122
|
+
end
|
123
|
+
|
124
|
+
def print_inline_fragment(inline_fragment, indent: "")
|
125
|
+
old_type = @current_type
|
126
|
+
|
127
|
+
if inline_fragment.type
|
128
|
+
@current_type = query.get_type(inline_fragment.type.name)
|
129
|
+
end
|
130
|
+
|
131
|
+
res = super
|
132
|
+
|
133
|
+
@current_type = old_type
|
134
|
+
|
135
|
+
res
|
136
|
+
end
|
137
|
+
|
138
|
+
def print_fragment_definition(fragment_def, indent: "")
|
139
|
+
old_type = @current_type
|
140
|
+
@current_type = query.get_type(fragment_def.type.name)
|
141
|
+
|
142
|
+
res = super
|
143
|
+
|
144
|
+
@current_type = old_type
|
145
|
+
|
146
|
+
res
|
147
|
+
end
|
148
|
+
|
149
|
+
def print_directive(directive)
|
150
|
+
@current_directive = query.schema.directives[directive.name]
|
151
|
+
|
152
|
+
res = super
|
153
|
+
|
154
|
+
@current_directive = nil
|
155
|
+
res
|
156
|
+
end
|
157
|
+
|
158
|
+
# Print the operation definition but do not include the variable
|
159
|
+
# definitions since we will inline them within the query
|
160
|
+
def print_operation_definition(operation_definition, indent: "")
|
161
|
+
old_type = @current_type
|
162
|
+
@current_type = query.schema.public_send(operation_definition.operation_type)
|
163
|
+
|
164
|
+
if @inline_variables
|
165
|
+
out = "#{indent}#{operation_definition.operation_type}".dup
|
166
|
+
out << " #{operation_definition.name}" if operation_definition.name
|
167
|
+
out << print_directives(operation_definition.directives)
|
168
|
+
out << print_selections(operation_definition.selections, indent: indent)
|
169
|
+
else
|
170
|
+
out = super
|
171
|
+
end
|
172
|
+
|
173
|
+
@current_type = old_type
|
174
|
+
out
|
175
|
+
end
|
176
|
+
|
177
|
+
private
|
178
|
+
|
179
|
+
def value_to_ast(value, type)
|
180
|
+
type = type.of_type if type.non_null?
|
181
|
+
|
182
|
+
if value.nil?
|
183
|
+
return GraphQL::Language::Nodes::NullValue.new(name: "null")
|
184
|
+
end
|
185
|
+
|
186
|
+
case type.kind.name
|
187
|
+
when "INPUT_OBJECT"
|
188
|
+
value = if value.respond_to?(:to_unsafe_h)
|
189
|
+
# for ActionController::Parameters
|
190
|
+
value.to_unsafe_h
|
191
|
+
else
|
192
|
+
value.to_h
|
193
|
+
end
|
194
|
+
|
195
|
+
arguments = value.map do |key, val|
|
196
|
+
sub_type = type.get_argument(key.to_s, @query.context).type
|
197
|
+
|
198
|
+
GraphQL::Language::Nodes::Argument.new(
|
199
|
+
name: key.to_s,
|
200
|
+
value: value_to_ast(val, sub_type)
|
201
|
+
)
|
202
|
+
end
|
203
|
+
GraphQL::Language::Nodes::InputObject.new(
|
204
|
+
arguments: arguments
|
205
|
+
)
|
206
|
+
when "LIST"
|
207
|
+
if value.is_a?(Array)
|
208
|
+
value.map { |v| value_to_ast(v, type.of_type) }
|
209
|
+
else
|
210
|
+
[value].map { |v| value_to_ast(v, type.of_type) }
|
211
|
+
end
|
212
|
+
when "ENUM"
|
213
|
+
GraphQL::Language::Nodes::Enum.new(name: value)
|
214
|
+
else
|
215
|
+
value
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
attr_reader :query
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
@@ -4,10 +4,6 @@ module GraphQL
|
|
4
4
|
# Emitted by the lexer and passed to the parser.
|
5
5
|
# Contains type, value and position data.
|
6
6
|
class Token
|
7
|
-
if !String.method_defined?(:-@)
|
8
|
-
using GraphQL::StringDedupBackport
|
9
|
-
end
|
10
|
-
|
11
7
|
# @return [Symbol] The kind of token this is
|
12
8
|
attr_reader :name
|
13
9
|
# @return [String] The text of this token
|
@@ -65,7 +65,9 @@ module GraphQL
|
|
65
65
|
# Visit `document` and all children, applying hooks as you go
|
66
66
|
# @return [void]
|
67
67
|
def visit
|
68
|
-
|
68
|
+
# `@document` may be any kind of node:
|
69
|
+
visit_method = :"#{@document.visit_method}_with_modifications"
|
70
|
+
result = public_send(visit_method, @document, nil)
|
69
71
|
@result = if result.is_a?(Array)
|
70
72
|
result.first
|
71
73
|
else
|
@@ -74,104 +76,210 @@ module GraphQL
|
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
77
|
-
#
|
78
|
-
def
|
79
|
-
|
80
|
-
|
79
|
+
# We don't use `alias` here because it breaks `super`
|
80
|
+
def self.make_visit_methods(ast_node_class)
|
81
|
+
node_method = ast_node_class.visit_method
|
82
|
+
children_of_type = ast_node_class.children_of_type
|
83
|
+
child_visit_method = :"#{node_method}_children"
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
85
|
+
class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
86
|
+
# The default implementation for visiting an AST node.
|
87
|
+
# It doesn't _do_ anything, but it continues to visiting the node's children.
|
88
|
+
# To customize this hook, override one of its make_visit_methods (or the base method?)
|
89
|
+
# in your subclasses.
|
90
|
+
#
|
91
|
+
# For compatibility, it calls hook procs, too.
|
92
|
+
# @param node [GraphQL::Language::Nodes::AbstractNode] the node being visited
|
93
|
+
# @param parent [GraphQL::Language::Nodes::AbstractNode, nil] the previously-visited node, or `nil` if this is the root node.
|
94
|
+
# @return [Array, nil] If there were modifications, it returns an array of new nodes, otherwise, it returns `nil`.
|
95
|
+
def #{node_method}(node, parent)
|
96
|
+
if node.equal?(DELETE_NODE)
|
97
|
+
# This might be passed to `super(DELETE_NODE, ...)`
|
98
|
+
# by a user hook, don't want to keep visiting in that case.
|
99
|
+
[node, parent]
|
100
|
+
else
|
101
|
+
# Run hooks if there are any
|
102
|
+
new_node = node
|
103
|
+
no_hooks = !@visitors.key?(node.class)
|
104
|
+
if no_hooks || begin_visit(new_node, parent)
|
105
|
+
#{
|
106
|
+
if method_defined?(child_visit_method)
|
107
|
+
"new_node = #{child_visit_method}(new_node)"
|
108
|
+
elsif children_of_type
|
109
|
+
children_of_type.map do |child_accessor, child_class|
|
110
|
+
"node.#{child_accessor}.each do |child_node|
|
111
|
+
new_child_and_node = #{child_class.visit_method}_with_modifications(child_node, new_node)
|
112
|
+
# Reassign `node` in case the child hook makes a modification
|
113
|
+
if new_child_and_node.is_a?(Array)
|
114
|
+
new_node = new_child_and_node[1]
|
115
|
+
end
|
116
|
+
end"
|
117
|
+
end.join("\n")
|
118
|
+
else
|
119
|
+
""
|
120
|
+
end
|
121
|
+
}
|
122
|
+
end
|
123
|
+
end_visit(new_node, parent) unless no_hooks
|
124
|
+
|
125
|
+
if new_node.equal?(node)
|
126
|
+
[node, parent]
|
127
|
+
else
|
128
|
+
[new_node, parent]
|
106
129
|
end
|
107
130
|
end
|
108
131
|
end
|
109
|
-
end_visit(new_node, parent) unless no_hooks
|
110
132
|
|
111
|
-
|
112
|
-
|
133
|
+
def #{node_method}_with_modifications(node, parent)
|
134
|
+
new_node_and_new_parent = #{node_method}(node, parent)
|
135
|
+
apply_modifications(node, parent, new_node_and_new_parent)
|
136
|
+
end
|
137
|
+
RUBY
|
138
|
+
end
|
139
|
+
|
140
|
+
def on_document_children(document_node)
|
141
|
+
new_node = document_node
|
142
|
+
document_node.children.each do |child_node|
|
143
|
+
visit_method = :"#{child_node.visit_method}_with_modifications"
|
144
|
+
new_child_and_node = public_send(visit_method, child_node, new_node)
|
145
|
+
# Reassign `node` in case the child hook makes a modification
|
146
|
+
if new_child_and_node.is_a?(Array)
|
147
|
+
new_node = new_child_and_node[1]
|
148
|
+
end
|
149
|
+
end
|
150
|
+
new_node
|
151
|
+
end
|
152
|
+
|
153
|
+
def on_field_children(new_node)
|
154
|
+
new_node.arguments.each do |arg_node| # rubocop:disable Development/ContextIsPassedCop
|
155
|
+
new_child_and_node = on_argument_with_modifications(arg_node, new_node)
|
156
|
+
# Reassign `node` in case the child hook makes a modification
|
157
|
+
if new_child_and_node.is_a?(Array)
|
158
|
+
new_node = new_child_and_node[1]
|
159
|
+
end
|
160
|
+
end
|
161
|
+
new_node = visit_directives(new_node)
|
162
|
+
new_node = visit_selections(new_node)
|
163
|
+
new_node
|
164
|
+
end
|
165
|
+
|
166
|
+
def visit_directives(new_node)
|
167
|
+
new_node.directives.each do |dir_node|
|
168
|
+
new_child_and_node = on_directive_with_modifications(dir_node, new_node)
|
169
|
+
# Reassign `node` in case the child hook makes a modification
|
170
|
+
if new_child_and_node.is_a?(Array)
|
171
|
+
new_node = new_child_and_node[1]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
new_node
|
175
|
+
end
|
176
|
+
|
177
|
+
def visit_selections(new_node)
|
178
|
+
new_node.selections.each do |selection|
|
179
|
+
new_child_and_node = case selection
|
180
|
+
when GraphQL::Language::Nodes::Field
|
181
|
+
on_field_with_modifications(selection, new_node)
|
182
|
+
when GraphQL::Language::Nodes::InlineFragment
|
183
|
+
on_inline_fragment_with_modifications(selection, new_node)
|
184
|
+
when GraphQL::Language::Nodes::FragmentSpread
|
185
|
+
on_fragment_spread_with_modifications(selection, new_node)
|
113
186
|
else
|
114
|
-
|
187
|
+
raise ArgumentError, "Invariant: unexpected field selection #{selection.class} (#{selection.inspect})"
|
188
|
+
end
|
189
|
+
# Reassign `node` in case the child hook makes a modification
|
190
|
+
if new_child_and_node.is_a?(Array)
|
191
|
+
new_node = new_child_and_node[1]
|
115
192
|
end
|
116
193
|
end
|
194
|
+
new_node
|
117
195
|
end
|
118
196
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
197
|
+
def on_fragment_definition_children(new_node)
|
198
|
+
new_node = visit_directives(new_node)
|
199
|
+
new_node = visit_selections(new_node)
|
200
|
+
new_node
|
201
|
+
end
|
202
|
+
|
203
|
+
alias :on_inline_fragment_children :on_fragment_definition_children
|
204
|
+
|
205
|
+
def on_operation_definition_children(new_node)
|
206
|
+
new_node.variables.each do |arg_node|
|
207
|
+
new_child_and_node = on_variable_definition_with_modifications(arg_node, new_node)
|
208
|
+
# Reassign `node` in case the child hook makes a modification
|
209
|
+
if new_child_and_node.is_a?(Array)
|
210
|
+
new_node = new_child_and_node[1]
|
126
211
|
end
|
127
|
-
|
212
|
+
end
|
213
|
+
new_node = visit_directives(new_node)
|
214
|
+
new_node = visit_selections(new_node)
|
215
|
+
new_node
|
216
|
+
end
|
217
|
+
|
218
|
+
def on_argument_children(new_node)
|
219
|
+
new_node.children.each do |value_node|
|
220
|
+
new_child_and_node = case value_node
|
221
|
+
when Language::Nodes::VariableIdentifier
|
222
|
+
on_variable_identifier_with_modifications(value_node, new_node)
|
223
|
+
when Language::Nodes::InputObject
|
224
|
+
on_input_object_with_modifications(value_node, new_node)
|
225
|
+
when Language::Nodes::Enum
|
226
|
+
on_enum_with_modifications(value_node, new_node)
|
227
|
+
when Language::Nodes::NullValue
|
228
|
+
on_null_value_with_modifications(value_node, new_node)
|
229
|
+
else
|
230
|
+
raise ArgumentError, "Invariant: unexpected argument value node #{value_node.class} (#{value_node.inspect})"
|
231
|
+
end
|
232
|
+
# Reassign `node` in case the child hook makes a modification
|
233
|
+
if new_child_and_node.is_a?(Array)
|
234
|
+
new_node = new_child_and_node[1]
|
235
|
+
end
|
236
|
+
end
|
237
|
+
new_node
|
128
238
|
end
|
129
239
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
240
|
+
[
|
241
|
+
Language::Nodes::Argument,
|
242
|
+
Language::Nodes::Directive,
|
243
|
+
Language::Nodes::DirectiveDefinition,
|
244
|
+
Language::Nodes::DirectiveLocation,
|
245
|
+
Language::Nodes::Document,
|
246
|
+
Language::Nodes::Enum,
|
247
|
+
Language::Nodes::EnumTypeDefinition,
|
248
|
+
Language::Nodes::EnumTypeExtension,
|
249
|
+
Language::Nodes::EnumValueDefinition,
|
250
|
+
Language::Nodes::Field,
|
251
|
+
Language::Nodes::FieldDefinition,
|
252
|
+
Language::Nodes::FragmentDefinition,
|
253
|
+
Language::Nodes::FragmentSpread,
|
254
|
+
Language::Nodes::InlineFragment,
|
255
|
+
Language::Nodes::InputObject,
|
256
|
+
Language::Nodes::InputObjectTypeDefinition,
|
257
|
+
Language::Nodes::InputObjectTypeExtension,
|
258
|
+
Language::Nodes::InputValueDefinition,
|
259
|
+
Language::Nodes::InterfaceTypeDefinition,
|
260
|
+
Language::Nodes::InterfaceTypeExtension,
|
261
|
+
Language::Nodes::ListType,
|
262
|
+
Language::Nodes::NonNullType,
|
263
|
+
Language::Nodes::NullValue,
|
264
|
+
Language::Nodes::ObjectTypeDefinition,
|
265
|
+
Language::Nodes::ObjectTypeExtension,
|
266
|
+
Language::Nodes::OperationDefinition,
|
267
|
+
Language::Nodes::ScalarTypeDefinition,
|
268
|
+
Language::Nodes::ScalarTypeExtension,
|
269
|
+
Language::Nodes::SchemaDefinition,
|
270
|
+
Language::Nodes::SchemaExtension,
|
271
|
+
Language::Nodes::TypeName,
|
272
|
+
Language::Nodes::UnionTypeDefinition,
|
273
|
+
Language::Nodes::UnionTypeExtension,
|
274
|
+
Language::Nodes::VariableDefinition,
|
275
|
+
Language::Nodes::VariableIdentifier,
|
276
|
+
].each do |ast_node_class|
|
277
|
+
make_visit_methods(ast_node_class)
|
278
|
+
end
|
165
279
|
|
166
280
|
private
|
167
281
|
|
168
|
-
|
169
|
-
# copy `parent` so that it contains the copy of that node as a child,
|
170
|
-
# then return the copies
|
171
|
-
# If a non-array value is returned, consuming functions should ignore
|
172
|
-
# said value
|
173
|
-
def on_node_with_modifications(node, parent)
|
174
|
-
new_node_and_new_parent = visit_node(node, parent)
|
282
|
+
def apply_modifications(node, parent, new_node_and_new_parent)
|
175
283
|
if new_node_and_new_parent.is_a?(Array)
|
176
284
|
new_node = new_node_and_new_parent[0]
|
177
285
|
new_parent = new_node_and_new_parent[1]
|
@@ -179,7 +287,7 @@ module GraphQL
|
|
179
287
|
# The user-provided hook returned a new node.
|
180
288
|
new_parent = new_parent && new_parent.replace_child(node, new_node)
|
181
289
|
return new_node, new_parent
|
182
|
-
elsif new_node
|
290
|
+
elsif new_node.equal?(DELETE_NODE)
|
183
291
|
# The user-provided hook requested to remove this node
|
184
292
|
new_parent = new_parent && new_parent.delete_child(node)
|
185
293
|
return nil, new_parent
|