graphql 1.12.12 → 2.4.8
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 +3 -8
- 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 +60 -4
- data/lib/generators/graphql/interface_generator.rb +7 -7
- 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 +5 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +10 -38
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +23 -12
- 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 +2 -0
- data/lib/generators/graphql/templates/base_edge.erb +2 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_resolver.erb +8 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +5 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +4 -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 +2 -0
- data/lib/generators/graphql/templates/object.erb +4 -2
- data/lib/generators/graphql/templates/query_type.erb +2 -0
- data/lib/generators/graphql/templates/scalar.erb +3 -1
- data/lib/generators/graphql/templates/schema.erb +22 -2
- data/lib/generators/graphql/templates/union.erb +4 -2
- data/lib/generators/graphql/type_generator.rb +46 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/analyzer.rb +89 -0
- data/lib/graphql/analysis/field_usage.rb +65 -28
- data/lib/graphql/analysis/max_query_complexity.rb +11 -17
- data/lib/graphql/analysis/max_query_depth.rb +13 -19
- data/lib/graphql/analysis/query_complexity.rb +156 -61
- data/lib/graphql/analysis/query_depth.rb +38 -23
- data/lib/graphql/analysis/visitor.rb +283 -0
- data/lib/graphql/analysis.rb +90 -6
- data/lib/graphql/autoload.rb +38 -0
- data/lib/graphql/backtrace/inspect_result.rb +0 -12
- data/lib/graphql/backtrace/table.rb +4 -22
- data/lib/graphql/backtrace/trace.rb +93 -0
- data/lib/graphql/backtrace/tracer.rb +8 -6
- data/lib/graphql/backtrace.rb +3 -8
- data/lib/graphql/coercion_error.rb +1 -9
- data/lib/graphql/current.rb +52 -0
- data/lib/graphql/dataloader/async_dataloader.rb +89 -0
- data/lib/graphql/dataloader/null_dataloader.rb +4 -2
- data/lib/graphql/dataloader/request.rb +5 -0
- data/lib/graphql/dataloader/source.rb +125 -33
- data/lib/graphql/dataloader.rb +193 -143
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/duration_encoding_error.rb +16 -0
- data/lib/graphql/execution/errors.rb +12 -81
- data/lib/graphql/execution/interpreter/argument_value.rb +5 -1
- data/lib/graphql/execution/interpreter/arguments.rb +2 -2
- data/lib/graphql/execution/interpreter/arguments_cache.rb +33 -36
- data/lib/graphql/execution/interpreter/resolve.rb +38 -4
- data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +175 -0
- data/lib/graphql/execution/interpreter/runtime.rb +447 -403
- data/lib/graphql/execution/interpreter.rb +126 -80
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +133 -55
- data/lib/graphql/execution/multiplex.rb +4 -172
- data/lib/graphql/execution.rb +11 -4
- 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 +6 -4
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +11 -18
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +4 -4
- data/lib/graphql/introspection/input_value_type.rb +10 -4
- data/lib/graphql/introspection/schema_type.rb +17 -15
- data/lib/graphql/introspection/type_type.rb +29 -16
- data/lib/graphql/introspection.rb +6 -2
- data/lib/graphql/invalid_null_error.rb +1 -1
- data/lib/graphql/language/block_string.rb +37 -25
- data/lib/graphql/language/cache.rb +13 -0
- data/lib/graphql/language/comment.rb +18 -0
- data/lib/graphql/language/definition_slice.rb +1 -1
- data/lib/graphql/language/document_from_schema_definition.rb +122 -81
- data/lib/graphql/language/lexer.rb +364 -1467
- data/lib/graphql/language/nodes.rb +197 -106
- data/lib/graphql/language/parser.rb +799 -1920
- data/lib/graphql/language/printer.rb +372 -160
- data/lib/graphql/language/sanitized_printer.rb +25 -27
- data/lib/graphql/language/static_visitor.rb +167 -0
- data/lib/graphql/language/visitor.rb +188 -141
- data/lib/graphql/language.rb +62 -1
- data/lib/graphql/load_application_object_failed_error.rb +5 -1
- data/lib/graphql/name_validator.rb +0 -4
- data/lib/graphql/pagination/active_record_relation_connection.rb +37 -8
- data/lib/graphql/pagination/array_connection.rb +8 -6
- data/lib/graphql/pagination/connection.rb +61 -7
- data/lib/graphql/pagination/connections.rb +22 -23
- data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
- data/lib/graphql/pagination/relation_connection.rb +60 -28
- data/lib/graphql/query/context/scoped_context.rb +101 -0
- data/lib/graphql/query/context.rb +146 -222
- data/lib/graphql/query/input_validation_result.rb +10 -1
- data/lib/graphql/query/null_context.rb +15 -32
- data/lib/graphql/query/validation_pipeline.rb +15 -39
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +35 -17
- data/lib/graphql/query.rb +149 -82
- data/lib/graphql/railtie.rb +15 -109
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +30 -11
- data/lib/graphql/relay/range_add.rb +9 -16
- 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/graphql/field_type_in_block.rb +144 -0
- data/lib/graphql/rubocop/graphql/root_types_in_block.rb +38 -0
- data/lib/graphql/rubocop.rb +6 -0
- data/lib/graphql/schema/addition.rb +98 -54
- data/lib/graphql/schema/always_visible.rb +14 -0
- data/lib/graphql/schema/argument.rb +179 -82
- data/lib/graphql/schema/base_64_encoder.rb +3 -5
- data/lib/graphql/schema/build_from_definition.rb +77 -39
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +4 -4
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/one_of.rb +24 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/specified_by.rb +14 -0
- data/lib/graphql/schema/directive/transform.rb +2 -2
- data/lib/graphql/schema/directive.rb +36 -22
- data/lib/graphql/schema/enum.rb +158 -63
- data/lib/graphql/schema/enum_value.rb +12 -21
- data/lib/graphql/schema/field/connection_extension.rb +7 -17
- data/lib/graphql/schema/field/scope_extension.rb +8 -1
- data/lib/graphql/schema/field.rb +521 -359
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +3 -7
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/has_single_input_argument.rb +160 -0
- data/lib/graphql/schema/input_object.rb +148 -99
- data/lib/graphql/schema/interface.rb +41 -64
- data/lib/graphql/schema/introspection_system.rb +12 -26
- data/lib/graphql/schema/late_bound_type.rb +12 -2
- data/lib/graphql/schema/list.rb +18 -7
- data/lib/graphql/schema/loader.rb +6 -5
- data/lib/graphql/schema/member/base_dsl_methods.rb +32 -18
- data/lib/graphql/schema/member/build_type.rb +16 -13
- data/lib/graphql/schema/member/has_arguments.rb +270 -86
- data/lib/graphql/schema/member/has_ast_node.rb +12 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
- data/lib/graphql/schema/member/has_directives.rb +81 -61
- data/lib/graphql/schema/member/has_fields.rb +169 -31
- data/lib/graphql/schema/member/has_interfaces.rb +143 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +5 -1
- data/lib/graphql/schema/member/has_validators.rb +32 -6
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/scoped.rb +19 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +16 -0
- data/lib/graphql/schema/member/validates_input.rb +6 -6
- data/lib/graphql/schema/member.rb +1 -6
- data/lib/graphql/schema/mutation.rb +7 -9
- data/lib/graphql/schema/non_null.rb +7 -7
- data/lib/graphql/schema/object.rb +38 -119
- data/lib/graphql/schema/printer.rb +24 -25
- data/lib/graphql/schema/relay_classic_mutation.rb +13 -91
- data/lib/graphql/schema/resolver/has_payload_type.rb +46 -11
- data/lib/graphql/schema/resolver.rb +118 -115
- data/lib/graphql/schema/scalar.rb +20 -21
- data/lib/graphql/schema/subscription.rb +95 -21
- data/lib/graphql/schema/timeout.rb +25 -29
- data/lib/graphql/schema/type_expression.rb +2 -2
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +16 -16
- data/lib/graphql/schema/unique_within_type.rb +1 -1
- data/lib/graphql/schema/validator/all_validator.rb +62 -0
- data/lib/graphql/schema/validator/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 +3 -1
- data/lib/graphql/schema/validator/format_validator.rb +4 -5
- data/lib/graphql/schema/validator/inclusion_validator.rb +3 -1
- data/lib/graphql/schema/validator/length_validator.rb +5 -3
- data/lib/graphql/schema/validator/numericality_validator.rb +13 -2
- data/lib/graphql/schema/validator/required_validator.rb +56 -18
- data/lib/graphql/schema/validator.rb +38 -28
- data/lib/graphql/schema/visibility/migration.rb +188 -0
- data/lib/graphql/schema/visibility/profile.rb +359 -0
- data/lib/graphql/schema/visibility/visit.rb +190 -0
- data/lib/graphql/schema/visibility.rb +294 -0
- data/lib/graphql/schema/warden.rb +423 -134
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +1015 -1057
- data/lib/graphql/static_validation/all_rules.rb +3 -1
- data/lib/graphql/static_validation/base_visitor.rb +15 -28
- 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 +24 -7
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +4 -3
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +13 -7
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +15 -13
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +12 -2
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +13 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +62 -35
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +12 -2
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
- data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
- data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +1 -1
- data/lib/graphql/static_validation/rules/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 +7 -5
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +5 -5
- data/lib/graphql/static_validation/rules/subscription_root_exists.rb +1 -1
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +14 -8
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +18 -27
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +1 -1
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +11 -2
- data/lib/graphql/static_validation/validation_context.rb +32 -6
- data/lib/graphql/static_validation/validator.rb +11 -27
- data/lib/graphql/static_validation.rb +0 -3
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +49 -11
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +11 -5
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +40 -1
- data/lib/graphql/subscriptions/event.rb +87 -38
- data/lib/graphql/subscriptions/serialize.rb +27 -3
- data/lib/graphql/subscriptions.rb +63 -49
- data/lib/graphql/testing/helpers.rb +155 -0
- data/lib/graphql/testing.rb +2 -0
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +6 -20
- data/lib/graphql/tracing/appoptics_trace.rb +253 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +4 -2
- data/lib/graphql/tracing/appsignal_trace.rb +79 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +17 -0
- data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +185 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +27 -15
- data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +11 -28
- data/lib/graphql/tracing/legacy_trace.rb +12 -0
- data/lib/graphql/tracing/new_relic_trace.rb +77 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
- data/lib/graphql/tracing/notifications_trace.rb +45 -0
- data/lib/graphql/tracing/notifications_tracing.rb +61 -0
- data/lib/graphql/tracing/null_trace.rb +9 -0
- data/lib/graphql/tracing/platform_trace.rb +118 -0
- data/lib/graphql/tracing/platform_tracing.rb +46 -49
- data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +6 -2
- data/lib/graphql/tracing/prometheus_trace.rb +94 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +5 -3
- data/lib/graphql/tracing/scout_trace.rb +74 -0
- data/lib/graphql/tracing/scout_tracing.rb +2 -0
- data/lib/graphql/tracing/sentry_trace.rb +114 -0
- data/lib/graphql/tracing/statsd_trace.rb +58 -0
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +79 -0
- data/lib/graphql/tracing.rb +29 -52
- data/lib/graphql/type_kinds.rb +7 -4
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +1 -1
- data/lib/graphql/types/iso_8601_date.rb +17 -6
- data/lib/graphql/types/iso_8601_date_time.rb +12 -1
- data/lib/graphql/types/iso_8601_duration.rb +77 -0
- data/lib/graphql/types/relay/base_connection.rb +16 -6
- data/lib/graphql/types/relay/connection_behaviors.rb +92 -32
- data/lib/graphql/types/relay/edge_behaviors.rb +46 -7
- data/lib/graphql/types/relay/has_node_field.rb +2 -2
- data/lib/graphql/types/relay/has_nodes_field.rb +2 -2
- data/lib/graphql/types/relay/node_behaviors.rb +12 -2
- data/lib/graphql/types/relay/page_info_behaviors.rb +11 -2
- data/lib/graphql/types/relay.rb +0 -3
- data/lib/graphql/types/string.rb +2 -2
- data/lib/graphql/types.rb +18 -10
- data/lib/graphql/unauthorized_enum_value_error.rb +13 -0
- data/lib/graphql/unauthorized_error.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +82 -137
- data/readme.md +13 -6
- metadata +127 -186
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/ast/analyzer.rb +0 -84
- data/lib/graphql/analysis/ast/field_usage.rb +0 -28
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -23
- data/lib/graphql/analysis/ast/max_query_depth.rb +0 -22
- data/lib/graphql/analysis/ast/query_complexity.rb +0 -234
- data/lib/graphql/analysis/ast/query_depth.rb +0 -56
- data/lib/graphql/analysis/ast/visitor.rb +0 -268
- data/lib/graphql/analysis/ast.rb +0 -91
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backwards_compatibility.rb +0 -61
- 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 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -240
- 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 -47
- data/lib/graphql/deprecation.rb +0 -13
- 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 -111
- data/lib/graphql/enum_type.rb +0 -129
- data/lib/graphql/execution/execute.rb +0 -333
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/filter.rb +0 -53
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -262
- data/lib/graphql/language/parser.y +0 -543
- data/lib/graphql/language/token.rb +0 -38
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -130
- data/lib/graphql/query/arguments.rb +0 -189
- data/lib/graphql/query/arguments_cache.rb +0 -24
- data/lib/graphql/query/executor.rb +0 -52
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -40
- data/lib/graphql/relay/array_connection.rb +0 -83
- data/lib/graphql/relay/base_connection.rb +0 -189
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -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 -106
- data/lib/graphql/relay/node.rb +0 -39
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -188
- data/lib/graphql/relay/type_extensions.rb +0 -32
- data/lib/graphql/scalar_type.rb +0 -91
- data/lib/graphql/schema/base_64_bp.rb +0 -26
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -17
- data/lib/graphql/schema/invalid_type_error.rb +0 -7
- data/lib/graphql/schema/member/accepts_definition.rb +0 -152
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
- data/lib/graphql/schema/member/instrumentation.rb +0 -131
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -44
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -88
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -313
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/static_validation/type_stack.rb +0 -216
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/instrumentation.rb +0 -79
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/default_relay.rb +0 -27
- data/lib/graphql/types/relay/node_field.rb +0 -25
- data/lib/graphql/types/relay/nodes_field.rb +0 -27
- data/lib/graphql/union_type.rb +0 -115
- data/lib/graphql/upgrader/member.rb +0 -937
- data/lib/graphql/upgrader/schema.rb +0 -38
@@ -2,20 +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
7
|
include GraphQL::Schema::Member::HasDirectives
|
14
8
|
include GraphQL::Schema::Member::HasDeprecationReason
|
15
9
|
include GraphQL::Schema::Member::HasValidators
|
16
|
-
include GraphQL::
|
17
|
-
|
18
|
-
NO_DEFAULT = :__no_default__
|
10
|
+
include GraphQL::EmptyObjects
|
19
11
|
|
20
12
|
# @return [String] the GraphQL name for this argument, camelized unless `camelize: false` is provided
|
21
13
|
attr_reader :name
|
@@ -24,8 +16,14 @@ module GraphQL
|
|
24
16
|
# @return [GraphQL::Schema::Field, Class] The field or input object this argument belongs to
|
25
17
|
attr_reader :owner
|
26
18
|
|
27
|
-
# @
|
28
|
-
|
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
|
29
27
|
|
30
28
|
# @return [Symbol] This argument's name in Ruby keyword arguments
|
31
29
|
attr_reader :keyword
|
@@ -41,24 +39,32 @@ module GraphQL
|
|
41
39
|
# @param arg_name [Symbol]
|
42
40
|
# @param type_expr
|
43
41
|
# @param desc [String]
|
44
|
-
# @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`.
|
45
43
|
# @param description [String]
|
46
44
|
# @param default_value [Object]
|
47
45
|
# @param as [Symbol] Override the keyword name when passed to a method
|
48
46
|
# @param prepare [Symbol] A method to call to transform this argument's valuebefore sending it to field resolution
|
49
47
|
# @param camelize [Boolean] if true, the name will be camelized when building the schema
|
50
48
|
# @param from_resolver [Boolean] if true, a Resolver class defined this argument
|
51
|
-
# @param method_access [Boolean] If false, don't build method access on legacy {Query::Arguments} instances.
|
52
49
|
# @param directives [Hash{Class => Hash}]
|
53
50
|
# @param deprecation_reason [String]
|
54
51
|
# @param validates [Hash, nil] Options for building validators, if any should be applied
|
55
|
-
|
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, comment: 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)
|
56
54
|
arg_name ||= name
|
57
55
|
@name = -(camelize ? Member::BuildType.camelize(arg_name.to_s) : arg_name.to_s)
|
58
56
|
@type_expr = type_expr || type
|
59
57
|
@description = desc || description
|
60
|
-
@
|
58
|
+
@comment = comment
|
59
|
+
@null = required != true
|
61
60
|
@default_value = default_value
|
61
|
+
if replace_null_with_default
|
62
|
+
if !default_value?
|
63
|
+
raise ArgumentError, "`replace_null_with_default: true` requires a default value, please provide one with `default_value: ...`"
|
64
|
+
end
|
65
|
+
@replace_null_with_default = true
|
66
|
+
end
|
67
|
+
|
62
68
|
@owner = owner
|
63
69
|
@as = as
|
64
70
|
@loads = loads
|
@@ -66,7 +72,6 @@ module GraphQL
|
|
66
72
|
@prepare = prepare
|
67
73
|
@ast_node = ast_node
|
68
74
|
@from_resolver = from_resolver
|
69
|
-
@method_access = method_access
|
70
75
|
self.deprecation_reason = deprecation_reason
|
71
76
|
|
72
77
|
if directives
|
@@ -75,7 +80,13 @@ module GraphQL
|
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
78
|
-
|
83
|
+
if validates && !validates.empty?
|
84
|
+
self.validates(validates)
|
85
|
+
end
|
86
|
+
|
87
|
+
if required == :nullable
|
88
|
+
self.owner.validates(required: { argument: arg_name })
|
89
|
+
end
|
79
90
|
|
80
91
|
if definition_block
|
81
92
|
if definition_block.arity == 1
|
@@ -86,12 +97,26 @@ module GraphQL
|
|
86
97
|
end
|
87
98
|
end
|
88
99
|
|
100
|
+
def inspect
|
101
|
+
"#<#{self.class} #{path}: #{type.to_type_signature}#{description ? " @description=#{description.inspect}" : ""}>"
|
102
|
+
end
|
103
|
+
|
104
|
+
# @param default_value [Object] The value to use when the client doesn't provide one
|
89
105
|
# @return [Object] the value used when the client doesn't provide a value for this argument
|
90
|
-
|
106
|
+
def default_value(new_default_value = NOT_CONFIGURED)
|
107
|
+
if new_default_value != NOT_CONFIGURED
|
108
|
+
@default_value = new_default_value
|
109
|
+
end
|
110
|
+
@default_value
|
111
|
+
end
|
91
112
|
|
92
113
|
# @return [Boolean] True if this argument has a default value
|
93
114
|
def default_value?
|
94
|
-
@default_value !=
|
115
|
+
@default_value != NOT_CONFIGURED
|
116
|
+
end
|
117
|
+
|
118
|
+
def replace_null_with_default?
|
119
|
+
@replace_null_with_default
|
95
120
|
end
|
96
121
|
|
97
122
|
attr_writer :description
|
@@ -105,6 +130,17 @@ module GraphQL
|
|
105
130
|
end
|
106
131
|
end
|
107
132
|
|
133
|
+
attr_writer :comment
|
134
|
+
|
135
|
+
# @return [String] Comment for this argument
|
136
|
+
def comment(text = nil)
|
137
|
+
if text
|
138
|
+
@comment = text
|
139
|
+
else
|
140
|
+
@comment
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
108
144
|
# @return [String] Deprecation reason for this argument
|
109
145
|
def deprecation_reason(text = nil)
|
110
146
|
if text
|
@@ -123,10 +159,6 @@ module GraphQL
|
|
123
159
|
true
|
124
160
|
end
|
125
161
|
|
126
|
-
def accessible?(context)
|
127
|
-
true
|
128
|
-
end
|
129
|
-
|
130
162
|
def authorized?(obj, value, ctx)
|
131
163
|
authorized_as_type?(obj, value, ctx, as_type: type)
|
132
164
|
end
|
@@ -147,38 +179,13 @@ module GraphQL
|
|
147
179
|
end
|
148
180
|
end
|
149
181
|
elsif as_type.kind.input_object?
|
150
|
-
as_type.
|
151
|
-
input_obj_arg = input_obj_arg.type_class
|
152
|
-
# TODO: this skips input objects whose values were alread replaced with application objects.
|
153
|
-
# See: https://github.com/rmosolgo/graphql-ruby/issues/2633
|
154
|
-
if value.respond_to?(:key?) && value.key?(input_obj_arg.keyword) && !input_obj_arg.authorized?(obj, value[input_obj_arg.keyword], ctx)
|
155
|
-
return false
|
156
|
-
end
|
157
|
-
end
|
182
|
+
return as_type.authorized?(obj, value, ctx)
|
158
183
|
end
|
159
184
|
# None of the early-return conditions were activated,
|
160
185
|
# so this is authorized.
|
161
186
|
true
|
162
187
|
end
|
163
188
|
|
164
|
-
def to_graphql
|
165
|
-
argument = GraphQL::Argument.new
|
166
|
-
argument.name = @name
|
167
|
-
argument.type = -> { type }
|
168
|
-
argument.description = @description
|
169
|
-
argument.metadata[:type_class] = self
|
170
|
-
argument.as = @as
|
171
|
-
argument.ast_node = ast_node
|
172
|
-
argument.method_access = @method_access
|
173
|
-
if NO_DEFAULT != @default_value
|
174
|
-
argument.default_value = @default_value
|
175
|
-
end
|
176
|
-
if self.deprecation_reason
|
177
|
-
argument.deprecation_reason = self.deprecation_reason
|
178
|
-
end
|
179
|
-
argument
|
180
|
-
end
|
181
|
-
|
182
189
|
def type=(new_type)
|
183
190
|
validate_input_type(new_type)
|
184
191
|
# This isn't true for LateBoundTypes, but we can assume those will
|
@@ -203,16 +210,16 @@ module GraphQL
|
|
203
210
|
|
204
211
|
def statically_coercible?
|
205
212
|
return @statically_coercible if defined?(@statically_coercible)
|
206
|
-
|
207
|
-
@statically_coercible =
|
213
|
+
requires_parent_object = @prepare.is_a?(String) || @prepare.is_a?(Symbol) || @own_validators
|
214
|
+
@statically_coercible = !requires_parent_object
|
208
215
|
end
|
209
216
|
|
210
217
|
# Apply the {prepare} configuration to `value`, using methods from `obj`.
|
211
218
|
# Used by the runtime.
|
212
219
|
# @api private
|
213
220
|
def prepare_value(obj, value, context: nil)
|
214
|
-
if
|
215
|
-
value = value
|
221
|
+
if type.unwrap.kind.input_object?
|
222
|
+
value = recursively_prepare_input_object(value, type)
|
216
223
|
end
|
217
224
|
|
218
225
|
Schema::Validator.validate!(validators, obj, context, value)
|
@@ -226,8 +233,13 @@ module GraphQL
|
|
226
233
|
#
|
227
234
|
# This will have to be called later, when the runtime object _is_ available.
|
228
235
|
value
|
229
|
-
|
236
|
+
elsif obj.respond_to?(@prepare)
|
230
237
|
obj.public_send(@prepare, value)
|
238
|
+
elsif owner.respond_to?(@prepare)
|
239
|
+
owner.public_send(@prepare, value, context || obj.context)
|
240
|
+
else
|
241
|
+
raise "Invalid prepare for #{@owner.name}.name: #{@prepare.inspect}. "\
|
242
|
+
"Could not find prepare method #{@prepare} on #{obj.class} or #{owner}."
|
231
243
|
end
|
232
244
|
elsif @prepare.respond_to?(:call)
|
233
245
|
@prepare.call(value, context || obj.context)
|
@@ -255,50 +267,120 @@ module GraphQL
|
|
255
267
|
return
|
256
268
|
end
|
257
269
|
|
270
|
+
if value.nil? && replace_null_with_default?
|
271
|
+
value = default_value
|
272
|
+
default_used = true
|
273
|
+
end
|
274
|
+
|
258
275
|
loaded_value = nil
|
259
|
-
coerced_value =
|
276
|
+
coerced_value = begin
|
260
277
|
type.coerce_input(value, context)
|
278
|
+
rescue StandardError => err
|
279
|
+
context.schema.handle_or_reraise(context, err)
|
261
280
|
end
|
262
281
|
|
263
|
-
#
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
282
|
+
# If this isn't lazy, then the block returns eagerly and assigns the result here
|
283
|
+
# If it _is_ lazy, then we write the lazy to the hash, then update it later
|
284
|
+
argument_values[arg_key] = context.query.after_lazy(coerced_value) do |resolved_coerced_value|
|
285
|
+
owner.validate_directive_argument(self, resolved_coerced_value)
|
286
|
+
prepared_value = begin
|
287
|
+
prepare_value(parent_object, resolved_coerced_value, context: context)
|
288
|
+
rescue StandardError => err
|
289
|
+
context.schema.handle_or_reraise(context, err)
|
290
|
+
end
|
291
|
+
|
292
|
+
if loads && !from_resolver?
|
293
|
+
loaded_value = begin
|
294
|
+
load_and_authorize_value(owner, prepared_value, context)
|
295
|
+
rescue StandardError => err
|
296
|
+
context.schema.handle_or_reraise(context, err)
|
271
297
|
end
|
272
298
|
end
|
273
|
-
end
|
274
299
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
300
|
+
maybe_loaded_value = loaded_value || prepared_value
|
301
|
+
context.query.after_lazy(maybe_loaded_value) do |resolved_loaded_value|
|
302
|
+
# TODO code smell to access such a deeply-nested constant in a distant module
|
303
|
+
argument_values[arg_key] = GraphQL::Execution::Interpreter::ArgumentValue.new(
|
304
|
+
value: resolved_loaded_value,
|
305
|
+
original_value: resolved_coerced_value,
|
306
|
+
definition: self,
|
307
|
+
default_used: default_used,
|
308
|
+
)
|
309
|
+
end
|
279
310
|
end
|
311
|
+
end
|
280
312
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
313
|
+
def load_and_authorize_value(load_method_owner, coerced_value, context)
|
314
|
+
if coerced_value.nil?
|
315
|
+
return nil
|
316
|
+
end
|
317
|
+
arg_load_method = "load_#{keyword}"
|
318
|
+
if load_method_owner.respond_to?(arg_load_method)
|
319
|
+
custom_loaded_value = if load_method_owner.is_a?(Class)
|
320
|
+
load_method_owner.public_send(arg_load_method, coerced_value, context)
|
321
|
+
else
|
322
|
+
load_method_owner.public_send(arg_load_method, coerced_value)
|
287
323
|
end
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
324
|
+
context.query.after_lazy(custom_loaded_value) do |custom_value|
|
325
|
+
if loads
|
326
|
+
if type.list?
|
327
|
+
loaded_values = []
|
328
|
+
context.dataloader.run_isolated do
|
329
|
+
custom_value.each_with_index.map { |custom_val, idx|
|
330
|
+
id = coerced_value[idx]
|
331
|
+
context.dataloader.append_job do
|
332
|
+
loaded_values[idx] = load_method_owner.authorize_application_object(self, id, context, custom_val)
|
333
|
+
end
|
334
|
+
}
|
335
|
+
end
|
336
|
+
context.schema.after_any_lazies(loaded_values, &:itself)
|
337
|
+
else
|
338
|
+
load_method_owner.authorize_application_object(self, coerced_value, context, custom_loaded_value)
|
339
|
+
end
|
340
|
+
else
|
341
|
+
custom_value
|
342
|
+
end
|
343
|
+
end
|
344
|
+
elsif loads
|
345
|
+
if type.list?
|
346
|
+
loaded_values = []
|
347
|
+
# We want to run these list items all together,
|
348
|
+
# but we also need to wait for the result so we can return it :S
|
349
|
+
context.dataloader.run_isolated do
|
350
|
+
coerced_value.each_with_index { |val, idx|
|
351
|
+
context.dataloader.append_job do
|
352
|
+
loaded_values[idx] = load_method_owner.load_and_authorize_application_object(self, val, context)
|
353
|
+
end
|
354
|
+
}
|
355
|
+
end
|
356
|
+
context.schema.after_any_lazies(loaded_values, &:itself)
|
357
|
+
else
|
358
|
+
load_method_owner.load_and_authorize_application_object(self, coerced_value, context)
|
359
|
+
end
|
360
|
+
else
|
361
|
+
coerced_value
|
295
362
|
end
|
296
363
|
end
|
297
364
|
|
298
365
|
# @api private
|
299
366
|
def validate_default_value
|
367
|
+
return unless default_value?
|
300
368
|
coerced_default_value = begin
|
301
|
-
type
|
369
|
+
# This is weird, but we should accept single-item default values for list-type arguments.
|
370
|
+
# If we used `coerce_isolated_input` below, it would do this for us, but it's not really
|
371
|
+
# the right thing here because we expect default values in application format (Ruby values)
|
372
|
+
# not GraphQL format (scalar values).
|
373
|
+
#
|
374
|
+
# But I don't think Schema::List#coerce_result should apply wrapping to single-item lists.
|
375
|
+
prepped_default_value = if default_value.nil?
|
376
|
+
nil
|
377
|
+
elsif (type.kind.list? || (type.kind.non_null? && type.of_type.list?)) && !default_value.respond_to?(:map)
|
378
|
+
[default_value]
|
379
|
+
else
|
380
|
+
default_value
|
381
|
+
end
|
382
|
+
|
383
|
+
type.coerce_isolated_result(prepped_default_value) unless prepped_default_value.nil?
|
302
384
|
rescue GraphQL::Schema::Enum::UnresolvedValueError
|
303
385
|
# It raises this, which is helpful at runtime, but not here...
|
304
386
|
default_value
|
@@ -318,6 +400,21 @@ module GraphQL
|
|
318
400
|
|
319
401
|
private
|
320
402
|
|
403
|
+
def recursively_prepare_input_object(value, type)
|
404
|
+
if type.non_null?
|
405
|
+
type = type.of_type
|
406
|
+
end
|
407
|
+
|
408
|
+
if type.list? && !value.nil?
|
409
|
+
inner_type = type.of_type
|
410
|
+
value.map { |v| recursively_prepare_input_object(v, inner_type) }
|
411
|
+
elsif value.is_a?(GraphQL::Schema::InputObject)
|
412
|
+
value.prepare
|
413
|
+
else
|
414
|
+
value
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
321
418
|
def validate_input_type(input_type)
|
322
419
|
if input_type.is_a?(String) || input_type.is_a?(GraphQL::Schema::LateBoundType)
|
323
420
|
# Do nothing; assume this will be validated later
|
@@ -1,18 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'graphql/schema/base_64_bp'
|
4
|
-
|
2
|
+
require "base64"
|
5
3
|
module GraphQL
|
6
4
|
class Schema
|
7
5
|
# @api private
|
8
6
|
module Base64Encoder
|
9
7
|
def self.encode(unencoded_text, nonce: false)
|
10
|
-
|
8
|
+
Base64.urlsafe_encode64(unencoded_text, padding: false)
|
11
9
|
end
|
12
10
|
|
13
11
|
def self.decode(encoded_text, nonce: false)
|
14
12
|
# urlsafe_decode64 is for forward compatibility
|
15
|
-
|
13
|
+
Base64.urlsafe_decode64(encoded_text)
|
16
14
|
rescue ArgumentError
|
17
15
|
raise GraphQL::ExecutionError, "Invalid input: #{encoded_text.inspect}"
|
18
16
|
end
|