graphql 1.10.2 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/generators/graphql/core.rb +21 -10
- data/lib/generators/graphql/enum_generator.rb +4 -10
- data/lib/generators/graphql/field_extractor.rb +31 -0
- data/lib/generators/graphql/input_generator.rb +50 -0
- data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
- data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
- data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
- data/lib/generators/graphql/install_generator.rb +45 -8
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/loader_generator.rb +1 -0
- data/lib/generators/graphql/mutation_create_generator.rb +22 -0
- data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
- data/lib/generators/graphql/mutation_generator.rb +6 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +28 -12
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +49 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- data/lib/generators/graphql/scalar_generator.rb +4 -2
- data/lib/generators/graphql/templates/base_argument.erb +2 -0
- data/lib/generators/graphql/templates/base_connection.erb +8 -0
- data/lib/generators/graphql/templates/base_edge.erb +8 -0
- data/lib/generators/graphql/templates/base_enum.erb +2 -0
- data/lib/generators/graphql/templates/base_field.erb +2 -0
- data/lib/generators/graphql/templates/base_input_object.erb +2 -0
- data/lib/generators/graphql/templates/base_interface.erb +2 -0
- data/lib/generators/graphql/templates/base_object.erb +2 -0
- data/lib/generators/graphql/templates/base_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +7 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +6 -2
- data/lib/generators/graphql/templates/loader.erb +2 -0
- data/lib/generators/graphql/templates/mutation.erb +3 -1
- data/lib/generators/graphql/templates/mutation_create.erb +20 -0
- data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
- data/lib/generators/graphql/templates/mutation_update.erb +21 -0
- data/lib/generators/graphql/templates/node_type.erb +9 -0
- data/lib/generators/graphql/templates/object.erb +7 -3
- data/lib/generators/graphql/templates/query_type.erb +3 -3
- data/lib/generators/graphql/templates/scalar.erb +5 -1
- data/lib/generators/graphql/templates/schema.erb +24 -33
- data/lib/generators/graphql/templates/union.erb +6 -2
- data/lib/generators/graphql/type_generator.rb +47 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/ast/field_usage.rb +30 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +52 -36
- data/lib/graphql/analysis/ast.rb +7 -8
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +31 -18
- data/lib/graphql/backtrace/trace.rb +96 -0
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +26 -18
- data/lib/graphql/dataloader/null_dataloader.rb +24 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +164 -0
- data/lib/graphql/dataloader.rb +311 -0
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +77 -44
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +62 -24
- data/lib/graphql/execution/interpreter/runtime.rb +826 -464
- data/lib/graphql/execution/interpreter.rb +206 -68
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +55 -136
- data/lib/graphql/execution/multiplex.rb +6 -162
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +7 -2
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/directive_location_enum.rb +2 -2
- data/lib/graphql/introspection/directive_type.rb +11 -5
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +4 -17
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +9 -5
- data/lib/graphql/introspection/input_value_type.rb +15 -3
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +11 -6
- data/lib/graphql/introspection/type_type.rb +31 -14
- data/lib/graphql/introspection.rb +100 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +20 -5
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/document_from_schema_definition.rb +96 -44
- data/lib/graphql/language/lexer.rb +216 -1462
- data/lib/graphql/language/nodes.rb +126 -129
- data/lib/graphql/language/parser.rb +997 -933
- data/lib/graphql/language/parser.y +148 -118
- data/lib/graphql/language/printer.rb +48 -23
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +192 -84
- data/lib/graphql/language.rb +2 -0
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
- data/lib/graphql/pagination/array_connection.rb +6 -4
- data/lib/graphql/pagination/connection.rb +105 -23
- data/lib/graphql/pagination/connections.rb +62 -35
- data/lib/graphql/pagination/relation_connection.rb +88 -36
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +203 -198
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +33 -7
- data/lib/graphql/query/null_context.rb +22 -9
- data/lib/graphql/query/validation_pipeline.rb +16 -38
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +36 -12
- data/lib/graphql/query.rb +92 -44
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +41 -10
- data/lib/graphql/relay/range_add.rb +17 -10
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
- data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
- data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
- data/lib/graphql/rubocop.rb +4 -0
- data/lib/graphql/schema/addition.rb +245 -0
- data/lib/graphql/schema/argument.rb +250 -46
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
- data/lib/graphql/schema/build_from_definition.rb +243 -89
- data/lib/graphql/schema/directive/deprecated.rb +1 -1
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +57 -0
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +108 -20
- data/lib/graphql/schema/enum.rb +105 -44
- data/lib/graphql/schema/enum_value.rb +15 -25
- data/lib/graphql/schema/field/connection_extension.rb +50 -30
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +476 -331
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +6 -8
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/input_object.rb +133 -121
- data/lib/graphql/schema/interface.rb +17 -45
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +8 -2
- data/lib/graphql/schema/list.rb +25 -8
- data/lib/graphql/schema/loader.rb +139 -103
- data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
- data/lib/graphql/schema/member/build_type.rb +19 -14
- data/lib/graphql/schema/member/has_arguments.rb +310 -26
- data/lib/graphql/schema/member/has_ast_node.rb +16 -1
- data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
- data/lib/graphql/schema/member/has_directives.rb +118 -0
- data/lib/graphql/schema/member/has_fields.rb +164 -42
- data/lib/graphql/schema/member/has_interfaces.rb +129 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +57 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +6 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +12 -7
- data/lib/graphql/schema/object.rb +35 -69
- data/lib/graphql/schema/printer.rb +16 -34
- data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
- data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
- data/lib/graphql/schema/resolver.rb +144 -79
- data/lib/graphql/schema/scalar.rb +27 -18
- data/lib/graphql/schema/subscription.rb +55 -26
- data/lib/graphql/schema/timeout.rb +45 -35
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +48 -13
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
- data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
- data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
- data/lib/graphql/schema/validator/format_validator.rb +48 -0
- data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
- data/lib/graphql/schema/validator/length_validator.rb +59 -0
- data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
- data/lib/graphql/schema/validator/required_validator.rb +82 -0
- data/lib/graphql/schema/validator.rb +171 -0
- data/lib/graphql/schema/warden.rb +185 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +471 -1116
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +13 -27
- data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +69 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
- data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
- data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
- data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
- data/lib/graphql/static_validation/validation_context.rb +13 -3
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +32 -20
- data/lib/graphql/static_validation.rb +1 -2
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
- data/lib/graphql/subscriptions/event.rb +81 -35
- data/lib/graphql/subscriptions/instrumentation.rb +0 -52
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +113 -58
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_trace.rb +77 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
- data/lib/graphql/tracing/data_dog_trace.rb +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
- data/lib/graphql/tracing/legacy_trace.rb +65 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
- data/lib/graphql/tracing/notifications_trace.rb +42 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +109 -0
- data/lib/graphql/tracing/platform_tracing.rb +64 -43
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/scout_tracing.rb +11 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +23 -71
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +10 -3
- data/lib/graphql/types/iso_8601_date.rb +20 -9
- data/lib/graphql/types/iso_8601_date_time.rb +36 -10
- data/lib/graphql/types/relay/base_connection.rb +18 -92
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +2 -4
- data/lib/graphql/types/relay/node_behaviors.rb +25 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
- data/lib/graphql/types/relay.rb +10 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +54 -65
- data/readme.md +3 -6
- metadata +116 -236
- data/lib/graphql/analysis/analyze_query.rb +0 -91
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backwards_compatibility.rb +0 -60
- data/lib/graphql/base_type.rb +0 -230
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -435
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -210
- data/lib/graphql/define/no_definition_error.rb +0 -7
- data/lib/graphql/define/non_null_with_bang.rb +0 -16
- data/lib/graphql/define/type_definer.rb +0 -31
- data/lib/graphql/define.rb +0 -31
- data/lib/graphql/deprecated_dsl.rb +0 -42
- data/lib/graphql/directive/deprecated_directive.rb +0 -2
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -107
- data/lib/graphql/enum_type.rb +0 -127
- data/lib/graphql/execution/execute.rb +0 -326
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/instrumentation.rb +0 -92
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- data/lib/graphql/execution/lazy/resolve.rb +0 -91
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -222
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -124
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -132
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -65
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/language/lexer.rl +0 -258
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -121
- data/lib/graphql/query/arguments.rb +0 -188
- data/lib/graphql/query/arguments_cache.rb +0 -25
- data/lib/graphql/query/executor.rb +0 -53
- data/lib/graphql/query/literal_input.rb +0 -136
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -39
- data/lib/graphql/relay/array_connection.rb +0 -85
- data/lib/graphql/relay/base_connection.rb +0 -176
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -41
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -19
- data/lib/graphql/relay/edges_instrumentation.rb +0 -40
- data/lib/graphql/relay/global_id_resolve.rb +0 -18
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -105
- data/lib/graphql/relay/node.rb +0 -36
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -190
- data/lib/graphql/relay/type_extensions.rb +0 -30
- data/lib/graphql/scalar_type.rb +0 -76
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -15
- data/lib/graphql/schema/member/accepts_definition.rb +0 -152
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
- data/lib/graphql/schema/member/instrumentation.rb +0 -132
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -39
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -86
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -303
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -65
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/base_field.rb +0 -22
- data/lib/graphql/types/relay/base_interface.rb +0 -29
- data/lib/graphql/types/relay/base_object.rb +0 -26
- data/lib/graphql/types/relay/node_field.rb +0 -43
- data/lib/graphql/types/relay/nodes_field.rb +0 -45
- data/lib/graphql/union_type.rb +0 -113
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -2,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,26 +77,26 @@ rule
|
|
77
77
|
}
|
78
78
|
|
79
79
|
type:
|
80
|
-
nullable_type {
|
81
|
-
| nullable_type BANG {
|
80
|
+
nullable_type { result = val[0] }
|
81
|
+
| nullable_type BANG { result = make_node(:NonNullType, of_type: val[0]) }
|
82
82
|
|
83
83
|
nullable_type:
|
84
|
-
name {
|
85
|
-
| LBRACKET type RBRACKET {
|
84
|
+
name { result = make_node(:TypeName, name: val[0])}
|
85
|
+
| LBRACKET type RBRACKET { result = make_node(:ListType, of_type: val[1]) }
|
86
86
|
|
87
87
|
default_value_opt:
|
88
|
-
/* none */ {
|
89
|
-
| EQUALS literal_value {
|
88
|
+
/* none */ { result = nil }
|
89
|
+
| EQUALS literal_value { result = val[1] }
|
90
90
|
|
91
91
|
selection_set:
|
92
|
-
LCURLY selection_list RCURLY {
|
92
|
+
LCURLY selection_list RCURLY { result = val[1] }
|
93
93
|
|
94
94
|
selection_set_opt:
|
95
|
-
/* none */ {
|
96
|
-
| selection_set {
|
95
|
+
/* none */ { result = EMPTY_ARRAY }
|
96
|
+
| selection_set { result = val[0] }
|
97
97
|
|
98
98
|
selection_list:
|
99
|
-
selection {
|
99
|
+
selection { result = [result] }
|
100
100
|
| selection_list selection { val[0] << val[1] }
|
101
101
|
|
102
102
|
selection:
|
@@ -106,7 +106,7 @@ rule
|
|
106
106
|
|
107
107
|
field:
|
108
108
|
name arguments_opt directives_list_opt selection_set_opt {
|
109
|
-
|
109
|
+
result = make_node(
|
110
110
|
:Field, {
|
111
111
|
name: val[0],
|
112
112
|
arguments: val[1],
|
@@ -117,7 +117,7 @@ rule
|
|
117
117
|
)
|
118
118
|
}
|
119
119
|
| name COLON name arguments_opt directives_list_opt selection_set_opt {
|
120
|
-
|
120
|
+
result = make_node(
|
121
121
|
:Field, {
|
122
122
|
alias: val[0],
|
123
123
|
name: val[2],
|
@@ -147,6 +147,7 @@ rule
|
|
147
147
|
name_without_on:
|
148
148
|
IDENTIFIER
|
149
149
|
| FRAGMENT
|
150
|
+
| REPEATABLE
|
150
151
|
| TRUE
|
151
152
|
| FALSE
|
152
153
|
| operation_type
|
@@ -155,34 +156,35 @@ rule
|
|
155
156
|
enum_name: /* any identifier, but not "true", "false" or "null" */
|
156
157
|
IDENTIFIER
|
157
158
|
| FRAGMENT
|
159
|
+
| REPEATABLE
|
158
160
|
| ON
|
159
161
|
| operation_type
|
160
162
|
| schema_keyword
|
161
163
|
|
162
164
|
enum_value_definition:
|
163
|
-
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]) }
|
164
166
|
|
165
167
|
enum_value_definitions:
|
166
|
-
enum_value_definition {
|
167
|
-
| 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] }
|
168
170
|
|
169
171
|
arguments_opt:
|
170
|
-
/* none */ {
|
171
|
-
| LPAREN arguments_list RPAREN {
|
172
|
+
/* none */ { result = EMPTY_ARRAY }
|
173
|
+
| LPAREN arguments_list RPAREN { result = val[1] }
|
172
174
|
|
173
175
|
arguments_list:
|
174
|
-
argument {
|
176
|
+
argument { result = [val[0]] }
|
175
177
|
| arguments_list argument { val[0] << val[1] }
|
176
178
|
|
177
179
|
argument:
|
178
|
-
name COLON input_value {
|
180
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
179
181
|
|
180
182
|
literal_value:
|
181
|
-
FLOAT {
|
182
|
-
| INT {
|
183
|
-
| STRING {
|
184
|
-
| TRUE {
|
185
|
-
| 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 }
|
186
188
|
| null_value
|
187
189
|
| enum_value
|
188
190
|
| list_value
|
@@ -193,58 +195,58 @@ rule
|
|
193
195
|
| variable
|
194
196
|
| object_value
|
195
197
|
|
196
|
-
null_value: NULL {
|
197
|
-
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]) }
|
198
200
|
|
199
201
|
list_value:
|
200
|
-
LBRACKET RBRACKET {
|
201
|
-
| LBRACKET list_value_list RBRACKET {
|
202
|
+
LBRACKET RBRACKET { result = EMPTY_ARRAY }
|
203
|
+
| LBRACKET list_value_list RBRACKET { result = val[1] }
|
202
204
|
|
203
205
|
list_value_list:
|
204
|
-
input_value {
|
206
|
+
input_value { result = [val[0]] }
|
205
207
|
| list_value_list input_value { val[0] << val[1] }
|
206
208
|
|
207
209
|
object_value:
|
208
|
-
LCURLY RCURLY {
|
209
|
-
| 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])}
|
210
212
|
|
211
213
|
object_value_list:
|
212
|
-
object_value_field {
|
214
|
+
object_value_field { result = [val[0]] }
|
213
215
|
| object_value_list object_value_field { val[0] << val[1] }
|
214
216
|
|
215
217
|
object_value_field:
|
216
|
-
name COLON input_value {
|
218
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
217
219
|
|
218
220
|
/* like the previous, but with literals only: */
|
219
221
|
object_literal_value:
|
220
|
-
LCURLY RCURLY {
|
221
|
-
| 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])}
|
222
224
|
|
223
225
|
object_literal_value_list:
|
224
|
-
object_literal_value_field {
|
226
|
+
object_literal_value_field { result = [val[0]] }
|
225
227
|
| object_literal_value_list object_literal_value_field { val[0] << val[1] }
|
226
228
|
|
227
229
|
object_literal_value_field:
|
228
|
-
name COLON literal_value {
|
230
|
+
name COLON literal_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
229
231
|
|
230
|
-
enum_value: enum_name {
|
232
|
+
enum_value: enum_name { result = make_node(:Enum, name: val[0], position_source: val[0]) }
|
231
233
|
|
232
234
|
directives_list_opt:
|
233
|
-
/* none */ {
|
235
|
+
/* none */ { result = EMPTY_ARRAY }
|
234
236
|
| directives_list
|
235
237
|
|
236
238
|
directives_list:
|
237
|
-
directive {
|
239
|
+
directive { result = [val[0]] }
|
238
240
|
| directives_list directive { val[0] << val[1] }
|
239
241
|
|
240
|
-
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]) }
|
241
243
|
|
242
244
|
fragment_spread:
|
243
|
-
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]) }
|
244
246
|
|
245
247
|
inline_fragment:
|
246
248
|
ELLIPSIS ON type directives_list_opt selection_set {
|
247
|
-
|
249
|
+
result = make_node(:InlineFragment, {
|
248
250
|
type: val[2],
|
249
251
|
directives: val[3],
|
250
252
|
selections: val[4],
|
@@ -252,7 +254,7 @@ rule
|
|
252
254
|
})
|
253
255
|
}
|
254
256
|
| ELLIPSIS directives_list_opt selection_set {
|
255
|
-
|
257
|
+
result = make_node(:InlineFragment, {
|
256
258
|
type: nil,
|
257
259
|
directives: val[1],
|
258
260
|
selections: val[2],
|
@@ -262,7 +264,7 @@ rule
|
|
262
264
|
|
263
265
|
fragment_definition:
|
264
266
|
FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
|
265
|
-
|
267
|
+
result = make_node(:FragmentDefinition, {
|
266
268
|
name: val[1],
|
267
269
|
type: val[3],
|
268
270
|
directives: val[4],
|
@@ -273,7 +275,7 @@ rule
|
|
273
275
|
}
|
274
276
|
|
275
277
|
fragment_name_opt:
|
276
|
-
/* none */ {
|
278
|
+
/* none */ { result = nil }
|
277
279
|
| name_without_on
|
278
280
|
|
279
281
|
type_system_definition:
|
@@ -282,14 +284,18 @@ rule
|
|
282
284
|
| directive_definition
|
283
285
|
|
284
286
|
schema_definition:
|
285
|
-
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] }
|
286
292
|
|
287
293
|
operation_type_definition_list:
|
288
294
|
operation_type_definition
|
289
|
-
| operation_type_definition_list operation_type_definition {
|
295
|
+
| operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
|
290
296
|
|
291
297
|
operation_type_definition:
|
292
|
-
operation_type COLON name {
|
298
|
+
operation_type COLON name { result = { val[0][3].to_sym => val[2] } }
|
293
299
|
|
294
300
|
type_definition:
|
295
301
|
scalar_type_definition
|
@@ -304,8 +310,8 @@ rule
|
|
304
310
|
| type_extension
|
305
311
|
|
306
312
|
schema_extension:
|
307
|
-
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY {
|
308
|
-
| 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]) }
|
309
315
|
|
310
316
|
type_extension:
|
311
317
|
scalar_type_extension
|
@@ -315,30 +321,31 @@ rule
|
|
315
321
|
| enum_type_extension
|
316
322
|
| input_object_type_extension
|
317
323
|
|
318
|
-
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]) }
|
319
325
|
|
320
326
|
object_type_extension:
|
321
327
|
/* TODO - This first one shouldn't be necessary but parser is getting confused */
|
322
|
-
EXTEND TYPE name implements
|
323
|
-
| EXTEND TYPE name implements_opt directives_list_opt
|
324
|
-
| EXTEND TYPE name implements_opt directives_list {
|
325
|
-
| 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]) }
|
326
332
|
|
327
333
|
interface_type_extension:
|
328
|
-
EXTEND INTERFACE name directives_list_opt
|
329
|
-
| 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]) }
|
330
337
|
|
331
338
|
union_type_extension:
|
332
|
-
EXTEND UNION name directives_list_opt EQUALS union_members {
|
333
|
-
| 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]) }
|
334
341
|
|
335
342
|
enum_type_extension:
|
336
|
-
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
337
|
-
| 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]) }
|
338
345
|
|
339
346
|
input_object_type_extension:
|
340
|
-
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
341
|
-
| 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]) }
|
342
349
|
|
343
350
|
description: STRING
|
344
351
|
|
@@ -348,86 +355,94 @@ rule
|
|
348
355
|
|
349
356
|
scalar_type_definition:
|
350
357
|
description_opt SCALAR name directives_list_opt {
|
351
|
-
|
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])
|
352
359
|
}
|
353
360
|
|
354
361
|
object_type_definition:
|
355
|
-
description_opt TYPE name implements_opt directives_list_opt
|
356
|
-
|
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])
|
357
364
|
}
|
358
365
|
|
359
366
|
implements_opt:
|
360
|
-
/* none */ {
|
367
|
+
/* none */ { result = EMPTY_ARRAY }
|
361
368
|
| implements
|
362
369
|
|
363
370
|
implements:
|
364
|
-
IMPLEMENTS AMP interfaces_list {
|
365
|
-
| IMPLEMENTS interfaces_list {
|
366
|
-
| 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] }
|
367
374
|
|
368
375
|
interfaces_list:
|
369
|
-
name {
|
376
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
370
377
|
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
371
378
|
|
372
379
|
legacy_interfaces_list:
|
373
|
-
name {
|
380
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
374
381
|
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
375
382
|
|
376
383
|
input_value_definition:
|
377
384
|
description_opt name COLON type default_value_opt directives_list_opt {
|
378
|
-
|
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])
|
379
386
|
}
|
380
387
|
|
381
388
|
input_value_definition_list:
|
382
|
-
input_value_definition {
|
389
|
+
input_value_definition { result = [val[0]] }
|
383
390
|
| input_value_definition_list input_value_definition { val[0] << val[1] }
|
384
391
|
|
385
392
|
arguments_definitions_opt:
|
386
|
-
/* none */ {
|
387
|
-
| LPAREN input_value_definition_list RPAREN {
|
393
|
+
/* none */ { result = EMPTY_ARRAY }
|
394
|
+
| LPAREN input_value_definition_list RPAREN { result = val[1] }
|
388
395
|
|
389
396
|
field_definition:
|
390
397
|
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
391
|
-
|
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])
|
392
399
|
}
|
393
400
|
|
401
|
+
field_definition_list_opt:
|
402
|
+
/* none */ { result = EMPTY_ARRAY }
|
403
|
+
| LCURLY field_definition_list RCURLY { result = val[1] }
|
404
|
+
|
394
405
|
field_definition_list:
|
395
|
-
/* none */ {
|
396
|
-
| 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]] }
|
397
408
|
| field_definition_list field_definition { val[0] << val[1] }
|
398
409
|
|
399
410
|
interface_type_definition:
|
400
|
-
description_opt INTERFACE name directives_list_opt
|
401
|
-
|
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])
|
402
413
|
}
|
403
414
|
|
404
415
|
union_members:
|
405
|
-
name {
|
416
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
|
406
417
|
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
407
418
|
|
408
419
|
union_type_definition:
|
409
420
|
description_opt UNION name directives_list_opt EQUALS union_members {
|
410
|
-
|
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])
|
411
422
|
}
|
412
423
|
|
413
424
|
enum_type_definition:
|
414
425
|
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
415
|
-
|
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])
|
416
427
|
}
|
417
428
|
|
418
429
|
input_object_type_definition:
|
419
430
|
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
420
|
-
|
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])
|
421
432
|
}
|
422
433
|
|
423
434
|
directive_definition:
|
424
|
-
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt ON directive_locations {
|
425
|
-
|
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])
|
426
437
|
}
|
427
438
|
|
439
|
+
directive_repeatable_opt:
|
440
|
+
/* nothing */
|
441
|
+
| REPEATABLE
|
442
|
+
|
428
443
|
directive_locations:
|
429
|
-
name {
|
430
|
-
| 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]) }
|
431
446
|
end
|
432
447
|
|
433
448
|
---- header ----
|
@@ -437,22 +452,22 @@ end
|
|
437
452
|
|
438
453
|
EMPTY_ARRAY = [].freeze
|
439
454
|
|
440
|
-
def initialize(query_string, filename:,
|
455
|
+
def initialize(query_string, filename:, trace: Tracing::NullTrace)
|
441
456
|
raise GraphQL::ParseError.new("No query string was present", nil, nil, query_string) if query_string.nil?
|
442
457
|
@query_string = query_string
|
443
458
|
@filename = filename
|
444
|
-
@
|
459
|
+
@trace = trace
|
445
460
|
@reused_next_token = [nil, nil]
|
446
461
|
end
|
447
462
|
|
448
463
|
def parse_document
|
449
464
|
@document ||= begin
|
450
465
|
# Break the string into tokens
|
451
|
-
@
|
452
|
-
@tokens ||= GraphQL.
|
466
|
+
@trace.lex(query_string: @query_string) do
|
467
|
+
@tokens ||= GraphQL::Language::Lexer.tokenize(@query_string)
|
453
468
|
end
|
454
469
|
# From the tokens, build an AST
|
455
|
-
@
|
470
|
+
@trace.parse(query_string: @query_string) do
|
456
471
|
if @tokens.empty?
|
457
472
|
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
458
473
|
else
|
@@ -462,8 +477,22 @@ def parse_document
|
|
462
477
|
end
|
463
478
|
end
|
464
479
|
|
465
|
-
|
466
|
-
|
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
|
467
496
|
end
|
468
497
|
|
469
498
|
private
|
@@ -473,7 +502,7 @@ def next_token
|
|
473
502
|
if lexer_token.nil?
|
474
503
|
nil
|
475
504
|
else
|
476
|
-
@reused_next_token[0] = lexer_token
|
505
|
+
@reused_next_token[0] = lexer_token[0]
|
477
506
|
@reused_next_token[1] = lexer_token
|
478
507
|
@reused_next_token
|
479
508
|
end
|
@@ -484,13 +513,13 @@ def get_description(token)
|
|
484
513
|
|
485
514
|
loop do
|
486
515
|
prev_token = token
|
487
|
-
token = token
|
516
|
+
token = token[4]
|
488
517
|
|
489
518
|
break if token.nil?
|
490
|
-
break if token
|
491
|
-
break if prev_token
|
519
|
+
break if token[0] != :COMMENT
|
520
|
+
break if prev_token[1] != token[1] + 1
|
492
521
|
|
493
|
-
comments.unshift(token.
|
522
|
+
comments.unshift(token[3].sub(/^#\s*/, ""))
|
494
523
|
end
|
495
524
|
|
496
525
|
return nil if comments.empty?
|
@@ -506,11 +535,12 @@ def on_error(parser_token_id, lexer_token, vstack)
|
|
506
535
|
if parser_token_name.nil?
|
507
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)
|
508
537
|
else
|
509
|
-
line
|
510
|
-
|
511
|
-
|
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)
|
512
542
|
else
|
513
|
-
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)
|
514
544
|
end
|
515
545
|
end
|
516
546
|
end
|
@@ -518,8 +548,8 @@ end
|
|
518
548
|
|
519
549
|
def make_node(node_name, assigns)
|
520
550
|
assigns.each do |key, value|
|
521
|
-
if key != :position_source && value.is_a?(
|
522
|
-
assigns[key] = value
|
551
|
+
if key != :position_source && value.is_a?(Array) && value[0].is_a?(Symbol)
|
552
|
+
assigns[key] = value[3]
|
523
553
|
end
|
524
554
|
end
|
525
555
|
|