graphql 1.9.21 → 2.0.0
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 +44 -7
- 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 +63 -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 +22 -27
- 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 +29 -2
- data/lib/graphql/analysis/ast/query_complexity.rb +175 -68
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +17 -8
- data/lib/graphql/analysis/ast.rb +14 -14
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +37 -16
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +20 -17
- data/lib/graphql/dataloader/null_dataloader.rb +22 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +155 -0
- data/lib/graphql/dataloader.rb +308 -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/directive_checks.rb +2 -2
- data/lib/graphql/execution/errors.rb +108 -14
- data/lib/graphql/execution/instrumentation.rb +1 -1
- 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 +105 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +37 -25
- data/lib/graphql/execution/interpreter/runtime.rb +715 -387
- data/lib/graphql/execution/interpreter.rb +32 -31
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lazy.rb +5 -1
- data/lib/graphql/execution/lookahead.rb +32 -114
- data/lib/graphql/execution/multiplex.rb +60 -92
- data/lib/graphql/execution.rb +11 -3
- data/lib/graphql/filter.rb +1 -1
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/base_object.rb +2 -5
- 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 +5 -18
- 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 +41 -11
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +10 -10
- data/lib/graphql/introspection/type_type.rb +27 -17
- data/lib/graphql/introspection.rb +99 -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/definition_slice.rb +21 -10
- data/lib/graphql/language/document_from_schema_definition.rb +99 -63
- data/lib/graphql/language/lexer.rb +53 -27
- data/lib/graphql/language/lexer.rl +5 -3
- data/lib/graphql/language/nodes.rb +64 -93
- data/lib/graphql/language/parser.rb +929 -896
- data/lib/graphql/language/parser.y +125 -102
- data/lib/graphql/language/printer.rb +11 -2
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +2 -2
- data/lib/graphql/language.rb +3 -1
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +85 -0
- data/lib/graphql/pagination/array_connection.rb +77 -0
- data/lib/graphql/pagination/connection.rb +226 -0
- data/lib/graphql/pagination/connections.rb +134 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +226 -0
- data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
- data/lib/graphql/pagination.rb +6 -0
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +51 -190
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +23 -6
- data/lib/graphql/query/literal_input.rb +26 -11
- data/lib/graphql/query/null_context.rb +24 -8
- data/lib/graphql/query/validation_pipeline.rb +12 -38
- data/lib/graphql/query/variable_validation_error.rb +2 -2
- data/lib/graphql/query/variables.rb +26 -9
- data/lib/graphql/query.rb +62 -32
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +3 -0
- data/lib/graphql/rake_task.rb +12 -9
- data/lib/graphql/relay/range_add.rb +23 -9
- 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 +240 -0
- data/lib/graphql/schema/argument.rb +262 -28
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
- data/lib/graphql/schema/build_from_definition.rb +319 -220
- data/lib/graphql/schema/built_in_types.rb +5 -5
- data/lib/graphql/schema/directive/deprecated.rb +18 -0
- 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 +2 -2
- data/lib/graphql/schema/directive/skip.rb +2 -2
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +117 -14
- data/lib/graphql/schema/enum.rb +115 -22
- data/lib/graphql/schema/enum_value.rb +16 -21
- data/lib/graphql/schema/field/connection_extension.rb +46 -20
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +376 -291
- data/lib/graphql/schema/field_extension.rb +89 -2
- data/lib/graphql/schema/find_inherited_value.rb +17 -1
- data/lib/graphql/schema/finder.rb +16 -14
- data/lib/graphql/schema/input_object.rb +147 -60
- data/lib/graphql/schema/interface.rb +28 -43
- data/lib/graphql/schema/introspection_system.rb +101 -38
- data/lib/graphql/schema/late_bound_type.rb +3 -2
- data/lib/graphql/schema/list.rb +46 -3
- data/lib/graphql/schema/loader.rb +144 -102
- data/lib/graphql/schema/member/base_dsl_methods.rb +33 -32
- data/lib/graphql/schema/member/build_type.rb +23 -14
- data/lib/graphql/schema/member/has_arguments.rb +212 -23
- data/lib/graphql/schema/member/has_ast_node.rb +20 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
- data/lib/graphql/schema/member/has_directives.rb +98 -0
- data/lib/graphql/schema/member/has_fields.rb +99 -34
- data/lib/graphql/schema/member/has_interfaces.rb +88 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +31 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +3 -3
- data/lib/graphql/schema/member/validates_input.rb +33 -0
- data/lib/graphql/schema/member.rb +11 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +34 -4
- data/lib/graphql/schema/object.rb +38 -65
- data/lib/graphql/schema/printer.rb +16 -35
- data/lib/graphql/schema/relay_classic_mutation.rb +57 -32
- data/lib/graphql/schema/resolver/has_payload_type.rb +34 -4
- data/lib/graphql/schema/resolver.rb +133 -79
- data/lib/graphql/schema/scalar.rb +40 -15
- data/lib/graphql/schema/subscription.rb +57 -21
- data/lib/graphql/schema/timeout.rb +29 -15
- data/lib/graphql/schema/type_expression.rb +21 -13
- data/lib/graphql/schema/type_membership.rb +19 -5
- data/lib/graphql/schema/union.rb +39 -14
- 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 +182 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +687 -891
- data/lib/graphql/static_validation/all_rules.rb +2 -0
- data/lib/graphql/static_validation/base_visitor.rb +21 -31
- data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +51 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +45 -83
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -1
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -14
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +94 -51
- 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/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/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 +9 -10
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +1 -1
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
- data/lib/graphql/static_validation/type_stack.rb +2 -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 +31 -19
- 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 +123 -22
- 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 +85 -31
- data/lib/graphql/subscriptions/instrumentation.rb +0 -47
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +111 -52
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +14 -1
- data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_tracing.rb +57 -29
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
- data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
- data/lib/graphql/tracing/scout_tracing.rb +19 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing.rb +15 -36
- 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 +16 -8
- data/lib/graphql/types/iso_8601_date_time.rb +32 -10
- data/lib/graphql/types/relay/base_connection.rb +6 -88
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +170 -0
- data/lib/graphql/types/relay/default_relay.rb +21 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +64 -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 +19 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
- data/lib/graphql/types/relay.rb +11 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +41 -58
- data/readme.md +3 -6
- metadata +97 -231
- 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 -159
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backwards_compatibility.rb +0 -60
- data/lib/graphql/base_type.rb +0 -226
- 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 -91
- 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 -311
- 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 -13
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -104
- data/lib/graphql/enum_type.rb +0 -193
- data/lib/graphql/execution/execute.rb +0 -326
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -330
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -153
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -154
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -86
- 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/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -81
- data/lib/graphql/object_type.rb +0 -141
- data/lib/graphql/query/arguments.rb +0 -187
- data/lib/graphql/query/arguments_cache.rb +0 -25
- data/lib/graphql/query/executor.rb +0 -53
- 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 -172
- 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 -40
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -18
- 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 -190
- 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 -133
- 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 -26
- 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 -74
- data/lib/graphql/tracing/skylight_tracing.rb +0 -62
- 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 -135
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -2,10 +2,10 @@ class GraphQL::Language::Parser
|
|
2
2
|
rule
|
3
3
|
target: document
|
4
4
|
|
5
|
-
document: definitions_list {
|
5
|
+
document: definitions_list { result = make_node(:Document, definitions: val[0])}
|
6
6
|
|
7
7
|
definitions_list:
|
8
|
-
definition {
|
8
|
+
definition { result = [val[0]]}
|
9
9
|
| definitions_list definition { val[0] << val[1] }
|
10
10
|
|
11
11
|
definition:
|
@@ -19,7 +19,7 @@ rule
|
|
19
19
|
|
20
20
|
operation_definition:
|
21
21
|
operation_type operation_name_opt variable_definitions_opt directives_list_opt selection_set {
|
22
|
-
|
22
|
+
result = make_node(
|
23
23
|
:OperationDefinition, {
|
24
24
|
operation_type: val[0],
|
25
25
|
name: val[1],
|
@@ -31,7 +31,7 @@ rule
|
|
31
31
|
)
|
32
32
|
}
|
33
33
|
| LCURLY selection_list RCURLY {
|
34
|
-
|
34
|
+
result = make_node(
|
35
35
|
:OperationDefinition, {
|
36
36
|
operation_type: "query",
|
37
37
|
selections: val[1],
|
@@ -40,7 +40,7 @@ rule
|
|
40
40
|
)
|
41
41
|
}
|
42
42
|
| LCURLY RCURLY {
|
43
|
-
|
43
|
+
result = make_node(
|
44
44
|
:OperationDefinition, {
|
45
45
|
operation_type: "query",
|
46
46
|
selections: [],
|
@@ -55,20 +55,20 @@ rule
|
|
55
55
|
| SUBSCRIPTION
|
56
56
|
|
57
57
|
operation_name_opt:
|
58
|
-
/* none */ {
|
58
|
+
/* none */ { result = nil }
|
59
59
|
| name
|
60
60
|
|
61
61
|
variable_definitions_opt:
|
62
|
-
/* none */ {
|
63
|
-
| LPAREN variable_definitions_list RPAREN {
|
62
|
+
/* none */ { result = EMPTY_ARRAY }
|
63
|
+
| LPAREN variable_definitions_list RPAREN { result = val[1] }
|
64
64
|
|
65
65
|
variable_definitions_list:
|
66
|
-
variable_definition {
|
66
|
+
variable_definition { result = [val[0]] }
|
67
67
|
| variable_definitions_list variable_definition { val[0] << val[1] }
|
68
68
|
|
69
69
|
variable_definition:
|
70
70
|
VAR_SIGN name COLON type default_value_opt {
|
71
|
-
|
71
|
+
result = make_node(:VariableDefinition, {
|
72
72
|
name: val[1],
|
73
73
|
type: val[3],
|
74
74
|
default_value: val[4],
|
@@ -77,23 +77,26 @@ rule
|
|
77
77
|
}
|
78
78
|
|
79
79
|
type:
|
80
|
-
|
81
|
-
|
|
82
|
-
|
80
|
+
nullable_type { result = val[0] }
|
81
|
+
| nullable_type BANG { result = make_node(:NonNullType, of_type: val[0]) }
|
82
|
+
|
83
|
+
nullable_type:
|
84
|
+
name { result = make_node(:TypeName, name: val[0])}
|
85
|
+
| LBRACKET type RBRACKET { result = make_node(:ListType, of_type: val[1]) }
|
83
86
|
|
84
87
|
default_value_opt:
|
85
|
-
/* none */ {
|
86
|
-
| EQUALS literal_value {
|
88
|
+
/* none */ { result = nil }
|
89
|
+
| EQUALS literal_value { result = val[1] }
|
87
90
|
|
88
91
|
selection_set:
|
89
|
-
LCURLY selection_list RCURLY {
|
92
|
+
LCURLY selection_list RCURLY { result = val[1] }
|
90
93
|
|
91
94
|
selection_set_opt:
|
92
|
-
/* none */ {
|
93
|
-
| selection_set {
|
95
|
+
/* none */ { result = EMPTY_ARRAY }
|
96
|
+
| selection_set { result = val[0] }
|
94
97
|
|
95
98
|
selection_list:
|
96
|
-
selection {
|
99
|
+
selection { result = [result] }
|
97
100
|
| selection_list selection { val[0] << val[1] }
|
98
101
|
|
99
102
|
selection:
|
@@ -103,7 +106,7 @@ rule
|
|
103
106
|
|
104
107
|
field:
|
105
108
|
name arguments_opt directives_list_opt selection_set_opt {
|
106
|
-
|
109
|
+
result = make_node(
|
107
110
|
:Field, {
|
108
111
|
name: val[0],
|
109
112
|
arguments: val[1],
|
@@ -114,7 +117,7 @@ rule
|
|
114
117
|
)
|
115
118
|
}
|
116
119
|
| name COLON name arguments_opt directives_list_opt selection_set_opt {
|
117
|
-
|
120
|
+
result = make_node(
|
118
121
|
:Field, {
|
119
122
|
alias: val[0],
|
120
123
|
name: val[2],
|
@@ -144,6 +147,7 @@ rule
|
|
144
147
|
name_without_on:
|
145
148
|
IDENTIFIER
|
146
149
|
| FRAGMENT
|
150
|
+
| REPEATABLE
|
147
151
|
| TRUE
|
148
152
|
| FALSE
|
149
153
|
| operation_type
|
@@ -152,97 +156,97 @@ rule
|
|
152
156
|
enum_name: /* any identifier, but not "true", "false" or "null" */
|
153
157
|
IDENTIFIER
|
154
158
|
| FRAGMENT
|
159
|
+
| REPEATABLE
|
155
160
|
| ON
|
156
161
|
| operation_type
|
157
162
|
| schema_keyword
|
158
163
|
|
159
164
|
enum_value_definition:
|
160
|
-
description_opt enum_name directives_list_opt {
|
165
|
+
description_opt enum_name directives_list_opt { result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1]) }
|
161
166
|
|
162
167
|
enum_value_definitions:
|
163
|
-
enum_value_definition {
|
164
|
-
| enum_value_definitions enum_value_definition {
|
168
|
+
enum_value_definition { result = [val[0]] }
|
169
|
+
| enum_value_definitions enum_value_definition { result = val[0] << val[1] }
|
165
170
|
|
166
171
|
arguments_opt:
|
167
|
-
/* none */ {
|
168
|
-
| LPAREN RPAREN
|
169
|
-
| LPAREN arguments_list RPAREN { return val[1] }
|
172
|
+
/* none */ { result = EMPTY_ARRAY }
|
173
|
+
| LPAREN arguments_list RPAREN { result = val[1] }
|
170
174
|
|
171
175
|
arguments_list:
|
172
|
-
argument {
|
176
|
+
argument { result = [val[0]] }
|
173
177
|
| arguments_list argument { val[0] << val[1] }
|
174
178
|
|
175
179
|
argument:
|
176
|
-
name COLON input_value {
|
180
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
177
181
|
|
178
182
|
literal_value:
|
179
|
-
FLOAT {
|
180
|
-
| INT {
|
181
|
-
| STRING {
|
182
|
-
| TRUE {
|
183
|
-
| FALSE {
|
183
|
+
FLOAT { result = val[0].to_f }
|
184
|
+
| INT { result = val[0].to_i }
|
185
|
+
| STRING { result = val[0].to_s }
|
186
|
+
| TRUE { result = true }
|
187
|
+
| FALSE { result = false }
|
184
188
|
| null_value
|
185
189
|
| enum_value
|
186
190
|
| list_value
|
187
191
|
| object_literal_value
|
188
192
|
|
189
193
|
input_value:
|
190
|
-
|
194
|
+
literal_value
|
191
195
|
| variable
|
192
196
|
| object_value
|
193
197
|
|
194
|
-
null_value: NULL {
|
195
|
-
variable: VAR_SIGN name {
|
198
|
+
null_value: NULL { result = make_node(:NullValue, name: val[0], position_source: val[0]) }
|
199
|
+
variable: VAR_SIGN name { result = make_node(:VariableIdentifier, name: val[1], position_source: val[0]) }
|
196
200
|
|
197
201
|
list_value:
|
198
|
-
LBRACKET RBRACKET {
|
199
|
-
| LBRACKET list_value_list RBRACKET {
|
202
|
+
LBRACKET RBRACKET { result = EMPTY_ARRAY }
|
203
|
+
| LBRACKET list_value_list RBRACKET { result = val[1] }
|
200
204
|
|
201
205
|
list_value_list:
|
202
|
-
input_value {
|
206
|
+
input_value { result = [val[0]] }
|
203
207
|
| list_value_list input_value { val[0] << val[1] }
|
204
208
|
|
205
209
|
object_value:
|
206
|
-
LCURLY RCURLY {
|
207
|
-
| LCURLY object_value_list RCURLY {
|
210
|
+
LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
|
211
|
+
| LCURLY object_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
|
208
212
|
|
209
213
|
object_value_list:
|
210
|
-
object_value_field {
|
214
|
+
object_value_field { result = [val[0]] }
|
211
215
|
| object_value_list object_value_field { val[0] << val[1] }
|
212
216
|
|
213
217
|
object_value_field:
|
214
|
-
name COLON input_value {
|
218
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
215
219
|
|
216
220
|
/* like the previous, but with literals only: */
|
217
221
|
object_literal_value:
|
218
|
-
LCURLY RCURLY {
|
219
|
-
| LCURLY object_literal_value_list RCURLY {
|
222
|
+
LCURLY RCURLY { result = make_node(:InputObject, arguments: [], position_source: val[0])}
|
223
|
+
| LCURLY object_literal_value_list RCURLY { result = make_node(:InputObject, arguments: val[1], position_source: val[0])}
|
220
224
|
|
221
225
|
object_literal_value_list:
|
222
|
-
object_literal_value_field {
|
226
|
+
object_literal_value_field { result = [val[0]] }
|
223
227
|
| object_literal_value_list object_literal_value_field { val[0] << val[1] }
|
224
228
|
|
225
229
|
object_literal_value_field:
|
226
|
-
name COLON literal_value {
|
230
|
+
name COLON literal_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
227
231
|
|
228
|
-
enum_value: enum_name {
|
232
|
+
enum_value: enum_name { result = make_node(:Enum, name: val[0], position_source: val[0]) }
|
229
233
|
|
230
234
|
directives_list_opt:
|
231
|
-
/* none */ {
|
235
|
+
/* none */ { result = EMPTY_ARRAY }
|
232
236
|
| directives_list
|
233
237
|
|
234
238
|
directives_list:
|
235
|
-
directive {
|
239
|
+
directive { result = [val[0]] }
|
236
240
|
| directives_list directive { val[0] << val[1] }
|
237
241
|
|
238
|
-
directive: DIR_SIGN name arguments_opt {
|
242
|
+
directive: DIR_SIGN name arguments_opt { result = make_node(:Directive, name: val[1], arguments: val[2], position_source: val[0]) }
|
239
243
|
|
240
244
|
fragment_spread:
|
241
|
-
ELLIPSIS name_without_on directives_list_opt {
|
245
|
+
ELLIPSIS name_without_on directives_list_opt { result = make_node(:FragmentSpread, name: val[1], directives: val[2], position_source: val[0]) }
|
242
246
|
|
243
247
|
inline_fragment:
|
244
248
|
ELLIPSIS ON type directives_list_opt selection_set {
|
245
|
-
|
249
|
+
result = make_node(:InlineFragment, {
|
246
250
|
type: val[2],
|
247
251
|
directives: val[3],
|
248
252
|
selections: val[4],
|
@@ -250,7 +254,7 @@ rule
|
|
250
254
|
})
|
251
255
|
}
|
252
256
|
| ELLIPSIS directives_list_opt selection_set {
|
253
|
-
|
257
|
+
result = make_node(:InlineFragment, {
|
254
258
|
type: nil,
|
255
259
|
directives: val[1],
|
256
260
|
selections: val[2],
|
@@ -260,7 +264,7 @@ rule
|
|
260
264
|
|
261
265
|
fragment_definition:
|
262
266
|
FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
|
263
|
-
|
267
|
+
result = make_node(:FragmentDefinition, {
|
264
268
|
name: val[1],
|
265
269
|
type: val[3],
|
266
270
|
directives: val[4],
|
@@ -271,7 +275,7 @@ rule
|
|
271
275
|
}
|
272
276
|
|
273
277
|
fragment_name_opt:
|
274
|
-
/* none */ {
|
278
|
+
/* none */ { result = nil }
|
275
279
|
| name_without_on
|
276
280
|
|
277
281
|
type_system_definition:
|
@@ -280,14 +284,14 @@ rule
|
|
280
284
|
| directive_definition
|
281
285
|
|
282
286
|
schema_definition:
|
283
|
-
SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
287
|
+
SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3]) }
|
284
288
|
|
285
289
|
operation_type_definition_list:
|
286
290
|
operation_type_definition
|
287
|
-
| operation_type_definition_list operation_type_definition {
|
291
|
+
| operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
|
288
292
|
|
289
293
|
operation_type_definition:
|
290
|
-
operation_type COLON name {
|
294
|
+
operation_type COLON name { result = { val[0].to_s.to_sym => val[2] } }
|
291
295
|
|
292
296
|
type_definition:
|
293
297
|
scalar_type_definition
|
@@ -302,8 +306,8 @@ rule
|
|
302
306
|
| type_extension
|
303
307
|
|
304
308
|
schema_extension:
|
305
|
-
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
306
|
-
| EXTEND SCHEMA directives_list {
|
309
|
+
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
|
310
|
+
| EXTEND SCHEMA directives_list { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
|
307
311
|
|
308
312
|
type_extension:
|
309
313
|
scalar_type_extension
|
@@ -313,30 +317,31 @@ rule
|
|
313
317
|
| enum_type_extension
|
314
318
|
| input_object_type_extension
|
315
319
|
|
316
|
-
scalar_type_extension: EXTEND SCALAR name directives_list {
|
320
|
+
scalar_type_extension: EXTEND SCALAR name directives_list { result = make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
|
317
321
|
|
318
322
|
object_type_extension:
|
319
323
|
/* TODO - This first one shouldn't be necessary but parser is getting confused */
|
320
|
-
EXTEND TYPE name implements LCURLY field_definition_list RCURLY {
|
321
|
-
| EXTEND TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
322
|
-
| EXTEND TYPE name implements_opt directives_list {
|
323
|
-
| EXTEND TYPE name implements {
|
324
|
+
EXTEND TYPE name implements LCURLY field_definition_list RCURLY { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: val[5], position_source: val[0]) }
|
325
|
+
| EXTEND TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], position_source: val[0]) }
|
326
|
+
| EXTEND TYPE name implements_opt directives_list { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
|
327
|
+
| EXTEND TYPE name implements { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
324
328
|
|
325
329
|
interface_type_extension:
|
326
|
-
EXTEND INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
327
|
-
| EXTEND INTERFACE name directives_list {
|
330
|
+
EXTEND INTERFACE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], position_source: val[0]) }
|
331
|
+
| EXTEND INTERFACE name implements_opt directives_list { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
|
332
|
+
| EXTEND INTERFACE name implements { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
328
333
|
|
329
334
|
union_type_extension:
|
330
|
-
EXTEND UNION name directives_list_opt EQUALS union_members {
|
331
|
-
| EXTEND UNION name directives_list {
|
335
|
+
EXTEND UNION name directives_list_opt EQUALS union_members { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: val[5], position_source: val[0]) }
|
336
|
+
| EXTEND UNION name directives_list { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
|
332
337
|
|
333
338
|
enum_type_extension:
|
334
|
-
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
335
|
-
| EXTEND ENUM name directives_list {
|
339
|
+
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: val[5], position_source: val[0]) }
|
340
|
+
| EXTEND ENUM name directives_list { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
|
336
341
|
|
337
342
|
input_object_type_extension:
|
338
|
-
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
339
|
-
| EXTEND INPUT name directives_list {
|
343
|
+
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
|
344
|
+
| EXTEND INPUT name directives_list { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
340
345
|
|
341
346
|
description: STRING
|
342
347
|
|
@@ -346,85 +351,89 @@ rule
|
|
346
351
|
|
347
352
|
scalar_type_definition:
|
348
353
|
description_opt SCALAR name directives_list_opt {
|
349
|
-
|
354
|
+
result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
350
355
|
}
|
351
356
|
|
352
357
|
object_type_definition:
|
353
358
|
description_opt TYPE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
354
|
-
|
359
|
+
result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
355
360
|
}
|
356
361
|
|
357
362
|
implements_opt:
|
358
|
-
/* none */ {
|
363
|
+
/* none */ { result = EMPTY_ARRAY }
|
359
364
|
| implements
|
360
365
|
|
361
366
|
implements:
|
362
|
-
IMPLEMENTS AMP interfaces_list {
|
363
|
-
| IMPLEMENTS interfaces_list {
|
364
|
-
| IMPLEMENTS legacy_interfaces_list {
|
367
|
+
IMPLEMENTS AMP interfaces_list { result = val[2] }
|
368
|
+
| IMPLEMENTS interfaces_list { result = val[1] }
|
369
|
+
| IMPLEMENTS legacy_interfaces_list { result = val[1] }
|
365
370
|
|
366
371
|
interfaces_list:
|
367
|
-
name {
|
372
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
368
373
|
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
369
374
|
|
370
375
|
legacy_interfaces_list:
|
371
|
-
name {
|
376
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
372
377
|
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
373
378
|
|
374
379
|
input_value_definition:
|
375
380
|
description_opt name COLON type default_value_opt directives_list_opt {
|
376
|
-
|
381
|
+
result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
377
382
|
}
|
378
383
|
|
379
384
|
input_value_definition_list:
|
380
|
-
input_value_definition {
|
385
|
+
input_value_definition { result = [val[0]] }
|
381
386
|
| input_value_definition_list input_value_definition { val[0] << val[1] }
|
382
387
|
|
383
388
|
arguments_definitions_opt:
|
384
|
-
/* none */ {
|
385
|
-
| LPAREN input_value_definition_list RPAREN {
|
389
|
+
/* none */ { result = EMPTY_ARRAY }
|
390
|
+
| LPAREN input_value_definition_list RPAREN { result = val[1] }
|
386
391
|
|
387
392
|
field_definition:
|
388
393
|
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
389
|
-
|
394
|
+
result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
390
395
|
}
|
391
396
|
|
392
397
|
field_definition_list:
|
393
|
-
/* none */ {
|
394
|
-
| field_definition {
|
398
|
+
/* none */ { result = EMPTY_ARRAY }
|
399
|
+
| field_definition { result = [val[0]] }
|
395
400
|
| field_definition_list field_definition { val[0] << val[1] }
|
396
401
|
|
397
402
|
interface_type_definition:
|
398
|
-
description_opt INTERFACE name directives_list_opt LCURLY field_definition_list RCURLY {
|
399
|
-
|
403
|
+
description_opt INTERFACE name implements_opt directives_list_opt LCURLY field_definition_list RCURLY {
|
404
|
+
result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[6], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
400
405
|
}
|
401
406
|
|
402
407
|
union_members:
|
403
|
-
name {
|
408
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
|
404
409
|
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
405
410
|
|
406
411
|
union_type_definition:
|
407
412
|
description_opt UNION name directives_list_opt EQUALS union_members {
|
408
|
-
|
413
|
+
result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
409
414
|
}
|
410
415
|
|
411
416
|
enum_type_definition:
|
412
417
|
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
413
|
-
|
418
|
+
result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
414
419
|
}
|
415
420
|
|
416
421
|
input_object_type_definition:
|
417
422
|
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
418
|
-
|
423
|
+
result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
419
424
|
}
|
420
425
|
|
421
426
|
directive_definition:
|
422
|
-
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
423
|
-
|
427
|
+
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
|
428
|
+
result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
424
429
|
}
|
425
430
|
|
431
|
+
directive_repeatable_opt:
|
432
|
+
/* nothing */
|
433
|
+
| REPEATABLE
|
434
|
+
|
426
435
|
directive_locations:
|
427
|
-
name {
|
436
|
+
name { result = [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])] }
|
428
437
|
| directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2]) }
|
429
438
|
end
|
430
439
|
|
@@ -452,7 +461,7 @@ def parse_document
|
|
452
461
|
# From the tokens, build an AST
|
453
462
|
@tracer.trace("parse", {query_string: @query_string}) do
|
454
463
|
if @tokens.empty?
|
455
|
-
|
464
|
+
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
456
465
|
else
|
457
466
|
do_parse
|
458
467
|
end
|
@@ -460,8 +469,22 @@ def parse_document
|
|
460
469
|
end
|
461
470
|
end
|
462
471
|
|
463
|
-
|
464
|
-
|
472
|
+
class << self
|
473
|
+
attr_accessor :cache
|
474
|
+
|
475
|
+
def parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
|
476
|
+
new(query_string, filename: filename, tracer: tracer).parse_document
|
477
|
+
end
|
478
|
+
|
479
|
+
def parse_file(filename, tracer: GraphQL::Tracing::NullTracer)
|
480
|
+
if cache
|
481
|
+
cache.fetch(filename) do
|
482
|
+
parse(File.read(filename), filename: filename, tracer: tracer)
|
483
|
+
end
|
484
|
+
else
|
485
|
+
parse(File.read(filename), filename: filename, tracer: tracer)
|
486
|
+
end
|
487
|
+
end
|
465
488
|
end
|
466
489
|
|
467
490
|
private
|
@@ -93,7 +93,7 @@ module GraphQL
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def print_input_object(input_object)
|
96
|
-
"{#{input_object.arguments.map { |a|
|
96
|
+
"{#{input_object.arguments.map { |a| print_argument(a) }.join(", ")}}"
|
97
97
|
end
|
98
98
|
|
99
99
|
def print_list_type(list_type)
|
@@ -164,11 +164,15 @@ module GraphQL
|
|
164
164
|
def print_object_type_definition(object_type)
|
165
165
|
out = print_description(object_type)
|
166
166
|
out << "type #{object_type.name}"
|
167
|
-
out <<
|
167
|
+
out << print_implements(object_type) unless object_type.interfaces.empty?
|
168
168
|
out << print_directives(object_type.directives)
|
169
169
|
out << print_field_definitions(object_type.fields)
|
170
170
|
end
|
171
171
|
|
172
|
+
def print_implements(type)
|
173
|
+
" implements #{type.interfaces.map(&:name).join(" & ")}"
|
174
|
+
end
|
175
|
+
|
172
176
|
def print_input_value_definition(input_value)
|
173
177
|
out = "#{input_value.name}: #{print_node(input_value.type)}".dup
|
174
178
|
out << " = #{print_node(input_value.default_value)}" unless input_value.default_value.nil?
|
@@ -200,6 +204,7 @@ module GraphQL
|
|
200
204
|
def print_interface_type_definition(interface_type)
|
201
205
|
out = print_description(interface_type)
|
202
206
|
out << "interface #{interface_type.name}"
|
207
|
+
out << print_implements(interface_type) if interface_type.interfaces.any?
|
203
208
|
out << print_directives(interface_type.directives)
|
204
209
|
out << print_field_definitions(interface_type.fields)
|
205
210
|
end
|
@@ -247,6 +252,10 @@ module GraphQL
|
|
247
252
|
out << print_arguments(directive.arguments)
|
248
253
|
end
|
249
254
|
|
255
|
+
if directive.repeatable
|
256
|
+
out << " repeatable"
|
257
|
+
end
|
258
|
+
|
250
259
|
out << " on #{directive.locations.map(&:name).join(' | ')}"
|
251
260
|
end
|
252
261
|
|