graphql 1.13.24 → 2.5.11
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/generators/graphql/install/mutation_root_generator.rb +2 -2
- data/lib/generators/graphql/install/templates/base_mutation.erb +2 -0
- data/lib/generators/graphql/install/templates/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +50 -1
- data/lib/generators/graphql/mutation_delete_generator.rb +1 -1
- data/lib/generators/graphql/mutation_update_generator.rb +1 -1
- data/lib/generators/graphql/orm_mutations_base.rb +1 -1
- data/lib/generators/graphql/relay.rb +21 -18
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +2 -0
- data/lib/generators/graphql/templates/base_edge.erb +2 -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_resolver.erb +8 -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/graphql_controller.erb +2 -0
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +2 -0
- data/lib/generators/graphql/templates/node_type.erb +2 -0
- data/lib/generators/graphql/templates/query_type.erb +2 -0
- data/lib/generators/graphql/templates/schema.erb +8 -0
- data/lib/generators/graphql/type_generator.rb +1 -1
- data/lib/graphql/analysis/analyzer.rb +90 -0
- data/lib/graphql/analysis/field_usage.rb +65 -28
- data/lib/graphql/analysis/max_query_complexity.rb +11 -17
- data/lib/graphql/analysis/max_query_depth.rb +13 -19
- data/lib/graphql/analysis/query_complexity.rb +236 -61
- data/lib/graphql/analysis/query_depth.rb +38 -23
- data/lib/graphql/analysis/visitor.rb +280 -0
- data/lib/graphql/analysis.rb +93 -6
- data/lib/graphql/autoload.rb +38 -0
- data/lib/graphql/backtrace/table.rb +118 -73
- data/lib/graphql/backtrace.rb +2 -25
- data/lib/graphql/coercion_error.rb +1 -9
- data/lib/graphql/current.rb +57 -0
- data/lib/graphql/dashboard/detailed_traces.rb +47 -0
- data/lib/graphql/dashboard/installable.rb +22 -0
- data/lib/graphql/dashboard/limiters.rb +93 -0
- data/lib/graphql/dashboard/operation_store.rb +199 -0
- data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.css +6 -0
- data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.js +7 -0
- data/lib/graphql/dashboard/statics/charts.min.css +1 -0
- data/lib/graphql/dashboard/statics/dashboard.css +30 -0
- data/lib/graphql/dashboard/statics/dashboard.js +143 -0
- data/lib/graphql/dashboard/statics/header-icon.png +0 -0
- data/lib/graphql/dashboard/statics/icon.png +0 -0
- data/lib/graphql/dashboard/subscriptions.rb +96 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/detailed_traces/traces/index.html.erb +45 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/landings/show.html.erb +18 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/limiters/limiters/show.html.erb +62 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/not_installed.html.erb +18 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/_form.html.erb +23 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/edit.html.erb +21 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/index.html.erb +69 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/new.html.erb +7 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/index.html.erb +39 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/show.html.erb +32 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/index.html.erb +81 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/show.html.erb +71 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/subscriptions/show.html.erb +41 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/index.html.erb +55 -0
- data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/show.html.erb +40 -0
- data/lib/graphql/dashboard/views/layouts/graphql/dashboard/application.html.erb +108 -0
- data/lib/graphql/dashboard.rb +158 -0
- data/lib/graphql/dataloader/active_record_association_source.rb +84 -0
- data/lib/graphql/dataloader/active_record_source.rb +47 -0
- data/lib/graphql/dataloader/async_dataloader.rb +101 -0
- data/lib/graphql/dataloader/null_dataloader.rb +11 -2
- data/lib/graphql/dataloader/request.rb +5 -0
- data/lib/graphql/dataloader/source.rb +103 -47
- data/lib/graphql/dataloader.rb +174 -148
- data/lib/graphql/dig.rb +3 -2
- data/lib/graphql/duration_encoding_error.rb +16 -0
- data/lib/graphql/execution/errors.rb +12 -82
- data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
- data/lib/graphql/execution/interpreter/arguments.rb +1 -1
- data/lib/graphql/execution/interpreter/arguments_cache.rb +30 -35
- data/lib/graphql/execution/interpreter/resolve.rb +32 -2
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +215 -0
- data/lib/graphql/execution/interpreter/runtime.rb +525 -502
- data/lib/graphql/execution/interpreter.rb +127 -81
- data/lib/graphql/execution/lazy.rb +7 -21
- data/lib/graphql/execution/lookahead.rb +133 -55
- data/lib/graphql/execution/multiplex.rb +6 -176
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/introspection/directive_location_enum.rb +1 -1
- data/lib/graphql/introspection/directive_type.rb +1 -1
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +10 -17
- data/lib/graphql/introspection/field_type.rb +1 -1
- data/lib/graphql/introspection/schema_type.rb +8 -11
- data/lib/graphql/introspection/type_type.rb +13 -6
- data/lib/graphql/introspection.rb +4 -3
- data/lib/graphql/invalid_name_error.rb +1 -1
- data/lib/graphql/invalid_null_error.rb +20 -17
- data/lib/graphql/language/block_string.rb +34 -18
- data/lib/graphql/language/cache.rb +13 -0
- data/lib/graphql/language/comment.rb +18 -0
- data/lib/graphql/language/definition_slice.rb +1 -1
- data/lib/graphql/language/document_from_schema_definition.rb +114 -80
- data/lib/graphql/language/lexer.rb +375 -1489
- data/lib/graphql/language/nodes.rb +189 -104
- data/lib/graphql/language/parser.rb +807 -1941
- data/lib/graphql/language/printer.rb +366 -163
- data/lib/graphql/language/sanitized_printer.rb +21 -23
- data/lib/graphql/language/static_visitor.rb +171 -0
- data/lib/graphql/language/visitor.rb +189 -138
- data/lib/graphql/language.rb +62 -1
- data/lib/graphql/load_application_object_failed_error.rb +5 -1
- data/lib/graphql/pagination/active_record_relation_connection.rb +0 -8
- data/lib/graphql/pagination/array_connection.rb +8 -6
- data/lib/graphql/pagination/connection.rb +61 -7
- data/lib/graphql/pagination/connections.rb +3 -28
- data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
- data/lib/graphql/pagination/relation_connection.rb +2 -0
- data/lib/graphql/query/context/scoped_context.rb +101 -0
- data/lib/graphql/query/context.rb +131 -225
- data/lib/graphql/query/input_validation_result.rb +1 -1
- data/lib/graphql/query/null_context.rb +11 -33
- data/lib/graphql/query/partial.rb +179 -0
- data/lib/graphql/query/validation_pipeline.rb +14 -37
- data/lib/graphql/query/variable_validation_error.rb +1 -1
- data/lib/graphql/query/variables.rb +6 -19
- data/lib/graphql/query.rb +162 -98
- data/lib/graphql/railtie.rb +15 -109
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +30 -11
- data/lib/graphql/relay/range_add.rb +9 -20
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/rubocop/graphql/base_cop.rb +1 -1
- data/lib/graphql/rubocop/graphql/field_type_in_block.rb +144 -0
- data/lib/graphql/rubocop/graphql/root_types_in_block.rb +38 -0
- data/lib/graphql/rubocop.rb +2 -0
- data/lib/graphql/schema/addition.rb +70 -33
- data/lib/graphql/schema/always_visible.rb +15 -0
- data/lib/graphql/schema/argument.rb +104 -59
- data/lib/graphql/schema/base_64_encoder.rb +3 -5
- data/lib/graphql/schema/build_from_definition.rb +154 -74
- data/lib/graphql/schema/directive/flagged.rb +4 -2
- data/lib/graphql/schema/directive/one_of.rb +24 -0
- data/lib/graphql/schema/directive/specified_by.rb +14 -0
- data/lib/graphql/schema/directive/transform.rb +1 -1
- data/lib/graphql/schema/directive.rb +47 -24
- data/lib/graphql/schema/enum.rb +137 -65
- data/lib/graphql/schema/enum_value.rb +11 -26
- data/lib/graphql/schema/field/connection_extension.rb +6 -16
- data/lib/graphql/schema/field/scope_extension.rb +8 -1
- data/lib/graphql/schema/field.rb +399 -404
- data/lib/graphql/schema/field_extension.rb +2 -5
- data/lib/graphql/schema/find_inherited_value.rb +2 -7
- data/lib/graphql/schema/has_single_input_argument.rb +160 -0
- data/lib/graphql/schema/input_object.rb +144 -99
- data/lib/graphql/schema/interface.rb +34 -51
- data/lib/graphql/schema/introspection_system.rb +12 -26
- data/lib/graphql/schema/late_bound_type.rb +12 -2
- data/lib/graphql/schema/list.rb +3 -9
- data/lib/graphql/schema/loader.rb +4 -6
- data/lib/graphql/schema/member/base_dsl_methods.rb +32 -18
- data/lib/graphql/schema/member/build_type.rb +15 -9
- data/lib/graphql/schema/member/has_arguments.rb +192 -96
- data/lib/graphql/schema/member/has_ast_node.rb +12 -0
- data/lib/graphql/schema/member/has_dataloader.rb +62 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +18 -4
- data/lib/graphql/schema/member/has_directives.rb +81 -61
- data/lib/graphql/schema/member/has_fields.rb +119 -39
- data/lib/graphql/schema/member/has_interfaces.rb +66 -23
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +5 -1
- data/lib/graphql/schema/member/has_validators.rb +32 -6
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/scoped.rb +19 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +32 -2
- data/lib/graphql/schema/member/validates_input.rb +4 -4
- data/lib/graphql/schema/member.rb +1 -6
- data/lib/graphql/schema/mutation.rb +7 -9
- data/lib/graphql/schema/non_null.rb +1 -7
- data/lib/graphql/schema/object.rb +42 -49
- data/lib/graphql/schema/printer.rb +12 -8
- data/lib/graphql/schema/ractor_shareable.rb +79 -0
- data/lib/graphql/schema/relay_classic_mutation.rb +12 -124
- data/lib/graphql/schema/resolver/has_payload_type.rb +20 -10
- data/lib/graphql/schema/resolver.rb +96 -81
- data/lib/graphql/schema/scalar.rb +10 -30
- data/lib/graphql/schema/subscription.rb +60 -14
- data/lib/graphql/schema/timeout.rb +44 -31
- data/lib/graphql/schema/type_expression.rb +2 -2
- data/lib/graphql/schema/type_membership.rb +3 -0
- data/lib/graphql/schema/union.rb +12 -19
- data/lib/graphql/schema/unique_within_type.rb +1 -1
- data/lib/graphql/schema/validator/all_validator.rb +62 -0
- data/lib/graphql/schema/validator/required_validator.rb +60 -10
- data/lib/graphql/schema/validator.rb +5 -3
- data/lib/graphql/schema/visibility/migration.rb +188 -0
- data/lib/graphql/schema/visibility/profile.rb +445 -0
- data/lib/graphql/schema/visibility/visit.rb +190 -0
- data/lib/graphql/schema/visibility.rb +311 -0
- data/lib/graphql/schema/warden.rb +318 -94
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +1148 -1085
- data/lib/graphql/static_validation/all_rules.rb +4 -3
- data/lib/graphql/static_validation/base_visitor.rb +11 -27
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -1
- data/lib/graphql/static_validation/error.rb +2 -2
- data/lib/graphql/static_validation/literal_validator.rb +24 -7
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +13 -7
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -12
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +12 -2
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +48 -6
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +90 -27
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +10 -2
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +12 -2
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
- data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
- data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +1 -1
- data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +25 -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 +1 -1
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -5
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +5 -5
- data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +26 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +19 -9
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +18 -27
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +2 -2
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +11 -2
- data/lib/graphql/static_validation/validation_context.rb +21 -5
- data/lib/graphql/static_validation/validator.rb +12 -26
- data/lib/graphql/static_validation.rb +0 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +14 -6
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +11 -5
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +40 -1
- data/lib/graphql/subscriptions/event.rb +24 -12
- data/lib/graphql/subscriptions/serialize.rb +3 -1
- data/lib/graphql/subscriptions.rb +48 -32
- data/lib/graphql/testing/helpers.rb +158 -0
- data/lib/graphql/testing.rb +2 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +27 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
- data/lib/graphql/tracing/appoptics_trace.rb +259 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +9 -2
- data/lib/graphql/tracing/appsignal_trace.rb +54 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
- data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +71 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +3 -0
- data/lib/graphql/tracing/detailed_trace/memory_backend.rb +60 -0
- data/lib/graphql/tracing/detailed_trace/redis_backend.rb +72 -0
- data/lib/graphql/tracing/detailed_trace.rb +93 -0
- data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +11 -28
- data/lib/graphql/tracing/legacy_trace.rb +12 -0
- data/lib/graphql/tracing/monitor_trace.rb +283 -0
- data/lib/graphql/tracing/new_relic_trace.rb +68 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
- data/lib/graphql/tracing/notifications_trace.rb +195 -0
- data/lib/graphql/tracing/notifications_tracing.rb +2 -0
- data/lib/graphql/tracing/null_trace.rb +9 -0
- data/lib/graphql/tracing/perfetto_trace/trace.proto +141 -0
- data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +33 -0
- data/lib/graphql/tracing/perfetto_trace.rb +734 -0
- data/lib/graphql/tracing/platform_trace.rb +123 -0
- data/lib/graphql/tracing/platform_tracing.rb +28 -41
- data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +6 -2
- data/lib/graphql/tracing/prometheus_trace.rb +93 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +5 -3
- data/lib/graphql/tracing/scout_trace.rb +49 -0
- data/lib/graphql/tracing/scout_tracing.rb +2 -0
- data/lib/graphql/tracing/sentry_trace.rb +80 -0
- data/lib/graphql/tracing/statsd_trace.rb +48 -0
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +186 -0
- data/lib/graphql/tracing.rb +32 -52
- data/lib/graphql/type_kinds.rb +8 -4
- data/lib/graphql/types/iso_8601_date.rb +4 -1
- data/lib/graphql/types/iso_8601_date_time.rb +4 -0
- data/lib/graphql/types/iso_8601_duration.rb +77 -0
- data/lib/graphql/types/relay/base_connection.rb +16 -6
- data/lib/graphql/types/relay/connection_behaviors.rb +65 -23
- data/lib/graphql/types/relay/edge_behaviors.rb +33 -5
- data/lib/graphql/types/relay/node_behaviors.rb +12 -2
- data/lib/graphql/types/relay/page_info_behaviors.rb +11 -2
- data/lib/graphql/types/relay.rb +0 -3
- data/lib/graphql/types/string.rb +1 -1
- data/lib/graphql/types.rb +18 -10
- data/lib/graphql/unauthorized_enum_value_error.rb +13 -0
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +76 -123
- data/readme.md +13 -3
- metadata +225 -142
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/ast/analyzer.rb +0 -84
- data/lib/graphql/analysis/ast/field_usage.rb +0 -55
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -23
- data/lib/graphql/analysis/ast/max_query_depth.rb +0 -22
- data/lib/graphql/analysis/ast/query_complexity.rb +0 -230
- data/lib/graphql/analysis/ast/query_depth.rb +0 -56
- data/lib/graphql/analysis/ast/visitor.rb +0 -269
- data/lib/graphql/analysis/ast.rb +0 -91
- 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/inspect_result.rb +0 -50
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backtrace/tracer.rb +0 -81
- data/lib/graphql/backwards_compatibility.rb +0 -61
- data/lib/graphql/base_type.rb +0 -232
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -255
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -55
- data/lib/graphql/deprecation.rb +0 -9
- 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/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/filter.rb +0 -53
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -260
- data/lib/graphql/language/parser.y +0 -550
- data/lib/graphql/language/token.rb +0 -34
- 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/base_64_bp.rb +0 -26
- 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/invalid_type_error.rb +0 -7
- 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/null_mask.rb +0 -11
- 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/static_validation/rules/subscription_root_exists.rb +0 -17
- data/lib/graphql/static_validation/type_stack.rb +0 -216
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/instrumentation.rb +0 -79
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/default_relay.rb +0 -31
- 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
@@ -1,84 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module GraphQL
|
3
4
|
class Query
|
4
5
|
# Expose some query-specific info to field resolve functions.
|
5
6
|
# It delegates `[]` to the hash that's passed to `GraphQL::Query#initialize`.
|
6
7
|
class Context
|
7
|
-
module SharedMethods
|
8
|
-
# @return [Object] The target for field resolution
|
9
|
-
attr_accessor :object
|
10
|
-
|
11
|
-
# @return [Hash, Array, String, Integer, Float, Boolean, nil] The resolved value for this field
|
12
|
-
attr_reader :value
|
13
|
-
|
14
|
-
# @return [Boolean] were any fields of this selection skipped?
|
15
|
-
attr_reader :skipped
|
16
|
-
alias :skipped? :skipped
|
17
|
-
|
18
|
-
# @api private
|
19
|
-
attr_writer :skipped
|
20
|
-
|
21
|
-
# Return this value to tell the runtime
|
22
|
-
# to exclude this field from the response altogether
|
23
|
-
def skip
|
24
|
-
GraphQL::Execution::Execute::SKIP
|
25
|
-
end
|
26
|
-
|
27
|
-
# @return [Boolean] True if this selection has been nullified by a null child
|
28
|
-
def invalid_null?
|
29
|
-
@invalid_null
|
30
|
-
end
|
31
|
-
|
32
|
-
# Remove this child from the result value
|
33
|
-
# (used for null propagation and skip)
|
34
|
-
# @api private
|
35
|
-
def delete_child(child_ctx)
|
36
|
-
@value.delete(child_ctx.key)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Create a child context to use for `key`
|
40
|
-
# @param key [String, Integer] The key in the response (name or index)
|
41
|
-
# @param irep_node [InternalRepresentation::Node] The node being evaluated
|
42
|
-
# @api private
|
43
|
-
def spawn_child(key:, irep_node:, object:)
|
44
|
-
FieldResolutionContext.new(
|
45
|
-
@context,
|
46
|
-
key,
|
47
|
-
irep_node,
|
48
|
-
self,
|
49
|
-
object
|
50
|
-
)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Add error at query-level.
|
54
|
-
# @param error [GraphQL::ExecutionError] an execution error
|
55
|
-
# @return [void]
|
56
|
-
def add_error(error)
|
57
|
-
if !error.is_a?(ExecutionError)
|
58
|
-
raise TypeError, "expected error to be a ExecutionError, but was #{error.class}"
|
59
|
-
end
|
60
|
-
errors << error
|
61
|
-
nil
|
62
|
-
end
|
63
|
-
|
64
|
-
# @example Print the GraphQL backtrace during field resolution
|
65
|
-
# puts ctx.backtrace
|
66
|
-
#
|
67
|
-
# @return [GraphQL::Backtrace] The backtrace for this point in query execution
|
68
|
-
def backtrace
|
69
|
-
GraphQL::Backtrace.new(self)
|
70
|
-
end
|
71
|
-
|
72
|
-
def execution_errors
|
73
|
-
@execution_errors ||= ExecutionErrors.new(self)
|
74
|
-
end
|
75
|
-
|
76
|
-
def lookahead
|
77
|
-
ast_nodes = irep_node.ast_nodes
|
78
|
-
field = irep_node.definition.metadata[:type_class] || raise("Lookahead is only compatible with class-based schemas")
|
79
|
-
Execution::Lookahead.new(query: query, ast_nodes: ast_nodes, field: field)
|
80
|
-
end
|
81
|
-
end
|
82
8
|
|
83
9
|
class ExecutionErrors
|
84
10
|
def initialize(ctx)
|
@@ -102,30 +28,8 @@ module GraphQL
|
|
102
28
|
alias :push :add
|
103
29
|
end
|
104
30
|
|
105
|
-
include SharedMethods
|
106
31
|
extend Forwardable
|
107
32
|
|
108
|
-
attr_reader :execution_strategy
|
109
|
-
# `strategy` is required by GraphQL::Batch
|
110
|
-
alias_method :strategy, :execution_strategy
|
111
|
-
|
112
|
-
def execution_strategy=(new_strategy)
|
113
|
-
# GraphQL::Batch re-assigns this value but it was previously not used
|
114
|
-
# (ExecutionContext#strategy was used instead)
|
115
|
-
# now it _is_ used, but it breaks GraphQL::Batch tests
|
116
|
-
@execution_strategy ||= new_strategy
|
117
|
-
end
|
118
|
-
|
119
|
-
# @return [GraphQL::InternalRepresentation::Node] The internal representation for this query node
|
120
|
-
def irep_node
|
121
|
-
@irep_node ||= query.irep_selection
|
122
|
-
end
|
123
|
-
|
124
|
-
# @return [GraphQL::Language::Nodes::Field] The AST node for the currently-executing field
|
125
|
-
def ast_node
|
126
|
-
@irep_node.ast_node
|
127
|
-
end
|
128
|
-
|
129
33
|
# @return [Array<GraphQL::ExecutionError>] errors returned during execution
|
130
34
|
attr_reader :errors
|
131
35
|
|
@@ -135,27 +39,21 @@ module GraphQL
|
|
135
39
|
# @return [GraphQL::Schema]
|
136
40
|
attr_reader :schema
|
137
41
|
|
138
|
-
# @return [Array<String, Integer>] The current position in the result
|
139
|
-
attr_reader :path
|
140
|
-
|
141
42
|
# Make a new context which delegates key lookup to `values`
|
142
43
|
# @param query [GraphQL::Query] the query who owns this context
|
143
44
|
# @param values [Hash] A hash of arbitrary values which will be accessible at query-time
|
144
|
-
def initialize(query:, schema: query.schema, values
|
45
|
+
def initialize(query:, schema: query.schema, values:)
|
145
46
|
@query = query
|
146
47
|
@schema = schema
|
147
48
|
@provided_values = values || {}
|
148
|
-
@object = object
|
149
49
|
# Namespaced storage, where user-provided values are in `nil` namespace:
|
150
50
|
@storage = Hash.new { |h, k| h[k] = {} }
|
151
51
|
@storage[nil] = @provided_values
|
152
52
|
@errors = []
|
153
|
-
@
|
154
|
-
@value = nil
|
155
|
-
@context = self # for SharedMethods
|
156
|
-
@scoped_context = {}
|
53
|
+
@scoped_context = ScopedContext.new(self)
|
157
54
|
end
|
158
55
|
|
56
|
+
# Modify this hash to return extensions to client.
|
159
57
|
# @return [Hash] A hash that will be added verbatim to the result hash, as `"extensions" => { ... }`
|
160
58
|
def response_extensions
|
161
59
|
namespace(:__query_result_extensions__)
|
@@ -172,21 +70,85 @@ module GraphQL
|
|
172
70
|
attr_writer :value
|
173
71
|
|
174
72
|
# @api private
|
175
|
-
|
73
|
+
attr_reader :scoped_context
|
176
74
|
|
177
75
|
def []=(key, value)
|
178
76
|
@provided_values[key] = value
|
179
77
|
end
|
180
78
|
|
181
|
-
def_delegators :@query, :trace
|
79
|
+
def_delegators :@query, :trace
|
80
|
+
|
81
|
+
def types
|
82
|
+
@types ||= @query.types
|
83
|
+
end
|
84
|
+
|
85
|
+
attr_writer :types
|
182
86
|
|
87
|
+
RUNTIME_METADATA_KEYS = Set.new([:current_object, :current_arguments, :current_field, :current_path]).freeze
|
183
88
|
# @!method []=(key, value)
|
184
89
|
# Reassign `key` to the hash passed to {Schema#execute} as `context:`
|
185
90
|
|
186
91
|
# Lookup `key` from the hash passed to {Schema#execute} as `context:`
|
187
92
|
def [](key)
|
188
|
-
|
189
|
-
|
93
|
+
if @scoped_context.key?(key)
|
94
|
+
@scoped_context[key]
|
95
|
+
elsif @provided_values.key?(key)
|
96
|
+
@provided_values[key]
|
97
|
+
elsif RUNTIME_METADATA_KEYS.include?(key)
|
98
|
+
if key == :current_path
|
99
|
+
current_path
|
100
|
+
else
|
101
|
+
(current_runtime_state = Fiber[:__graphql_runtime_info]) &&
|
102
|
+
(query_runtime_state = current_runtime_state[@query]) &&
|
103
|
+
(query_runtime_state.public_send(key))
|
104
|
+
end
|
105
|
+
else
|
106
|
+
# not found
|
107
|
+
nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Return this value to tell the runtime
|
112
|
+
# to exclude this field from the response altogether
|
113
|
+
def skip
|
114
|
+
GraphQL::Execution::SKIP
|
115
|
+
end
|
116
|
+
|
117
|
+
# Add error at query-level.
|
118
|
+
# @param error [GraphQL::ExecutionError] an execution error
|
119
|
+
# @return [void]
|
120
|
+
def add_error(error)
|
121
|
+
if !error.is_a?(ExecutionError)
|
122
|
+
raise TypeError, "expected error to be a ExecutionError, but was #{error.class}"
|
123
|
+
end
|
124
|
+
errors << error
|
125
|
+
nil
|
126
|
+
end
|
127
|
+
|
128
|
+
# @example Print the GraphQL backtrace during field resolution
|
129
|
+
# puts ctx.backtrace
|
130
|
+
#
|
131
|
+
# @return [GraphQL::Backtrace] The backtrace for this point in query execution
|
132
|
+
def backtrace
|
133
|
+
GraphQL::Backtrace.new(self)
|
134
|
+
end
|
135
|
+
|
136
|
+
def execution_errors
|
137
|
+
@execution_errors ||= ExecutionErrors.new(self)
|
138
|
+
end
|
139
|
+
|
140
|
+
def current_path
|
141
|
+
current_runtime_state = Fiber[:__graphql_runtime_info]
|
142
|
+
query_runtime_state = current_runtime_state && current_runtime_state[@query]
|
143
|
+
|
144
|
+
path = query_runtime_state &&
|
145
|
+
(result = query_runtime_state.current_result) &&
|
146
|
+
(result.path)
|
147
|
+
if path && (rn = query_runtime_state.current_result_name)
|
148
|
+
path = path.dup
|
149
|
+
path.push(rn)
|
150
|
+
end
|
151
|
+
path
|
190
152
|
end
|
191
153
|
|
192
154
|
def delete(key)
|
@@ -200,8 +162,12 @@ module GraphQL
|
|
200
162
|
UNSPECIFIED_FETCH_DEFAULT = Object.new
|
201
163
|
|
202
164
|
def fetch(key, default = UNSPECIFIED_FETCH_DEFAULT)
|
203
|
-
if
|
204
|
-
|
165
|
+
if RUNTIME_METADATA_KEYS.include?(key)
|
166
|
+
(runtime = Fiber[:__graphql_runtime_info]) &&
|
167
|
+
(query_runtime_state = runtime[@query]) &&
|
168
|
+
(query_runtime_state.public_send(key))
|
169
|
+
elsif @scoped_context.key?(key)
|
170
|
+
scoped_context[key]
|
205
171
|
elsif @provided_values.key?(key)
|
206
172
|
@provided_values[key]
|
207
173
|
elsif default != UNSPECIFIED_FETCH_DEFAULT
|
@@ -214,12 +180,30 @@ module GraphQL
|
|
214
180
|
end
|
215
181
|
|
216
182
|
def dig(key, *other_keys)
|
217
|
-
|
183
|
+
if RUNTIME_METADATA_KEYS.include?(key)
|
184
|
+
(current_runtime_state = Fiber[:__graphql_runtime_info]) &&
|
185
|
+
(query_runtime_state = current_runtime_state[@query]) &&
|
186
|
+
(obj = query_runtime_state.public_send(key)) &&
|
187
|
+
if other_keys.empty?
|
188
|
+
obj
|
189
|
+
else
|
190
|
+
obj.dig(*other_keys)
|
191
|
+
end
|
192
|
+
elsif @scoped_context.key?(key)
|
193
|
+
@scoped_context.dig(key, *other_keys)
|
194
|
+
else
|
195
|
+
@provided_values.dig(key, *other_keys)
|
196
|
+
end
|
218
197
|
end
|
219
198
|
|
220
199
|
def to_h
|
221
|
-
|
200
|
+
if (current_scoped_context = @scoped_context.merged_context)
|
201
|
+
@provided_values.merge(current_scoped_context)
|
202
|
+
else
|
203
|
+
@provided_values
|
204
|
+
end
|
222
205
|
end
|
206
|
+
|
223
207
|
alias :to_hash :to_h
|
224
208
|
|
225
209
|
def key?(key)
|
@@ -238,7 +222,11 @@ module GraphQL
|
|
238
222
|
# @param ns [Object] a usage-specific namespace identifier
|
239
223
|
# @return [Hash] namespaced storage
|
240
224
|
def namespace(ns)
|
241
|
-
|
225
|
+
if ns == :interpreter
|
226
|
+
self
|
227
|
+
else
|
228
|
+
@storage[ns]
|
229
|
+
end
|
242
230
|
end
|
243
231
|
|
244
232
|
# @return [Boolean] true if this namespace was accessed before
|
@@ -246,18 +234,16 @@ module GraphQL
|
|
246
234
|
@storage.key?(ns)
|
247
235
|
end
|
248
236
|
|
249
|
-
def
|
250
|
-
|
237
|
+
def logger
|
238
|
+
@query && @query.logger
|
251
239
|
end
|
252
240
|
|
253
|
-
|
254
|
-
|
255
|
-
@invalid_null = true
|
256
|
-
@value = nil
|
241
|
+
def inspect
|
242
|
+
"#<#{self.class} ...>"
|
257
243
|
end
|
258
244
|
|
259
245
|
def scoped_merge!(hash)
|
260
|
-
@scoped_context
|
246
|
+
@scoped_context.merge!(hash)
|
261
247
|
end
|
262
248
|
|
263
249
|
def scoped_set!(key, value)
|
@@ -265,117 +251,37 @@ module GraphQL
|
|
265
251
|
nil
|
266
252
|
end
|
267
253
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
@irep_node = irep_node
|
282
|
-
@field = irep_node.definition
|
283
|
-
@parent_type = irep_node.owner_type
|
284
|
-
@type = field.type
|
285
|
-
# This is needed constantly, so set it ahead of time:
|
286
|
-
@query = context.query
|
287
|
-
@schema = context.schema
|
288
|
-
@tracers = @query.tracers
|
289
|
-
# This hack flag is required by ConnectionResolve
|
290
|
-
@wrapped_connection = false
|
291
|
-
@wrapped_object = false
|
292
|
-
end
|
293
|
-
|
294
|
-
# @api private
|
295
|
-
attr_accessor :wrapped_connection, :wrapped_object
|
254
|
+
# Use this when you need to do a scoped set _inside_ a lazy-loaded (or batch-loaded)
|
255
|
+
# block of code.
|
256
|
+
#
|
257
|
+
# @example using scoped context inside a promise
|
258
|
+
# scoped_ctx = context.scoped
|
259
|
+
# SomeBatchLoader.load(...).then do |thing|
|
260
|
+
# # use a scoped_ctx which was created _before_ dataloading:
|
261
|
+
# scoped_ctx.set!(:thing, thing)
|
262
|
+
# end
|
263
|
+
# @return [Context::Scoped]
|
264
|
+
def scoped
|
265
|
+
Scoped.new(@scoped_context, current_path)
|
266
|
+
end
|
296
267
|
|
297
|
-
|
298
|
-
|
268
|
+
class Scoped
|
269
|
+
def initialize(scoped_context, path)
|
270
|
+
@path = path
|
271
|
+
@scoped_context = scoped_context
|
299
272
|
end
|
300
273
|
|
301
|
-
|
302
|
-
|
303
|
-
:spawn, :warden, :errors,
|
304
|
-
:execution_strategy, :strategy, :interpreter?
|
305
|
-
|
306
|
-
# @return [GraphQL::Language::Nodes::Field] The AST node for the currently-executing field
|
307
|
-
def ast_node
|
308
|
-
@irep_node.ast_node
|
274
|
+
def merge!(hash)
|
275
|
+
@scoped_context.merge!(hash, at: @path)
|
309
276
|
end
|
310
277
|
|
311
|
-
|
312
|
-
|
313
|
-
# @return [void]
|
314
|
-
def add_error(error)
|
315
|
-
super
|
316
|
-
error.ast_node ||= irep_node.ast_node
|
317
|
-
error.path ||= path
|
278
|
+
def set!(key, value)
|
279
|
+
@scoped_context.merge!({ key => value }, at: @path)
|
318
280
|
nil
|
319
281
|
end
|
320
|
-
|
321
|
-
def inspect
|
322
|
-
"#<GraphQL Context @ #{irep_node.owner_type.name}.#{field.name}>"
|
323
|
-
end
|
324
|
-
|
325
|
-
# Set a new value for this field in the response.
|
326
|
-
# It may be updated after resolving a {Lazy}.
|
327
|
-
# If it is {Execute::PROPAGATE_NULL}, tell the owner to propagate null.
|
328
|
-
# If it's {Execute::Execution::SKIP}, remove this field result from its parent
|
329
|
-
# @param new_value [Any] The GraphQL-ready value
|
330
|
-
# @api private
|
331
|
-
def value=(new_value)
|
332
|
-
case new_value
|
333
|
-
when GraphQL::Execution::Execute::PROPAGATE_NULL, nil
|
334
|
-
@invalid_null = true
|
335
|
-
@value = nil
|
336
|
-
if @type.kind.non_null?
|
337
|
-
@parent.received_null_child
|
338
|
-
end
|
339
|
-
when GraphQL::Execution::Execute::SKIP
|
340
|
-
@parent.skipped = true
|
341
|
-
@parent.delete_child(self)
|
342
|
-
else
|
343
|
-
@value = new_value
|
344
|
-
end
|
345
|
-
end
|
346
|
-
|
347
|
-
protected
|
348
|
-
|
349
|
-
def received_null_child
|
350
|
-
case @value
|
351
|
-
when Hash
|
352
|
-
self.value = GraphQL::Execution::Execute::PROPAGATE_NULL
|
353
|
-
when Array
|
354
|
-
if list_of_non_null_items?(@type)
|
355
|
-
self.value = GraphQL::Execution::Execute::PROPAGATE_NULL
|
356
|
-
end
|
357
|
-
when nil
|
358
|
-
# TODO This is a hack
|
359
|
-
# It was already nulled out but it's getting reassigned
|
360
|
-
else
|
361
|
-
raise "Unexpected value for received_null_child (#{self.value.class}): #{value}"
|
362
|
-
end
|
363
|
-
end
|
364
|
-
|
365
|
-
private
|
366
|
-
|
367
|
-
def list_of_non_null_items?(type)
|
368
|
-
case type
|
369
|
-
when GraphQL::NonNullType
|
370
|
-
# Unwrap [T]!
|
371
|
-
list_of_non_null_items?(type.of_type)
|
372
|
-
when GraphQL::ListType
|
373
|
-
type.of_type.is_a?(GraphQL::NonNullType)
|
374
|
-
else
|
375
|
-
raise "Unexpected list_of_non_null_items check: #{type}"
|
376
|
-
end
|
377
|
-
end
|
378
282
|
end
|
379
283
|
end
|
380
284
|
end
|
381
285
|
end
|
286
|
+
|
287
|
+
require "graphql/query/context/scoped_context"
|
@@ -1,54 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require "graphql/query/context"
|
2
3
|
module GraphQL
|
3
4
|
class Query
|
4
5
|
# This object can be `ctx` in places where there is no query
|
5
|
-
class NullContext
|
6
|
-
|
7
|
-
def visible_field?(field, ctx); true; end
|
8
|
-
def visible_argument?(arg, ctx); true; end
|
9
|
-
def visible_type?(type, ctx); true; end
|
10
|
-
def visible_enum_value?(ev, ctx); true; end
|
11
|
-
def visible_type_membership?(tm, ctx); true; end
|
12
|
-
end
|
6
|
+
class NullContext < Context
|
7
|
+
include Singleton
|
13
8
|
|
14
9
|
class NullQuery
|
15
|
-
def
|
16
|
-
yield
|
10
|
+
def after_lazy(value)
|
11
|
+
yield(value)
|
17
12
|
end
|
18
13
|
end
|
19
14
|
|
20
15
|
class NullSchema < GraphQL::Schema
|
21
16
|
end
|
22
17
|
|
18
|
+
extend Forwardable
|
19
|
+
|
23
20
|
attr_reader :schema, :query, :warden, :dataloader
|
21
|
+
def_delegators GraphQL::EmptyObjects::EMPTY_HASH, :[], :fetch, :dig, :key?, :to_h
|
24
22
|
|
25
23
|
def initialize
|
26
24
|
@query = NullQuery.new
|
27
25
|
@dataloader = GraphQL::Dataloader::NullDataloader.new
|
28
26
|
@schema = NullSchema
|
29
|
-
@warden = NullWarden.new(
|
30
|
-
|
31
|
-
|
32
|
-
schema: @schema,
|
33
|
-
)
|
34
|
-
end
|
35
|
-
|
36
|
-
def [](key); end
|
37
|
-
|
38
|
-
def interpreter?
|
39
|
-
true
|
40
|
-
end
|
41
|
-
|
42
|
-
class << self
|
43
|
-
extend Forwardable
|
44
|
-
|
45
|
-
def [](key); end
|
46
|
-
|
47
|
-
def instance
|
48
|
-
@instance ||= self.new
|
49
|
-
end
|
50
|
-
|
51
|
-
def_delegators :instance, :query, :warden, :schema, :interpreter?, :dataloader
|
27
|
+
@warden = Schema::Warden::NullWarden.new(context: self, schema: @schema)
|
28
|
+
@types = @warden.visibility_profile
|
29
|
+
freeze
|
52
30
|
end
|
53
31
|
end
|
54
32
|
end
|