Sha256: 3be8dd83e8bdbdf2afdefad7f5548ed04f53e74ee48acd387b7d72d3377a7281
Contents?: true
Size: 1.33 KB
Versions: 20
Compression:
Stored size: 1.33 KB
Contents
module GraphQL module StaticValidation # Scalars _can't_ have selections # Objects _must_ have selections class FieldsHaveAppropriateSelections include GraphQL::StaticValidation::Message::MessageHelper def validate(context) context.visitor[GraphQL::Language::Nodes::Field] << -> (node, parent) { return if context.skip_field?(node.name) field_defn = context.field_definition validate_field_selections(node, field_defn, context) } end private def validate_field_selections(ast_field, field_defn, context) resolved_type = field_defn.type.unwrap if resolved_type.kind.scalar? && ast_field.selections.any? error = message("Selections can't be made on scalars (field '#{ast_field.name}' returns #{resolved_type.name} but has selections [#{ast_field.selections.map(&:name).join(", ")}])", ast_field, context: context) elsif resolved_type.kind.object? && ast_field.selections.none? error = message("Objects must have selections (field '#{ast_field.name}' returns #{resolved_type.name} but has no selections)", ast_field, context: context) else error = nil end if !error.nil? context.errors << error GraphQL::Language::Visitor::SKIP end end end end end
Version data entries
20 entries across 20 versions & 1 rubygems