graphql 1.10.2 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/generators/graphql/core.rb +21 -10
- data/lib/generators/graphql/enum_generator.rb +4 -10
- data/lib/generators/graphql/field_extractor.rb +31 -0
- data/lib/generators/graphql/input_generator.rb +50 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
- data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
- data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +45 -8
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/loader_generator.rb +1 -0
- data/lib/generators/graphql/mutation_create_generator.rb +22 -0
- data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
- data/lib/generators/graphql/mutation_generator.rb +6 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +28 -12
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +49 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- data/lib/generators/graphql/scalar_generator.rb +4 -2
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +8 -0
- data/lib/generators/graphql/templates/base_edge.erb +8 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +7 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +6 -2
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +3 -1
- data/lib/generators/graphql/templates/mutation_create.erb +20 -0
- data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
- data/lib/generators/graphql/templates/mutation_update.erb +21 -0
- data/lib/generators/graphql/templates/node_type.erb +9 -0
- data/lib/generators/graphql/templates/object.erb +7 -3
- data/lib/generators/graphql/templates/query_type.erb +3 -3
- data/lib/generators/graphql/templates/scalar.erb +5 -1
- data/lib/generators/graphql/templates/schema.erb +24 -33
- data/lib/generators/graphql/templates/union.erb +6 -2
- data/lib/generators/graphql/type_generator.rb +47 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/ast/field_usage.rb +30 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +52 -36
- data/lib/graphql/analysis/ast.rb +7 -8
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +31 -18
- data/lib/graphql/backtrace/trace.rb +96 -0
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +26 -18
- data/lib/graphql/dataloader/null_dataloader.rb +24 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +164 -0
- data/lib/graphql/dataloader.rb +311 -0
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +77 -44
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +62 -24
- data/lib/graphql/execution/interpreter/runtime.rb +826 -464
- data/lib/graphql/execution/interpreter.rb +206 -68
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +55 -136
- data/lib/graphql/execution/multiplex.rb +6 -162
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +7 -2
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/directive_location_enum.rb +2 -2
- data/lib/graphql/introspection/directive_type.rb +11 -5
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +4 -17
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +9 -5
- data/lib/graphql/introspection/input_value_type.rb +15 -3
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +11 -6
- data/lib/graphql/introspection/type_type.rb +31 -14
- data/lib/graphql/introspection.rb +100 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +20 -5
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/document_from_schema_definition.rb +96 -44
- data/lib/graphql/language/lexer.rb +216 -1462
- data/lib/graphql/language/nodes.rb +126 -129
- data/lib/graphql/language/parser.rb +997 -933
- data/lib/graphql/language/parser.y +148 -118
- data/lib/graphql/language/printer.rb +48 -23
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +192 -84
- data/lib/graphql/language.rb +2 -0
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
- data/lib/graphql/pagination/array_connection.rb +6 -4
- data/lib/graphql/pagination/connection.rb +105 -23
- data/lib/graphql/pagination/connections.rb +62 -35
- data/lib/graphql/pagination/relation_connection.rb +88 -36
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +203 -198
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +33 -7
- data/lib/graphql/query/null_context.rb +22 -9
- data/lib/graphql/query/validation_pipeline.rb +16 -38
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +36 -12
- data/lib/graphql/query.rb +92 -44
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +41 -10
- data/lib/graphql/relay/range_add.rb +17 -10
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
- data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
- data/lib/graphql/rubocop.rb +4 -0
- data/lib/graphql/schema/addition.rb +245 -0
- data/lib/graphql/schema/argument.rb +250 -46
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
- data/lib/graphql/schema/build_from_definition.rb +243 -89
- data/lib/graphql/schema/directive/deprecated.rb +1 -1
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +57 -0
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +108 -20
- data/lib/graphql/schema/enum.rb +105 -44
- data/lib/graphql/schema/enum_value.rb +15 -25
- data/lib/graphql/schema/field/connection_extension.rb +50 -30
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +476 -331
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +6 -8
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/input_object.rb +133 -121
- data/lib/graphql/schema/interface.rb +17 -45
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +8 -2
- data/lib/graphql/schema/list.rb +25 -8
- data/lib/graphql/schema/loader.rb +139 -103
- data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
- data/lib/graphql/schema/member/build_type.rb +19 -14
- data/lib/graphql/schema/member/has_arguments.rb +310 -26
- data/lib/graphql/schema/member/has_ast_node.rb +16 -1
- data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
- data/lib/graphql/schema/member/has_directives.rb +118 -0
- data/lib/graphql/schema/member/has_fields.rb +164 -42
- data/lib/graphql/schema/member/has_interfaces.rb +129 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +57 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +6 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +12 -7
- data/lib/graphql/schema/object.rb +35 -69
- data/lib/graphql/schema/printer.rb +16 -34
- data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
- data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
- data/lib/graphql/schema/resolver.rb +144 -79
- data/lib/graphql/schema/scalar.rb +27 -18
- data/lib/graphql/schema/subscription.rb +55 -26
- data/lib/graphql/schema/timeout.rb +45 -35
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +48 -13
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
- data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
- data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
- data/lib/graphql/schema/validator/format_validator.rb +48 -0
- data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
- data/lib/graphql/schema/validator/length_validator.rb +59 -0
- data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
- data/lib/graphql/schema/validator/required_validator.rb +82 -0
- data/lib/graphql/schema/validator.rb +171 -0
- data/lib/graphql/schema/warden.rb +185 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +471 -1116
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +13 -27
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +69 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
- data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
- data/lib/graphql/static_validation/validation_context.rb +13 -3
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +32 -20
- data/lib/graphql/static_validation.rb +1 -2
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
- data/lib/graphql/subscriptions/event.rb +81 -35
- data/lib/graphql/subscriptions/instrumentation.rb +0 -52
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +113 -58
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_trace.rb +77 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
- data/lib/graphql/tracing/data_dog_trace.rb +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
- data/lib/graphql/tracing/legacy_trace.rb +65 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
- data/lib/graphql/tracing/notifications_trace.rb +42 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +109 -0
- data/lib/graphql/tracing/platform_tracing.rb +64 -43
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/scout_tracing.rb +11 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +23 -71
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +10 -3
- data/lib/graphql/types/iso_8601_date.rb +20 -9
- data/lib/graphql/types/iso_8601_date_time.rb +36 -10
- data/lib/graphql/types/relay/base_connection.rb +18 -92
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +2 -4
- data/lib/graphql/types/relay/node_behaviors.rb +25 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
- data/lib/graphql/types/relay.rb +10 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +54 -65
- data/readme.md +3 -6
- metadata +116 -236
- data/lib/graphql/analysis/analyze_query.rb +0 -91
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backwards_compatibility.rb +0 -60
- data/lib/graphql/base_type.rb +0 -230
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -435
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -210
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -42
- data/lib/graphql/directive/deprecated_directive.rb +0 -2
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -107
- data/lib/graphql/enum_type.rb +0 -127
- data/lib/graphql/execution/execute.rb +0 -326
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/instrumentation.rb +0 -92
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -222
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -124
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -132
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -65
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -258
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -121
- data/lib/graphql/query/arguments.rb +0 -188
- data/lib/graphql/query/arguments_cache.rb +0 -25
- data/lib/graphql/query/executor.rb +0 -53
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -39
- data/lib/graphql/relay/array_connection.rb +0 -85
- data/lib/graphql/relay/base_connection.rb +0 -176
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -41
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -19
- data/lib/graphql/relay/edges_instrumentation.rb +0 -40
- data/lib/graphql/relay/global_id_resolve.rb +0 -18
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -105
- data/lib/graphql/relay/node.rb +0 -36
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -190
- data/lib/graphql/relay/type_extensions.rb +0 -30
- data/lib/graphql/scalar_type.rb +0 -76
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -15
- data/lib/graphql/schema/member/accepts_definition.rb +0 -152
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
- data/lib/graphql/schema/member/instrumentation.rb +0 -132
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -39
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -86
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -303
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -65
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/base_field.rb +0 -22
- data/lib/graphql/types/relay/base_interface.rb +0 -29
- data/lib/graphql/types/relay/base_object.rb +0 -26
- data/lib/graphql/types/relay/node_field.rb +0 -43
- data/lib/graphql/types/relay/nodes_field.rb +0 -45
- data/lib/graphql/union_type.rb +0 -113
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -2,16 +2,12 @@
|
|
2
2
|
module GraphQL
|
3
3
|
class Schema
|
4
4
|
class Argument
|
5
|
-
if !String.method_defined?(:-@)
|
6
|
-
using GraphQL::StringDedupBackport
|
7
|
-
end
|
8
|
-
|
9
|
-
include GraphQL::Schema::Member::CachedGraphQLDefinition
|
10
|
-
include GraphQL::Schema::Member::AcceptsDefinition
|
11
5
|
include GraphQL::Schema::Member::HasPath
|
12
6
|
include GraphQL::Schema::Member::HasAstNode
|
13
|
-
|
14
|
-
|
7
|
+
include GraphQL::Schema::Member::HasDirectives
|
8
|
+
include GraphQL::Schema::Member::HasDeprecationReason
|
9
|
+
include GraphQL::Schema::Member::HasValidators
|
10
|
+
include GraphQL::EmptyObjects
|
15
11
|
|
16
12
|
# @return [String] the GraphQL name for this argument, camelized unless `camelize: false` is provided
|
17
13
|
attr_reader :name
|
@@ -20,8 +16,14 @@ module GraphQL
|
|
20
16
|
# @return [GraphQL::Schema::Field, Class] The field or input object this argument belongs to
|
21
17
|
attr_reader :owner
|
22
18
|
|
23
|
-
# @
|
24
|
-
|
19
|
+
# @param new_prepare [Method, Proc]
|
20
|
+
# @return [Symbol] A method or proc to call to transform this value before sending it to field resolution method
|
21
|
+
def prepare(new_prepare = NOT_CONFIGURED)
|
22
|
+
if new_prepare != NOT_CONFIGURED
|
23
|
+
@prepare = new_prepare
|
24
|
+
end
|
25
|
+
@prepare
|
26
|
+
end
|
25
27
|
|
26
28
|
# @return [Symbol] This argument's name in Ruby keyword arguments
|
27
29
|
attr_reader :keyword
|
@@ -37,29 +39,53 @@ module GraphQL
|
|
37
39
|
# @param arg_name [Symbol]
|
38
40
|
# @param type_expr
|
39
41
|
# @param desc [String]
|
40
|
-
# @param required [Boolean] if true, this argument is non-null; if false, this argument is nullable
|
42
|
+
# @param 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`.
|
41
43
|
# @param description [String]
|
42
44
|
# @param default_value [Object]
|
43
45
|
# @param as [Symbol] Override the keyword name when passed to a method
|
44
46
|
# @param prepare [Symbol] A method to call to transform this argument's valuebefore sending it to field resolution
|
45
47
|
# @param camelize [Boolean] if true, the name will be camelized when building the schema
|
46
48
|
# @param from_resolver [Boolean] if true, a Resolver class defined this argument
|
47
|
-
# @param
|
48
|
-
|
49
|
+
# @param directives [Hash{Class => Hash}]
|
50
|
+
# @param deprecation_reason [String]
|
51
|
+
# @param validates [Hash, nil] Options for building validators, if any should be applied
|
52
|
+
# @param replace_null_with_default [Boolean] if `true`, incoming values of `null` will be replaced with the configured `default_value`
|
53
|
+
def initialize(arg_name = nil, type_expr = nil, desc = nil, required: true, type: nil, name: nil, loads: nil, description: nil, ast_node: nil, default_value: NOT_CONFIGURED, as: nil, from_resolver: false, camelize: true, prepare: nil, owner:, validates: nil, directives: nil, deprecation_reason: nil, replace_null_with_default: false, &definition_block)
|
49
54
|
arg_name ||= name
|
50
55
|
@name = -(camelize ? Member::BuildType.camelize(arg_name.to_s) : arg_name.to_s)
|
51
56
|
@type_expr = type_expr || type
|
52
57
|
@description = desc || description
|
53
|
-
@null =
|
58
|
+
@null = required != true
|
54
59
|
@default_value = default_value
|
60
|
+
if replace_null_with_default
|
61
|
+
if !default_value?
|
62
|
+
raise ArgumentError, "`replace_null_with_default: true` requires a default value, please provide one with `default_value: ...`"
|
63
|
+
end
|
64
|
+
@replace_null_with_default = true
|
65
|
+
end
|
66
|
+
|
55
67
|
@owner = owner
|
56
68
|
@as = as
|
57
69
|
@loads = loads
|
58
|
-
@keyword = as || Schema::Member::BuildType.underscore(@name).to_sym
|
70
|
+
@keyword = as || (arg_name.is_a?(Symbol) ? arg_name : Schema::Member::BuildType.underscore(@name).to_sym)
|
59
71
|
@prepare = prepare
|
60
72
|
@ast_node = ast_node
|
61
73
|
@from_resolver = from_resolver
|
62
|
-
|
74
|
+
self.deprecation_reason = deprecation_reason
|
75
|
+
|
76
|
+
if directives
|
77
|
+
directives.each do |dir_class, dir_options|
|
78
|
+
directive(dir_class, **dir_options)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
if validates && !validates.empty?
|
83
|
+
self.validates(validates)
|
84
|
+
end
|
85
|
+
|
86
|
+
if required == :nullable
|
87
|
+
self.owner.validates(required: { argument: arg_name })
|
88
|
+
end
|
63
89
|
|
64
90
|
if definition_block
|
65
91
|
if definition_block.arity == 1
|
@@ -70,12 +96,26 @@ module GraphQL
|
|
70
96
|
end
|
71
97
|
end
|
72
98
|
|
99
|
+
def inspect
|
100
|
+
"#<#{self.class} #{path}: #{type.to_type_signature}#{description ? " @description=#{description.inspect}" : ""}>"
|
101
|
+
end
|
102
|
+
|
103
|
+
# @param default_value [Object] The value to use when the client doesn't provide one
|
73
104
|
# @return [Object] the value used when the client doesn't provide a value for this argument
|
74
|
-
|
105
|
+
def default_value(new_default_value = NOT_CONFIGURED)
|
106
|
+
if new_default_value != NOT_CONFIGURED
|
107
|
+
@default_value = new_default_value
|
108
|
+
end
|
109
|
+
@default_value
|
110
|
+
end
|
75
111
|
|
76
112
|
# @return [Boolean] True if this argument has a default value
|
77
113
|
def default_value?
|
78
|
-
@default_value !=
|
114
|
+
@default_value != NOT_CONFIGURED
|
115
|
+
end
|
116
|
+
|
117
|
+
def replace_null_with_default?
|
118
|
+
@replace_null_with_default
|
79
119
|
end
|
80
120
|
|
81
121
|
attr_writer :description
|
@@ -89,11 +129,21 @@ module GraphQL
|
|
89
129
|
end
|
90
130
|
end
|
91
131
|
|
92
|
-
|
93
|
-
|
132
|
+
# @return [String] Deprecation reason for this argument
|
133
|
+
def deprecation_reason(text = nil)
|
134
|
+
if text
|
135
|
+
self.deprecation_reason = text
|
136
|
+
else
|
137
|
+
super()
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def deprecation_reason=(new_reason)
|
142
|
+
validate_deprecated_or_optional(null: @null, deprecation_reason: new_reason)
|
143
|
+
super
|
94
144
|
end
|
95
145
|
|
96
|
-
def
|
146
|
+
def visible?(context)
|
97
147
|
true
|
98
148
|
end
|
99
149
|
|
@@ -117,41 +167,39 @@ module GraphQL
|
|
117
167
|
end
|
118
168
|
end
|
119
169
|
elsif as_type.kind.input_object?
|
120
|
-
as_type.
|
121
|
-
input_obj_arg = input_obj_arg.type_class
|
122
|
-
# TODO: this skips input objects whose values were alread replaced with application objects.
|
123
|
-
# See: https://github.com/rmosolgo/graphql-ruby/issues/2633
|
124
|
-
if value.respond_to?(:key?) && value.key?(input_obj_arg.keyword) && !input_obj_arg.authorized?(obj, value[input_obj_arg.keyword], ctx)
|
125
|
-
return false
|
126
|
-
end
|
127
|
-
end
|
170
|
+
return as_type.authorized?(obj, value, ctx)
|
128
171
|
end
|
129
172
|
# None of the early-return conditions were activated,
|
130
173
|
# so this is authorized.
|
131
174
|
true
|
132
175
|
end
|
133
176
|
|
134
|
-
def
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
argument.as = @as
|
141
|
-
argument.ast_node = ast_node
|
142
|
-
argument.method_access = @method_access
|
143
|
-
if NO_DEFAULT != @default_value
|
144
|
-
argument.default_value = @default_value
|
177
|
+
def type=(new_type)
|
178
|
+
validate_input_type(new_type)
|
179
|
+
# This isn't true for LateBoundTypes, but we can assume those will
|
180
|
+
# be updated via this codepath later in schema setup.
|
181
|
+
if new_type.respond_to?(:non_null?)
|
182
|
+
validate_deprecated_or_optional(null: !new_type.non_null?, deprecation_reason: deprecation_reason)
|
145
183
|
end
|
146
|
-
|
184
|
+
@type = new_type
|
147
185
|
end
|
148
186
|
|
149
|
-
attr_writer :type
|
150
|
-
|
151
187
|
def type
|
152
|
-
@type ||=
|
153
|
-
|
154
|
-
|
188
|
+
@type ||= begin
|
189
|
+
parsed_type = begin
|
190
|
+
Member::BuildType.parse_type(@type_expr, null: @null)
|
191
|
+
rescue StandardError => err
|
192
|
+
raise ArgumentError, "Couldn't build type for Argument #{@owner.name}.#{name}: #{err.class.name}: #{err.message}", err.backtrace
|
193
|
+
end
|
194
|
+
# Use the setter method to get validations
|
195
|
+
self.type = parsed_type
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def statically_coercible?
|
200
|
+
return @statically_coercible if defined?(@statically_coercible)
|
201
|
+
|
202
|
+
@statically_coercible = !@prepare.is_a?(String) && !@prepare.is_a?(Symbol)
|
155
203
|
end
|
156
204
|
|
157
205
|
# Apply the {prepare} configuration to `value`, using methods from `obj`.
|
@@ -162,6 +210,8 @@ module GraphQL
|
|
162
210
|
value = value.prepare
|
163
211
|
end
|
164
212
|
|
213
|
+
Schema::Validator.validate!(validators, obj, context, value)
|
214
|
+
|
165
215
|
if @prepare.nil?
|
166
216
|
value
|
167
217
|
elsif @prepare.is_a?(String) || @prepare.is_a?(Symbol)
|
@@ -180,6 +230,160 @@ module GraphQL
|
|
180
230
|
raise "Invalid prepare for #{@owner.name}.name: #{@prepare.inspect}"
|
181
231
|
end
|
182
232
|
end
|
233
|
+
|
234
|
+
# @api private
|
235
|
+
def coerce_into_values(parent_object, values, context, argument_values)
|
236
|
+
arg_name = graphql_name
|
237
|
+
arg_key = keyword
|
238
|
+
default_used = false
|
239
|
+
|
240
|
+
if values.key?(arg_name)
|
241
|
+
value = values[arg_name]
|
242
|
+
elsif values.key?(arg_key)
|
243
|
+
value = values[arg_key]
|
244
|
+
elsif default_value?
|
245
|
+
value = default_value
|
246
|
+
default_used = true
|
247
|
+
else
|
248
|
+
# no value at all
|
249
|
+
owner.validate_directive_argument(self, nil)
|
250
|
+
return
|
251
|
+
end
|
252
|
+
|
253
|
+
if value.nil? && replace_null_with_default?
|
254
|
+
value = default_value
|
255
|
+
default_used = true
|
256
|
+
end
|
257
|
+
|
258
|
+
loaded_value = nil
|
259
|
+
coerced_value = begin
|
260
|
+
type.coerce_input(value, context)
|
261
|
+
rescue StandardError => err
|
262
|
+
context.schema.handle_or_reraise(context, err)
|
263
|
+
end
|
264
|
+
|
265
|
+
# If this isn't lazy, then the block returns eagerly and assigns the result here
|
266
|
+
# If it _is_ lazy, then we write the lazy to the hash, then update it later
|
267
|
+
argument_values[arg_key] = context.schema.after_lazy(coerced_value) do |resolved_coerced_value|
|
268
|
+
owner.validate_directive_argument(self, resolved_coerced_value)
|
269
|
+
prepared_value = begin
|
270
|
+
prepare_value(parent_object, resolved_coerced_value, context: context)
|
271
|
+
rescue StandardError => err
|
272
|
+
context.schema.handle_or_reraise(context, err)
|
273
|
+
end
|
274
|
+
|
275
|
+
if loads && !from_resolver?
|
276
|
+
loaded_value = begin
|
277
|
+
load_and_authorize_value(owner, prepared_value, context)
|
278
|
+
rescue StandardError => err
|
279
|
+
context.schema.handle_or_reraise(context, err)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
maybe_loaded_value = loaded_value || prepared_value
|
284
|
+
context.schema.after_lazy(maybe_loaded_value) do |resolved_loaded_value|
|
285
|
+
# TODO code smell to access such a deeply-nested constant in a distant module
|
286
|
+
argument_values[arg_key] = GraphQL::Execution::Interpreter::ArgumentValue.new(
|
287
|
+
value: resolved_loaded_value,
|
288
|
+
definition: self,
|
289
|
+
default_used: default_used,
|
290
|
+
)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
def load_and_authorize_value(load_method_owner, coerced_value, context)
|
296
|
+
if coerced_value.nil?
|
297
|
+
return nil
|
298
|
+
end
|
299
|
+
arg_load_method = "load_#{keyword}"
|
300
|
+
if load_method_owner.respond_to?(arg_load_method)
|
301
|
+
custom_loaded_value = if load_method_owner.is_a?(Class)
|
302
|
+
load_method_owner.public_send(arg_load_method, coerced_value, context)
|
303
|
+
else
|
304
|
+
load_method_owner.public_send(arg_load_method, coerced_value)
|
305
|
+
end
|
306
|
+
context.schema.after_lazy(custom_loaded_value) do |custom_value|
|
307
|
+
if loads
|
308
|
+
if type.list?
|
309
|
+
loaded_values = custom_value.each_with_index.map { |custom_val, idx|
|
310
|
+
id = coerced_value[idx]
|
311
|
+
load_method_owner.authorize_application_object(self, id, context, custom_val)
|
312
|
+
}
|
313
|
+
context.schema.after_any_lazies(loaded_values, &:itself)
|
314
|
+
else
|
315
|
+
load_method_owner.authorize_application_object(self, coerced_value, context, custom_loaded_value)
|
316
|
+
end
|
317
|
+
else
|
318
|
+
custom_value
|
319
|
+
end
|
320
|
+
end
|
321
|
+
elsif loads
|
322
|
+
if type.list?
|
323
|
+
loaded_values = coerced_value.map { |val| load_method_owner.load_and_authorize_application_object(self, val, context) }
|
324
|
+
context.schema.after_any_lazies(loaded_values, &:itself)
|
325
|
+
else
|
326
|
+
load_method_owner.load_and_authorize_application_object(self, coerced_value, context)
|
327
|
+
end
|
328
|
+
else
|
329
|
+
coerced_value
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
# @api private
|
334
|
+
def validate_default_value
|
335
|
+
coerced_default_value = begin
|
336
|
+
# This is weird, but we should accept single-item default values for list-type arguments.
|
337
|
+
# If we used `coerce_isolated_input` below, it would do this for us, but it's not really
|
338
|
+
# the right thing here because we expect default values in application format (Ruby values)
|
339
|
+
# not GraphQL format (scalar values).
|
340
|
+
#
|
341
|
+
# But I don't think Schema::List#coerce_result should apply wrapping to single-item lists.
|
342
|
+
prepped_default_value = if default_value.nil?
|
343
|
+
nil
|
344
|
+
elsif (type.kind.list? || (type.kind.non_null? && type.of_type.list?)) && !default_value.respond_to?(:map)
|
345
|
+
[default_value]
|
346
|
+
else
|
347
|
+
default_value
|
348
|
+
end
|
349
|
+
|
350
|
+
type.coerce_isolated_result(prepped_default_value) unless prepped_default_value.nil?
|
351
|
+
rescue GraphQL::Schema::Enum::UnresolvedValueError
|
352
|
+
# It raises this, which is helpful at runtime, but not here...
|
353
|
+
default_value
|
354
|
+
end
|
355
|
+
res = type.valid_isolated_input?(coerced_default_value)
|
356
|
+
if !res
|
357
|
+
raise InvalidDefaultValueError.new(self)
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
class InvalidDefaultValueError < GraphQL::Error
|
362
|
+
def initialize(argument)
|
363
|
+
message = "`#{argument.path}` has an invalid default value: `#{argument.default_value.inspect}` isn't accepted by `#{argument.type.to_type_signature}`; update the default value or the argument type."
|
364
|
+
super(message)
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
private
|
369
|
+
|
370
|
+
def validate_input_type(input_type)
|
371
|
+
if input_type.is_a?(String) || input_type.is_a?(GraphQL::Schema::LateBoundType)
|
372
|
+
# Do nothing; assume this will be validated later
|
373
|
+
elsif input_type.kind.non_null? || input_type.kind.list?
|
374
|
+
validate_input_type(input_type.unwrap)
|
375
|
+
elsif !input_type.kind.input?
|
376
|
+
raise ArgumentError, "Invalid input type for #{path}: #{input_type.graphql_name}. Must be scalar, enum, or input object, not #{input_type.kind.name}."
|
377
|
+
else
|
378
|
+
# It's an input type, we're OK
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
def validate_deprecated_or_optional(null:, deprecation_reason:)
|
383
|
+
if deprecation_reason && !null
|
384
|
+
raise ArgumentError, "Required arguments cannot be deprecated: #{path}."
|
385
|
+
end
|
386
|
+
end
|
183
387
|
end
|
184
388
|
end
|
185
389
|
end
|
@@ -13,6 +13,8 @@ module GraphQL
|
|
13
13
|
def self.decode(encoded_text, nonce: false)
|
14
14
|
# urlsafe_decode64 is for forward compatibility
|
15
15
|
Base64Bp.urlsafe_decode64(encoded_text)
|
16
|
+
rescue ArgumentError
|
17
|
+
raise GraphQL::ExecutionError, "Invalid input: #{encoded_text.inspect}"
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -45,8 +45,10 @@ module GraphQL
|
|
45
45
|
@resolve_hash[type_name_s][field_name.to_s] = resolve_fn
|
46
46
|
end
|
47
47
|
when Proc
|
48
|
-
# for example,
|
48
|
+
# for example, "resolve_type"
|
49
49
|
@resolve_hash[type_name_s] = fields
|
50
|
+
else
|
51
|
+
raise ArgumentError, "Unexpected resolve hash value for #{type_name.inspect}: #{fields.inspect} (#{fields.class})"
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|