Module: GraphQL::Client::DocumentTypes
- Defined in:
- lib/graphql/client/document_types.rb
Overview
Internal: Use schema to detect definition and field types.
Class Method Summary collapse
-
.analyze_types(schema, document) ⇒ Object
Internal: Detect all types used in a given document.
Class Method Details
.analyze_types(schema, document) ⇒ Object
Internal: Detect all types used in a given document
schema - A GraphQL::Schema document - A GraphQL::Language::Nodes::Document to scan
Returns a Hash to GraphQL::Type objects.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/graphql/client/document_types.rb', line 14 def self.analyze_types(schema, document) unless schema.is_a?(GraphQL::Schema) raise TypeError, "expected schema to be a GraphQL::Schema, but was #{schema.class}" end unless document.is_a?(GraphQL::Language::Nodes::Document) raise TypeError, "expected schema to be a GraphQL::Language::Nodes::Document, but was #{document.class}" end visitor = GraphQL::Language::Visitor.new(document) type_stack = GraphQL::StaticValidation::TypeStack.new(schema, visitor) fields = {} visitor[GraphQL::Language::Nodes::OperationDefinition] << ->(node, _parent) do fields[node] = type_stack.object_types.last end visitor[GraphQL::Language::Nodes::FragmentDefinition] << ->(node, _parent) do fields[node] = type_stack.object_types.last end visitor[GraphQL::Language::Nodes::InlineFragment] << ->(node, _parent) do fields[node] = type_stack.object_types.last end visitor[GraphQL::Language::Nodes::Field] << ->(node, _parent) do fields[node] = type_stack.field_definitions.last.type end visitor.visit fields rescue StandardError # FIXME: TypeStack my crash on invalid documents fields end |