graphql 0.16.0 → 2.0.15
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 +5 -5
- data/.yardopts +5 -0
- data/lib/generators/graphql/core.rb +69 -0
- data/lib/generators/graphql/enum_generator.rb +27 -0
- 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/install/templates/base_mutation.erb +10 -0
- data/lib/generators/graphql/install/templates/mutation_type.erb +12 -0
- data/lib/generators/graphql/install_generator.rb +197 -0
- data/lib/generators/graphql/interface_generator.rb +27 -0
- data/lib/generators/graphql/loader_generator.rb +21 -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 +30 -0
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +50 -0
- 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 +22 -0
- data/lib/generators/graphql/templates/base_argument.erb +6 -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 +6 -0
- data/lib/generators/graphql/templates/base_field.erb +7 -0
- data/lib/generators/graphql/templates/base_input_object.erb +7 -0
- data/lib/generators/graphql/templates/base_interface.erb +9 -0
- data/lib/generators/graphql/templates/base_object.erb +7 -0
- data/lib/generators/graphql/templates/base_scalar.erb +6 -0
- data/lib/generators/graphql/templates/base_union.erb +6 -0
- data/lib/generators/graphql/templates/enum.erb +11 -0
- data/lib/generators/graphql/templates/graphql_controller.erb +52 -0
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +10 -0
- data/lib/generators/graphql/templates/loader.erb +19 -0
- data/lib/generators/graphql/templates/mutation.erb +16 -0
- 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 +10 -0
- data/lib/generators/graphql/templates/query_type.erb +15 -0
- data/lib/generators/graphql/templates/scalar.erb +17 -0
- data/lib/generators/graphql/templates/schema.erb +30 -0
- data/lib/generators/graphql/templates/union.erb +9 -0
- data/lib/generators/graphql/type_generator.rb +135 -0
- data/lib/generators/graphql/union_generator.rb +33 -0
- data/lib/graphql/analysis/ast/analyzer.rb +84 -0
- data/lib/graphql/analysis/ast/field_usage.rb +57 -0
- data/lib/graphql/analysis/ast/max_query_complexity.rb +22 -0
- data/lib/graphql/analysis/ast/max_query_depth.rb +22 -0
- data/lib/graphql/analysis/ast/query_complexity.rb +230 -0
- data/lib/graphql/analysis/ast/query_depth.rb +55 -0
- data/lib/graphql/analysis/ast/visitor.rb +269 -0
- data/lib/graphql/analysis/ast.rb +81 -0
- data/lib/graphql/analysis.rb +2 -5
- data/lib/graphql/analysis_error.rb +1 -0
- data/lib/graphql/backtrace/inspect_result.rb +50 -0
- data/lib/graphql/backtrace/table.rb +141 -0
- data/lib/graphql/backtrace/traced_error.rb +54 -0
- data/lib/graphql/backtrace/tracer.rb +80 -0
- data/lib/graphql/backtrace.rb +58 -0
- data/lib/graphql/coercion_error.rb +13 -0
- 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 +19 -0
- data/lib/graphql/execution/directive_checks.rb +37 -0
- data/lib/graphql/execution/errors.rb +93 -0
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +105 -0
- data/lib/graphql/execution/interpreter/execution_errors.rb +29 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +77 -0
- data/lib/graphql/execution/interpreter/runtime.rb +994 -0
- data/lib/graphql/execution/interpreter.rb +226 -0
- data/lib/graphql/execution/lazy/lazy_method_map.rb +98 -0
- data/lib/graphql/execution/lazy.rb +75 -0
- data/lib/graphql/execution/lookahead.rb +311 -0
- data/lib/graphql/execution/multiplex.rb +45 -0
- data/lib/graphql/execution.rb +18 -0
- data/lib/graphql/execution_error.rb +34 -1
- data/lib/graphql/filter.rb +53 -0
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +36 -0
- data/lib/graphql/introspection/base_object.rb +13 -0
- data/lib/graphql/introspection/directive_location_enum.rb +12 -5
- data/lib/graphql/introspection/directive_type.rb +30 -10
- data/lib/graphql/introspection/dynamic_fields.rb +12 -0
- data/lib/graphql/introspection/entry_points.rb +22 -0
- data/lib/graphql/introspection/enum_value_type.rb +21 -8
- data/lib/graphql/introspection/field_type.rb +26 -10
- data/lib/graphql/introspection/input_value_type.rb +64 -14
- data/lib/graphql/introspection/introspection_query.rb +7 -76
- data/lib/graphql/introspection/schema_type.rb +42 -17
- data/lib/graphql/introspection/type_kind_enum.rb +11 -5
- data/lib/graphql/introspection/type_type.rb +104 -16
- data/lib/graphql/introspection.rb +104 -13
- data/lib/graphql/invalid_name_error.rb +11 -0
- data/lib/graphql/invalid_null_error.rb +36 -8
- data/lib/graphql/language/block_string.rb +99 -0
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/definition_slice.rb +41 -0
- data/lib/graphql/language/document_from_schema_definition.rb +335 -0
- data/lib/graphql/language/generation.rb +16 -86
- data/lib/graphql/language/lexer.rb +1436 -705
- data/lib/graphql/language/lexer.rl +172 -64
- data/lib/graphql/language/nodes.rb +617 -105
- data/lib/graphql/language/parser.rb +1524 -430
- data/lib/graphql/language/parser.y +348 -73
- data/lib/graphql/language/printer.rb +386 -0
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +16 -3
- data/lib/graphql/language/visitor.rb +169 -25
- data/lib/graphql/language.rb +30 -0
- data/lib/graphql/load_application_object_failed_error.rb +22 -0
- data/lib/graphql/name_validator.rb +11 -0
- data/lib/graphql/pagination/active_record_relation_connection.rb +85 -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 +24 -0
- data/lib/graphql/query/context.rb +266 -12
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +34 -7
- data/lib/graphql/query/null_context.rb +52 -0
- data/lib/graphql/query/result.rb +63 -0
- data/lib/graphql/query/validation_pipeline.rb +114 -0
- data/lib/graphql/query/variable_validation_error.rb +27 -3
- data/lib/graphql/query/variables.rb +75 -24
- data/lib/graphql/query.rb +359 -92
- data/lib/graphql/railtie.rb +13 -0
- data/lib/graphql/rake_task/validate.rb +63 -0
- data/lib/graphql/rake_task.rb +146 -0
- data/lib/graphql/relay/range_add.rb +52 -0
- data/lib/graphql/relay.rb +3 -0
- 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/runtime_type_error.rb +5 -0
- data/lib/graphql/schema/addition.rb +245 -0
- data/lib/graphql/schema/argument.rb +395 -0
- data/lib/graphql/schema/base_64_bp.rb +26 -0
- data/lib/graphql/schema/base_64_encoder.rb +21 -0
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +47 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +78 -0
- data/lib/graphql/schema/build_from_definition.rb +492 -0
- data/lib/graphql/schema/built_in_types.rb +12 -0
- data/lib/graphql/schema/directive/deprecated.rb +18 -0
- data/lib/graphql/schema/directive/feature.rb +66 -0
- data/lib/graphql/schema/directive/flagged.rb +57 -0
- data/lib/graphql/schema/directive/include.rb +25 -0
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +25 -0
- data/lib/graphql/schema/directive/transform.rb +60 -0
- data/lib/graphql/schema/directive.rb +212 -0
- data/lib/graphql/schema/enum.rb +176 -0
- data/lib/graphql/schema/enum_value.rb +77 -0
- data/lib/graphql/schema/field/connection_extension.rb +80 -0
- data/lib/graphql/schema/field/scope_extension.rb +22 -0
- data/lib/graphql/schema/field.rb +862 -0
- data/lib/graphql/schema/field_extension.rb +156 -0
- data/lib/graphql/schema/find_inherited_value.rb +36 -0
- data/lib/graphql/schema/finder.rb +155 -0
- data/lib/graphql/schema/input_object.rb +258 -0
- data/lib/graphql/schema/interface.rb +113 -0
- data/lib/graphql/schema/introspection_system.rb +164 -0
- data/lib/graphql/schema/invalid_type_error.rb +1 -0
- data/lib/graphql/schema/late_bound_type.rb +37 -0
- data/lib/graphql/schema/list.rb +86 -0
- data/lib/graphql/schema/loader.rb +228 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +124 -0
- data/lib/graphql/schema/member/build_type.rb +178 -0
- data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
- data/lib/graphql/schema/member/has_arguments.rb +376 -0
- data/lib/graphql/schema/member/has_ast_node.rb +20 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
- data/lib/graphql/schema/member/has_directives.rb +113 -0
- data/lib/graphql/schema/member/has_fields.rb +163 -0
- data/lib/graphql/schema/member/has_interfaces.rb +88 -0
- data/lib/graphql/schema/member/has_path.rb +25 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +31 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +73 -0
- data/lib/graphql/schema/member/scoped.rb +21 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +38 -0
- data/lib/graphql/schema/member/validates_input.rb +33 -0
- data/lib/graphql/schema/member.rb +39 -0
- data/lib/graphql/schema/mutation.rb +85 -0
- data/lib/graphql/schema/non_null.rb +67 -0
- data/lib/graphql/schema/null_mask.rb +11 -0
- data/lib/graphql/schema/object.rb +117 -0
- data/lib/graphql/schema/printer.rb +72 -128
- data/lib/graphql/schema/relay_classic_mutation.rb +179 -0
- data/lib/graphql/schema/resolver/has_payload_type.rb +106 -0
- data/lib/graphql/schema/resolver.rb +402 -0
- data/lib/graphql/schema/scalar.rb +68 -0
- data/lib/graphql/schema/subscription.rb +148 -0
- data/lib/graphql/schema/timeout.rb +123 -0
- data/lib/graphql/schema/type_expression.rb +29 -5
- data/lib/graphql/schema/type_membership.rb +51 -0
- data/lib/graphql/schema/union.rb +81 -0
- data/lib/graphql/schema/unique_within_type.rb +34 -0
- data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
- data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
- data/lib/graphql/schema/validator/exclusion_validator.rb +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 +413 -0
- data/lib/graphql/schema/wrapper.rb +24 -0
- data/lib/graphql/schema.rb +1179 -104
- data/lib/graphql/static_validation/all_rules.rb +14 -0
- data/lib/graphql/static_validation/base_visitor.rb +200 -0
- data/lib/graphql/static_validation/definition_dependencies.rb +198 -0
- data/lib/graphql/static_validation/error.rb +46 -0
- data/lib/graphql/static_validation/interpreter_visitor.rb +14 -0
- data/lib/graphql/static_validation/literal_validator.rb +113 -22
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +59 -11
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +48 -0
- data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +31 -0
- data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +30 -0
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +62 -8
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +37 -0
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +20 -13
- data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +29 -0
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +32 -26
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +31 -0
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +21 -23
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +32 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +55 -18
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +31 -0
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +390 -70
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +53 -0
- data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +29 -0
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +54 -37
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +35 -0
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +26 -16
- data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +29 -0
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +13 -19
- data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +29 -0
- data/lib/graphql/static_validation/rules/fragments_are_named.rb +16 -0
- data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +26 -0
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +25 -20
- data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +30 -0
- data/lib/graphql/static_validation/rules/fragments_are_used.rb +22 -33
- data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +29 -0
- 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/mutation_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +41 -0
- data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +25 -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/operation_names_are_valid.rb +36 -0
- data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +28 -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 +22 -21
- data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +35 -0
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +59 -0
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +35 -0
- data/lib/graphql/static_validation/rules/subscription_root_exists.rb +17 -0
- data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +26 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +56 -0
- data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +29 -0
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +36 -18
- data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +39 -0
- data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +24 -0
- data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +29 -0
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +103 -39
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +38 -0
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +22 -14
- data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +32 -0
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +92 -70
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +37 -0
- data/lib/graphql/static_validation/type_stack.rb +85 -24
- data/lib/graphql/static_validation/validation_context.rb +25 -46
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +46 -15
- data/lib/graphql/static_validation.rb +6 -3
- data/lib/graphql/string_encoding_error.rb +20 -0
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +247 -0
- 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 +144 -0
- data/lib/graphql/subscriptions/instrumentation.rb +28 -0
- data/lib/graphql/subscriptions/serialize.rb +158 -0
- data/lib/graphql/subscriptions.rb +306 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +21 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +51 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +100 -0
- data/lib/graphql/tracing/instrumentation_tracing.rb +83 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +51 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_tracing.rb +122 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +32 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +67 -0
- data/lib/graphql/tracing/scout_tracing.rb +54 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing.rb +94 -0
- data/lib/graphql/type_kinds.rb +50 -22
- data/lib/graphql/types/big_int.rb +23 -0
- data/lib/graphql/types/boolean.rb +18 -0
- data/lib/graphql/types/float.rb +19 -0
- data/lib/graphql/types/id.rb +24 -0
- data/lib/graphql/types/int.rb +36 -0
- data/lib/graphql/types/iso_8601_date.rb +45 -0
- data/lib/graphql/types/iso_8601_date_time.rb +76 -0
- data/lib/graphql/types/json.rb +25 -0
- data/lib/graphql/types/relay/base_connection.rb +49 -0
- data/lib/graphql/types/relay/base_edge.rb +29 -0
- data/lib/graphql/types/relay/connection_behaviors.rb +154 -0
- data/lib/graphql/types/relay/default_relay.rb +21 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +64 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +15 -0
- data/lib/graphql/types/relay/node_behaviors.rb +19 -0
- data/lib/graphql/types/relay/page_info.rb +11 -0
- data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
- data/lib/graphql/types/relay.rb +39 -0
- data/lib/graphql/types/string.rb +29 -0
- data/lib/graphql/types.rb +11 -0
- data/lib/graphql/unauthorized_error.rb +29 -0
- data/lib/graphql/unauthorized_field_error.rb +23 -0
- data/lib/graphql/unresolved_type_error.rb +35 -0
- data/lib/graphql/version.rb +2 -1
- data/lib/graphql.rb +86 -41
- data/readme.md +15 -101
- metadata +394 -279
- data/lib/graphql/analysis/analyze_query.rb +0 -73
- data/lib/graphql/analysis/max_query_complexity.rb +0 -25
- data/lib/graphql/analysis/max_query_depth.rb +0 -25
- data/lib/graphql/analysis/query_complexity.rb +0 -122
- data/lib/graphql/analysis/query_depth.rb +0 -54
- data/lib/graphql/argument.rb +0 -25
- data/lib/graphql/base_type.rb +0 -115
- data/lib/graphql/boolean_type.rb +0 -9
- data/lib/graphql/define/assign_argument.rb +0 -20
- data/lib/graphql/define/assign_enum_value.rb +0 -16
- data/lib/graphql/define/assign_object_field.rb +0 -21
- data/lib/graphql/define/assignment_dictionary.rb +0 -26
- data/lib/graphql/define/defined_object_proxy.rb +0 -32
- data/lib/graphql/define/instance_definable.rb +0 -79
- data/lib/graphql/define/non_null_with_bang.rb +0 -15
- data/lib/graphql/define/type_definer.rb +0 -30
- data/lib/graphql/define.rb +0 -8
- data/lib/graphql/directive/include_directive.rb +0 -10
- data/lib/graphql/directive/skip_directive.rb +0 -11
- data/lib/graphql/directive.rb +0 -49
- data/lib/graphql/enum_type.rb +0 -95
- data/lib/graphql/field.rb +0 -131
- data/lib/graphql/float_type.rb +0 -5
- data/lib/graphql/id_type.rb +0 -12
- data/lib/graphql/input_object_type.rb +0 -71
- data/lib/graphql/int_type.rb +0 -5
- data/lib/graphql/interface_type.rb +0 -38
- data/lib/graphql/internal_representation/node.rb +0 -81
- data/lib/graphql/internal_representation/rewrite.rb +0 -177
- data/lib/graphql/internal_representation.rb +0 -2
- data/lib/graphql/introspection/arguments_field.rb +0 -5
- data/lib/graphql/introspection/enum_values_field.rb +0 -13
- data/lib/graphql/introspection/fields_field.rb +0 -13
- data/lib/graphql/introspection/input_fields_field.rb +0 -12
- data/lib/graphql/introspection/interfaces_field.rb +0 -5
- data/lib/graphql/introspection/of_type_field.rb +0 -6
- data/lib/graphql/introspection/possible_types_field.rb +0 -11
- data/lib/graphql/introspection/schema_field.rb +0 -15
- data/lib/graphql/introspection/type_by_name_field.rb +0 -16
- data/lib/graphql/introspection/typename_field.rb +0 -15
- data/lib/graphql/list_type.rb +0 -46
- data/lib/graphql/non_null_type.rb +0 -43
- data/lib/graphql/object_type.rb +0 -93
- data/lib/graphql/query/arguments.rb +0 -76
- data/lib/graphql/query/directive_resolution.rb +0 -16
- data/lib/graphql/query/executor.rb +0 -45
- data/lib/graphql/query/literal_input.rb +0 -90
- data/lib/graphql/query/serial_execution/execution_context.rb +0 -31
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -82
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -27
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -42
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -107
- data/lib/graphql/query/serial_execution.rb +0 -41
- data/lib/graphql/query/type_resolver.rb +0 -25
- data/lib/graphql/scalar_type.rb +0 -53
- data/lib/graphql/schema/catchall_middleware.rb +0 -34
- data/lib/graphql/schema/middleware_chain.rb +0 -28
- data/lib/graphql/schema/possible_types.rb +0 -34
- data/lib/graphql/schema/reduce_types.rb +0 -68
- data/lib/graphql/schema/rescue_middleware.rb +0 -53
- data/lib/graphql/schema/timeout_middleware.rb +0 -67
- data/lib/graphql/schema/type_map.rb +0 -30
- data/lib/graphql/schema/validation.rb +0 -164
- data/lib/graphql/static_validation/arguments_validator.rb +0 -48
- data/lib/graphql/static_validation/message.rb +0 -36
- data/lib/graphql/string_type.rb +0 -5
- data/lib/graphql/union_type.rb +0 -38
- data/spec/graphql/analysis/analyze_query_spec.rb +0 -50
- data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -62
- data/spec/graphql/analysis/max_query_depth_spec.rb +0 -100
- data/spec/graphql/analysis/query_complexity_spec.rb +0 -235
- data/spec/graphql/analysis/query_depth_spec.rb +0 -80
- data/spec/graphql/argument_spec.rb +0 -20
- data/spec/graphql/base_type_spec.rb +0 -24
- data/spec/graphql/boolean_type_spec.rb +0 -20
- data/spec/graphql/define/instance_definable_spec.rb +0 -55
- data/spec/graphql/directive_spec.rb +0 -77
- data/spec/graphql/enum_type_spec.rb +0 -31
- data/spec/graphql/execution_error_spec.rb +0 -61
- data/spec/graphql/field_spec.rb +0 -92
- data/spec/graphql/float_type_spec.rb +0 -15
- data/spec/graphql/id_type_spec.rb +0 -32
- data/spec/graphql/input_object_type_spec.rb +0 -162
- data/spec/graphql/int_type_spec.rb +0 -15
- data/spec/graphql/interface_type_spec.rb +0 -56
- data/spec/graphql/internal_representation/rewrite_spec.rb +0 -120
- data/spec/graphql/introspection/directive_type_spec.rb +0 -50
- data/spec/graphql/introspection/input_value_type_spec.rb +0 -42
- data/spec/graphql/introspection/introspection_query_spec.rb +0 -10
- data/spec/graphql/introspection/schema_type_spec.rb +0 -45
- data/spec/graphql/introspection/type_type_spec.rb +0 -122
- data/spec/graphql/language/generation_spec.rb +0 -42
- data/spec/graphql/language/parser_spec.rb +0 -442
- data/spec/graphql/language/visitor_spec.rb +0 -49
- data/spec/graphql/list_type_spec.rb +0 -32
- data/spec/graphql/non_null_type_spec.rb +0 -31
- data/spec/graphql/object_type_spec.rb +0 -42
- data/spec/graphql/query/arguments_spec.rb +0 -25
- data/spec/graphql/query/context_spec.rb +0 -83
- data/spec/graphql/query/executor_spec.rb +0 -273
- data/spec/graphql/query/serial_execution/execution_context_spec.rb +0 -53
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -66
- data/spec/graphql/query/type_resolver_spec.rb +0 -8
- data/spec/graphql/query/variables_spec.rb +0 -28
- data/spec/graphql/query_spec.rb +0 -363
- data/spec/graphql/scalar_type_spec.rb +0 -61
- data/spec/graphql/schema/catchall_middleware_spec.rb +0 -32
- data/spec/graphql/schema/middleware_chain_spec.rb +0 -42
- data/spec/graphql/schema/printer_spec.rb +0 -190
- data/spec/graphql/schema/reduce_types_spec.rb +0 -102
- data/spec/graphql/schema/rescue_middleware_spec.rb +0 -33
- data/spec/graphql/schema/timeout_middleware_spec.rb +0 -180
- data/spec/graphql/schema/type_expression_spec.rb +0 -38
- data/spec/graphql/schema/validation_spec.rb +0 -219
- data/spec/graphql/schema_spec.rb +0 -23
- data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -63
- data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -48
- data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -34
- data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -39
- data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -60
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -31
- data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -48
- data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -47
- data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -39
- data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -44
- data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -49
- data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -25
- data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -42
- data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -44
- data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -63
- data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -37
- data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -53
- data/spec/graphql/static_validation/type_stack_spec.rb +0 -37
- data/spec/graphql/static_validation/validator_spec.rb +0 -69
- data/spec/graphql/string_type_spec.rb +0 -15
- data/spec/graphql/union_type_spec.rb +0 -31
- data/spec/spec_helper.rb +0 -18
- data/spec/support/dairy_app.rb +0 -309
- data/spec/support/dairy_data.rb +0 -23
- data/spec/support/minimum_input_object.rb +0 -16
- data/spec/support/star_wars_data.rb +0 -71
- data/spec/support/star_wars_schema.rb +0 -76
@@ -2,19 +2,24 @@ 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:
|
12
|
+
executable_definition
|
13
|
+
| type_system_definition
|
14
|
+
| type_system_extension
|
15
|
+
|
16
|
+
executable_definition:
|
12
17
|
operation_definition
|
13
18
|
| fragment_definition
|
14
19
|
|
15
20
|
operation_definition:
|
16
21
|
operation_type operation_name_opt variable_definitions_opt directives_list_opt selection_set {
|
17
|
-
|
22
|
+
result = make_node(
|
18
23
|
:OperationDefinition, {
|
19
24
|
operation_type: val[0],
|
20
25
|
name: val[1],
|
@@ -25,11 +30,21 @@ rule
|
|
25
30
|
}
|
26
31
|
)
|
27
32
|
}
|
28
|
-
|
|
29
|
-
|
33
|
+
| LCURLY selection_list RCURLY {
|
34
|
+
result = make_node(
|
35
|
+
:OperationDefinition, {
|
36
|
+
operation_type: "query",
|
37
|
+
selections: val[1],
|
38
|
+
position_source: val[0],
|
39
|
+
}
|
40
|
+
)
|
41
|
+
}
|
42
|
+
| LCURLY RCURLY {
|
43
|
+
result = make_node(
|
30
44
|
:OperationDefinition, {
|
31
45
|
operation_type: "query",
|
32
|
-
selections:
|
46
|
+
selections: [],
|
47
|
+
position_source: val[0],
|
33
48
|
}
|
34
49
|
)
|
35
50
|
}
|
@@ -40,20 +55,20 @@ rule
|
|
40
55
|
| SUBSCRIPTION
|
41
56
|
|
42
57
|
operation_name_opt:
|
43
|
-
/* none */ {
|
58
|
+
/* none */ { result = nil }
|
44
59
|
| name
|
45
60
|
|
46
61
|
variable_definitions_opt:
|
47
|
-
/* none */ {
|
48
|
-
|
|
62
|
+
/* none */ { result = EMPTY_ARRAY }
|
63
|
+
| LPAREN variable_definitions_list RPAREN { result = val[1] }
|
49
64
|
|
50
65
|
variable_definitions_list:
|
51
|
-
variable_definition {
|
66
|
+
variable_definition { result = [val[0]] }
|
52
67
|
| variable_definitions_list variable_definition { val[0] << val[1] }
|
53
68
|
|
54
69
|
variable_definition:
|
55
|
-
VAR_SIGN name COLON
|
56
|
-
|
70
|
+
VAR_SIGN name COLON type default_value_opt {
|
71
|
+
result = make_node(:VariableDefinition, {
|
57
72
|
name: val[1],
|
58
73
|
type: val[3],
|
59
74
|
default_value: val[4],
|
@@ -61,25 +76,27 @@ rule
|
|
61
76
|
})
|
62
77
|
}
|
63
78
|
|
64
|
-
|
65
|
-
|
66
|
-
|
|
67
|
-
| RBRACKET variable_definition_type_name LBRACKET { return make_node(:ListType, of_type: val[1]) }
|
79
|
+
type:
|
80
|
+
nullable_type { result = val[0] }
|
81
|
+
| nullable_type BANG { result = make_node(:NonNullType, of_type: val[0]) }
|
68
82
|
|
69
|
-
|
70
|
-
|
71
|
-
|
|
83
|
+
nullable_type:
|
84
|
+
name { result = make_node(:TypeName, name: val[0])}
|
85
|
+
| LBRACKET type RBRACKET { result = make_node(:ListType, of_type: val[1]) }
|
86
|
+
|
87
|
+
default_value_opt:
|
88
|
+
/* none */ { result = nil }
|
89
|
+
| EQUALS literal_value { result = val[1] }
|
72
90
|
|
73
91
|
selection_set:
|
74
|
-
RCURLY
|
75
|
-
| RCURLY selection_list LCURLY { return val[1] }
|
92
|
+
LCURLY selection_list RCURLY { result = val[1] }
|
76
93
|
|
77
94
|
selection_set_opt:
|
78
|
-
/* none */ {
|
79
|
-
| selection_set {
|
95
|
+
/* none */ { result = EMPTY_ARRAY }
|
96
|
+
| selection_set { result = val[0] }
|
80
97
|
|
81
98
|
selection_list:
|
82
|
-
selection {
|
99
|
+
selection { result = [result] }
|
83
100
|
| selection_list selection { val[0] << val[1] }
|
84
101
|
|
85
102
|
selection:
|
@@ -89,7 +106,7 @@ rule
|
|
89
106
|
|
90
107
|
field:
|
91
108
|
name arguments_opt directives_list_opt selection_set_opt {
|
92
|
-
|
109
|
+
result = make_node(
|
93
110
|
:Field, {
|
94
111
|
name: val[0],
|
95
112
|
arguments: val[1],
|
@@ -100,7 +117,7 @@ rule
|
|
100
117
|
)
|
101
118
|
}
|
102
119
|
| name COLON name arguments_opt directives_list_opt selection_set_opt {
|
103
|
-
|
120
|
+
result = make_node(
|
104
121
|
:Field, {
|
105
122
|
alias: val[0],
|
106
123
|
name: val[2],
|
@@ -116,77 +133,120 @@ rule
|
|
116
133
|
name_without_on
|
117
134
|
| ON
|
118
135
|
|
136
|
+
schema_keyword:
|
137
|
+
SCHEMA
|
138
|
+
| SCALAR
|
139
|
+
| TYPE
|
140
|
+
| IMPLEMENTS
|
141
|
+
| INTERFACE
|
142
|
+
| UNION
|
143
|
+
| ENUM
|
144
|
+
| INPUT
|
145
|
+
| DIRECTIVE
|
146
|
+
|
119
147
|
name_without_on:
|
120
148
|
IDENTIFIER
|
121
149
|
| FRAGMENT
|
150
|
+
| REPEATABLE
|
122
151
|
| TRUE
|
123
152
|
| FALSE
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
153
|
+
| operation_type
|
154
|
+
| schema_keyword
|
155
|
+
|
156
|
+
enum_name: /* any identifier, but not "true", "false" or "null" */
|
157
|
+
IDENTIFIER
|
158
|
+
| FRAGMENT
|
159
|
+
| REPEATABLE
|
160
|
+
| ON
|
161
|
+
| operation_type
|
162
|
+
| schema_keyword
|
163
|
+
|
164
|
+
enum_value_definition:
|
165
|
+
description_opt enum_name directives_list_opt { result = make_node(:EnumValueDefinition, name: val[1], directives: val[2], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1]) }
|
166
|
+
|
167
|
+
enum_value_definitions:
|
168
|
+
enum_value_definition { result = [val[0]] }
|
169
|
+
| enum_value_definitions enum_value_definition { result = val[0] << val[1] }
|
127
170
|
|
128
171
|
arguments_opt:
|
129
|
-
/* none */ {
|
130
|
-
| RPAREN
|
131
|
-
| RPAREN arguments_list LPAREN { return val[1] }
|
172
|
+
/* none */ { result = EMPTY_ARRAY }
|
173
|
+
| LPAREN arguments_list RPAREN { result = val[1] }
|
132
174
|
|
133
175
|
arguments_list:
|
134
|
-
argument {
|
176
|
+
argument { result = [val[0]] }
|
135
177
|
| arguments_list argument { val[0] << val[1] }
|
136
178
|
|
137
179
|
argument:
|
138
|
-
name COLON input_value {
|
180
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
181
|
+
|
182
|
+
literal_value:
|
183
|
+
FLOAT { result = val[0].to_f }
|
184
|
+
| INT { result = val[0].to_i }
|
185
|
+
| STRING { result = val[0].to_s }
|
186
|
+
| TRUE { result = true }
|
187
|
+
| FALSE { result = false }
|
188
|
+
| null_value
|
189
|
+
| enum_value
|
190
|
+
| list_value
|
191
|
+
| object_literal_value
|
139
192
|
|
140
193
|
input_value:
|
141
|
-
|
142
|
-
| INT { return val[0].to_i }
|
143
|
-
| STRING { return val[0].to_s }
|
144
|
-
| TRUE { return true }
|
145
|
-
| FALSE { return false }
|
194
|
+
literal_value
|
146
195
|
| variable
|
147
|
-
| list_value
|
148
196
|
| object_value
|
149
|
-
| enum_value
|
150
197
|
|
151
|
-
|
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]) }
|
152
200
|
|
153
201
|
list_value:
|
154
|
-
RBRACKET
|
155
|
-
|
|
202
|
+
LBRACKET RBRACKET { result = EMPTY_ARRAY }
|
203
|
+
| LBRACKET list_value_list RBRACKET { result = val[1] }
|
156
204
|
|
157
205
|
list_value_list:
|
158
|
-
input_value {
|
206
|
+
input_value { result = [val[0]] }
|
159
207
|
| list_value_list input_value { val[0] << val[1] }
|
160
208
|
|
161
209
|
object_value:
|
162
|
-
RCURLY
|
163
|
-
|
|
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])}
|
164
212
|
|
165
213
|
object_value_list:
|
166
|
-
object_value_field {
|
214
|
+
object_value_field { result = [val[0]] }
|
167
215
|
| object_value_list object_value_field { val[0] << val[1] }
|
168
216
|
|
169
217
|
object_value_field:
|
170
|
-
name COLON input_value {
|
218
|
+
name COLON input_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
219
|
+
|
220
|
+
/* like the previous, but with literals only: */
|
221
|
+
object_literal_value:
|
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])}
|
224
|
+
|
225
|
+
object_literal_value_list:
|
226
|
+
object_literal_value_field { result = [val[0]] }
|
227
|
+
| object_literal_value_list object_literal_value_field { val[0] << val[1] }
|
171
228
|
|
172
|
-
|
229
|
+
object_literal_value_field:
|
230
|
+
name COLON literal_value { result = make_node(:Argument, name: val[0], value: val[2], position_source: val[0])}
|
231
|
+
|
232
|
+
enum_value: enum_name { result = make_node(:Enum, name: val[0], position_source: val[0]) }
|
173
233
|
|
174
234
|
directives_list_opt:
|
175
|
-
/* none */ {
|
235
|
+
/* none */ { result = EMPTY_ARRAY }
|
176
236
|
| directives_list
|
177
237
|
|
178
238
|
directives_list:
|
179
|
-
directive {
|
239
|
+
directive { result = [val[0]] }
|
180
240
|
| directives_list directive { val[0] << val[1] }
|
181
241
|
|
182
|
-
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]) }
|
183
243
|
|
184
244
|
fragment_spread:
|
185
|
-
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]) }
|
186
246
|
|
187
247
|
inline_fragment:
|
188
|
-
ELLIPSIS ON
|
189
|
-
|
248
|
+
ELLIPSIS ON type directives_list_opt selection_set {
|
249
|
+
result = make_node(:InlineFragment, {
|
190
250
|
type: val[2],
|
191
251
|
directives: val[3],
|
192
252
|
selections: val[4],
|
@@ -194,7 +254,7 @@ rule
|
|
194
254
|
})
|
195
255
|
}
|
196
256
|
| ELLIPSIS directives_list_opt selection_set {
|
197
|
-
|
257
|
+
result = make_node(:InlineFragment, {
|
198
258
|
type: nil,
|
199
259
|
directives: val[1],
|
200
260
|
selections: val[2],
|
@@ -203,8 +263,8 @@ rule
|
|
203
263
|
}
|
204
264
|
|
205
265
|
fragment_definition:
|
206
|
-
FRAGMENT
|
207
|
-
|
266
|
+
FRAGMENT fragment_name_opt ON type directives_list_opt selection_set {
|
267
|
+
result = make_node(:FragmentDefinition, {
|
208
268
|
name: val[1],
|
209
269
|
type: val[3],
|
210
270
|
directives: val[4],
|
@@ -213,6 +273,172 @@ rule
|
|
213
273
|
}
|
214
274
|
)
|
215
275
|
}
|
276
|
+
|
277
|
+
fragment_name_opt:
|
278
|
+
/* none */ { result = nil }
|
279
|
+
| name_without_on
|
280
|
+
|
281
|
+
type_system_definition:
|
282
|
+
schema_definition
|
283
|
+
| type_definition
|
284
|
+
| directive_definition
|
285
|
+
|
286
|
+
schema_definition:
|
287
|
+
SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaDefinition, position_source: val[0], definition_line: val[0].line, directives: val[1], **val[3]) }
|
288
|
+
|
289
|
+
operation_type_definition_list:
|
290
|
+
operation_type_definition
|
291
|
+
| operation_type_definition_list operation_type_definition { result = val[0].merge(val[1]) }
|
292
|
+
|
293
|
+
operation_type_definition:
|
294
|
+
operation_type COLON name { result = { val[0].to_s.to_sym => val[2] } }
|
295
|
+
|
296
|
+
type_definition:
|
297
|
+
scalar_type_definition
|
298
|
+
| object_type_definition
|
299
|
+
| interface_type_definition
|
300
|
+
| union_type_definition
|
301
|
+
| enum_type_definition
|
302
|
+
| input_object_type_definition
|
303
|
+
|
304
|
+
type_system_extension:
|
305
|
+
schema_extension
|
306
|
+
| type_extension
|
307
|
+
|
308
|
+
schema_extension:
|
309
|
+
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
|
310
|
+
| EXTEND SCHEMA directives_list { result = make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
|
311
|
+
|
312
|
+
type_extension:
|
313
|
+
scalar_type_extension
|
314
|
+
| object_type_extension
|
315
|
+
| interface_type_extension
|
316
|
+
| union_type_extension
|
317
|
+
| enum_type_extension
|
318
|
+
| input_object_type_extension
|
319
|
+
|
320
|
+
scalar_type_extension: EXTEND SCALAR name directives_list { result = make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
|
321
|
+
|
322
|
+
object_type_extension:
|
323
|
+
/* TODO - This first one shouldn't be necessary but parser is getting confused */
|
324
|
+
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]) }
|
325
|
+
| 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]) }
|
326
|
+
| EXTEND TYPE name implements_opt directives_list { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
|
327
|
+
| EXTEND TYPE name implements { result = make_node(:ObjectTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
328
|
+
|
329
|
+
interface_type_extension:
|
330
|
+
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]) }
|
331
|
+
| EXTEND INTERFACE name implements_opt directives_list { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: val[4], fields: [], position_source: val[0]) }
|
332
|
+
| EXTEND INTERFACE name implements { result = make_node(:InterfaceTypeExtension, name: val[2], interfaces: val[3], directives: [], fields: [], position_source: val[0]) }
|
333
|
+
|
334
|
+
union_type_extension:
|
335
|
+
EXTEND UNION name directives_list_opt EQUALS union_members { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: val[5], position_source: val[0]) }
|
336
|
+
| EXTEND UNION name directives_list { result = make_node(:UnionTypeExtension, name: val[2], directives: val[3], types: [], position_source: val[0]) }
|
337
|
+
|
338
|
+
enum_type_extension:
|
339
|
+
EXTEND ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: val[5], position_source: val[0]) }
|
340
|
+
| EXTEND ENUM name directives_list { result = make_node(:EnumTypeExtension, name: val[2], directives: val[3], values: [], position_source: val[0]) }
|
341
|
+
|
342
|
+
input_object_type_extension:
|
343
|
+
EXTEND INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: val[5], position_source: val[0]) }
|
344
|
+
| EXTEND INPUT name directives_list { result = make_node(:InputObjectTypeExtension, name: val[2], directives: val[3], fields: [], position_source: val[0]) }
|
345
|
+
|
346
|
+
description: STRING
|
347
|
+
|
348
|
+
description_opt:
|
349
|
+
/* none */
|
350
|
+
| description
|
351
|
+
|
352
|
+
scalar_type_definition:
|
353
|
+
description_opt SCALAR name directives_list_opt {
|
354
|
+
result = make_node(:ScalarTypeDefinition, name: val[2], directives: val[3], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
355
|
+
}
|
356
|
+
|
357
|
+
object_type_definition:
|
358
|
+
description_opt TYPE name implements_opt directives_list_opt field_definition_list_opt {
|
359
|
+
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].line, position_source: val[0] || val[1])
|
360
|
+
}
|
361
|
+
|
362
|
+
implements_opt:
|
363
|
+
/* none */ { result = EMPTY_ARRAY }
|
364
|
+
| implements
|
365
|
+
|
366
|
+
implements:
|
367
|
+
IMPLEMENTS AMP interfaces_list { result = val[2] }
|
368
|
+
| IMPLEMENTS interfaces_list { result = val[1] }
|
369
|
+
| IMPLEMENTS legacy_interfaces_list { result = val[1] }
|
370
|
+
|
371
|
+
interfaces_list:
|
372
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
373
|
+
| interfaces_list AMP name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
374
|
+
|
375
|
+
legacy_interfaces_list:
|
376
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])] }
|
377
|
+
| legacy_interfaces_list name { val[0] << make_node(:TypeName, name: val[1], position_source: val[1]) }
|
378
|
+
|
379
|
+
input_value_definition:
|
380
|
+
description_opt name COLON type default_value_opt directives_list_opt {
|
381
|
+
result = make_node(:InputValueDefinition, name: val[1], type: val[3], default_value: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
382
|
+
}
|
383
|
+
|
384
|
+
input_value_definition_list:
|
385
|
+
input_value_definition { result = [val[0]] }
|
386
|
+
| input_value_definition_list input_value_definition { val[0] << val[1] }
|
387
|
+
|
388
|
+
arguments_definitions_opt:
|
389
|
+
/* none */ { result = EMPTY_ARRAY }
|
390
|
+
| LPAREN input_value_definition_list RPAREN { result = val[1] }
|
391
|
+
|
392
|
+
field_definition:
|
393
|
+
description_opt name arguments_definitions_opt COLON type directives_list_opt {
|
394
|
+
result = make_node(:FieldDefinition, name: val[1], arguments: val[2], type: val[4], directives: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
395
|
+
}
|
396
|
+
|
397
|
+
field_definition_list_opt:
|
398
|
+
/* none */ { result = EMPTY_ARRAY }
|
399
|
+
| LCURLY field_definition_list RCURLY { result = val[1] }
|
400
|
+
|
401
|
+
field_definition_list:
|
402
|
+
/* none - this is not actually valid but graphql-ruby used to print this */ { result = EMPTY_ARRAY }
|
403
|
+
| field_definition { result = [val[0]] }
|
404
|
+
| field_definition_list field_definition { val[0] << val[1] }
|
405
|
+
|
406
|
+
interface_type_definition:
|
407
|
+
description_opt INTERFACE name implements_opt directives_list_opt field_definition_list_opt {
|
408
|
+
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].line, position_source: val[0] || val[1])
|
409
|
+
}
|
410
|
+
|
411
|
+
union_members:
|
412
|
+
name { result = [make_node(:TypeName, name: val[0], position_source: val[0])]}
|
413
|
+
| union_members PIPE name { val[0] << make_node(:TypeName, name: val[2], position_source: val[2]) }
|
414
|
+
|
415
|
+
union_type_definition:
|
416
|
+
description_opt UNION name directives_list_opt EQUALS union_members {
|
417
|
+
result = make_node(:UnionTypeDefinition, name: val[2], directives: val[3], types: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
418
|
+
}
|
419
|
+
|
420
|
+
enum_type_definition:
|
421
|
+
description_opt ENUM name directives_list_opt LCURLY enum_value_definitions RCURLY {
|
422
|
+
result = make_node(:EnumTypeDefinition, name: val[2], directives: val[3], values: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
423
|
+
}
|
424
|
+
|
425
|
+
input_object_type_definition:
|
426
|
+
description_opt INPUT name directives_list_opt LCURLY input_value_definition_list RCURLY {
|
427
|
+
result = make_node(:InputObjectTypeDefinition, name: val[2], directives: val[3], fields: val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
428
|
+
}
|
429
|
+
|
430
|
+
directive_definition:
|
431
|
+
description_opt DIRECTIVE DIR_SIGN name arguments_definitions_opt directive_repeatable_opt ON directive_locations {
|
432
|
+
result = make_node(:DirectiveDefinition, name: val[3], arguments: val[4], locations: val[7], repeatable: !!val[5], description: val[0] || get_description(val[1]), definition_line: val[1].line, position_source: val[0] || val[1])
|
433
|
+
}
|
434
|
+
|
435
|
+
directive_repeatable_opt:
|
436
|
+
/* nothing */
|
437
|
+
| REPEATABLE
|
438
|
+
|
439
|
+
directive_locations:
|
440
|
+
name { result = [make_node(:DirectiveLocation, name: val[0].to_s, position_source: val[0])] }
|
441
|
+
| directive_locations PIPE name { val[0] << make_node(:DirectiveLocation, name: val[2].to_s, position_source: val[2]) }
|
216
442
|
end
|
217
443
|
|
218
444
|
---- header ----
|
@@ -220,23 +446,49 @@ end
|
|
220
446
|
|
221
447
|
---- inner ----
|
222
448
|
|
223
|
-
|
449
|
+
EMPTY_ARRAY = [].freeze
|
450
|
+
|
451
|
+
def initialize(query_string, filename:, tracer: Tracing::NullTracer)
|
452
|
+
raise GraphQL::ParseError.new("No query string was present", nil, nil, query_string) if query_string.nil?
|
224
453
|
@query_string = query_string
|
454
|
+
@filename = filename
|
455
|
+
@tracer = tracer
|
456
|
+
@reused_next_token = [nil, nil]
|
225
457
|
end
|
226
458
|
|
227
459
|
def parse_document
|
228
460
|
@document ||= begin
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
461
|
+
# Break the string into tokens
|
462
|
+
@tracer.trace("lex", {query_string: @query_string}) do
|
463
|
+
@tokens ||= GraphQL.scan(@query_string)
|
464
|
+
end
|
465
|
+
# From the tokens, build an AST
|
466
|
+
@tracer.trace("parse", {query_string: @query_string}) do
|
467
|
+
if @tokens.empty?
|
468
|
+
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
469
|
+
else
|
470
|
+
do_parse
|
471
|
+
end
|
234
472
|
end
|
235
473
|
end
|
236
474
|
end
|
237
475
|
|
238
|
-
|
239
|
-
|
476
|
+
class << self
|
477
|
+
attr_accessor :cache
|
478
|
+
|
479
|
+
def parse(query_string, filename: nil, tracer: GraphQL::Tracing::NullTracer)
|
480
|
+
new(query_string, filename: filename, tracer: tracer).parse_document
|
481
|
+
end
|
482
|
+
|
483
|
+
def parse_file(filename, tracer: GraphQL::Tracing::NullTracer)
|
484
|
+
if cache
|
485
|
+
cache.fetch(filename) do
|
486
|
+
parse(File.read(filename), filename: filename, tracer: tracer)
|
487
|
+
end
|
488
|
+
else
|
489
|
+
parse(File.read(filename), filename: filename, tracer: tracer)
|
490
|
+
end
|
491
|
+
end
|
240
492
|
end
|
241
493
|
|
242
494
|
private
|
@@ -246,23 +498,44 @@ def next_token
|
|
246
498
|
if lexer_token.nil?
|
247
499
|
nil
|
248
500
|
else
|
249
|
-
[lexer_token.name
|
501
|
+
@reused_next_token[0] = lexer_token.name
|
502
|
+
@reused_next_token[1] = lexer_token
|
503
|
+
@reused_next_token
|
250
504
|
end
|
251
505
|
end
|
252
506
|
|
507
|
+
def get_description(token)
|
508
|
+
comments = []
|
509
|
+
|
510
|
+
loop do
|
511
|
+
prev_token = token
|
512
|
+
token = token.prev_token
|
513
|
+
|
514
|
+
break if token.nil?
|
515
|
+
break if token.name != :COMMENT
|
516
|
+
break if prev_token.line != token.line + 1
|
517
|
+
|
518
|
+
comments.unshift(token.to_s.sub(/^#\s*/, ""))
|
519
|
+
end
|
520
|
+
|
521
|
+
return nil if comments.empty?
|
522
|
+
|
523
|
+
comments.join("\n")
|
524
|
+
end
|
525
|
+
|
253
526
|
def on_error(parser_token_id, lexer_token, vstack)
|
254
|
-
if lexer_token == "$"
|
255
|
-
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string)
|
527
|
+
if lexer_token == "$" || lexer_token == nil
|
528
|
+
raise GraphQL::ParseError.new("Unexpected end of document", nil, nil, @query_string, filename: @filename)
|
256
529
|
else
|
257
530
|
parser_token_name = token_to_str(parser_token_id)
|
258
531
|
if parser_token_name.nil?
|
259
|
-
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)
|
532
|
+
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)
|
260
533
|
else
|
261
534
|
line, col = lexer_token.line_and_column
|
262
535
|
if lexer_token.name == :BAD_UNICODE_ESCAPE
|
263
|
-
raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string)
|
536
|
+
raise GraphQL::ParseError.new("Parse error on bad Unicode escape sequence: #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
|
264
537
|
else
|
265
|
-
raise GraphQL::ParseError.new("Parse error on #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string)
|
538
|
+
raise GraphQL::ParseError.new("Parse error on #{lexer_token.to_s.inspect} (#{parser_token_name}) at [#{line}, #{col}]", line, col, @query_string, filename: @filename)
|
266
539
|
end
|
267
540
|
end
|
268
541
|
end
|
@@ -275,5 +548,7 @@ def make_node(node_name, assigns)
|
|
275
548
|
end
|
276
549
|
end
|
277
550
|
|
551
|
+
assigns[:filename] = @filename
|
552
|
+
|
278
553
|
GraphQL::Language::Nodes.const_get(node_name).new(assigns)
|
279
554
|
end
|