graphql 2.6.9 → 2.6.14
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/.rdoc_options +4 -0
- data/lib/generators/graphql/core.rb +1 -0
- data/lib/generators/graphql/detailed_trace_generator.rb +1 -0
- data/lib/generators/graphql/enum_generator.rb +1 -0
- data/lib/generators/graphql/field_extractor.rb +1 -0
- data/lib/generators/graphql/input_generator.rb +1 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +1 -0
- data/lib/generators/graphql/install_generator.rb +1 -0
- data/lib/generators/graphql/interface_generator.rb +1 -0
- data/lib/generators/graphql/loader_generator.rb +8 -2
- data/lib/generators/graphql/mutation_create_generator.rb +8 -2
- data/lib/generators/graphql/mutation_delete_generator.rb +8 -2
- data/lib/generators/graphql/mutation_generator.rb +8 -2
- data/lib/generators/graphql/mutation_update_generator.rb +8 -2
- data/lib/generators/graphql/object_generator.rb +1 -0
- data/lib/generators/graphql/orm_mutations_base.rb +8 -2
- data/lib/generators/graphql/relay.rb +1 -0
- data/lib/generators/graphql/relay_generator.rb +1 -0
- data/lib/generators/graphql/scalar_generator.rb +1 -0
- data/lib/generators/graphql/type_generator.rb +38 -8
- data/lib/generators/graphql/union_generator.rb +1 -0
- data/lib/graphql/analysis/analyzer.rb +35 -9
- data/lib/graphql/analysis/field_usage.rb +1 -0
- data/lib/graphql/analysis/max_query_complexity.rb +3 -2
- data/lib/graphql/analysis/max_query_depth.rb +1 -0
- data/lib/graphql/analysis/query_complexity.rb +57 -20
- data/lib/graphql/analysis/query_depth.rb +17 -12
- data/lib/graphql/analysis/visitor.rb +79 -16
- data/lib/graphql/analysis.rb +23 -6
- data/lib/graphql/analysis_error.rb +1 -0
- data/lib/graphql/autoload.rb +30 -7
- data/lib/graphql/backtrace/table.rb +21 -5
- data/lib/graphql/backtrace/traced_error.rb +8 -3
- data/lib/graphql/backtrace.rb +14 -9
- data/lib/graphql/coercion_error.rb +1 -0
- data/lib/graphql/current.rb +44 -19
- data/lib/graphql/dashboard/application_controller.rb +1 -0
- data/lib/graphql/dashboard/detailed_traces.rb +1 -0
- data/lib/graphql/dashboard/installable.rb +1 -0
- data/lib/graphql/dashboard/landings_controller.rb +1 -0
- data/lib/graphql/dashboard/limiters.rb +1 -0
- data/lib/graphql/dashboard/operation_store.rb +1 -0
- data/lib/graphql/dashboard/statics_controller.rb +1 -0
- data/lib/graphql/dashboard/subscriptions.rb +1 -0
- data/lib/graphql/dashboard.rb +36 -22
- data/lib/graphql/dataloader/active_record_association_source.rb +1 -0
- data/lib/graphql/dataloader/active_record_source.rb +1 -0
- data/lib/graphql/dataloader/async_dataloader.rb +45 -16
- data/lib/graphql/dataloader/null_dataloader.rb +4 -3
- data/lib/graphql/dataloader/request.rb +8 -2
- data/lib/graphql/dataloader/request_all.rb +8 -2
- data/lib/graphql/dataloader/source.rb +127 -35
- data/lib/graphql/dataloader.rb +98 -44
- data/lib/graphql/date_encoding_error.rb +2 -1
- data/lib/graphql/dig.rb +12 -3
- data/lib/graphql/duration_encoding_error.rb +2 -1
- data/lib/graphql/execution/directive_checks.rb +8 -3
- data/lib/graphql/execution/errors.rb +20 -6
- data/lib/graphql/execution/field_resolve_step.rb +288 -168
- data/lib/graphql/execution/finalize.rb +12 -6
- data/lib/graphql/execution/input_values.rb +5 -2
- data/lib/graphql/execution/interpreter/argument_value.rb +17 -5
- data/lib/graphql/execution/interpreter/arguments.rb +24 -9
- data/lib/graphql/execution/interpreter/arguments_cache.rb +2 -1
- data/lib/graphql/execution/interpreter/execution_errors.rb +1 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +1 -0
- data/lib/graphql/execution/interpreter/resolve.rb +18 -8
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +4 -1
- data/lib/graphql/execution/interpreter/runtime.rb +72 -25
- data/lib/graphql/execution/interpreter.rb +18 -7
- data/lib/graphql/execution/lazy/lazy_method_map.rb +21 -8
- data/lib/graphql/execution/lazy.rb +34 -10
- data/lib/graphql/execution/load_argument_step.rb +1 -0
- data/lib/graphql/execution/lookahead.rb +137 -54
- data/lib/graphql/execution/multiplex.rb +4 -4
- data/lib/graphql/execution/next.rb +7 -0
- data/lib/graphql/execution/prepare_object_step.rb +38 -13
- data/lib/graphql/execution/resolve_type_step.rb +2 -1
- data/lib/graphql/execution/runner.rb +32 -15
- data/lib/graphql/execution/selections_step.rb +3 -2
- data/lib/graphql/execution.rb +2 -2
- data/lib/graphql/execution_error.rb +19 -10
- data/lib/graphql/float_decoding_error.rb +14 -0
- data/lib/graphql/float_encoding_error.rb +33 -0
- data/lib/graphql/integer_decoding_error.rb +2 -1
- data/lib/graphql/integer_encoding_error.rb +8 -3
- data/lib/graphql/introspection/base_object.rb +3 -1
- data/lib/graphql/introspection/directive_location_enum.rb +1 -0
- data/lib/graphql/introspection/directive_type.rb +1 -0
- data/lib/graphql/introspection/dynamic_fields.rb +1 -0
- data/lib/graphql/introspection/entry_points.rb +1 -0
- data/lib/graphql/introspection/enum_value_type.rb +1 -0
- data/lib/graphql/introspection/field_type.rb +1 -0
- data/lib/graphql/introspection/input_value_type.rb +1 -0
- data/lib/graphql/introspection/introspection_query.rb +1 -0
- data/lib/graphql/introspection/schema_type.rb +1 -0
- data/lib/graphql/introspection/type_kind_enum.rb +1 -0
- data/lib/graphql/introspection/type_type.rb +1 -0
- data/lib/graphql/introspection.rb +1 -0
- data/lib/graphql/invalid_name_error.rb +1 -0
- data/lib/graphql/invalid_null_error.rb +19 -6
- data/lib/graphql/language/block_string.rb +2 -1
- data/lib/graphql/language/cache.rb +10 -4
- data/lib/graphql/language/comment.rb +1 -0
- data/lib/graphql/language/definition_slice.rb +1 -0
- data/lib/graphql/language/document_from_schema_definition.rb +9 -10
- data/lib/graphql/language/generation.rb +23 -9
- data/lib/graphql/language/lexer.rb +16 -8
- data/lib/graphql/language/nodes.rb +2094 -419
- data/lib/graphql/language/parser.rb +29 -18
- data/lib/graphql/language/printer.rb +31 -16
- data/lib/graphql/language/sanitized_printer.rb +16 -5
- data/lib/graphql/language/static_visitor.rb +19 -4
- data/lib/graphql/language/visitor.rb +51 -29
- data/lib/graphql/language.rb +15 -9
- data/lib/graphql/load_application_object_failed_error.rb +14 -5
- data/lib/graphql/name_validator.rb +1 -0
- data/lib/graphql/pagination/active_record_relation_connection.rb +1 -0
- data/lib/graphql/pagination/array_connection.rb +24 -6
- data/lib/graphql/pagination/connection.rb +178 -48
- data/lib/graphql/pagination/connections.rb +21 -14
- data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -0
- data/lib/graphql/pagination/relation_connection.rb +164 -27
- data/lib/graphql/pagination/sequel_dataset_connection.rb +1 -0
- data/lib/graphql/pagination.rb +1 -0
- data/lib/graphql/parse_error.rb +1 -0
- data/lib/graphql/query/context/scoped_context.rb +2 -1
- data/lib/graphql/query/context.rb +106 -35
- data/lib/graphql/query/fingerprint.rb +15 -7
- data/lib/graphql/query/input_validation_result.rb +1 -0
- data/lib/graphql/query/null_context.rb +1 -0
- data/lib/graphql/query/partial.rb +28 -16
- data/lib/graphql/query/result.rb +15 -5
- data/lib/graphql/query/validation_pipeline.rb +16 -6
- data/lib/graphql/query/variable_validation_error.rb +17 -1
- data/lib/graphql/query/variables.rb +9 -2
- data/lib/graphql/query.rb +195 -50
- data/lib/graphql/railtie.rb +7 -3
- data/lib/graphql/rake_task/validate.rb +72 -17
- data/lib/graphql/rake_task.rb +55 -23
- data/lib/graphql/relay/range_add.rb +32 -21
- data/lib/graphql/relay.rb +1 -0
- data/lib/graphql/rubocop/graphql/base_cop.rb +1 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +9 -6
- data/lib/graphql/rubocop/graphql/default_required_true.rb +9 -6
- data/lib/graphql/rubocop/graphql/field_type_in_block.rb +12 -8
- data/lib/graphql/rubocop/graphql/root_types_in_block.rb +9 -5
- data/lib/graphql/rubocop.rb +1 -0
- data/lib/graphql/runtime_error.rb +1 -0
- data/lib/graphql/runtime_type_error.rb +1 -0
- data/lib/graphql/schema/addition.rb +69 -50
- data/lib/graphql/schema/always_visible.rb +1 -0
- data/lib/graphql/schema/argument.rb +279 -45
- data/lib/graphql/schema/base_64_encoder.rb +2 -2
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +2 -2
- data/lib/graphql/schema/build_from_definition.rb +507 -178
- data/lib/graphql/schema/built_in_types.rb +1 -0
- data/lib/graphql/schema/directive/deprecated.rb +1 -0
- data/lib/graphql/schema/directive/feature.rb +39 -22
- data/lib/graphql/schema/directive/flagged.rb +6 -1
- data/lib/graphql/schema/directive/include.rb +1 -0
- data/lib/graphql/schema/directive/one_of.rb +1 -0
- data/lib/graphql/schema/directive/skip.rb +1 -0
- data/lib/graphql/schema/directive/specified_by.rb +1 -0
- data/lib/graphql/schema/directive/transform.rb +17 -8
- data/lib/graphql/schema/directive.rb +33 -7
- data/lib/graphql/schema/enum.rb +99 -38
- data/lib/graphql/schema/enum_value.rb +21 -13
- data/lib/graphql/schema/field/connection_extension.rb +10 -2
- data/lib/graphql/schema/field/scope_extension.rb +1 -0
- data/lib/graphql/schema/field.rb +622 -110
- data/lib/graphql/schema/field_extension.rb +89 -34
- data/lib/graphql/schema/find_inherited_value.rb +5 -3
- data/lib/graphql/schema/finder.rb +22 -8
- data/lib/graphql/schema/has_single_input_argument.rb +39 -6
- data/lib/graphql/schema/input_object.rb +40 -13
- data/lib/graphql/schema/interface.rb +33 -17
- data/lib/graphql/schema/introspection_system.rb +7 -3
- data/lib/graphql/schema/late_bound_type.rb +2 -2
- data/lib/graphql/schema/list.rb +15 -4
- data/lib/graphql/schema/loader.rb +23 -12
- data/lib/graphql/schema/member/base_dsl_methods.rb +58 -12
- data/lib/graphql/schema/member/build_type.rb +21 -7
- data/lib/graphql/schema/member/graphql_type_names.rb +10 -6
- data/lib/graphql/schema/member/has_arguments.rb +112 -49
- data/lib/graphql/schema/member/has_ast_node.rb +1 -0
- data/lib/graphql/schema/member/has_authorization.rb +5 -0
- data/lib/graphql/schema/member/has_dataloader.rb +91 -34
- data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -2
- data/lib/graphql/schema/member/has_directives.rb +45 -11
- data/lib/graphql/schema/member/has_fields.rb +151 -70
- data/lib/graphql/schema/member/has_interfaces.rb +8 -2
- data/lib/graphql/schema/member/has_path.rb +14 -5
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +1 -0
- data/lib/graphql/schema/member/has_validators.rb +19 -4
- data/lib/graphql/schema/member/relay_shortcuts.rb +10 -2
- data/lib/graphql/schema/member/scoped.rb +14 -3
- data/lib/graphql/schema/member/type_system_helpers.rb +36 -6
- data/lib/graphql/schema/member/validates_input.rb +1 -0
- data/lib/graphql/schema/member.rb +9 -2
- data/lib/graphql/schema/mutation.rb +50 -46
- data/lib/graphql/schema/non_null.rb +21 -5
- data/lib/graphql/schema/object.rb +44 -15
- data/lib/graphql/schema/printer.rb +52 -31
- data/lib/graphql/schema/ractor_shareable.rb +6 -2
- data/lib/graphql/schema/relay_classic_mutation.rb +3 -3
- data/lib/graphql/schema/resolver/has_payload_type.rb +29 -7
- data/lib/graphql/schema/resolver.rb +156 -45
- data/lib/graphql/schema/scalar.rb +1 -0
- data/lib/graphql/schema/subscription.rb +67 -28
- data/lib/graphql/schema/timeout.rb +65 -25
- data/lib/graphql/schema/type_expression.rb +14 -5
- data/lib/graphql/schema/type_membership.rb +29 -10
- data/lib/graphql/schema/union.rb +4 -2
- data/lib/graphql/schema/unique_within_type.rb +24 -5
- data/lib/graphql/schema/validator/all_validator.rb +17 -9
- data/lib/graphql/schema/validator/allow_blank_validator.rb +8 -2
- data/lib/graphql/schema/validator/allow_null_validator.rb +8 -2
- data/lib/graphql/schema/validator/exclusion_validator.rb +14 -5
- data/lib/graphql/schema/validator/format_validator.rb +21 -10
- data/lib/graphql/schema/validator/inclusion_validator.rb +15 -6
- data/lib/graphql/schema/validator/length_validator.rb +23 -12
- data/lib/graphql/schema/validator/numericality_validator.rb +29 -16
- data/lib/graphql/schema/validator/required_validator.rb +45 -31
- data/lib/graphql/schema/validator.rb +89 -25
- data/lib/graphql/schema/visibility/migration.rb +14 -7
- data/lib/graphql/schema/visibility/profile.rb +73 -19
- data/lib/graphql/schema/visibility/visit.rb +12 -10
- data/lib/graphql/schema/visibility.rb +24 -20
- data/lib/graphql/schema/warden.rb +117 -31
- data/lib/graphql/schema/wrapper.rb +4 -1
- data/lib/graphql/schema.rb +1052 -304
- data/lib/graphql/static_validation/all_rules.rb +2 -1
- data/lib/graphql/static_validation/base_visitor.rb +59 -9
- data/lib/graphql/static_validation/definition_dependencies.rb +27 -7
- data/lib/graphql/static_validation/error.rb +3 -0
- data/lib/graphql/static_validation/interpreter_visitor.rb +1 -0
- data/lib/graphql/static_validation/literal_validator.rb +1 -0
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +4 -0
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +1 -0
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +3 -0
- data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +1 -0
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -0
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +1 -0
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +3 -0
- data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +1 -0
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +3 -0
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +3 -0
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +9 -1
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +355 -157
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +14 -2
- data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +3 -0
- data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -0
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +3 -0
- data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +3 -0
- data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragments_are_named.rb +3 -0
- data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +3 -0
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +1 -0
- data/lib/graphql/static_validation/rules/fragments_are_used.rb +3 -0
- data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +1 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +3 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +1 -0
- data/lib/graphql/static_validation/rules/mutation_root_exists.rb +3 -0
- data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +1 -0
- data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +3 -0
- data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +1 -0
- data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +1 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +4 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +1 -0
- data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +3 -0
- data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +1 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +3 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +1 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -1
- data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +1 -0
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -0
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +1 -0
- data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +43 -5
- data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +1 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +3 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +1 -0
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +3 -0
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +1 -0
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +3 -0
- data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +1 -0
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +207 -51
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +1 -0
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +3 -0
- data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +1 -0
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +6 -3
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +1 -0
- data/lib/graphql/static_validation/validation_context.rb +3 -2
- data/lib/graphql/static_validation/validation_timeout_error.rb +1 -0
- data/lib/graphql/static_validation/validator.rb +41 -16
- data/lib/graphql/static_validation.rb +1 -0
- data/lib/graphql/string_encoding_error.rb +1 -0
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +85 -65
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +10 -4
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +1 -0
- data/lib/graphql/subscriptions/event.rb +25 -6
- data/lib/graphql/subscriptions/serialize.rb +89 -23
- data/lib/graphql/subscriptions.rb +172 -46
- data/lib/graphql/testing/helpers.rb +17 -4
- data/lib/graphql/testing/mock_action_cable.rb +55 -33
- data/lib/graphql/testing.rb +1 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +17 -9
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +2 -1
- data/lib/graphql/tracing/appoptics_trace.rb +2 -1
- data/lib/graphql/tracing/appoptics_tracing.rb +2 -1
- data/lib/graphql/tracing/appsignal_trace.rb +16 -7
- data/lib/graphql/tracing/appsignal_tracing.rb +7 -3
- data/lib/graphql/tracing/call_legacy_tracers.rb +1 -0
- data/lib/graphql/tracing/data_dog_trace.rb +17 -6
- data/lib/graphql/tracing/data_dog_tracing.rb +10 -3
- data/lib/graphql/tracing/detailed_trace/active_record_backend.rb +1 -0
- data/lib/graphql/tracing/detailed_trace/memory_backend.rb +1 -0
- data/lib/graphql/tracing/detailed_trace/redis_backend.rb +1 -0
- data/lib/graphql/tracing/detailed_trace.rb +105 -42
- data/lib/graphql/tracing/legacy_hooks_trace.rb +5 -0
- data/lib/graphql/tracing/legacy_trace.rb +1 -0
- data/lib/graphql/tracing/monitor_trace.rb +17 -11
- data/lib/graphql/tracing/new_relic_trace.rb +17 -8
- data/lib/graphql/tracing/new_relic_tracing.rb +7 -3
- data/lib/graphql/tracing/notifications_trace.rb +11 -8
- data/lib/graphql/tracing/notifications_tracing.rb +23 -7
- data/lib/graphql/tracing/null_trace.rb +1 -0
- data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +1 -0
- data/lib/graphql/tracing/perfetto_trace.rb +41 -19
- data/lib/graphql/tracing/platform_trace.rb +3 -1
- data/lib/graphql/tracing/platform_tracing.rb +16 -7
- data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +1 -0
- data/lib/graphql/tracing/prometheus_trace.rb +22 -13
- data/lib/graphql/tracing/prometheus_tracing.rb +1 -0
- data/lib/graphql/tracing/scout_trace.rb +10 -4
- data/lib/graphql/tracing/scout_tracing.rb +7 -3
- data/lib/graphql/tracing/sentry_trace.rb +25 -6
- data/lib/graphql/tracing/statsd_trace.rb +12 -6
- data/lib/graphql/tracing/statsd_tracing.rb +7 -1
- data/lib/graphql/tracing/trace.rb +231 -58
- data/lib/graphql/tracing.rb +25 -9
- data/lib/graphql/type_kinds.rb +2 -1
- data/lib/graphql/types/big_int.rb +1 -0
- data/lib/graphql/types/boolean.rb +1 -0
- data/lib/graphql/types/float.rb +19 -4
- data/lib/graphql/types/id.rb +1 -0
- data/lib/graphql/types/int.rb +2 -1
- data/lib/graphql/types/iso_8601_date.rb +21 -4
- data/lib/graphql/types/iso_8601_date_time.rb +33 -6
- data/lib/graphql/types/iso_8601_duration.rb +42 -9
- data/lib/graphql/types/json.rb +1 -0
- data/lib/graphql/types/relay/base_connection.rb +38 -32
- data/lib/graphql/types/relay/base_edge.rb +15 -9
- data/lib/graphql/types/relay/connection_behaviors.rb +19 -3
- data/lib/graphql/types/relay/edge_behaviors.rb +17 -4
- data/lib/graphql/types/relay/has_node_field.rb +6 -1
- data/lib/graphql/types/relay/has_nodes_field.rb +6 -1
- data/lib/graphql/types/relay/node.rb +1 -0
- data/lib/graphql/types/relay/node_behaviors.rb +5 -1
- data/lib/graphql/types/relay/page_info.rb +1 -0
- data/lib/graphql/types/relay/page_info_behaviors.rb +1 -0
- data/lib/graphql/types/relay.rb +4 -3
- data/lib/graphql/types/string.rb +1 -0
- data/lib/graphql/types.rb +1 -0
- data/lib/graphql/unauthorized_enum_value_error.rb +4 -1
- data/lib/graphql/unauthorized_error.rb +11 -4
- data/lib/graphql/unauthorized_field_error.rb +4 -1
- data/lib/graphql/unresolved_type_error.rb +16 -5
- data/lib/graphql/version.rb +2 -1
- data/lib/graphql.rb +39 -9
- data/readme.md +1 -1
- metadata +91 -5
- data/.yardopts +0 -5
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
class Schema
|
|
4
|
-
# You can use the result of
|
|
5
|
+
# You can use the result of [GraphQL::Introspection::INTROSPECTION_QUERY](rdoc-ref:GraphQL::Introspection::INTROSPECTION_QUERY)
|
|
5
6
|
# to make a schema. This schema is missing some important details like
|
|
6
7
|
# `resolve` functions, but it does include the full type system,
|
|
7
8
|
# so you can use it to validate queries.
|
|
8
9
|
#
|
|
9
|
-
#
|
|
10
|
+
# See [GraphQL::Schema.from_introspection](rdoc-ref:GraphQL::Schema.from_introspection) for a public API
|
|
10
11
|
module Loader
|
|
11
|
-
extend self
|
|
12
|
-
|
|
13
12
|
# Create schema with the result of an introspection query.
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
|
|
13
|
+
#
|
|
14
|
+
# **Parameters**
|
|
15
|
+
#
|
|
16
|
+
# - `introspection_result` (`Hash`) — A response from [GraphQL::Introspection::INTROSPECTION_QUERY](rdoc-ref:GraphQL::Introspection::INTROSPECTION_QUERY)
|
|
17
|
+
#
|
|
18
|
+
# **Returns**
|
|
19
|
+
#
|
|
20
|
+
# - `Class` — the schema described by `input`
|
|
21
|
+
#
|
|
22
|
+
# :call-seq:
|
|
23
|
+
# load(Hash introspection_result) -> Class
|
|
24
|
+
def self.load(introspection_result)
|
|
17
25
|
schema = introspection_result.fetch("data").fetch("__schema")
|
|
18
26
|
|
|
19
27
|
types = {}
|
|
20
|
-
type_resolver = ->(type) {
|
|
28
|
+
type_resolver = ->(type) { resolve_type_reference(types, type) }
|
|
21
29
|
|
|
22
30
|
schema.fetch("types").each do |type|
|
|
23
31
|
next if type.fetch("name").start_with?("__")
|
|
@@ -56,7 +64,7 @@ module GraphQL
|
|
|
56
64
|
class << self
|
|
57
65
|
private
|
|
58
66
|
|
|
59
|
-
def
|
|
67
|
+
def resolve_type_reference(types, type)
|
|
60
68
|
case kind = type.fetch("kind")
|
|
61
69
|
when "ENUM", "INTERFACE", "INPUT_OBJECT", "OBJECT", "SCALAR", "UNION"
|
|
62
70
|
type_name = type.fetch("name")
|
|
@@ -67,9 +75,9 @@ module GraphQL
|
|
|
67
75
|
type
|
|
68
76
|
end
|
|
69
77
|
when "LIST"
|
|
70
|
-
Schema::List.new(
|
|
78
|
+
Schema::List.new(resolve_type_reference(types, type.fetch("ofType")))
|
|
71
79
|
when "NON_NULL"
|
|
72
|
-
Schema::NonNull.new(
|
|
80
|
+
Schema::NonNull.new(resolve_type_reference(types, type.fetch("ofType")))
|
|
73
81
|
else
|
|
74
82
|
fail GraphQL::RequiredImplementationMissingError, "#{kind} not implemented"
|
|
75
83
|
end
|
|
@@ -113,6 +121,7 @@ module GraphQL
|
|
|
113
121
|
end
|
|
114
122
|
when "INTERFACE"
|
|
115
123
|
Module.new do
|
|
124
|
+
#: self as GraphQL::Schema::Member::interface_definition
|
|
116
125
|
include GraphQL::Schema::Interface
|
|
117
126
|
graphql_name(type["name"])
|
|
118
127
|
description(type["description"])
|
|
@@ -213,7 +222,9 @@ module GraphQL
|
|
|
213
222
|
dummy_query_ast = GraphQL.parse(dummy_query_str)
|
|
214
223
|
|
|
215
224
|
# Reach into the AST for the default value:
|
|
216
|
-
|
|
225
|
+
operation = dummy_query_ast.definitions.first #: as GraphQL::Language::Nodes::OperationDefinition
|
|
226
|
+
variable = operation.variables.first #: as !nil
|
|
227
|
+
input_value_ast = variable.default_value
|
|
217
228
|
|
|
218
229
|
kwargs[:default_value] = extract_default_value(default_value_str, input_value_ast)
|
|
219
230
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
|
|
3
4
|
require "graphql/schema/find_inherited_value"
|
|
4
5
|
|
|
@@ -6,17 +7,28 @@ module GraphQL
|
|
|
6
7
|
class Schema
|
|
7
8
|
class Member
|
|
8
9
|
# DSL methods shared by lots of things in the GraphQL Schema.
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
# See classes that extend this, eg [GraphQL::Schema::Object](rdoc-ref:GraphQL::Schema::Object)
|
|
11
|
+
#--
|
|
12
|
+
# @requires_ancestor: Kernel
|
|
13
|
+
# @requires_ancestor: Module
|
|
14
|
+
module BaseDSLMethods # :nodoc:
|
|
12
15
|
include GraphQL::Schema::FindInheritedValue
|
|
13
16
|
|
|
14
17
|
# Call this with a new name to override the default name for this schema member; OR
|
|
15
18
|
# call it without an argument to get the name of this schema member
|
|
16
19
|
#
|
|
17
20
|
# The default name is implemented in default_graphql_name
|
|
18
|
-
#
|
|
19
|
-
#
|
|
21
|
+
#
|
|
22
|
+
# **Parameters**
|
|
23
|
+
#
|
|
24
|
+
# - `new_name` (`String`)
|
|
25
|
+
#
|
|
26
|
+
# **Returns**
|
|
27
|
+
#
|
|
28
|
+
# - `String`
|
|
29
|
+
#
|
|
30
|
+
# :call-seq:
|
|
31
|
+
# graphql_name(String new_name) -> String
|
|
20
32
|
def graphql_name(new_name = nil)
|
|
21
33
|
if new_name
|
|
22
34
|
GraphQL::NameValidator.validate!(new_name)
|
|
@@ -28,8 +40,17 @@ module GraphQL
|
|
|
28
40
|
|
|
29
41
|
# Call this method to provide a new description; OR
|
|
30
42
|
# call it without an argument to get the description
|
|
31
|
-
#
|
|
32
|
-
#
|
|
43
|
+
#
|
|
44
|
+
# **Parameters**
|
|
45
|
+
#
|
|
46
|
+
# - `new_description` (`String`)
|
|
47
|
+
#
|
|
48
|
+
# **Returns**
|
|
49
|
+
#
|
|
50
|
+
# - `String`
|
|
51
|
+
#
|
|
52
|
+
# :call-seq:
|
|
53
|
+
# description(String new_description) -> String
|
|
33
54
|
def description(new_description = nil)
|
|
34
55
|
if new_description
|
|
35
56
|
@description = new_description
|
|
@@ -42,8 +63,17 @@ module GraphQL
|
|
|
42
63
|
|
|
43
64
|
# Call this method to provide a new comment; OR
|
|
44
65
|
# call it without an argument to get the comment
|
|
45
|
-
#
|
|
46
|
-
#
|
|
66
|
+
#
|
|
67
|
+
# **Parameters**
|
|
68
|
+
#
|
|
69
|
+
# - `new_comment` (`String`)
|
|
70
|
+
#
|
|
71
|
+
# **Returns**
|
|
72
|
+
#
|
|
73
|
+
# - `String, nil`
|
|
74
|
+
#
|
|
75
|
+
# :call-seq:
|
|
76
|
+
# comment(String new_comment) -> String | nil
|
|
47
77
|
def comment(new_comment = NOT_CONFIGURED)
|
|
48
78
|
if !NOT_CONFIGURED.equal?(new_comment)
|
|
49
79
|
@comment = new_comment
|
|
@@ -56,6 +86,9 @@ module GraphQL
|
|
|
56
86
|
|
|
57
87
|
# This pushes some configurations _down_ the inheritance tree,
|
|
58
88
|
# in order to prevent repetitive lookups at runtime.
|
|
89
|
+
#--
|
|
90
|
+
# @requires_ancestor: Module
|
|
91
|
+
# @requires_ancestor: GraphQL::Schema::Member::BaseDSLMethods
|
|
59
92
|
module ConfigurationExtension
|
|
60
93
|
def inherited(child_class)
|
|
61
94
|
child_class.introspection(introspection)
|
|
@@ -72,7 +105,12 @@ module GraphQL
|
|
|
72
105
|
end
|
|
73
106
|
end
|
|
74
107
|
|
|
75
|
-
#
|
|
108
|
+
# **Returns**
|
|
109
|
+
#
|
|
110
|
+
# - `Boolean` — If true, this object is part of the introspection system
|
|
111
|
+
#
|
|
112
|
+
# :call-seq:
|
|
113
|
+
# introspection(new_introspection) -> bool
|
|
76
114
|
def introspection(new_introspection = nil)
|
|
77
115
|
if !new_introspection.nil?
|
|
78
116
|
@introspection = new_introspection
|
|
@@ -88,7 +126,13 @@ module GraphQL
|
|
|
88
126
|
end
|
|
89
127
|
|
|
90
128
|
# The mutation this type was derived from, if it was derived from a mutation
|
|
91
|
-
#
|
|
129
|
+
#
|
|
130
|
+
# **Returns**
|
|
131
|
+
#
|
|
132
|
+
# - `Class`
|
|
133
|
+
#
|
|
134
|
+
# :call-seq:
|
|
135
|
+
# mutation(mutation_class) -> Class
|
|
92
136
|
def mutation(mutation_class = nil)
|
|
93
137
|
if mutation_class
|
|
94
138
|
@mutation = mutation_class
|
|
@@ -107,7 +151,9 @@ module GraphQL
|
|
|
107
151
|
def default_graphql_name
|
|
108
152
|
@default_graphql_name ||= begin
|
|
109
153
|
raise GraphQL::RequiredImplementationMissingError, 'Anonymous class should declare a `graphql_name`' if name.nil?
|
|
110
|
-
|
|
154
|
+
class_name = name #: as !nil
|
|
155
|
+
short_name = class_name.split("::").last #: as String
|
|
156
|
+
g_name = -short_name
|
|
111
157
|
g_name.end_with?("Type") ? g_name.sub(/Type\Z/, "") : g_name
|
|
112
158
|
end
|
|
113
159
|
end
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
class Schema
|
|
4
5
|
class Member
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
#--
|
|
7
|
+
# @requires_ancestor: Kernel
|
|
8
|
+
module BuildType # :nodoc:
|
|
7
9
|
LIST_TYPE_ERROR = "Use an array of [T] or [T, null: true] for list types; other arrays are not supported"
|
|
8
10
|
|
|
9
11
|
module_function
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
+
# **Parameters**
|
|
13
|
+
#
|
|
14
|
+
# - `type_expr` (`String, Class, GraphQL::BaseType`)
|
|
15
|
+
#
|
|
16
|
+
# **Returns**
|
|
17
|
+
#
|
|
18
|
+
# - `GraphQL::BaseType`
|
|
19
|
+
#
|
|
20
|
+
# :call-seq:
|
|
21
|
+
# parse_type(String | Class | GraphQL::BaseType type_expr, null:) -> GraphQL::BaseType
|
|
12
22
|
def parse_type(type_expr, null:)
|
|
13
23
|
list_type = false
|
|
14
24
|
|
|
@@ -104,7 +114,8 @@ module GraphQL
|
|
|
104
114
|
to_type_name(something.first)
|
|
105
115
|
when Module
|
|
106
116
|
if something.respond_to?(:graphql_name)
|
|
107
|
-
something
|
|
117
|
+
type_defn = something #: as GraphQL::Schema::Member::type_definition
|
|
118
|
+
type_defn.graphql_name
|
|
108
119
|
else
|
|
109
120
|
to_type_name(something.name)
|
|
110
121
|
end
|
|
@@ -174,12 +185,15 @@ module GraphQL
|
|
|
174
185
|
end
|
|
175
186
|
string2 = string.dup
|
|
176
187
|
|
|
177
|
-
|
|
178
|
-
string2.gsub!(
|
|
188
|
+
# URLDecoder -> URL_Decoder, someThing -> some_Thing
|
|
189
|
+
string2.gsub!(UNDERSCORE_BOUNDARY, "_")
|
|
179
190
|
string2.downcase!
|
|
180
191
|
|
|
181
192
|
string2
|
|
182
193
|
end
|
|
194
|
+
|
|
195
|
+
UNDERSCORE_BOUNDARY = /(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z\d])(?=[A-Z])/
|
|
196
|
+
private_constant :UNDERSCORE_BOUNDARY
|
|
183
197
|
end
|
|
184
198
|
end
|
|
185
199
|
end
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
|
|
3
4
|
module GraphQL
|
|
4
5
|
class Schema
|
|
5
6
|
class Member
|
|
6
7
|
# These constants are interpreted as GraphQL types when defining fields or arguments
|
|
7
8
|
#
|
|
8
|
-
# @example
|
|
9
|
-
# field :is_draft, Boolean, null: false
|
|
10
|
-
# field :id, ID, null: false
|
|
11
|
-
# field :score, Int, null: false
|
|
12
9
|
#
|
|
13
|
-
#
|
|
14
|
-
|
|
10
|
+
# **Examples**
|
|
11
|
+
#
|
|
12
|
+
# **Example: field :is_draft, Boolean, null: false**
|
|
13
|
+
#
|
|
14
|
+
# ```ruby
|
|
15
|
+
# field :id, ID, null: false
|
|
16
|
+
# field :score, Int, null: false
|
|
17
|
+
# ```
|
|
18
|
+
module GraphQLTypeNames # :nodoc:
|
|
15
19
|
Boolean = "Boolean"
|
|
16
20
|
ID = "ID"
|
|
17
21
|
Int = "Int"
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
class Schema
|
|
4
5
|
class Member
|
|
6
|
+
#--
|
|
7
|
+
# @requires_ancestor: Kernel
|
|
5
8
|
module HasArguments
|
|
6
9
|
def self.included(cls)
|
|
7
10
|
cls.extend(ArgumentClassAccessor)
|
|
@@ -14,28 +17,39 @@ module GraphQL
|
|
|
14
17
|
cls.extend(ClassConfigured)
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
20
|
+
# **Parameters**
|
|
21
|
+
#
|
|
22
|
+
# - `arg_name` (`Symbol`) — The underscore-cased name of this argument, `name:` keyword also accepted
|
|
23
|
+
# - `type_expr` — The GraphQL type of this argument; `type:` keyword also accepted
|
|
24
|
+
# - `desc` (`String`) — Argument description, `description:` keyword also accepted
|
|
25
|
+
# - `definition_block` (`Proc`) — Called with the newly-created [Argument](rdoc-ref:Argument)
|
|
26
|
+
# - `kwargs` (`Hash`) — Keywords for defining an argument. Any keywords not documented here must be handled by your base Argument class.
|
|
27
|
+
#
|
|
28
|
+
# **Options**
|
|
29
|
+
#
|
|
30
|
+
# - `kwargs.:required` (`Boolean, :nullable`) — if true, this argument is non-null; if false, this argument is nullable. If `:nullable`, then the argument must be provided, though it may be `null`.
|
|
31
|
+
# - `kwargs.:description` (`String`) — Positional argument also accepted
|
|
32
|
+
# - `kwargs.:type` (`Class, Array<Class>`) — Input type; positional argument also accepted
|
|
33
|
+
# - `kwargs.:name` (`Symbol`) — positional argument also accepted
|
|
34
|
+
# - `kwargs.:default_value` (`Object`)
|
|
35
|
+
# - `kwargs.:loads` (`Class, Array<Class>`) — A GraphQL type to load for the given ID when one is present
|
|
36
|
+
# - `kwargs.:as` (`Symbol`) — Override the keyword name when passed to a method
|
|
37
|
+
# - `kwargs.:prepare` (`Symbol`) — A method to call to transform this argument's valuebefore sending it to field resolution
|
|
38
|
+
# - `kwargs.:camelize` (`Boolean`) — if true, the name will be camelized when building the schema
|
|
39
|
+
# - `kwargs.:from_resolver` (`Boolean`) — if true, a Resolver class defined this argument
|
|
40
|
+
# - `kwargs.:directives` (`Hash{Class => Hash}`)
|
|
41
|
+
# - `kwargs.:deprecation_reason` (`String`)
|
|
42
|
+
# - `kwargs.:comment` (`String`) — Private, used by GraphQL-Ruby when parsing GraphQL schema files
|
|
43
|
+
# - `kwargs.:ast_node` (`GraphQL::Language::Nodes::InputValueDefinition`) — Private, used by GraphQL-Ruby when parsing schema files
|
|
44
|
+
# - `kwargs.:validates` (`Hash, nil`) — Options for building validators, if any should be applied
|
|
45
|
+
# - `kwargs.:replace_null_with_default` (`Boolean`) — if `true`, incoming values of `null` will be replaced with the configured `default_value`
|
|
46
|
+
#
|
|
47
|
+
# **Returns**
|
|
48
|
+
#
|
|
49
|
+
# - `GraphQL::Schema::Argument` — An instance of [argument_class](rdoc-ref:argument_class) created from these arguments
|
|
50
|
+
#
|
|
51
|
+
# :call-seq:
|
|
52
|
+
# argument(Symbol arg_name, type_expr, String desc, Hash **kwargs, Proc &definition_block) -> GraphQL::Schema::Argument
|
|
39
53
|
def argument(arg_name = nil, type_expr = nil, desc = nil, **kwargs, &definition_block)
|
|
40
54
|
if kwargs[:loads]
|
|
41
55
|
loads_name = arg_name || kwargs[:name]
|
|
@@ -65,8 +79,17 @@ module GraphQL
|
|
|
65
79
|
end
|
|
66
80
|
|
|
67
81
|
# Register this argument with the class.
|
|
68
|
-
#
|
|
69
|
-
#
|
|
82
|
+
#
|
|
83
|
+
# **Parameters**
|
|
84
|
+
#
|
|
85
|
+
# - `arg_defn` (`GraphQL::Schema::Argument`)
|
|
86
|
+
#
|
|
87
|
+
# **Returns**
|
|
88
|
+
#
|
|
89
|
+
# - `GraphQL::Schema::Argument`
|
|
90
|
+
#
|
|
91
|
+
# :call-seq:
|
|
92
|
+
# add_argument(GraphQL::Schema::Argument arg_defn) -> GraphQL::Schema::Argument
|
|
70
93
|
def add_argument(arg_defn)
|
|
71
94
|
@own_arguments ||= {}
|
|
72
95
|
prev_defn = @own_arguments[arg_defn.name]
|
|
@@ -98,7 +121,12 @@ module GraphQL
|
|
|
98
121
|
nil
|
|
99
122
|
end
|
|
100
123
|
|
|
101
|
-
#
|
|
124
|
+
# **Returns**
|
|
125
|
+
#
|
|
126
|
+
# - `Hash<String => GraphQL::Schema::Argument>` — Arguments defined on this thing, keyed by name. Includes inherited definitions
|
|
127
|
+
#
|
|
128
|
+
# :call-seq:
|
|
129
|
+
# arguments(context:, _require_defined_arguments) -> Hash[String, GraphQL::Schema::Argument]
|
|
102
130
|
def arguments(context = GraphQL::Query::NullContext.instance, _require_defined_arguments = nil)
|
|
103
131
|
if !own_arguments.empty?
|
|
104
132
|
own_arguments_that_apply = {}
|
|
@@ -145,7 +173,8 @@ module GraphQL
|
|
|
145
173
|
|
|
146
174
|
def all_argument_definitions
|
|
147
175
|
all_defns = {}
|
|
148
|
-
ancestors
|
|
176
|
+
all_ancestors = ancestors #: Array[untyped]
|
|
177
|
+
all_ancestors.reverse_each do |ancestor|
|
|
149
178
|
if ancestor.respond_to?(:own_arguments)
|
|
150
179
|
all_defns.merge!(ancestor.own_arguments)
|
|
151
180
|
end
|
|
@@ -159,7 +188,8 @@ module GraphQL
|
|
|
159
188
|
def get_argument(argument_name, context = GraphQL::Query::NullContext.instance)
|
|
160
189
|
warden = Warden.from_context(context)
|
|
161
190
|
skip_visible = context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Visibility::Profile)
|
|
162
|
-
|
|
191
|
+
all_ancestors = ancestors #: Array[untyped]
|
|
192
|
+
for ancestor in all_ancestors
|
|
163
193
|
if ancestor.respond_to?(:own_arguments) &&
|
|
164
194
|
(a = ancestor.own_arguments[argument_name]) &&
|
|
165
195
|
(skip_visible || (a = Warden.visible_entry?(:visible_argument?, a, context, warden)))
|
|
@@ -171,6 +201,9 @@ module GraphQL
|
|
|
171
201
|
end
|
|
172
202
|
end
|
|
173
203
|
|
|
204
|
+
#--
|
|
205
|
+
# @requires_ancestor: Kernel
|
|
206
|
+
# @requires_ancestor: GraphQL::Schema::Member::HasArguments
|
|
174
207
|
module FieldConfigured
|
|
175
208
|
def arguments(context = GraphQL::Query::NullContext.instance, _require_defined_arguments = nil)
|
|
176
209
|
own_arguments = super
|
|
@@ -230,7 +263,12 @@ module GraphQL
|
|
|
230
263
|
end
|
|
231
264
|
end
|
|
232
265
|
|
|
233
|
-
#
|
|
266
|
+
# **Returns**
|
|
267
|
+
#
|
|
268
|
+
# - `GraphQL::Schema::Argument, nil` — Argument defined on this thing, fetched by name.
|
|
269
|
+
#
|
|
270
|
+
# :call-seq:
|
|
271
|
+
# get_argument(argument_name, context:) -> GraphQL::Schema::Argument | nil
|
|
234
272
|
def get_argument(argument_name, context = GraphQL::Query::NullContext.instance)
|
|
235
273
|
warden = Warden.from_context(context)
|
|
236
274
|
if (arg_config = own_arguments[argument_name]) && ((context.respond_to?(:types) && context.types.is_a?(GraphQL::Schema::Visibility::Profile)) || (visible_arg = Warden.visible_entry?(:visible_argument?, arg_config, context, warden)))
|
|
@@ -242,26 +280,32 @@ module GraphQL
|
|
|
242
280
|
end
|
|
243
281
|
end
|
|
244
282
|
|
|
245
|
-
#
|
|
283
|
+
# **Parameters**
|
|
284
|
+
#
|
|
285
|
+
# - `new_arg_class` (`Class`) — A class to use for building argument definitions
|
|
286
|
+
#
|
|
287
|
+
# :call-seq:
|
|
288
|
+
# argument_class(Class new_arg_class)
|
|
246
289
|
def argument_class(new_arg_class = nil)
|
|
247
290
|
self.class.argument_class(new_arg_class)
|
|
248
291
|
end
|
|
249
292
|
|
|
250
|
-
#
|
|
251
|
-
# If given a block, it will eventually yield the loaded args to the block.
|
|
293
|
+
# **Yields:** [Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>]
|
|
252
294
|
#
|
|
253
|
-
#
|
|
295
|
+
# **Parameters**
|
|
254
296
|
#
|
|
255
|
-
#
|
|
256
|
-
#
|
|
257
|
-
#
|
|
258
|
-
#
|
|
259
|
-
|
|
297
|
+
# - `values` (`Hash<String, Object>`)
|
|
298
|
+
# - `context` (`GraphQL::Query::Context`)
|
|
299
|
+
#
|
|
300
|
+
# **Returns**
|
|
301
|
+
#
|
|
302
|
+
# - `Interpreter::Arguments, Execution::Lazy<Interpreter::Arguments>`
|
|
303
|
+
def coerce_arguments(parent_object, values, context, &block) # :nodoc:
|
|
260
304
|
# Cache this hash to avoid re-merging it
|
|
261
305
|
arg_defns = context.types.arguments(self)
|
|
262
306
|
total_args_count = arg_defns.size
|
|
263
307
|
|
|
264
|
-
finished_args = nil
|
|
308
|
+
finished_args = nil #: untyped
|
|
265
309
|
prepare_finished_args = -> {
|
|
266
310
|
if total_args_count == 0
|
|
267
311
|
finished_args = GraphQL::Execution::Interpreter::Arguments::EMPTY
|
|
@@ -271,7 +315,7 @@ module GraphQL
|
|
|
271
315
|
else
|
|
272
316
|
argument_values = {}
|
|
273
317
|
resolved_args_count = 0
|
|
274
|
-
raised_error = false
|
|
318
|
+
raised_error = false #: bool
|
|
275
319
|
arg_defns.each do |arg_defn|
|
|
276
320
|
context.dataloader.append_job do
|
|
277
321
|
begin
|
|
@@ -318,6 +362,8 @@ module GraphQL
|
|
|
318
362
|
nil
|
|
319
363
|
end
|
|
320
364
|
|
|
365
|
+
#--
|
|
366
|
+
# @requires_ancestor: Kernel
|
|
321
367
|
module HasDirectiveArguments
|
|
322
368
|
def validate_directive_argument(arg_defn, value)
|
|
323
369
|
if value.nil? && arg_defn.type.non_null?
|
|
@@ -346,14 +392,21 @@ module GraphQL
|
|
|
346
392
|
end
|
|
347
393
|
end
|
|
348
394
|
|
|
395
|
+
#--
|
|
396
|
+
# @requires_ancestor: Kernel
|
|
349
397
|
module ArgumentObjectLoader
|
|
350
398
|
# Look up the corresponding object for a provided ID.
|
|
351
|
-
# By default, it uses Relay-style
|
|
399
|
+
# By default, it uses Relay-style [Schema.object_from_id](rdoc-ref:Schema.object_from_id),
|
|
352
400
|
# override this to find objects another way.
|
|
353
401
|
#
|
|
354
|
-
#
|
|
355
|
-
#
|
|
356
|
-
#
|
|
402
|
+
# **Parameters**
|
|
403
|
+
#
|
|
404
|
+
# - `type` (`Class, Module`) — A GraphQL type definition
|
|
405
|
+
# - `id` (`String`) — A client-provided to look up
|
|
406
|
+
# - `context` (`GraphQL::Query::Context`) — the current context
|
|
407
|
+
#
|
|
408
|
+
# :call-seq:
|
|
409
|
+
# object_from_id(Class | Module type, String id, GraphQL::Query::Context context)
|
|
357
410
|
def object_from_id(type, id, context)
|
|
358
411
|
context.schema.object_from_id(id, context)
|
|
359
412
|
end
|
|
@@ -374,7 +427,7 @@ module GraphQL
|
|
|
374
427
|
def authorize_application_object(argument, id, context, loaded_application_object)
|
|
375
428
|
context.query.after_lazy(loaded_application_object) do |application_object|
|
|
376
429
|
if application_object.nil?
|
|
377
|
-
err = GraphQL::LoadApplicationObjectFailedError.new(context: context, argument: argument, id: id, object: application_object)
|
|
430
|
+
err = GraphQL::LoadApplicationObjectFailedError.new(context: context, argument: argument, id: id, object: application_object) #: GraphQL::RuntimeError
|
|
378
431
|
application_object = load_application_object_failed(err)
|
|
379
432
|
end
|
|
380
433
|
# Double-check that the located object is actually of this type
|
|
@@ -397,7 +450,7 @@ module GraphQL
|
|
|
397
450
|
# This union/interface is used in `loads:` but not otherwise visible to this query
|
|
398
451
|
context.types.loadable_possible_types(arg_loads_type, context).include?(application_object_type)
|
|
399
452
|
else
|
|
400
|
-
|
|
453
|
+
arg_loads_type == application_object_type
|
|
401
454
|
end
|
|
402
455
|
else
|
|
403
456
|
context.types.possible_types(arg_loads_type).include?(application_object_type)
|
|
@@ -424,7 +477,8 @@ module GraphQL
|
|
|
424
477
|
)
|
|
425
478
|
if self.respond_to?(:unauthorized_object)
|
|
426
479
|
err.set_backtrace(caller)
|
|
427
|
-
|
|
480
|
+
loader = self #: untyped
|
|
481
|
+
loader.unauthorized_object(err)
|
|
428
482
|
else
|
|
429
483
|
raise err
|
|
430
484
|
end
|
|
@@ -439,9 +493,18 @@ module GraphQL
|
|
|
439
493
|
# Called when an argument's `loads:` configuration fails to fetch an application object.
|
|
440
494
|
# By default, this method raises the given error, but you can override it to handle failures differently.
|
|
441
495
|
#
|
|
442
|
-
#
|
|
443
|
-
#
|
|
444
|
-
#
|
|
496
|
+
# **API:** public
|
|
497
|
+
#
|
|
498
|
+
# **Parameters**
|
|
499
|
+
#
|
|
500
|
+
# - `err` (`GraphQL::LoadApplicationObjectFailedError`) — The error that occurred
|
|
501
|
+
#
|
|
502
|
+
# **Returns**
|
|
503
|
+
#
|
|
504
|
+
# - `Object, nil` — If a value is returned, it will be used instead of the failed load
|
|
505
|
+
#
|
|
506
|
+
# :call-seq:
|
|
507
|
+
# load_application_object_failed(GraphQL::LoadApplicationObjectFailedError err) -> Object | nil
|
|
445
508
|
def load_application_object_failed(err)
|
|
446
509
|
raise err
|
|
447
510
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
class Schema
|
|
4
5
|
class Member
|
|
@@ -18,12 +19,16 @@ module GraphQL
|
|
|
18
19
|
true
|
|
19
20
|
end
|
|
20
21
|
|
|
22
|
+
#--
|
|
23
|
+
# @requires_ancestor: Kernel
|
|
21
24
|
module InstanceConfigured
|
|
22
25
|
def authorizes?(context)
|
|
23
26
|
raise RequiredImplementationMissingError, "#{self.class} must implement #authorizes?(context)"
|
|
24
27
|
end
|
|
25
28
|
end
|
|
26
29
|
|
|
30
|
+
#--
|
|
31
|
+
# @requires_ancestor: Kernel
|
|
27
32
|
module ClassConfigured
|
|
28
33
|
def authorizes?(context)
|
|
29
34
|
method(:authorized?).owner != GraphQL::Schema::Member::HasAuthorization
|