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
@@ -3,32 +3,34 @@ require "graphql/schema/build_from_definition/resolve_map"
|
|
3
3
|
|
4
4
|
module GraphQL
|
5
5
|
class Schema
|
6
|
-
# TODO Populate `.directive(...)` from here
|
7
6
|
module BuildFromDefinition
|
8
|
-
if !String.method_defined?(:-@)
|
9
|
-
using GraphQL::StringDedupBackport
|
10
|
-
end
|
11
|
-
|
12
7
|
class << self
|
13
8
|
# @see {Schema.from_definition}
|
14
|
-
def from_definition(definition_string, parser: GraphQL.default_parser, **kwargs)
|
15
|
-
|
9
|
+
def from_definition(schema_superclass, definition_string, parser: GraphQL.default_parser, **kwargs)
|
10
|
+
if defined?(parser::SchemaParser)
|
11
|
+
parser = parser::SchemaParser
|
12
|
+
end
|
13
|
+
from_document(schema_superclass, parser.parse(definition_string), **kwargs)
|
16
14
|
end
|
17
15
|
|
18
|
-
def from_definition_path(definition_path, parser: GraphQL.default_parser, **kwargs)
|
19
|
-
|
16
|
+
def from_definition_path(schema_superclass, definition_path, parser: GraphQL.default_parser, **kwargs)
|
17
|
+
if defined?(parser::SchemaParser)
|
18
|
+
parser = parser::SchemaParser
|
19
|
+
end
|
20
|
+
from_document(schema_superclass, parser.parse_file(definition_path), **kwargs)
|
20
21
|
end
|
21
22
|
|
22
|
-
def from_document(document, default_resolve:, using: {}, relay: false)
|
23
|
-
Builder.build(document, default_resolve: default_resolve || {}, relay: relay, using: using)
|
23
|
+
def from_document(schema_superclass, document, default_resolve:, using: {}, relay: false)
|
24
|
+
Builder.build(schema_superclass, document, default_resolve: default_resolve || {}, relay: relay, using: using)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
28
|
# @api private
|
28
29
|
module Builder
|
30
|
+
include GraphQL::EmptyObjects
|
29
31
|
extend self
|
30
32
|
|
31
|
-
def build(document, default_resolve:, using: {}, relay:)
|
33
|
+
def build(schema_superclass, document, default_resolve:, using: {}, relay:)
|
32
34
|
raise InvalidDocumentError.new('Must provide a document ast.') if !document || !document.is_a?(GraphQL::Language::Nodes::Document)
|
33
35
|
|
34
36
|
if default_resolve.is_a?(Hash)
|
@@ -41,34 +43,43 @@ module GraphQL
|
|
41
43
|
end
|
42
44
|
schema_definition = schema_defns.first
|
43
45
|
types = {}
|
44
|
-
directives =
|
46
|
+
directives = schema_superclass.directives.dup
|
45
47
|
type_resolver = build_resolve_type(types, directives, ->(type_name) { types[type_name] ||= Schema::LateBoundType.new(type_name)})
|
46
48
|
# Make a different type resolver because we need to coerce directive arguments
|
47
49
|
# _while_ building the schema.
|
48
50
|
# It will dig for a type if it encounters a custom type. This could be a problem if there are cycles.
|
49
51
|
directive_type_resolver = nil
|
50
|
-
directive_type_resolver = build_resolve_type(
|
52
|
+
directive_type_resolver = build_resolve_type(types, directives, ->(type_name) {
|
51
53
|
types[type_name] ||= begin
|
52
54
|
defn = document.definitions.find { |d| d.respond_to?(:name) && d.name == type_name }
|
53
|
-
|
55
|
+
if defn
|
56
|
+
build_definition_from_node(defn, directive_type_resolver, default_resolve)
|
57
|
+
elsif (built_in_defn = GraphQL::Schema::BUILT_IN_TYPES[type_name])
|
58
|
+
built_in_defn
|
59
|
+
else
|
60
|
+
raise "No definition for #{type_name.inspect} found in schema document or built-in types. Add a definition for it or remove it."
|
61
|
+
end
|
54
62
|
end
|
55
63
|
})
|
56
64
|
|
65
|
+
directives.merge!(GraphQL::Schema.default_directives)
|
57
66
|
document.definitions.each do |definition|
|
58
67
|
if definition.is_a?(GraphQL::Language::Nodes::DirectiveDefinition)
|
59
68
|
directives[definition.name] = build_directive(definition, directive_type_resolver)
|
60
69
|
end
|
61
70
|
end
|
62
71
|
|
63
|
-
directives = GraphQL::Schema.default_directives.merge(directives)
|
64
|
-
|
65
72
|
# In case any directives referenced built-in types for their arguments:
|
66
73
|
replace_late_bound_types_with_built_in(types)
|
67
74
|
|
75
|
+
schema_extensions = nil
|
68
76
|
document.definitions.each do |definition|
|
69
77
|
case definition
|
70
78
|
when GraphQL::Language::Nodes::SchemaDefinition, GraphQL::Language::Nodes::DirectiveDefinition
|
71
79
|
nil # already handled
|
80
|
+
when GraphQL::Language::Nodes::SchemaExtension
|
81
|
+
schema_extensions ||= []
|
82
|
+
schema_extensions << definition
|
72
83
|
else
|
73
84
|
# It's possible that this was already loaded by the directives
|
74
85
|
prev_type = types[definition.name]
|
@@ -95,6 +106,16 @@ module GraphQL
|
|
95
106
|
raise InvalidDocumentError.new("Specified subscription type \"#{schema_definition.subscription}\" not found in document.") unless types[schema_definition.subscription]
|
96
107
|
subscription_root_type = types[schema_definition.subscription]
|
97
108
|
end
|
109
|
+
|
110
|
+
if schema_definition.query.nil? &&
|
111
|
+
schema_definition.mutation.nil? &&
|
112
|
+
schema_definition.subscription.nil?
|
113
|
+
# This schema may have been given with directives only,
|
114
|
+
# check for defaults:
|
115
|
+
query_root_type = types['Query']
|
116
|
+
mutation_root_type = types['Mutation']
|
117
|
+
subscription_root_type = types['Subscription']
|
118
|
+
end
|
98
119
|
else
|
99
120
|
query_root_type = types['Query']
|
100
121
|
mutation_root_type = types['Mutation']
|
@@ -103,10 +124,15 @@ module GraphQL
|
|
103
124
|
|
104
125
|
raise InvalidDocumentError.new('Must provide schema definition with query type or a type named Query.') unless query_root_type
|
105
126
|
|
106
|
-
|
127
|
+
builder = self
|
128
|
+
|
129
|
+
found_types = types.values
|
130
|
+
object_types = found_types.select { |t| t.respond_to?(:kind) && t.kind.object? }
|
131
|
+
schema_class = Class.new(schema_superclass) do
|
107
132
|
begin
|
108
133
|
# Add these first so that there's some chance of resolving late-bound types
|
109
|
-
|
134
|
+
add_type_and_traverse(found_types, root: false)
|
135
|
+
orphan_types(object_types)
|
110
136
|
query query_root_type
|
111
137
|
mutation mutation_root_type
|
112
138
|
subscription subscription_root_type
|
@@ -116,6 +142,12 @@ module GraphQL
|
|
116
142
|
raise InvalidDocumentError, "Type \"#{type_name}\" not found in document.", err_backtrace
|
117
143
|
end
|
118
144
|
|
145
|
+
object_types.each do |t|
|
146
|
+
t.interfaces.each do |int_t|
|
147
|
+
int_t.orphan_types(t)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
119
151
|
if default_resolve.respond_to?(:resolve_type)
|
120
152
|
def self.resolve_type(*args)
|
121
153
|
self.definition_default_resolve.resolve_type(*args)
|
@@ -130,6 +162,7 @@ module GraphQL
|
|
130
162
|
|
131
163
|
if schema_definition
|
132
164
|
ast_node(schema_definition)
|
165
|
+
builder.build_directives(self, schema_definition, type_resolver)
|
133
166
|
end
|
134
167
|
|
135
168
|
using.each do |plugin, options|
|
@@ -155,8 +188,17 @@ module GraphQL
|
|
155
188
|
|
156
189
|
def self.inherited(child_class)
|
157
190
|
child_class.definition_default_resolve = self.definition_default_resolve
|
191
|
+
super
|
158
192
|
end
|
159
193
|
end
|
194
|
+
|
195
|
+
if schema_extensions
|
196
|
+
schema_extensions.each do |ext|
|
197
|
+
build_directives(schema_class, ext, type_resolver)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
schema_class
|
160
202
|
end
|
161
203
|
|
162
204
|
NullResolveType = ->(type, obj, ctx) {
|
@@ -196,13 +238,18 @@ module GraphQL
|
|
196
238
|
|
197
239
|
def build_directives(definition, ast_node, type_resolver)
|
198
240
|
dirs = prepare_directives(ast_node, type_resolver)
|
199
|
-
dirs.each do |dir_class, options|
|
200
|
-
definition.
|
241
|
+
dirs.each do |(dir_class, options)|
|
242
|
+
if definition.respond_to?(:schema_directive)
|
243
|
+
# it's a schema
|
244
|
+
definition.schema_directive(dir_class, **options)
|
245
|
+
else
|
246
|
+
definition.directive(dir_class, **options)
|
247
|
+
end
|
201
248
|
end
|
202
249
|
end
|
203
250
|
|
204
251
|
def prepare_directives(ast_node, type_resolver)
|
205
|
-
dirs =
|
252
|
+
dirs = []
|
206
253
|
ast_node.directives.each do |dir_node|
|
207
254
|
if dir_node.name == "deprecated"
|
208
255
|
# This is handled using `deprecation_reason`
|
@@ -210,10 +257,10 @@ module GraphQL
|
|
210
257
|
else
|
211
258
|
dir_class = type_resolver.call(dir_node.name)
|
212
259
|
if dir_class.nil?
|
213
|
-
raise ArgumentError, "No definition for @#{dir_node.name} on #{ast_node.name} at #{ast_node.line}:#{ast_node.col}"
|
260
|
+
raise ArgumentError, "No definition for @#{dir_node.name} #{ast_node.respond_to?(:name) ? "on #{ast_node.name} " : ""}at #{ast_node.line}:#{ast_node.col}"
|
214
261
|
end
|
215
262
|
options = args_to_kwargs(dir_class, dir_node)
|
216
|
-
dirs[dir_class
|
263
|
+
dirs << [dir_class, options]
|
217
264
|
end
|
218
265
|
end
|
219
266
|
dirs
|
@@ -344,8 +391,6 @@ module GraphQL
|
|
344
391
|
end
|
345
392
|
end
|
346
393
|
|
347
|
-
NO_DEFAULT_VALUE = {}.freeze
|
348
|
-
|
349
394
|
def build_arguments(type_class, arguments, type_resolver)
|
350
395
|
builder = self
|
351
396
|
|
@@ -353,7 +398,7 @@ module GraphQL
|
|
353
398
|
default_value_kwargs = if !argument_defn.default_value.nil?
|
354
399
|
{ default_value: builder.build_default_value(argument_defn.default_value) }
|
355
400
|
else
|
356
|
-
|
401
|
+
EMPTY_HASH
|
357
402
|
end
|
358
403
|
|
359
404
|
type_class.argument(
|
@@ -364,7 +409,6 @@ module GraphQL
|
|
364
409
|
deprecation_reason: builder.build_deprecation_reason(argument_defn.directives),
|
365
410
|
ast_node: argument_defn,
|
366
411
|
camelize: false,
|
367
|
-
method_access: false,
|
368
412
|
directives: prepare_directives(argument_defn, type_resolver),
|
369
413
|
**default_value_kwargs
|
370
414
|
)
|
@@ -376,6 +420,7 @@ module GraphQL
|
|
376
420
|
Class.new(GraphQL::Schema::Directive) do
|
377
421
|
graphql_name(directive_definition.name)
|
378
422
|
description(directive_definition.description)
|
423
|
+
repeatable(directive_definition.repeatable)
|
379
424
|
locations(*directive_definition.locations.map { |location| location.name.to_sym })
|
380
425
|
ast_node(directive_definition)
|
381
426
|
builder.build_arguments(self, directive_definition.arguments, type_resolver)
|
@@ -388,6 +433,10 @@ module GraphQL
|
|
388
433
|
include GraphQL::Schema::Interface
|
389
434
|
graphql_name(interface_type_definition.name)
|
390
435
|
description(interface_type_definition.description)
|
436
|
+
interface_type_definition.interfaces.each do |interface_name|
|
437
|
+
interface_defn = type_resolver.call(interface_name)
|
438
|
+
implements(interface_defn)
|
439
|
+
end
|
391
440
|
ast_node(interface_type_definition)
|
392
441
|
builder.build_directives(self, interface_type_definition, type_resolver)
|
393
442
|
|
@@ -399,14 +448,12 @@ module GraphQL
|
|
399
448
|
builder = self
|
400
449
|
|
401
450
|
field_definitions.each do |field_definition|
|
402
|
-
type_name = resolve_type_name(field_definition.type)
|
403
451
|
resolve_method_name = -"resolve_field_#{field_definition.name}"
|
404
452
|
schema_field_defn = owner.field(
|
405
453
|
field_definition.name,
|
406
454
|
description: field_definition.description,
|
407
455
|
type: type_resolver.call(field_definition.type),
|
408
456
|
null: true,
|
409
|
-
connection: type_name.end_with?("Connection"),
|
410
457
|
connection_extension: nil,
|
411
458
|
deprecation_reason: build_deprecation_reason(field_definition.directives),
|
412
459
|
ast_node: field_definition,
|
@@ -454,15 +501,6 @@ module GraphQL
|
|
454
501
|
}
|
455
502
|
resolve_type_proc
|
456
503
|
end
|
457
|
-
|
458
|
-
def resolve_type_name(type)
|
459
|
-
case type
|
460
|
-
when GraphQL::Language::Nodes::TypeName
|
461
|
-
return type.name
|
462
|
-
else
|
463
|
-
resolve_type_name(type.of_type)
|
464
|
-
end
|
465
|
-
end
|
466
504
|
end
|
467
505
|
|
468
506
|
private_constant :Builder
|
@@ -7,7 +7,7 @@ module GraphQL
|
|
7
7
|
# In this case, the server hides types and fields _entirely_, unless the current context has certain `:flags` present.
|
8
8
|
class Flagged < GraphQL::Schema::Directive
|
9
9
|
def initialize(target, **options)
|
10
|
-
if target.is_a?(Module)
|
10
|
+
if target.is_a?(Module)
|
11
11
|
# This is type class of some kind, `include` will put this module
|
12
12
|
# in between the type class itself and its super class, so `super` will work fine
|
13
13
|
target.include(VisibleByFlag)
|
@@ -35,7 +35,7 @@ module GraphQL
|
|
35
35
|
GraphQL::Schema::Directive::INPUT_FIELD_DEFINITION,
|
36
36
|
)
|
37
37
|
|
38
|
-
argument :by, [String], "Flags to check for this schema member"
|
38
|
+
argument :by, [String], "Flags to check for this schema member"
|
39
39
|
|
40
40
|
module VisibleByFlag
|
41
41
|
def self.included(schema_class)
|
@@ -44,8 +44,8 @@ module GraphQL
|
|
44
44
|
|
45
45
|
def visible?(context)
|
46
46
|
if dir = self.directives.find { |d| d.is_a?(Flagged) }
|
47
|
-
relevant_flags = (f = context[:flags]) && dir.arguments[:by] & f
|
48
|
-
relevant_flags && relevant_flags.
|
47
|
+
relevant_flags = (f = context[:flags]) && dir.arguments[:by] & f # rubocop:disable Development/ContextIsPassedCop -- definition-related
|
48
|
+
relevant_flags && !relevant_flags.empty? && super
|
49
49
|
else
|
50
50
|
super
|
51
51
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
class Schema
|
4
|
+
class Directive < GraphQL::Schema::Member
|
5
|
+
class OneOf < GraphQL::Schema::Directive
|
6
|
+
description "Requires that exactly one field must be supplied and that field must not be `null`."
|
7
|
+
locations(GraphQL::Schema::Directive::INPUT_OBJECT)
|
8
|
+
default_directive true
|
9
|
+
|
10
|
+
def initialize(...)
|
11
|
+
super
|
12
|
+
|
13
|
+
owner.extend(IsOneOf)
|
14
|
+
end
|
15
|
+
|
16
|
+
module IsOneOf
|
17
|
+
def one_of?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
class Schema
|
4
|
+
class Directive < GraphQL::Schema::Member
|
5
|
+
class SpecifiedBy < GraphQL::Schema::Directive
|
6
|
+
description "Exposes a URL that specifies the behavior of this scalar."
|
7
|
+
locations(GraphQL::Schema::Directive::SCALAR)
|
8
|
+
default_directive true
|
9
|
+
|
10
|
+
argument :url, String, description: "The URL that specifies the behavior of this scalar."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -24,7 +24,7 @@ module GraphQL
|
|
24
24
|
GraphQL::Schema::Directive::FIELD,
|
25
25
|
)
|
26
26
|
|
27
|
-
argument :by, String,
|
27
|
+
argument :by, String,
|
28
28
|
description: "The name of the transform to run if applicable"
|
29
29
|
|
30
30
|
TRANSFORMS = [
|
@@ -39,7 +39,7 @@ module GraphQL
|
|
39
39
|
transform_name = arguments[:by]
|
40
40
|
if TRANSFORMS.include?(transform_name) && return_value.respond_to?(transform_name)
|
41
41
|
return_value = return_value.public_send(transform_name)
|
42
|
-
response = context.namespace(:
|
42
|
+
response = context.namespace(:interpreter_runtime)[:runtime].final_result
|
43
43
|
*keys, last = path
|
44
44
|
keys.each do |key|
|
45
45
|
if response && (response = response[key])
|
@@ -8,6 +8,8 @@ module GraphQL
|
|
8
8
|
# - {.resolve}: Wraps field resolution (so it should call `yield` to continue)
|
9
9
|
class Directive < GraphQL::Schema::Member
|
10
10
|
extend GraphQL::Schema::Member::HasArguments
|
11
|
+
extend GraphQL::Schema::Member::HasArguments::HasDirectiveArguments
|
12
|
+
|
11
13
|
class << self
|
12
14
|
# Directives aren't types, they don't have kinds.
|
13
15
|
undef_method :kind
|
@@ -20,14 +22,14 @@ module GraphQL
|
|
20
22
|
# but downcase the first letter.
|
21
23
|
def default_graphql_name
|
22
24
|
@default_graphql_name ||= begin
|
23
|
-
camelized_name = super
|
25
|
+
camelized_name = super.dup
|
24
26
|
camelized_name[0] = camelized_name[0].downcase
|
25
|
-
camelized_name
|
27
|
+
-camelized_name
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
29
31
|
def locations(*new_locations)
|
30
|
-
if new_locations.
|
32
|
+
if !new_locations.empty?
|
31
33
|
new_locations.each do |new_loc|
|
32
34
|
if !LOCATIONS.include?(new_loc.to_sym)
|
33
35
|
raise ArgumentError, "#{self} (#{self.graphql_name}) has an invalid directive location: `locations #{new_loc}` "
|
@@ -53,24 +55,6 @@ module GraphQL
|
|
53
55
|
default_directive
|
54
56
|
end
|
55
57
|
|
56
|
-
def to_graphql
|
57
|
-
defn = GraphQL::Directive.new
|
58
|
-
defn.name = self.graphql_name
|
59
|
-
defn.description = self.description
|
60
|
-
defn.locations = self.locations
|
61
|
-
defn.default_directive = self.default_directive
|
62
|
-
defn.ast_node = ast_node
|
63
|
-
defn.metadata[:type_class] = self
|
64
|
-
arguments.each do |name, arg_defn|
|
65
|
-
arg_graphql = arg_defn.to_graphql
|
66
|
-
defn.arguments[arg_graphql.name] = arg_graphql
|
67
|
-
end
|
68
|
-
# Make a reference to a classic-style Arguments class
|
69
|
-
defn.arguments_class = GraphQL::Query::Arguments.construct_arguments_class(defn)
|
70
|
-
|
71
|
-
defn
|
72
|
-
end
|
73
|
-
|
74
58
|
# If false, this part of the query won't be evaluated
|
75
59
|
def include?(_object, arguments, context)
|
76
60
|
static_include?(arguments, context)
|
@@ -86,6 +70,11 @@ module GraphQL
|
|
86
70
|
yield
|
87
71
|
end
|
88
72
|
|
73
|
+
# Continuing is passed as a block, yield to continue.
|
74
|
+
def resolve_each(object, arguments, context)
|
75
|
+
yield
|
76
|
+
end
|
77
|
+
|
89
78
|
def on_field?
|
90
79
|
locations.include?(FIELD)
|
91
80
|
end
|
@@ -97,6 +86,23 @@ module GraphQL
|
|
97
86
|
def on_operation?
|
98
87
|
locations.include?(QUERY) && locations.include?(MUTATION) && locations.include?(SUBSCRIPTION)
|
99
88
|
end
|
89
|
+
|
90
|
+
def repeatable?
|
91
|
+
!!@repeatable
|
92
|
+
end
|
93
|
+
|
94
|
+
def repeatable(new_value)
|
95
|
+
@repeatable = new_value
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def inherited(subclass)
|
101
|
+
super
|
102
|
+
subclass.class_eval do
|
103
|
+
@default_graphql_name ||= nil
|
104
|
+
end
|
105
|
+
end
|
100
106
|
end
|
101
107
|
|
102
108
|
# @return [GraphQL::Schema::Field, GraphQL::Schema::Argument, Class, Module]
|
@@ -113,7 +119,11 @@ module GraphQL
|
|
113
119
|
# - lazy resolution
|
114
120
|
# Probably, those won't be needed here, since these are configuration arguments,
|
115
121
|
# not runtime arguments.
|
116
|
-
@arguments = self.class.coerce_arguments(nil, arguments, Query::NullContext)
|
122
|
+
@arguments = self.class.coerce_arguments(nil, arguments, Query::NullContext.instance)
|
123
|
+
end
|
124
|
+
|
125
|
+
def graphql_name
|
126
|
+
self.class.graphql_name
|
117
127
|
end
|
118
128
|
|
119
129
|
LOCATIONS = [
|
@@ -135,6 +145,7 @@ module GraphQL
|
|
135
145
|
ENUM_VALUE = :ENUM_VALUE,
|
136
146
|
INPUT_OBJECT = :INPUT_OBJECT,
|
137
147
|
INPUT_FIELD_DEFINITION = :INPUT_FIELD_DEFINITION,
|
148
|
+
VARIABLE_DEFINITION = :VARIABLE_DEFINITION,
|
138
149
|
]
|
139
150
|
|
140
151
|
DEFAULT_DEPRECATION_REASON = 'No longer supported'
|
@@ -157,6 +168,7 @@ module GraphQL
|
|
157
168
|
ENUM_VALUE: 'Location adjacent to an enum value definition.',
|
158
169
|
INPUT_OBJECT: 'Location adjacent to an input object type definition.',
|
159
170
|
INPUT_FIELD_DEFINITION: 'Location adjacent to an input object field definition.',
|
171
|
+
VARIABLE_DEFINITION: 'Location adjacent to a variable definition.',
|
160
172
|
}
|
161
173
|
|
162
174
|
private
|
@@ -176,6 +188,8 @@ module GraphQL
|
|
176
188
|
assert_has_location(SCALAR)
|
177
189
|
elsif @owner < GraphQL::Schema
|
178
190
|
assert_has_location(SCHEMA)
|
191
|
+
elsif @owner < GraphQL::Schema::Resolver
|
192
|
+
assert_has_location(FIELD_DEFINITION)
|
179
193
|
else
|
180
194
|
raise "Unexpected directive owner class: #{@owner}"
|
181
195
|
end
|