Module: GraphQL::StaticValidation::SubscriptionRootExistsAndSingleSubscriptionSelection

Defined in:
lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb

Instance Method Summary collapse

Instance Method Details

#on_operation_definition(node, parent) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb', line 5

def on_operation_definition(node, parent)
  if node.operation_type == "subscription"
    if context.types.subscription_root.nil?
      add_error(GraphQL::StaticValidation::SubscriptionRootExistsError.new(
        'Schema is not configured for subscriptions',
        nodes: node
      ))
    else
      root_fields = subscription_root_fields(node)
      if root_fields.map { |field| field.alias || field.name }.uniq.size != 1
        add_error(GraphQL::StaticValidation::NotSingleSubscriptionError.new(
          'A subscription operation may only have one selection',
          nodes: node,
        ))
      elsif root_fields.any? { |field| field.name.start_with?("__") }
        add_error(GraphQL::StaticValidation::NotSingleSubscriptionError.new(
          'A subscription operation may not select an introspection field',
          nodes: node,
        ))
      end
      super
    end
  else
    super
  end
end