Sha256: 7f3db0a33a5e89df392022156fbed9eb1032005f94f4794c8e4ca5e79f592de9

Contents?: true

Size: 1.35 KB

Versions: 12

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true
module GraphQL
  module StaticValidation
    module FieldsAreDefinedOnType
      def on_field(node, parent)
        parent_type = @object_types[-2]
        field = context.query.types.field(parent_type, node.name)

        if field.nil?
          if parent_type.kind.union?
            add_error(GraphQL::StaticValidation::FieldsHaveAppropriateSelectionsError.new(
              "Selections can't be made directly on unions (see selections on #{parent_type.graphql_name})",
              nodes: parent,
              node_name: parent_type.graphql_name
            ))
          else
            possible_fields = possible_fields(context, parent_type)
            suggestion = context.did_you_mean_suggestion(node.name, possible_fields)
            message = "Field '#{node.name}' doesn't exist on type '#{parent_type.graphql_name}'#{suggestion}"
            add_error(GraphQL::StaticValidation::FieldsAreDefinedOnTypeError.new(
              message,
              nodes: node,
              field: node.name,
              type: parent_type.graphql_name
            ))
          end
        else
          super
        end
      end

      private

      def possible_fields(context, parent_type)
        return EmptyObjects::EMPTY_ARRAY if parent_type.kind.leaf?
        context.types.fields(parent_type).map(&:graphql_name)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
graphql-2.4.13 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.12 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.11 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.10 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.9 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.8 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.7 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.6 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.5 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.4 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.3 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb
graphql-2.4.2 lib/graphql/static_validation/rules/fields_are_defined_on_type.rb