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
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
3
|
+
module GraphQL
|
|
4
|
+
# This error is raised when `Types::Float` is given a non-finite input value.
|
|
5
|
+
class FloatDecodingError < GraphQL::RuntimeTypeError
|
|
6
|
+
# The value which couldn't be decoded
|
|
7
|
+
attr_reader :float_value
|
|
8
|
+
|
|
9
|
+
def initialize(value)
|
|
10
|
+
@float_value = value
|
|
11
|
+
super("Float is not finite: #{value.inspect}.")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
3
|
+
module GraphQL
|
|
4
|
+
# This error is raised when `Types::Float` is asked to return a non-finite value.
|
|
5
|
+
class FloatEncodingError < GraphQL::RuntimeTypeError
|
|
6
|
+
# The value which couldn't be encoded
|
|
7
|
+
attr_reader :float_value
|
|
8
|
+
|
|
9
|
+
# **Returns**
|
|
10
|
+
#
|
|
11
|
+
# - `GraphQL::Schema::Field` — The field that returned a non-finite float
|
|
12
|
+
attr_reader :field
|
|
13
|
+
|
|
14
|
+
# **Returns**
|
|
15
|
+
#
|
|
16
|
+
# - `Array<String, Integer>` — Where the field appeared in the GraphQL response
|
|
17
|
+
attr_reader :path
|
|
18
|
+
|
|
19
|
+
def initialize(value, context:)
|
|
20
|
+
@float_value = value
|
|
21
|
+
@field = context[:current_field]
|
|
22
|
+
@path = context[:current_path]
|
|
23
|
+
message = "Float is not finite: #{value.inspect}".dup
|
|
24
|
+
if @path
|
|
25
|
+
message << " @ #{@path.join(".")}"
|
|
26
|
+
end
|
|
27
|
+
if @field
|
|
28
|
+
message << " (#{@field.path})"
|
|
29
|
+
end
|
|
30
|
+
super("#{message}.")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
# This error is raised when `Types::Int` is given an input value outside of 32-bit integer range.
|
|
4
5
|
#
|
|
5
6
|
# For really big integer values, consider `GraphQL::Types::BigInt`
|
|
6
7
|
#
|
|
7
|
-
#
|
|
8
|
+
# See [GraphQL::Types::Int](rdoc-ref:GraphQL::Types::Int) which raises this error
|
|
8
9
|
class IntegerDecodingError < GraphQL::RuntimeTypeError
|
|
9
10
|
# The value which couldn't be decoded
|
|
10
11
|
attr_reader :integer_value
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
# This error is raised when `Types::Int` is asked to return a value outside of 32-bit integer range.
|
|
4
5
|
#
|
|
@@ -7,15 +8,19 @@ module GraphQL
|
|
|
7
8
|
# - `ID` for database primary keys or other identifiers
|
|
8
9
|
# - `GraphQL::Types::BigInt` for really big integer values
|
|
9
10
|
#
|
|
10
|
-
#
|
|
11
|
+
# See [GraphQL::Types::Int](rdoc-ref:GraphQL::Types::Int) which raises this error
|
|
11
12
|
class IntegerEncodingError < GraphQL::RuntimeTypeError
|
|
12
13
|
# The value which couldn't be encoded
|
|
13
14
|
attr_reader :integer_value
|
|
14
15
|
|
|
15
|
-
#
|
|
16
|
+
# **Returns**
|
|
17
|
+
#
|
|
18
|
+
# - `GraphQL::Schema::Field` — The field that returned a too-big integer
|
|
16
19
|
attr_reader :field
|
|
17
20
|
|
|
18
|
-
#
|
|
21
|
+
# **Returns**
|
|
22
|
+
#
|
|
23
|
+
# - `Array<String, Integer>` — Where the field appeared in the GraphQL response
|
|
19
24
|
attr_reader :path
|
|
20
25
|
|
|
21
26
|
def initialize(value, context:)
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
module Introspection
|
|
4
5
|
class BaseObject < GraphQL::Schema::Object
|
|
5
6
|
introspection(true)
|
|
6
7
|
|
|
8
|
+
#: (*untyped args, **untyped kwargs) ?{ (GraphQL::Schema::Field) [self: GraphQL::Schema::Field] -> void } -> untyped
|
|
7
9
|
def self.field(*args, **kwargs, &block)
|
|
8
10
|
kwargs[:introspection] = true
|
|
9
|
-
super
|
|
11
|
+
super
|
|
10
12
|
end
|
|
11
13
|
end
|
|
12
14
|
end
|
|
@@ -1,27 +1,39 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
# Raised automatically when a field's resolve function returns `nil`
|
|
4
5
|
# for a non-null field.
|
|
5
6
|
class InvalidNullError < GraphQL::RuntimeError
|
|
6
|
-
#
|
|
7
|
+
# **Returns**
|
|
8
|
+
#
|
|
9
|
+
# - `GraphQL::BaseType` — The owner of [field](rdoc-ref:#field)
|
|
7
10
|
attr_reader :parent_type
|
|
8
11
|
|
|
9
|
-
#
|
|
12
|
+
# **Returns**
|
|
13
|
+
#
|
|
14
|
+
# - `GraphQL::Field` — The field which failed to return a value
|
|
10
15
|
attr_reader :field
|
|
11
16
|
|
|
12
|
-
#
|
|
17
|
+
# **Returns**
|
|
18
|
+
#
|
|
19
|
+
# - `GraphQL::Language::Nodes::Field` — the field where the error occurred
|
|
20
|
+
#
|
|
21
|
+
# :call-seq:
|
|
22
|
+
# ast_node() -> GraphQL::Language::Nodes::Field
|
|
13
23
|
def ast_node
|
|
14
24
|
@ast_nodes.first
|
|
15
25
|
end
|
|
16
26
|
|
|
17
27
|
attr_reader :ast_nodes
|
|
18
28
|
|
|
19
|
-
#
|
|
29
|
+
# **Returns**
|
|
30
|
+
#
|
|
31
|
+
# - `Boolean` — indicates an array result caused the error
|
|
20
32
|
attr_reader :is_from_array
|
|
21
33
|
|
|
22
34
|
attr_accessor :path
|
|
23
35
|
|
|
24
|
-
def initialize(parent_type, field, ast_node_or_nodes, is_from_array: false, path: nil)
|
|
36
|
+
def initialize(parent_type, field, ast_node_or_nodes, is_from_array: false, path: nil, element_type: nil)
|
|
25
37
|
@parent_type = parent_type
|
|
26
38
|
@field = field
|
|
27
39
|
@ast_nodes = Array(ast_node_or_nodes)
|
|
@@ -32,7 +44,8 @@ module GraphQL
|
|
|
32
44
|
# whether it was caused by a null instead of the list or a
|
|
33
45
|
# null element.
|
|
34
46
|
if @is_from_array
|
|
35
|
-
|
|
47
|
+
element_type ||= @field.type.of_type.of_type
|
|
48
|
+
super("Cannot return null for non-nullable element of type '#{element_type.to_type_signature}' for #{@parent_type.graphql_name}.#{@field.graphql_name}")
|
|
36
49
|
else
|
|
37
50
|
super("Cannot return null for non-nullable field #{@parent_type.graphql_name}.#{@field.graphql_name}")
|
|
38
51
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
module Language
|
|
4
5
|
module BlockString
|
|
@@ -13,7 +14,7 @@ module GraphQL
|
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
lines = has_newline ? str.split("\n") : [str]
|
|
16
|
-
common_indent = nil
|
|
17
|
+
common_indent = nil #: Integer?
|
|
17
18
|
|
|
18
19
|
# find the common whitespace
|
|
19
20
|
lines.each_with_index do |line, idx|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
|
|
3
4
|
require 'graphql/version'
|
|
4
5
|
require 'digest/sha2'
|
|
@@ -8,7 +9,7 @@ require 'tempfile'
|
|
|
8
9
|
|
|
9
10
|
module GraphQL
|
|
10
11
|
module Language
|
|
11
|
-
# This cache is used by
|
|
12
|
+
# This cache is used by [GraphQL::Language::Parser.parse_file](rdoc-ref:GraphQL::Language::Parser.parse_file) when it's enabled.
|
|
12
13
|
#
|
|
13
14
|
# With Rails, parser caching may enabled by setting `config.graphql.parser_cache = true` in your Rails application.
|
|
14
15
|
#
|
|
@@ -23,11 +24,16 @@ module GraphQL
|
|
|
23
24
|
# You will need to clear the cache directory for each new deployment of your application.
|
|
24
25
|
# Also note that the parser cache will grow as your schema is loaded, so the cache directory must be writable.
|
|
25
26
|
#
|
|
26
|
-
#
|
|
27
|
+
# See [GraphQL::Railtie](rdoc-ref:GraphQL::Railtie) for simple Rails integration
|
|
27
28
|
class Cache
|
|
28
|
-
#
|
|
29
|
-
#
|
|
29
|
+
# **Parameters**
|
|
30
|
+
#
|
|
31
|
+
# - `path` (`Pathname`) — The directory where cache entries are stored.
|
|
32
|
+
# - `secret` (`String, nil`) — A stable secret for verifying cache entries. When omitted,
|
|
30
33
|
# a process-local secret is generated. Pass `nil` to disable cache signing.
|
|
34
|
+
#
|
|
35
|
+
# :call-seq:
|
|
36
|
+
# initialize(Pathname path, String | nil secret:)
|
|
31
37
|
def initialize(path, secret: SecureRandom.random_bytes(32))
|
|
32
38
|
@path = path
|
|
33
39
|
@secret = secret
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
module Language
|
|
4
|
-
# @api private
|
|
5
5
|
#
|
|
6
|
-
#
|
|
7
|
-
# To a {GraphQL::Language::Document} AST node.
|
|
6
|
+
# **Parameters**
|
|
8
7
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
class DocumentFromSchemaDefinition
|
|
8
|
+
# - `context` (`Hash`)
|
|
9
|
+
# - `only` (`<#call(member, ctx)>`)
|
|
10
|
+
# - `except` (`<#call(member, ctx)>`)
|
|
11
|
+
# - `include_introspection_types` (`Boolean`) — Whether or not to include introspection types in the AST
|
|
12
|
+
# - `include_built_in_scalars` (`Boolean`) — Whether or not to include built in scalars in the AST
|
|
13
|
+
# - `include_built_in_directives` (`Boolean`) — Whether or not to include built in directives in the AST
|
|
14
|
+
class DocumentFromSchemaDefinition # :nodoc:
|
|
16
15
|
def initialize(
|
|
17
16
|
schema, context: nil, include_introspection_types: false,
|
|
18
17
|
include_built_in_directives: false, include_built_in_scalars: false, always_include_schema: false
|
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
module Language
|
|
4
|
-
# Exposes
|
|
5
|
+
# Exposes [.generate](rdoc-ref:.generate), which turns AST nodes back into query strings.
|
|
5
6
|
module Generation
|
|
6
7
|
extend self
|
|
7
8
|
|
|
8
9
|
# Turn an AST node back into a string.
|
|
9
10
|
#
|
|
10
|
-
#
|
|
11
|
-
# document = GraphQL.parse(query_string)
|
|
12
|
-
# GraphQL::Language::Generation.generate(document)
|
|
13
|
-
# # => "{ ... }"
|
|
11
|
+
# **Examples**
|
|
14
12
|
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
13
|
+
# **Example: Turning a document into a query**
|
|
14
|
+
#
|
|
15
|
+
# ```ruby
|
|
16
|
+
# document = GraphQL.parse(query_string)
|
|
17
|
+
# GraphQL::Language::Generation.generate(document)
|
|
18
|
+
# # => "{ ... }"
|
|
19
|
+
# ```
|
|
20
|
+
#
|
|
21
|
+
# **Parameters**
|
|
22
|
+
#
|
|
23
|
+
# - `node` (`GraphQL::Language::Nodes::AbstractNode`) — an AST node to recursively stringify
|
|
24
|
+
# - `indent` (`String`) — Whitespace to add to each printed node
|
|
25
|
+
# - `printer` (`GraphQL::Language::Printer`) — An optional custom printer for printing AST nodes. Defaults to GraphQL::Language::Printer
|
|
26
|
+
#
|
|
27
|
+
# **Returns**
|
|
28
|
+
#
|
|
29
|
+
# - `String` — Valid GraphQL for `node`
|
|
30
|
+
#
|
|
31
|
+
# :call-seq:
|
|
32
|
+
# generate(GraphQL::Language::Nodes::AbstractNode node, String indent:, GraphQL::Language::Printer printer:) -> String
|
|
19
33
|
def generate(node, indent: "", printer: GraphQL::Language::Printer.new)
|
|
20
34
|
printer.print(node, indent: indent)
|
|
21
35
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# typed: true
|
|
2
3
|
module GraphQL
|
|
3
4
|
module Language
|
|
4
5
|
|
|
@@ -9,6 +10,9 @@ module GraphQL
|
|
|
9
10
|
end
|
|
10
11
|
@string = graphql_str
|
|
11
12
|
@filename = filename
|
|
13
|
+
if !@string.valid_encoding?
|
|
14
|
+
raise_parse_error("Parse error on bad Unicode escape sequence", nil, nil)
|
|
15
|
+
end
|
|
12
16
|
@scanner = StringScanner.new(graphql_str)
|
|
13
17
|
@pos = nil
|
|
14
18
|
@max_tokens = max_tokens || Float::INFINITY
|
|
@@ -32,6 +36,10 @@ module GraphQL
|
|
|
32
36
|
@scanner.skip(IGNORE_REGEXP)
|
|
33
37
|
if @scanner.skip(COMMENT_REGEXP)
|
|
34
38
|
@tokens_count += 1
|
|
39
|
+
if @tokens_count > @max_tokens
|
|
40
|
+
@pos = @scanner.pos
|
|
41
|
+
raise_parse_error("This query is too large to execute.")
|
|
42
|
+
end
|
|
35
43
|
next
|
|
36
44
|
end
|
|
37
45
|
break
|
|
@@ -110,10 +118,6 @@ module GraphQL
|
|
|
110
118
|
@scanner.pos += 1
|
|
111
119
|
:UNKNOWN_CHAR
|
|
112
120
|
end
|
|
113
|
-
rescue ArgumentError => err
|
|
114
|
-
if err.message == "invalid byte sequence in UTF-8"
|
|
115
|
-
raise_parse_error("Parse error on bad Unicode escape sequence", nil, nil)
|
|
116
|
-
end
|
|
117
121
|
end
|
|
118
122
|
|
|
119
123
|
def token_value
|
|
@@ -147,7 +151,7 @@ module GraphQL
|
|
|
147
151
|
"\\r" => "\r",
|
|
148
152
|
"\\t" => "\t",
|
|
149
153
|
}
|
|
150
|
-
UTF_8 = /\\u(?:([\
|
|
154
|
+
UTF_8 = /\\u(?:([\da-f]{4})|\{([\da-f]+)\})(?:\\u([\da-f]{4}))?/i
|
|
151
155
|
VALID_STRING = /\A(?:[^\\]|#{ESCAPES}|#{UTF_8})*\z/o
|
|
152
156
|
ESCAPED = /(?:#{ESCAPES}|#{UTF_8})/o
|
|
153
157
|
|
|
@@ -163,7 +167,11 @@ module GraphQL
|
|
|
163
167
|
if !str.valid_encoding? || !str.match?(VALID_STRING)
|
|
164
168
|
raise_parse_error("Bad unicode escape in #{str.inspect}")
|
|
165
169
|
else
|
|
166
|
-
|
|
170
|
+
begin
|
|
171
|
+
Lexer.replace_escaped_characters_in_place(str)
|
|
172
|
+
rescue RangeError
|
|
173
|
+
raise_parse_error("Bad unicode escape in #{str.inspect}")
|
|
174
|
+
end
|
|
167
175
|
|
|
168
176
|
if !str.valid_encoding?
|
|
169
177
|
raise_parse_error("Bad unicode escape in #{str.inspect}")
|
|
@@ -189,7 +197,7 @@ module GraphQL
|
|
|
189
197
|
raise GraphQL::ParseError.new(message, line, col, @string, filename: @filename)
|
|
190
198
|
end
|
|
191
199
|
|
|
192
|
-
IGNORE_REGEXP = /[, \
|
|
200
|
+
IGNORE_REGEXP = /[, \r\n\t\uFEFF]+/
|
|
193
201
|
COMMENT_REGEXP = /\#[^\n]*/
|
|
194
202
|
IDENTIFIER_REGEXP = /[_A-Za-z][_0-9A-Za-z]*/
|
|
195
203
|
INT_REGEXP = /-?(?:[0]|[1-9][0-9]*)/
|
|
@@ -289,7 +297,7 @@ module GraphQL
|
|
|
289
297
|
QUOTE = '"'
|
|
290
298
|
UNICODE_DIGIT = /[0-9A-Za-z]/
|
|
291
299
|
FOUR_DIGIT_UNICODE = /#{UNICODE_DIGIT}{4}/
|
|
292
|
-
N_DIGIT_UNICODE = %r{#{Punctuation::LCURLY}#{UNICODE_DIGIT}{
|
|
300
|
+
N_DIGIT_UNICODE = %r{#{Punctuation::LCURLY}#{UNICODE_DIGIT}+#{Punctuation::RCURLY}}x
|
|
293
301
|
UNICODE_ESCAPE = %r{\\u(?:#{FOUR_DIGIT_UNICODE}|#{N_DIGIT_UNICODE})}
|
|
294
302
|
STRING_ESCAPE = %r{[\\][\\/bfnrt]}
|
|
295
303
|
BLOCK_QUOTE = '"""'
|