graphql 1.9.17 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/generators/graphql/core.rb +21 -10
- data/lib/generators/graphql/enum_generator.rb +4 -10
- data/lib/generators/graphql/field_extractor.rb +31 -0
- data/lib/generators/graphql/input_generator.rb +50 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
- data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
- data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +45 -8
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/loader_generator.rb +1 -0
- data/lib/generators/graphql/mutation_create_generator.rb +22 -0
- data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
- data/lib/generators/graphql/mutation_generator.rb +6 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +28 -12
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +49 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- data/lib/generators/graphql/scalar_generator.rb +4 -2
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +8 -0
- data/lib/generators/graphql/templates/base_edge.erb +8 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +7 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +6 -2
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +3 -1
- data/lib/generators/graphql/templates/mutation_create.erb +20 -0
- data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
- data/lib/generators/graphql/templates/mutation_update.erb +21 -0
- data/lib/generators/graphql/templates/node_type.erb +9 -0
- data/lib/generators/graphql/templates/object.erb +7 -3
- data/lib/generators/graphql/templates/query_type.erb +3 -3
- data/lib/generators/graphql/templates/scalar.erb +5 -1
- data/lib/generators/graphql/templates/schema.erb +25 -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 +31 -2
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- 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 +54 -38
- data/lib/graphql/analysis/ast.rb +16 -16
- 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/trace.rb +96 -0
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +26 -18
- data/lib/graphql/dataloader/null_dataloader.rb +24 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +164 -0
- data/lib/graphql/dataloader.rb +311 -0
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/directive_checks.rb +2 -2
- data/lib/graphql/execution/errors.rb +77 -45
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +62 -24
- data/lib/graphql/execution/interpreter/runtime.rb +830 -417
- data/lib/graphql/execution/interpreter.rb +206 -74
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +65 -136
- data/lib/graphql/execution/multiplex.rb +6 -152
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +8 -3
- 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 +12 -6
- 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 +12 -12
- data/lib/graphql/introspection/type_type.rb +34 -17
- data/lib/graphql/introspection.rb +100 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +20 -5
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/definition_slice.rb +21 -10
- data/lib/graphql/language/document_from_schema_definition.rb +136 -78
- data/lib/graphql/language/lexer.rb +216 -1462
- data/lib/graphql/language/nodes.rb +129 -132
- data/lib/graphql/language/parser.rb +994 -932
- data/lib/graphql/language/parser.y +152 -120
- data/lib/graphql/language/printer.rb +48 -23
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +192 -84
- data/lib/graphql/language.rb +3 -1
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +77 -0
- data/lib/graphql/pagination/array_connection.rb +79 -0
- data/lib/graphql/pagination/connection.rb +253 -0
- data/lib/graphql/pagination/connections.rb +135 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +228 -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 +205 -203
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +33 -7
- data/lib/graphql/query/null_context.rb +22 -9
- data/lib/graphql/query/validation_pipeline.rb +16 -38
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +39 -12
- data/lib/graphql/query.rb +95 -43
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +4 -1
- data/lib/graphql/rake_task.rb +41 -10
- data/lib/graphql/relay/range_add.rb +17 -10
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
- data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
- data/lib/graphql/rubocop.rb +4 -0
- data/lib/graphql/schema/addition.rb +245 -0
- data/lib/graphql/schema/argument.rb +285 -36
- 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 +348 -205
- 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/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +2 -2
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +134 -15
- data/lib/graphql/schema/enum.rb +137 -39
- data/lib/graphql/schema/enum_value.rb +17 -23
- data/lib/graphql/schema/field/connection_extension.rb +50 -20
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +504 -331
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +12 -1
- data/lib/graphql/schema/finder.rb +16 -14
- data/lib/graphql/schema/input_object.rb +182 -60
- data/lib/graphql/schema/interface.rb +24 -49
- data/lib/graphql/schema/introspection_system.rb +103 -37
- data/lib/graphql/schema/late_bound_type.rb +9 -2
- data/lib/graphql/schema/list.rb +61 -3
- data/lib/graphql/schema/loader.rb +144 -96
- data/lib/graphql/schema/member/base_dsl_methods.rb +41 -37
- data/lib/graphql/schema/member/build_type.rb +24 -15
- data/lib/graphql/schema/member/has_arguments.rb +310 -26
- data/lib/graphql/schema/member/has_ast_node.rb +32 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
- data/lib/graphql/schema/member/has_directives.rb +118 -0
- data/lib/graphql/schema/member/has_fields.rb +166 -44
- data/lib/graphql/schema/member/has_interfaces.rb +129 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +57 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
- data/lib/graphql/schema/member/validates_input.rb +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 +36 -60
- data/lib/graphql/schema/printer.rb +16 -35
- data/lib/graphql/schema/relay_classic_mutation.rb +91 -44
- data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
- data/lib/graphql/schema/resolver.rb +147 -94
- data/lib/graphql/schema/scalar.rb +40 -15
- data/lib/graphql/schema/subscription.rb +60 -31
- data/lib/graphql/schema/timeout.rb +45 -35
- data/lib/graphql/schema/type_expression.rb +21 -13
- data/lib/graphql/schema/type_membership.rb +23 -6
- data/lib/graphql/schema/union.rb +49 -15
- 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 +213 -35
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +857 -884
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +21 -31
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +69 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +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 +12 -6
- 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 +15 -7
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +96 -53
- 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/one_of_input_objects_are_valid.rb +66 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +9 -10
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +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 +32 -20
- data/lib/graphql/static_validation.rb +1 -2
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +129 -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 +84 -35
- data/lib/graphql/subscriptions/instrumentation.rb +0 -47
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +137 -57
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_trace.rb +77 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
- data/lib/graphql/tracing/data_dog_trace.rb +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +34 -2
- data/lib/graphql/tracing/legacy_trace.rb +65 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
- data/lib/graphql/tracing/notifications_trace.rb +42 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +109 -0
- data/lib/graphql/tracing/platform_tracing.rb +76 -35
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
- data/lib/graphql/tracing/prometheus_tracing.rb +11 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/scout_tracing.rb +19 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +23 -67
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +10 -3
- data/lib/graphql/types/iso_8601_date.rb +20 -9
- data/lib/graphql/types/iso_8601_date_time.rb +36 -10
- data/lib/graphql/types/relay/base_connection.rb +18 -90
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +2 -4
- data/lib/graphql/types/relay/node_behaviors.rb +25 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
- data/lib/graphql/types/relay.rb +10 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +63 -65
- data/readme.md +3 -6
- metadata +127 -236
- data/lib/graphql/analysis/analyze_query.rb +0 -91
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -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 -50
- data/lib/graphql/define/instance_definable.rb +0 -300
- 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/instrumentation.rb +0 -92
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -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/language/lexer.rl +0 -258
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -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/literal_input.rb +0 -116
- 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 -66
- 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 -128
- 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][1], 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][3].to_f }
|
184
|
+
| INT { result = val[0][3].to_i }
|
185
|
+
| STRING { result = val[0][3] }
|
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,18 @@ rule
|
|
280
284
|
| directive_definition
|
281
285
|
|
282
286
|
schema_definition:
|
283
|
-
SCHEMA directives_list_opt
|
287
|
+
SCHEMA directives_list_opt operation_type_definition_list_opt { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0][1], directives: val[1], **val[2]) }
|
288
|
+
|
289
|
+
operation_type_definition_list_opt:
|
290
|
+
/* none */ { result = {} }
|
291
|
+
| LCURLY operation_type_definition_list RCURLY { result = val[1] }
|
284
292
|
|
285
293
|
operation_type_definition_list:
|
286
294
|
operation_type_definition
|
287
|
-
| operation_type_definition_list operation_type_definition {
|
295
|
+
| operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
|
288
296
|
|
289
297
|
operation_type_definition:
|
290
|
-
operation_type COLON name {
|
298
|
+
operation_type COLON name { result = { val[0][3].to_sym => val[2] } }
|
291
299
|
|
292
300
|
type_definition:
|
293
301
|
scalar_type_definition
|
@@ -302,8 +310,8 @@ rule
|
|
302
310
|
| type_extension
|
303
311
|
|
304
312
|
schema_extension:
|
305
|
-
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
306
|
-
| EXTEND SCHEMA directives_list {
|
313
|
+
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
|
314
|
+
| EXTEND SCHEMA directives_list { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
|
307
315
|
|
308
316
|
type_extension:
|
309
317
|
scalar_type_extension
|
@@ -313,30 +321,31 @@ rule
|
|
313
321
|
| enum_type_extension
|
314
322
|
| input_object_type_extension
|
315
323
|
|
316
|
-
scalar_type_extension: EXTEND SCALAR name directives_list {
|
324
|
+
scalar_type_extension: EXTEND SCALAR name directives_list { result = make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
|
317
325
|
|
318
326
|
object_type_extension:
|
319
327
|
/* TODO - This first one shouldn't be necessary but parser is getting confused */
|
320
|
-
EXTEND TYPE name implements
|
321
|
-
| EXTEND TYPE name implements_opt directives_list_opt
|
322
|
-
| EXTEND TYPE name implements_opt directives_list {
|
323
|
-
| EXTEND TYPE name implements {
|
328
|
+
EXTEND TYPE name implements field_definition_list_opt { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: val[4], position_source: val[0]) }
|
329
|
+
| EXTEND TYPE name implements_opt directives_list_opt field_definition_list_opt { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], position_source: val[0]) }
|
330
|
+
| 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]) }
|
331
|
+
| EXTEND TYPE name implements { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
324
332
|
|
325
333
|
interface_type_extension:
|
326
|
-
EXTEND INTERFACE name directives_list_opt
|
327
|
-
| EXTEND INTERFACE name directives_list {
|
334
|
+
EXTEND INTERFACE name implements_opt directives_list_opt field_definition_list_opt { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], position_source: val[0]) }
|
335
|
+
| 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]) }
|
336
|
+
| EXTEND INTERFACE name implements { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
328
337
|
|
329
338
|
union_type_extension:
|
330
|
-
EXTEND UNION name directives_list_opt EQUALS union_members {
|
331
|
-
| EXTEND UNION name directives_list {
|
339
|
+
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]) }
|
340
|
+
| EXTEND UNION name directives_list { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
|
332
341
|
|
333
342
|
enum_type_extension:
|
334
|
-
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
335
|
-
| EXTEND ENUM name directives_list {
|
343
|
+
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]) }
|
344
|
+
| EXTEND ENUM name directives_list { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
|
336
345
|
|
337
346
|
input_object_type_extension:
|
338
|
-
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
339
|
-
| EXTEND INPUT name directives_list {
|
347
|
+
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]) }
|
348
|
+
| EXTEND INPUT name directives_list { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
340
349
|
|
341
350
|
description: STRING
|
342
351
|
|
@@ -346,86 +355,94 @@ rule
|
|
346
355
|
|
347
356
|
scalar_type_definition:
|
348
357
|
description_opt SCALAR name directives_list_opt {
|
349
|
-
|
358
|
+
result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
350
359
|
}
|
351
360
|
|
352
361
|
object_type_definition:
|
353
|
-
description_opt TYPE name implements_opt directives_list_opt
|
354
|
-
|
362
|
+
description_opt TYPE name implements_opt directives_list_opt field_definition_list_opt {
|
363
|
+
result = make_node(:ObjectTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
355
364
|
}
|
356
365
|
|
357
366
|
implements_opt:
|
358
|
-
/* none */ {
|
367
|
+
/* none */ { result = EMPTY_ARRAY }
|
359
368
|
| implements
|
360
369
|
|
361
370
|
implements:
|
362
|
-
IMPLEMENTS AMP interfaces_list {
|
363
|
-
| IMPLEMENTS interfaces_list {
|
364
|
-
| IMPLEMENTS legacy_interfaces_list {
|
371
|
+
IMPLEMENTS AMP interfaces_list { result = val[2] }
|
372
|
+
| IMPLEMENTS interfaces_list { result = val[1] }
|
373
|
+
| IMPLEMENTS legacy_interfaces_list { result = val[1] }
|
365
374
|
|
366
375
|
interfaces_list:
|
367
|
-
name {
|
376
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
368
377
|
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
369
378
|
|
370
379
|
legacy_interfaces_list:
|
371
|
-
name {
|
380
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
372
381
|
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
373
382
|
|
374
383
|
input_value_definition:
|
375
384
|
description_opt name COLON type default_value_opt directives_list_opt {
|
376
|
-
|
385
|
+
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][1], position_source: val[0] || val[1])
|
377
386
|
}
|
378
387
|
|
379
388
|
input_value_definition_list:
|
380
|
-
input_value_definition {
|
389
|
+
input_value_definition { result = [val[0]] }
|
381
390
|
| input_value_definition_list input_value_definition { val[0] << val[1] }
|
382
391
|
|
383
392
|
arguments_definitions_opt:
|
384
|
-
/* none */ {
|
385
|
-
| LPAREN input_value_definition_list RPAREN {
|
393
|
+
/* none */ { result = EMPTY_ARRAY }
|
394
|
+
| LPAREN input_value_definition_list RPAREN { result = val[1] }
|
386
395
|
|
387
396
|
field_definition:
|
388
397
|
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
389
|
-
|
398
|
+
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][1], position_source: val[0] || val[1])
|
390
399
|
}
|
391
400
|
|
401
|
+
field_definition_list_opt:
|
402
|
+
/* none */ { result = EMPTY_ARRAY }
|
403
|
+
| LCURLY field_definition_list RCURLY { result = val[1] }
|
404
|
+
|
392
405
|
field_definition_list:
|
393
|
-
/* none */ {
|
394
|
-
| field_definition {
|
406
|
+
/* none - this is not actually valid but graphql-ruby used to print this */ { result = EMPTY_ARRAY }
|
407
|
+
| field_definition { result = [val[0]] }
|
395
408
|
| field_definition_list field_definition { val[0] << val[1] }
|
396
409
|
|
397
410
|
interface_type_definition:
|
398
|
-
description_opt INTERFACE name directives_list_opt
|
399
|
-
|
411
|
+
description_opt INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
|
412
|
+
result = make_node(:InterfaceTypeDefinition, name: val[2], interfaces: val[3], directives: val[4], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
400
413
|
}
|
401
414
|
|
402
415
|
union_members:
|
403
|
-
name {
|
416
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
|
404
417
|
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
405
418
|
|
406
419
|
union_type_definition:
|
407
420
|
description_opt UNION name directives_list_opt EQUALS union_members {
|
408
|
-
|
421
|
+
result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
409
422
|
}
|
410
423
|
|
411
424
|
enum_type_definition:
|
412
425
|
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
413
|
-
|
426
|
+
result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
414
427
|
}
|
415
428
|
|
416
429
|
input_object_type_definition:
|
417
430
|
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
418
|
-
|
431
|
+
result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1][1], position_source: val[0] || val[1])
|
419
432
|
}
|
420
433
|
|
421
434
|
directive_definition:
|
422
|
-
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
423
|
-
|
435
|
+
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
|
436
|
+
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][1], position_source: val[0] || val[1])
|
424
437
|
}
|
425
438
|
|
439
|
+
directive_repeatable_opt:
|
440
|
+
/* nothing */
|
441
|
+
| REPEATABLE
|
442
|
+
|
426
443
|
directive_locations:
|
427
|
-
name {
|
428
|
-
| directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2]
|
444
|
+
name { result = [make_node(:DirectiveLocation, name: val[0][3], position_source: val[0])] }
|
445
|
+
| directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2][3], position_source: val[2]) }
|
429
446
|
end
|
430
447
|
|
431
448
|
---- header ----
|
@@ -435,24 +452,24 @@ end
|
|
435
452
|
|
436
453
|
EMPTY_ARRAY = [].freeze
|
437
454
|
|
438
|
-
def initialize(query_string, filename:,
|
455
|
+
def initialize(query_string, filename:, trace: Tracing::NullTrace)
|
439
456
|
raise GraphQL::ParseError.new("No query string was present", nil, nil, query_string) if query_string.nil?
|
440
457
|
@query_string = query_string
|
441
458
|
@filename = filename
|
442
|
-
@
|
459
|
+
@trace = trace
|
443
460
|
@reused_next_token = [nil, nil]
|
444
461
|
end
|
445
462
|
|
446
463
|
def parse_document
|
447
464
|
@document ||= begin
|
448
465
|
# Break the string into tokens
|
449
|
-
@
|
450
|
-
@tokens ||= GraphQL.
|
466
|
+
@trace.lex(query_string: @query_string) do
|
467
|
+
@tokens ||= GraphQL::Language::Lexer.tokenize(@query_string)
|
451
468
|
end
|
452
469
|
# From the tokens, build an AST
|
453
|
-
@
|
470
|
+
@trace.parse(query_string: @query_string) do
|
454
471
|
if @tokens.empty?
|
455
|
-
|
472
|
+
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
456
473
|
else
|
457
474
|
do_parse
|
458
475
|
end
|
@@ -460,8 +477,22 @@ def parse_document
|
|
460
477
|
end
|
461
478
|
end
|
462
479
|
|
463
|
-
|
464
|
-
|
480
|
+
class << self
|
481
|
+
attr_accessor :cache
|
482
|
+
|
483
|
+
def parse(query_string, filename: nil, trace: GraphQL::Tracing::NullTrace)
|
484
|
+
new(query_string, filename: filename, trace: trace).parse_document
|
485
|
+
end
|
486
|
+
|
487
|
+
def parse_file(filename, trace: GraphQL::Tracing::NullTrace)
|
488
|
+
if cache
|
489
|
+
cache.fetch(filename) do
|
490
|
+
parse(File.read(filename), filename: filename, trace: trace)
|
491
|
+
end
|
492
|
+
else
|
493
|
+
parse(File.read(filename), filename: filename, trace: trace)
|
494
|
+
end
|
495
|
+
end
|
465
496
|
end
|
466
497
|
|
467
498
|
private
|
@@ -471,7 +502,7 @@ def next_token
|
|
471
502
|
if lexer_token.nil?
|
472
503
|
nil
|
473
504
|
else
|
474
|
-
@reused_next_token[0] = lexer_token
|
505
|
+
@reused_next_token[0] = lexer_token[0]
|
475
506
|
@reused_next_token[1] = lexer_token
|
476
507
|
@reused_next_token
|
477
508
|
end
|
@@ -482,13 +513,13 @@ def get_description(token)
|
|
482
513
|
|
483
514
|
loop do
|
484
515
|
prev_token = token
|
485
|
-
token = token
|
516
|
+
token = token[4]
|
486
517
|
|
487
518
|
break if token.nil?
|
488
|
-
break if token
|
489
|
-
break if prev_token
|
519
|
+
break if token[0] != :COMMENT
|
520
|
+
break if prev_token[1] != token[1] + 1
|
490
521
|
|
491
|
-
comments.unshift(token.
|
522
|
+
comments.unshift(token[3].sub(/^#\s*/, ""))
|
492
523
|
end
|
493
524
|
|
494
525
|
return nil if comments.empty?
|
@@ -504,11 +535,12 @@ def on_error(parser_token_id, lexer_token, vstack)
|
|
504
535
|
if parser_token_name.nil?
|
505
536
|
raise GraphQL::ParseError.new("Parse Error on unknown token: {token_id: #{parser_token_id}, lexer_token: #{lexer_token}} from #{@query_string}", nil, nil, @query_string, filename: @filename)
|
506
537
|
else
|
507
|
-
line
|
508
|
-
|
509
|
-
|
538
|
+
line = lexer_token[1]
|
539
|
+
col = lexer_token[2]
|
540
|
+
if lexer_token[0] == :BAD_UNICODE_ESCAPE
|
541
|
+
raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
|
510
542
|
else
|
511
|
-
raise GraphQL::ParseError.new("Parse error on #{lexer_token.
|
543
|
+
raise GraphQL::ParseError.new("Parse error on #{lexer_token[3].inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
|
512
544
|
end
|
513
545
|
end
|
514
546
|
end
|
@@ -516,8 +548,8 @@ end
|
|
516
548
|
|
517
549
|
def make_node(node_name, assigns)
|
518
550
|
assigns.each do |key, value|
|
519
|
-
if key != :position_source && value.is_a?(
|
520
|
-
assigns[key] = value
|
551
|
+
if key != :position_source && value.is_a?(Array) && value[0].is_a?(Symbol)
|
552
|
+
assigns[key] = value[3]
|
521
553
|
end
|
522
554
|
end
|
523
555
|
|