graphql_cody 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +5 -0
- data/MIT-LICENSE +20 -0
- data/lib/generators/graphql/core.rb +74 -0
- data/lib/generators/graphql/enum_generator.rb +33 -0
- data/lib/generators/graphql/install_generator.rb +190 -0
- data/lib/generators/graphql/interface_generator.rb +27 -0
- data/lib/generators/graphql/loader_generator.rb +21 -0
- data/lib/generators/graphql/mutation_generator.rb +55 -0
- data/lib/generators/graphql/object_generator.rb +79 -0
- data/lib/generators/graphql/relay.rb +63 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- data/lib/generators/graphql/scalar_generator.rb +20 -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_mutation.erb +10 -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 +7 -0
- data/lib/generators/graphql/templates/graphql_controller.erb +52 -0
- data/lib/generators/graphql/templates/interface.erb +8 -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_type.erb +12 -0
- data/lib/generators/graphql/templates/node_type.erb +9 -0
- data/lib/generators/graphql/templates/object.erb +8 -0
- data/lib/generators/graphql/templates/query_type.erb +15 -0
- data/lib/generators/graphql/templates/scalar.erb +15 -0
- data/lib/generators/graphql/templates/schema.erb +27 -0
- data/lib/generators/graphql/templates/union.erb +7 -0
- data/lib/generators/graphql/type_generator.rb +98 -0
- data/lib/generators/graphql/union_generator.rb +33 -0
- data/lib/graphql/analysis/analyze_query.rb +98 -0
- data/lib/graphql/analysis/ast/analyzer.rb +84 -0
- data/lib/graphql/analysis/ast/field_usage.rb +51 -0
- data/lib/graphql/analysis/ast/max_query_complexity.rb +23 -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 +56 -0
- data/lib/graphql/analysis/ast/visitor.rb +268 -0
- data/lib/graphql/analysis/ast.rb +91 -0
- data/lib/graphql/analysis/field_usage.rb +45 -0
- data/lib/graphql/analysis/max_query_complexity.rb +26 -0
- data/lib/graphql/analysis/max_query_depth.rb +26 -0
- data/lib/graphql/analysis/query_complexity.rb +88 -0
- data/lib/graphql/analysis/query_depth.rb +43 -0
- data/lib/graphql/analysis/reducer_state.rb +48 -0
- data/lib/graphql/analysis.rb +9 -0
- data/lib/graphql/analysis_error.rb +5 -0
- data/lib/graphql/argument.rb +131 -0
- data/lib/graphql/authorization.rb +82 -0
- data/lib/graphql/backtrace/inspect_result.rb +50 -0
- data/lib/graphql/backtrace/legacy_tracer.rb +56 -0
- data/lib/graphql/backtrace/table.rb +159 -0
- data/lib/graphql/backtrace/traced_error.rb +54 -0
- data/lib/graphql/backtrace/tracer.rb +81 -0
- data/lib/graphql/backtrace.rb +64 -0
- data/lib/graphql/backwards_compatibility.rb +61 -0
- data/lib/graphql/base_type.rb +230 -0
- data/lib/graphql/boolean_type.rb +2 -0
- data/lib/graphql/coercion_error.rb +13 -0
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +53 -0
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +200 -0
- data/lib/graphql/compatibility/execution_specification.rb +436 -0
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +111 -0
- data/lib/graphql/compatibility/lazy_execution_specification.rb +215 -0
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +87 -0
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +79 -0
- data/lib/graphql/compatibility/query_parser_specification.rb +266 -0
- data/lib/graphql/compatibility/schema_parser_specification.rb +682 -0
- data/lib/graphql/compatibility.rb +5 -0
- data/lib/graphql/dataloader/null_dataloader.rb +22 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +155 -0
- data/lib/graphql/dataloader.rb +308 -0
- data/lib/graphql/define/assign_argument.rb +12 -0
- data/lib/graphql/define/assign_connection.rb +13 -0
- data/lib/graphql/define/assign_enum_value.rb +18 -0
- data/lib/graphql/define/assign_global_id_field.rb +11 -0
- data/lib/graphql/define/assign_mutation_function.rb +34 -0
- data/lib/graphql/define/assign_object_field.rb +42 -0
- data/lib/graphql/define/defined_object_proxy.rb +53 -0
- data/lib/graphql/define/instance_definable.rb +240 -0
- data/lib/graphql/define/no_definition_error.rb +7 -0
- data/lib/graphql/define/non_null_with_bang.rb +16 -0
- data/lib/graphql/define/type_definer.rb +31 -0
- data/lib/graphql/define.rb +31 -0
- data/lib/graphql/deprecated_dsl.rb +55 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +19 -0
- data/lib/graphql/directive/deprecated_directive.rb +2 -0
- data/lib/graphql/directive/include_directive.rb +2 -0
- data/lib/graphql/directive/skip_directive.rb +2 -0
- data/lib/graphql/directive.rb +107 -0
- data/lib/graphql/enum_type.rb +133 -0
- data/lib/graphql/execution/directive_checks.rb +37 -0
- data/lib/graphql/execution/errors.rb +163 -0
- data/lib/graphql/execution/execute.rb +333 -0
- data/lib/graphql/execution/flatten.rb +40 -0
- data/lib/graphql/execution/instrumentation.rb +92 -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 +103 -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 +70 -0
- data/lib/graphql/execution/interpreter/runtime.rb +949 -0
- data/lib/graphql/execution/interpreter.rb +122 -0
- data/lib/graphql/execution/lazy/lazy_method_map.rb +98 -0
- data/lib/graphql/execution/lazy/resolve.rb +91 -0
- data/lib/graphql/execution/lazy.rb +83 -0
- data/lib/graphql/execution/lookahead.rb +307 -0
- data/lib/graphql/execution/multiplex.rb +214 -0
- data/lib/graphql/execution/typecast.rb +50 -0
- data/lib/graphql/execution.rb +11 -0
- data/lib/graphql/execution_error.rb +58 -0
- data/lib/graphql/field/resolve.rb +59 -0
- data/lib/graphql/field.rb +226 -0
- data/lib/graphql/filter.rb +53 -0
- data/lib/graphql/float_type.rb +2 -0
- data/lib/graphql/function.rb +128 -0
- data/lib/graphql/id_type.rb +2 -0
- data/lib/graphql/input_object_type.rb +138 -0
- data/lib/graphql/int_type.rb +2 -0
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +36 -0
- data/lib/graphql/interface_type.rb +72 -0
- data/lib/graphql/internal_representation/document.rb +27 -0
- data/lib/graphql/internal_representation/node.rb +206 -0
- data/lib/graphql/internal_representation/print.rb +51 -0
- data/lib/graphql/internal_representation/rewrite.rb +184 -0
- data/lib/graphql/internal_representation/scope.rb +88 -0
- data/lib/graphql/internal_representation/visit.rb +36 -0
- data/lib/graphql/internal_representation.rb +7 -0
- data/lib/graphql/introspection/base_object.rb +13 -0
- data/lib/graphql/introspection/directive_location_enum.rb +15 -0
- data/lib/graphql/introspection/directive_type.rb +29 -0
- data/lib/graphql/introspection/dynamic_fields.rb +17 -0
- data/lib/graphql/introspection/entry_points.rb +35 -0
- data/lib/graphql/introspection/enum_value_type.rb +23 -0
- data/lib/graphql/introspection/field_type.rb +28 -0
- data/lib/graphql/introspection/input_value_type.rb +67 -0
- data/lib/graphql/introspection/introspection_query.rb +7 -0
- data/lib/graphql/introspection/schema_type.rb +44 -0
- data/lib/graphql/introspection/type_kind_enum.rb +13 -0
- data/lib/graphql/introspection/type_type.rb +95 -0
- data/lib/graphql/introspection.rb +114 -0
- data/lib/graphql/invalid_name_error.rb +11 -0
- data/lib/graphql/invalid_null_error.rb +50 -0
- 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 +347 -0
- data/lib/graphql/language/generation.rb +24 -0
- data/lib/graphql/language/lexer.rb +1467 -0
- data/lib/graphql/language/lexer.rl +258 -0
- data/lib/graphql/language/nodes.rb +707 -0
- data/lib/graphql/language/parser.rb +1974 -0
- data/lib/graphql/language/parser.y +544 -0
- data/lib/graphql/language/printer.rb +366 -0
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +34 -0
- data/lib/graphql/language/visitor.rb +242 -0
- data/lib/graphql/language.rb +36 -0
- data/lib/graphql/list_type.rb +80 -0
- data/lib/graphql/load_application_object_failed_error.rb +22 -0
- data/lib/graphql/name_validator.rb +11 -0
- data/lib/graphql/non_null_type.rb +71 -0
- data/lib/graphql/object_type.rb +130 -0
- data/lib/graphql/pagination/active_record_relation_connection.rb +48 -0
- data/lib/graphql/pagination/array_connection.rb +77 -0
- data/lib/graphql/pagination/connection.rb +226 -0
- data/lib/graphql/pagination/connections.rb +160 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +196 -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/arguments.rb +189 -0
- data/lib/graphql/query/arguments_cache.rb +24 -0
- data/lib/graphql/query/context.rb +371 -0
- data/lib/graphql/query/executor.rb +52 -0
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +43 -0
- data/lib/graphql/query/literal_input.rb +136 -0
- data/lib/graphql/query/null_context.rb +55 -0
- data/lib/graphql/query/result.rb +63 -0
- data/lib/graphql/query/serial_execution/field_resolution.rb +92 -0
- data/lib/graphql/query/serial_execution/operation_resolution.rb +19 -0
- data/lib/graphql/query/serial_execution/selection_resolution.rb +23 -0
- data/lib/graphql/query/serial_execution/value_resolution.rb +87 -0
- data/lib/graphql/query/serial_execution.rb +40 -0
- data/lib/graphql/query/validation_pipeline.rb +139 -0
- data/lib/graphql/query/variable_validation_error.rb +44 -0
- data/lib/graphql/query/variables.rb +78 -0
- data/lib/graphql/query.rb +454 -0
- data/lib/graphql/railtie.rb +117 -0
- data/lib/graphql/rake_task/validate.rb +63 -0
- data/lib/graphql/rake_task.rb +145 -0
- data/lib/graphql/relay/array_connection.rb +83 -0
- data/lib/graphql/relay/base_connection.rb +189 -0
- data/lib/graphql/relay/connection_instrumentation.rb +54 -0
- data/lib/graphql/relay/connection_resolve.rb +43 -0
- data/lib/graphql/relay/connection_type.rb +41 -0
- data/lib/graphql/relay/edge.rb +27 -0
- data/lib/graphql/relay/edge_type.rb +19 -0
- data/lib/graphql/relay/edges_instrumentation.rb +39 -0
- data/lib/graphql/relay/global_id_resolve.rb +18 -0
- data/lib/graphql/relay/mongo_relation_connection.rb +50 -0
- data/lib/graphql/relay/mutation/instrumentation.rb +23 -0
- data/lib/graphql/relay/mutation/resolve.rb +56 -0
- data/lib/graphql/relay/mutation/result.rb +38 -0
- data/lib/graphql/relay/mutation.rb +106 -0
- data/lib/graphql/relay/node.rb +39 -0
- data/lib/graphql/relay/page_info.rb +7 -0
- data/lib/graphql/relay/range_add.rb +59 -0
- data/lib/graphql/relay/relation_connection.rb +188 -0
- data/lib/graphql/relay/type_extensions.rb +32 -0
- data/lib/graphql/relay.rb +18 -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/scalar_type.rb +91 -0
- data/lib/graphql/schema/addition.rb +247 -0
- data/lib/graphql/schema/argument.rb +383 -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 +477 -0
- data/lib/graphql/schema/built_in_types.rb +12 -0
- data/lib/graphql/schema/catchall_middleware.rb +35 -0
- data/lib/graphql/schema/default_parse_error.rb +10 -0
- data/lib/graphql/schema/default_type_error.rb +17 -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/skip.rb +25 -0
- data/lib/graphql/schema/directive/transform.rb +60 -0
- data/lib/graphql/schema/directive.rb +210 -0
- data/lib/graphql/schema/enum.rb +193 -0
- data/lib/graphql/schema/enum_value.rb +97 -0
- data/lib/graphql/schema/field/connection_extension.rb +76 -0
- data/lib/graphql/schema/field/scope_extension.rb +22 -0
- data/lib/graphql/schema/field.rb +880 -0
- data/lib/graphql/schema/field_extension.rb +69 -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 +253 -0
- data/lib/graphql/schema/interface.rb +136 -0
- data/lib/graphql/schema/introspection_system.rb +169 -0
- data/lib/graphql/schema/invalid_type_error.rb +7 -0
- data/lib/graphql/schema/late_bound_type.rb +33 -0
- data/lib/graphql/schema/list.rb +75 -0
- data/lib/graphql/schema/loader.rb +226 -0
- data/lib/graphql/schema/member/accepts_definition.rb +159 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +129 -0
- data/lib/graphql/schema/member/build_type.rb +180 -0
- data/lib/graphql/schema/member/cached_graphql_definition.rb +31 -0
- data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
- data/lib/graphql/schema/member/has_arguments.rb +332 -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 +98 -0
- data/lib/graphql/schema/member/has_fields.rb +163 -0
- data/lib/graphql/schema/member/has_interfaces.rb +90 -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/instrumentation.rb +131 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -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 +161 -0
- data/lib/graphql/schema/middleware_chain.rb +82 -0
- data/lib/graphql/schema/mutation.rb +94 -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 +150 -0
- data/lib/graphql/schema/possible_types.rb +44 -0
- data/lib/graphql/schema/printer.rb +100 -0
- data/lib/graphql/schema/relay_classic_mutation.rb +160 -0
- data/lib/graphql/schema/rescue_middleware.rb +60 -0
- data/lib/graphql/schema/resolver/has_payload_type.rb +96 -0
- data/lib/graphql/schema/resolver.rb +397 -0
- data/lib/graphql/schema/scalar.rb +69 -0
- data/lib/graphql/schema/subscription.rb +155 -0
- data/lib/graphql/schema/timeout.rb +123 -0
- data/lib/graphql/schema/timeout_middleware.rb +88 -0
- data/lib/graphql/schema/traversal.rb +228 -0
- data/lib/graphql/schema/type_expression.rb +43 -0
- data/lib/graphql/schema/type_membership.rb +48 -0
- data/lib/graphql/schema/union.rb +95 -0
- data/lib/graphql/schema/unique_within_type.rb +34 -0
- data/lib/graphql/schema/validation.rb +313 -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 +68 -0
- data/lib/graphql/schema/validator.rb +174 -0
- data/lib/graphql/schema/warden.rb +409 -0
- data/lib/graphql/schema/wrapper.rb +29 -0
- data/lib/graphql/schema.rb +1945 -0
- data/lib/graphql/static_validation/all_rules.rb +40 -0
- data/lib/graphql/static_validation/base_visitor.rb +217 -0
- data/lib/graphql/static_validation/default_visitor.rb +15 -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 +139 -0
- data/lib/graphql/static_validation/no_validate_visitor.rb +10 -0
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +66 -0
- 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 +71 -0
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +37 -0
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +23 -0
- 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 +65 -0
- 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 +30 -0
- 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 +73 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +31 -0
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +418 -0
- 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 +73 -0
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +35 -0
- data/lib/graphql/static_validation/rules/fragment_types_exist.rb +39 -0
- data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +29 -0
- data/lib/graphql/static_validation/rules/fragments_are_finite.rb +21 -0
- 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 +37 -0
- 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 +32 -0
- 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/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/required_arguments_are_present.rb +37 -0
- 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 +50 -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 +46 -0
- 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 +153 -0
- 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 +39 -0
- 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 +155 -0
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +37 -0
- data/lib/graphql/static_validation/type_stack.rb +216 -0
- data/lib/graphql/static_validation/validation_context.rb +49 -0
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +96 -0
- data/lib/graphql/static_validation.rb +19 -0
- data/lib/graphql/string_encoding_error.rb +20 -0
- data/lib/graphql/string_type.rb +2 -0
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +245 -0
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +21 -0
- data/lib/graphql/subscriptions/event.rb +144 -0
- data/lib/graphql/subscriptions/instrumentation.rb +79 -0
- data/lib/graphql/subscriptions/serialize.rb +138 -0
- data/lib/graphql/subscriptions/subscription_root.rb +76 -0
- data/lib/graphql/subscriptions.rb +299 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +35 -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 +76 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +51 -0
- data/lib/graphql/tracing/platform_tracing.rb +139 -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/skylight_tracing.rb +70 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing.rb +95 -0
- data/lib/graphql/type_kinds.rb +77 -0
- 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 +34 -0
- data/lib/graphql/types/iso_8601_date_time.rb +65 -0
- data/lib/graphql/types/json.rb +25 -0
- data/lib/graphql/types/relay/base_connection.rb +39 -0
- data/lib/graphql/types/relay/base_edge.rb +29 -0
- data/lib/graphql/types/relay/connection_behaviors.rb +156 -0
- data/lib/graphql/types/relay/default_relay.rb +27 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +53 -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 +15 -0
- data/lib/graphql/types/relay/node_field.rb +25 -0
- data/lib/graphql/types/relay/nodes_field.rb +27 -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 +41 -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/union_type.rb +115 -0
- data/lib/graphql/unresolved_type_error.rb +35 -0
- data/lib/graphql/upgrader/member.rb +937 -0
- data/lib/graphql/upgrader/schema.rb +38 -0
- data/lib/graphql/version.rb +4 -0
- data/lib/graphql.rb +168 -0
- data/readme.md +49 -0
- metadata +714 -0
@@ -0,0 +1,707 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
module Language
|
4
|
+
module Nodes
|
5
|
+
# {AbstractNode} is the base class for all nodes in a GraphQL AST.
|
6
|
+
#
|
7
|
+
# It provides some APIs for working with ASTs:
|
8
|
+
# - `children` returns all AST nodes attached to this one. Used for tree traversal.
|
9
|
+
# - `scalars` returns all scalar (Ruby) values attached to this one. Used for comparing nodes.
|
10
|
+
# - `to_query_string` turns an AST node into a GraphQL string
|
11
|
+
class AbstractNode
|
12
|
+
module DefinitionNode
|
13
|
+
# This AST node's {#line} returns the first line, which may be the description.
|
14
|
+
# @return [Integer] The first line of the definition (not the description)
|
15
|
+
attr_reader :definition_line
|
16
|
+
|
17
|
+
def initialize(options = {})
|
18
|
+
@definition_line = options.delete(:definition_line)
|
19
|
+
super(options)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :line, :col, :filename
|
24
|
+
|
25
|
+
# Initialize a node by extracting its position,
|
26
|
+
# then calling the class's `initialize_node` method.
|
27
|
+
# @param options [Hash] Initial attributes for this node
|
28
|
+
def initialize(options = {})
|
29
|
+
if options.key?(:position_source)
|
30
|
+
position_source = options.delete(:position_source)
|
31
|
+
@line = position_source.line
|
32
|
+
@col = position_source.col
|
33
|
+
end
|
34
|
+
|
35
|
+
@filename = options.delete(:filename)
|
36
|
+
|
37
|
+
initialize_node(**options)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Value equality
|
41
|
+
# @return [Boolean] True if `self` is equivalent to `other`
|
42
|
+
def ==(other)
|
43
|
+
return true if equal?(other)
|
44
|
+
other.kind_of?(self.class) &&
|
45
|
+
other.scalars == self.scalars &&
|
46
|
+
other.children == self.children
|
47
|
+
end
|
48
|
+
|
49
|
+
NO_CHILDREN = [].freeze
|
50
|
+
|
51
|
+
# @return [Array<GraphQL::Language::Nodes::AbstractNode>] all nodes in the tree below this one
|
52
|
+
def children
|
53
|
+
NO_CHILDREN
|
54
|
+
end
|
55
|
+
|
56
|
+
# @return [Array<Integer, Float, String, Boolean, Array>] Scalar values attached to this node
|
57
|
+
def scalars
|
58
|
+
NO_CHILDREN
|
59
|
+
end
|
60
|
+
|
61
|
+
# This might be unnecessary, but its easiest to add it here.
|
62
|
+
def initialize_copy(other)
|
63
|
+
@children = nil
|
64
|
+
@scalars = nil
|
65
|
+
@query_string = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def children_method_name
|
69
|
+
self.class.children_method_name
|
70
|
+
end
|
71
|
+
|
72
|
+
def position
|
73
|
+
[line, col]
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_query_string(printer: GraphQL::Language::Printer.new)
|
77
|
+
if printer.is_a?(GraphQL::Language::Printer)
|
78
|
+
@query_string ||= printer.print(self)
|
79
|
+
else
|
80
|
+
printer.print(self)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# This creates a copy of `self`, with `new_options` applied.
|
85
|
+
# @param new_options [Hash]
|
86
|
+
# @return [AbstractNode] a shallow copy of `self`
|
87
|
+
def merge(new_options)
|
88
|
+
dup.merge!(new_options)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Copy `self`, but modify the copy so that `previous_child` is replaced by `new_child`
|
92
|
+
def replace_child(previous_child, new_child)
|
93
|
+
# Figure out which list `previous_child` may be found in
|
94
|
+
method_name = previous_child.children_method_name
|
95
|
+
# Get the value from this (original) node
|
96
|
+
prev_children = public_send(method_name)
|
97
|
+
if prev_children.is_a?(Array)
|
98
|
+
# Copy that list, and replace `previous_child` with `new_child`
|
99
|
+
# in the list.
|
100
|
+
new_children = prev_children.dup
|
101
|
+
prev_idx = new_children.index(previous_child)
|
102
|
+
new_children[prev_idx] = new_child
|
103
|
+
else
|
104
|
+
# Use the new value for the given attribute
|
105
|
+
new_children = new_child
|
106
|
+
end
|
107
|
+
# Copy this node, but with the new child value
|
108
|
+
copy_of_self = merge(method_name => new_children)
|
109
|
+
# Return the copy:
|
110
|
+
copy_of_self
|
111
|
+
end
|
112
|
+
|
113
|
+
# TODO DRY with `replace_child`
|
114
|
+
def delete_child(previous_child)
|
115
|
+
# Figure out which list `previous_child` may be found in
|
116
|
+
method_name = previous_child.children_method_name
|
117
|
+
# Copy that list, and delete previous_child
|
118
|
+
new_children = public_send(method_name).dup
|
119
|
+
new_children.delete(previous_child)
|
120
|
+
# Copy this node, but with the new list of children:
|
121
|
+
copy_of_self = merge(method_name => new_children)
|
122
|
+
# Return the copy:
|
123
|
+
copy_of_self
|
124
|
+
end
|
125
|
+
|
126
|
+
protected
|
127
|
+
|
128
|
+
def merge!(new_options)
|
129
|
+
new_options.each do |key, value|
|
130
|
+
instance_variable_set(:"@#{key}", value)
|
131
|
+
end
|
132
|
+
self
|
133
|
+
end
|
134
|
+
|
135
|
+
class << self
|
136
|
+
# Add a default `#visit_method` and `#children_method_name` using the class name
|
137
|
+
def inherited(child_class)
|
138
|
+
super
|
139
|
+
name_underscored = child_class.name
|
140
|
+
.split("::").last
|
141
|
+
.gsub(/([a-z])([A-Z])/,'\1_\2') # insert underscores
|
142
|
+
.downcase # remove caps
|
143
|
+
|
144
|
+
child_class.module_eval <<-RUBY
|
145
|
+
def visit_method
|
146
|
+
:on_#{name_underscored}
|
147
|
+
end
|
148
|
+
|
149
|
+
class << self
|
150
|
+
attr_accessor :children_method_name
|
151
|
+
end
|
152
|
+
self.children_method_name = :#{name_underscored}s
|
153
|
+
RUBY
|
154
|
+
end
|
155
|
+
|
156
|
+
private
|
157
|
+
|
158
|
+
# Name accessors which return lists of nodes,
|
159
|
+
# along with the kind of node they return, if possible.
|
160
|
+
# - Add a reader for these children
|
161
|
+
# - Add a persistent update method to add a child
|
162
|
+
# - Generate a `#children` method
|
163
|
+
def children_methods(children_of_type)
|
164
|
+
if defined?(@children_methods)
|
165
|
+
raise "Can't re-call .children_methods for #{self} (already have: #{@children_methods})"
|
166
|
+
else
|
167
|
+
@children_methods = children_of_type
|
168
|
+
end
|
169
|
+
|
170
|
+
if children_of_type == false
|
171
|
+
@children_methods = {}
|
172
|
+
# skip
|
173
|
+
else
|
174
|
+
|
175
|
+
children_of_type.each do |method_name, node_type|
|
176
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
177
|
+
# A reader for these children
|
178
|
+
attr_reader :#{method_name}
|
179
|
+
RUBY
|
180
|
+
|
181
|
+
if node_type
|
182
|
+
# Only generate a method if we know what kind of node to make
|
183
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
184
|
+
# Singular method: create a node with these options
|
185
|
+
# and return a new `self` which includes that node in this list.
|
186
|
+
def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
|
187
|
+
merge(#{method_name}: #{method_name} + [#{node_type.name}.new(node_opts)])
|
188
|
+
end
|
189
|
+
RUBY
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
if children_of_type.size == 1
|
194
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
195
|
+
alias :children #{children_of_type.keys.first}
|
196
|
+
RUBY
|
197
|
+
else
|
198
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
199
|
+
def children
|
200
|
+
@children ||= (#{children_of_type.keys.map { |k| "@#{k}" }.join(" + ")}).freeze
|
201
|
+
end
|
202
|
+
RUBY
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
if defined?(@scalar_methods)
|
207
|
+
if !method_defined?(:initialize_node)
|
208
|
+
generate_initialize_node
|
209
|
+
else
|
210
|
+
# This method was defined manually
|
211
|
+
end
|
212
|
+
else
|
213
|
+
raise "Can't generate_initialize_node because scalar_methods wasn't called; call it before children_methods"
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
# These methods return a plain Ruby value, not another node
|
218
|
+
# - Add reader methods
|
219
|
+
# - Add a `#scalars` method
|
220
|
+
def scalar_methods(*method_names)
|
221
|
+
if defined?(@scalar_methods)
|
222
|
+
raise "Can't re-call .scalar_methods for #{self} (already have: #{@scalar_methods})"
|
223
|
+
else
|
224
|
+
@scalar_methods = method_names
|
225
|
+
end
|
226
|
+
|
227
|
+
if method_names == [false]
|
228
|
+
@scalar_methods = []
|
229
|
+
# skip it
|
230
|
+
else
|
231
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
232
|
+
# add readers for each scalar
|
233
|
+
attr_reader #{method_names.map { |m| ":#{m}"}.join(", ")}
|
234
|
+
|
235
|
+
def scalars
|
236
|
+
@scalars ||= [#{method_names.map { |k| "@#{k}" }.join(", ")}].freeze
|
237
|
+
end
|
238
|
+
RUBY
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def generate_initialize_node
|
243
|
+
scalar_method_names = @scalar_methods
|
244
|
+
# TODO: These probably should be scalar methods, but `types` returns an array
|
245
|
+
[:types, :description].each do |extra_method|
|
246
|
+
if method_defined?(extra_method)
|
247
|
+
scalar_method_names += [extra_method]
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
all_method_names = scalar_method_names + @children_methods.keys
|
252
|
+
if all_method_names.include?(:alias)
|
253
|
+
# Rather than complicating this special case,
|
254
|
+
# let it be overridden (in field)
|
255
|
+
return
|
256
|
+
else
|
257
|
+
arguments = scalar_method_names.map { |m| "#{m}: nil"} +
|
258
|
+
@children_methods.keys.map { |m| "#{m}: NO_CHILDREN" }
|
259
|
+
|
260
|
+
assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
|
261
|
+
@children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
|
262
|
+
|
263
|
+
module_eval <<-RUBY, __FILE__, __LINE__
|
264
|
+
def initialize_node #{arguments.join(", ")}
|
265
|
+
#{assignments.join("\n")}
|
266
|
+
end
|
267
|
+
RUBY
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
# Base class for non-null type names and list type names
|
274
|
+
class WrapperType < AbstractNode
|
275
|
+
scalar_methods :of_type
|
276
|
+
children_methods(false)
|
277
|
+
end
|
278
|
+
|
279
|
+
# Base class for nodes whose only value is a name (no child nodes or other scalars)
|
280
|
+
class NameOnlyNode < AbstractNode
|
281
|
+
scalar_methods :name
|
282
|
+
children_methods(false)
|
283
|
+
end
|
284
|
+
|
285
|
+
# A key-value pair for a field's inputs
|
286
|
+
class Argument < AbstractNode
|
287
|
+
scalar_methods :name, :value
|
288
|
+
children_methods(false)
|
289
|
+
|
290
|
+
# @!attribute name
|
291
|
+
# @return [String] the key for this argument
|
292
|
+
|
293
|
+
# @!attribute value
|
294
|
+
# @return [String, Float, Integer, Boolean, Array, InputObject] The value passed for this key
|
295
|
+
|
296
|
+
def children
|
297
|
+
@children ||= Array(value).flatten.select { |v| v.is_a?(AbstractNode) }
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
class Directive < AbstractNode
|
302
|
+
scalar_methods :name
|
303
|
+
children_methods(arguments: GraphQL::Language::Nodes::Argument)
|
304
|
+
end
|
305
|
+
|
306
|
+
class DirectiveLocation < NameOnlyNode
|
307
|
+
end
|
308
|
+
|
309
|
+
class DirectiveDefinition < AbstractNode
|
310
|
+
include DefinitionNode
|
311
|
+
attr_reader :description
|
312
|
+
scalar_methods :name
|
313
|
+
children_methods(
|
314
|
+
locations: Nodes::DirectiveLocation,
|
315
|
+
arguments: Nodes::Argument,
|
316
|
+
)
|
317
|
+
end
|
318
|
+
|
319
|
+
# This is the AST root for normal queries
|
320
|
+
#
|
321
|
+
# @example Deriving a document by parsing a string
|
322
|
+
# document = GraphQL.parse(query_string)
|
323
|
+
#
|
324
|
+
# @example Creating a string from a document
|
325
|
+
# document.to_query_string
|
326
|
+
# # { ... }
|
327
|
+
#
|
328
|
+
# @example Creating a custom string from a document
|
329
|
+
# class VariableScrubber < GraphQL::Language::Printer
|
330
|
+
# def print_argument(arg)
|
331
|
+
# "#{arg.name}: <HIDDEN>"
|
332
|
+
# end
|
333
|
+
# end
|
334
|
+
#
|
335
|
+
# document.to_query_string(printer: VariableSrubber.new)
|
336
|
+
#
|
337
|
+
class Document < AbstractNode
|
338
|
+
scalar_methods false
|
339
|
+
children_methods(definitions: nil)
|
340
|
+
# @!attribute definitions
|
341
|
+
# @return [Array<OperationDefinition, FragmentDefinition>] top-level GraphQL units: operations or fragments
|
342
|
+
|
343
|
+
def slice_definition(name)
|
344
|
+
GraphQL::Language::DefinitionSlice.slice(self, name)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
# An enum value. The string is available as {#name}.
|
349
|
+
class Enum < NameOnlyNode
|
350
|
+
end
|
351
|
+
|
352
|
+
# A null value literal.
|
353
|
+
class NullValue < NameOnlyNode
|
354
|
+
end
|
355
|
+
|
356
|
+
# A single selection in a GraphQL query.
|
357
|
+
class Field < AbstractNode
|
358
|
+
NONE = [].freeze
|
359
|
+
|
360
|
+
scalar_methods :name, :alias
|
361
|
+
children_methods({
|
362
|
+
arguments: GraphQL::Language::Nodes::Argument,
|
363
|
+
selections: GraphQL::Language::Nodes::Field,
|
364
|
+
directives: GraphQL::Language::Nodes::Directive,
|
365
|
+
})
|
366
|
+
|
367
|
+
# @!attribute selections
|
368
|
+
# @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
|
369
|
+
|
370
|
+
def initialize_node(attributes)
|
371
|
+
@name = attributes[:name]
|
372
|
+
@arguments = attributes[:arguments] || NONE
|
373
|
+
@directives = attributes[:directives] || NONE
|
374
|
+
@selections = attributes[:selections] || NONE
|
375
|
+
# oops, alias is a keyword:
|
376
|
+
@alias = attributes[:alias]
|
377
|
+
end
|
378
|
+
|
379
|
+
# Override this because default is `:fields`
|
380
|
+
self.children_method_name = :selections
|
381
|
+
end
|
382
|
+
|
383
|
+
# A reusable fragment, defined at document-level.
|
384
|
+
class FragmentDefinition < AbstractNode
|
385
|
+
# @!attribute name
|
386
|
+
# @return [String] the identifier for this fragment, which may be applied with `...#{name}`
|
387
|
+
|
388
|
+
# @!attribute type
|
389
|
+
# @return [String] the type condition for this fragment (name of type which it may apply to)
|
390
|
+
def initialize_node(name: nil, type: nil, directives: [], selections: [])
|
391
|
+
@name = name
|
392
|
+
@type = type
|
393
|
+
@directives = directives
|
394
|
+
@selections = selections
|
395
|
+
end
|
396
|
+
|
397
|
+
scalar_methods :name, :type
|
398
|
+
children_methods({
|
399
|
+
selections: GraphQL::Language::Nodes::Field,
|
400
|
+
directives: GraphQL::Language::Nodes::Directive,
|
401
|
+
})
|
402
|
+
|
403
|
+
self.children_method_name = :definitions
|
404
|
+
end
|
405
|
+
|
406
|
+
# Application of a named fragment in a selection
|
407
|
+
class FragmentSpread < AbstractNode
|
408
|
+
scalar_methods :name
|
409
|
+
children_methods(directives: GraphQL::Language::Nodes::Directive)
|
410
|
+
|
411
|
+
self.children_method_name = :selections
|
412
|
+
|
413
|
+
# @!attribute name
|
414
|
+
# @return [String] The identifier of the fragment to apply, corresponds with {FragmentDefinition#name}
|
415
|
+
end
|
416
|
+
|
417
|
+
# An unnamed fragment, defined directly in the query with `... { }`
|
418
|
+
class InlineFragment < AbstractNode
|
419
|
+
scalar_methods :type
|
420
|
+
children_methods({
|
421
|
+
selections: GraphQL::Language::Nodes::Field,
|
422
|
+
directives: GraphQL::Language::Nodes::Directive,
|
423
|
+
})
|
424
|
+
|
425
|
+
self.children_method_name = :selections
|
426
|
+
|
427
|
+
# @!attribute type
|
428
|
+
# @return [String, nil] Name of the type this fragment applies to, or `nil` if this fragment applies to any type
|
429
|
+
end
|
430
|
+
|
431
|
+
# A collection of key-value inputs which may be a field argument
|
432
|
+
class InputObject < AbstractNode
|
433
|
+
scalar_methods(false)
|
434
|
+
children_methods(arguments: GraphQL::Language::Nodes::Argument)
|
435
|
+
|
436
|
+
# @!attribute arguments
|
437
|
+
# @return [Array<Nodes::Argument>] A list of key-value pairs inside this input object
|
438
|
+
|
439
|
+
# @return [Hash<String, Any>] Recursively turn this input object into a Ruby Hash
|
440
|
+
def to_h(options={})
|
441
|
+
arguments.inject({}) do |memo, pair|
|
442
|
+
v = pair.value
|
443
|
+
memo[pair.name] = serialize_value_for_hash v
|
444
|
+
memo
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
self.children_method_name = :value
|
449
|
+
|
450
|
+
private
|
451
|
+
|
452
|
+
def serialize_value_for_hash(value)
|
453
|
+
case value
|
454
|
+
when InputObject
|
455
|
+
value.to_h
|
456
|
+
when Array
|
457
|
+
value.map do |v|
|
458
|
+
serialize_value_for_hash v
|
459
|
+
end
|
460
|
+
when Enum
|
461
|
+
value.name
|
462
|
+
when NullValue
|
463
|
+
nil
|
464
|
+
else
|
465
|
+
value
|
466
|
+
end
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
470
|
+
# A list type definition, denoted with `[...]` (used for variable type definitions)
|
471
|
+
class ListType < WrapperType
|
472
|
+
end
|
473
|
+
|
474
|
+
# A non-null type definition, denoted with `...!` (used for variable type definitions)
|
475
|
+
class NonNullType < WrapperType
|
476
|
+
end
|
477
|
+
|
478
|
+
# An operation-level query variable
|
479
|
+
class VariableDefinition < AbstractNode
|
480
|
+
scalar_methods :name, :type, :default_value
|
481
|
+
children_methods false
|
482
|
+
# @!attribute default_value
|
483
|
+
# @return [String, Integer, Float, Boolean, Array, NullValue] A Ruby value to use if no other value is provided
|
484
|
+
|
485
|
+
# @!attribute type
|
486
|
+
# @return [TypeName, NonNullType, ListType] The expected type of this value
|
487
|
+
|
488
|
+
# @!attribute name
|
489
|
+
# @return [String] The identifier for this variable, _without_ `$`
|
490
|
+
|
491
|
+
self.children_method_name = :variables
|
492
|
+
end
|
493
|
+
|
494
|
+
# A query, mutation or subscription.
|
495
|
+
# May be anonymous or named.
|
496
|
+
# May be explicitly typed (eg `mutation { ... }`) or implicitly a query (eg `{ ... }`).
|
497
|
+
class OperationDefinition < AbstractNode
|
498
|
+
scalar_methods :operation_type, :name
|
499
|
+
children_methods({
|
500
|
+
variables: GraphQL::Language::Nodes::VariableDefinition,
|
501
|
+
selections: GraphQL::Language::Nodes::Field,
|
502
|
+
directives: GraphQL::Language::Nodes::Directive,
|
503
|
+
})
|
504
|
+
|
505
|
+
# @!attribute variables
|
506
|
+
# @return [Array<VariableDefinition>] Variable $definitions for this operation
|
507
|
+
|
508
|
+
# @!attribute selections
|
509
|
+
# @return [Array<Field>] Root-level fields on this operation
|
510
|
+
|
511
|
+
# @!attribute operation_type
|
512
|
+
# @return [String, nil] The root type for this operation, or `nil` for implicit `"query"`
|
513
|
+
|
514
|
+
# @!attribute name
|
515
|
+
# @return [String, nil] The name for this operation, or `nil` if unnamed
|
516
|
+
|
517
|
+
self.children_method_name = :definitions
|
518
|
+
end
|
519
|
+
|
520
|
+
# A type name, used for variable definitions
|
521
|
+
class TypeName < NameOnlyNode
|
522
|
+
end
|
523
|
+
|
524
|
+
# Usage of a variable in a query. Name does _not_ include `$`.
|
525
|
+
class VariableIdentifier < NameOnlyNode
|
526
|
+
self.children_method_name = :value
|
527
|
+
end
|
528
|
+
|
529
|
+
class SchemaDefinition < AbstractNode
|
530
|
+
include DefinitionNode
|
531
|
+
scalar_methods :query, :mutation, :subscription
|
532
|
+
children_methods({
|
533
|
+
directives: GraphQL::Language::Nodes::Directive,
|
534
|
+
})
|
535
|
+
self.children_method_name = :definitions
|
536
|
+
end
|
537
|
+
|
538
|
+
class SchemaExtension < AbstractNode
|
539
|
+
scalar_methods :query, :mutation, :subscription
|
540
|
+
children_methods({
|
541
|
+
directives: GraphQL::Language::Nodes::Directive,
|
542
|
+
})
|
543
|
+
self.children_method_name = :definitions
|
544
|
+
end
|
545
|
+
|
546
|
+
class ScalarTypeDefinition < AbstractNode
|
547
|
+
include DefinitionNode
|
548
|
+
attr_reader :description
|
549
|
+
scalar_methods :name
|
550
|
+
children_methods({
|
551
|
+
directives: GraphQL::Language::Nodes::Directive,
|
552
|
+
})
|
553
|
+
self.children_method_name = :definitions
|
554
|
+
end
|
555
|
+
|
556
|
+
class ScalarTypeExtension < AbstractNode
|
557
|
+
scalar_methods :name
|
558
|
+
children_methods({
|
559
|
+
directives: GraphQL::Language::Nodes::Directive,
|
560
|
+
})
|
561
|
+
self.children_method_name = :definitions
|
562
|
+
end
|
563
|
+
|
564
|
+
class InputValueDefinition < AbstractNode
|
565
|
+
include DefinitionNode
|
566
|
+
attr_reader :description
|
567
|
+
scalar_methods :name, :type, :default_value
|
568
|
+
children_methods({
|
569
|
+
directives: GraphQL::Language::Nodes::Directive,
|
570
|
+
})
|
571
|
+
self.children_method_name = :fields
|
572
|
+
end
|
573
|
+
|
574
|
+
class FieldDefinition < AbstractNode
|
575
|
+
include DefinitionNode
|
576
|
+
attr_reader :description
|
577
|
+
scalar_methods :name, :type
|
578
|
+
children_methods({
|
579
|
+
directives: GraphQL::Language::Nodes::Directive,
|
580
|
+
arguments: GraphQL::Language::Nodes::InputValueDefinition,
|
581
|
+
})
|
582
|
+
self.children_method_name = :fields
|
583
|
+
|
584
|
+
# this is so that `children_method_name` of `InputValueDefinition` works properly
|
585
|
+
# with `#replace_child`
|
586
|
+
alias :fields :arguments
|
587
|
+
def merge(new_options)
|
588
|
+
if (f = new_options.delete(:fields))
|
589
|
+
new_options[:arguments] = f
|
590
|
+
end
|
591
|
+
super
|
592
|
+
end
|
593
|
+
end
|
594
|
+
|
595
|
+
class ObjectTypeDefinition < AbstractNode
|
596
|
+
include DefinitionNode
|
597
|
+
attr_reader :description
|
598
|
+
scalar_methods :name, :interfaces
|
599
|
+
children_methods({
|
600
|
+
directives: GraphQL::Language::Nodes::Directive,
|
601
|
+
fields: GraphQL::Language::Nodes::FieldDefinition,
|
602
|
+
})
|
603
|
+
self.children_method_name = :definitions
|
604
|
+
end
|
605
|
+
|
606
|
+
class ObjectTypeExtension < AbstractNode
|
607
|
+
scalar_methods :name, :interfaces
|
608
|
+
children_methods({
|
609
|
+
directives: GraphQL::Language::Nodes::Directive,
|
610
|
+
fields: GraphQL::Language::Nodes::FieldDefinition,
|
611
|
+
})
|
612
|
+
self.children_method_name = :definitions
|
613
|
+
end
|
614
|
+
|
615
|
+
class InterfaceTypeDefinition < AbstractNode
|
616
|
+
include DefinitionNode
|
617
|
+
attr_reader :description
|
618
|
+
scalar_methods :name
|
619
|
+
children_methods({
|
620
|
+
interfaces: GraphQL::Language::Nodes::TypeName,
|
621
|
+
directives: GraphQL::Language::Nodes::Directive,
|
622
|
+
fields: GraphQL::Language::Nodes::FieldDefinition,
|
623
|
+
})
|
624
|
+
self.children_method_name = :definitions
|
625
|
+
end
|
626
|
+
|
627
|
+
class InterfaceTypeExtension < AbstractNode
|
628
|
+
scalar_methods :name
|
629
|
+
children_methods({
|
630
|
+
interfaces: GraphQL::Language::Nodes::TypeName,
|
631
|
+
directives: GraphQL::Language::Nodes::Directive,
|
632
|
+
fields: GraphQL::Language::Nodes::FieldDefinition,
|
633
|
+
})
|
634
|
+
self.children_method_name = :definitions
|
635
|
+
end
|
636
|
+
|
637
|
+
class UnionTypeDefinition < AbstractNode
|
638
|
+
include DefinitionNode
|
639
|
+
attr_reader :description, :types
|
640
|
+
scalar_methods :name
|
641
|
+
children_methods({
|
642
|
+
directives: GraphQL::Language::Nodes::Directive,
|
643
|
+
})
|
644
|
+
self.children_method_name = :definitions
|
645
|
+
end
|
646
|
+
|
647
|
+
class UnionTypeExtension < AbstractNode
|
648
|
+
attr_reader :types
|
649
|
+
scalar_methods :name
|
650
|
+
children_methods({
|
651
|
+
directives: GraphQL::Language::Nodes::Directive,
|
652
|
+
})
|
653
|
+
self.children_method_name = :definitions
|
654
|
+
end
|
655
|
+
|
656
|
+
class EnumValueDefinition < AbstractNode
|
657
|
+
include DefinitionNode
|
658
|
+
attr_reader :description
|
659
|
+
scalar_methods :name
|
660
|
+
children_methods({
|
661
|
+
directives: GraphQL::Language::Nodes::Directive,
|
662
|
+
})
|
663
|
+
self.children_method_name = :values
|
664
|
+
end
|
665
|
+
|
666
|
+
class EnumTypeDefinition < AbstractNode
|
667
|
+
include DefinitionNode
|
668
|
+
attr_reader :description
|
669
|
+
scalar_methods :name
|
670
|
+
children_methods({
|
671
|
+
directives: GraphQL::Language::Nodes::Directive,
|
672
|
+
values: GraphQL::Language::Nodes::EnumValueDefinition,
|
673
|
+
})
|
674
|
+
self.children_method_name = :definitions
|
675
|
+
end
|
676
|
+
|
677
|
+
class EnumTypeExtension < AbstractNode
|
678
|
+
scalar_methods :name
|
679
|
+
children_methods({
|
680
|
+
directives: GraphQL::Language::Nodes::Directive,
|
681
|
+
values: GraphQL::Language::Nodes::EnumValueDefinition,
|
682
|
+
})
|
683
|
+
self.children_method_name = :definitions
|
684
|
+
end
|
685
|
+
|
686
|
+
class InputObjectTypeDefinition < AbstractNode
|
687
|
+
include DefinitionNode
|
688
|
+
attr_reader :description
|
689
|
+
scalar_methods :name
|
690
|
+
children_methods({
|
691
|
+
directives: GraphQL::Language::Nodes::Directive,
|
692
|
+
fields: GraphQL::Language::Nodes::InputValueDefinition,
|
693
|
+
})
|
694
|
+
self.children_method_name = :definitions
|
695
|
+
end
|
696
|
+
|
697
|
+
class InputObjectTypeExtension < AbstractNode
|
698
|
+
scalar_methods :name
|
699
|
+
children_methods({
|
700
|
+
directives: GraphQL::Language::Nodes::Directive,
|
701
|
+
fields: GraphQL::Language::Nodes::InputValueDefinition,
|
702
|
+
})
|
703
|
+
self.children_method_name = :definitions
|
704
|
+
end
|
705
|
+
end
|
706
|
+
end
|
707
|
+
end
|