GraphqlQuery.Validator (graphql_query v0.3.7)
View SourceGraphQL query and schema validation.
Provides validation functions for both GraphQL queries and schemas using the high-performance Rust-based native implementation. Supports schema-aware validation when a schema module is provided.
Summary
Functions
Extracts GraphQL document information.
Validates GraphQL documents.
Validates a GraphQL query string with a specific document path and optional schema. Returns :ok if valid, {:error, [validation_error()]} if invalid with detailed error messages.
Types
@type document_info() :: GraphqlQuery.DocumentInfo.t()
@type document_type() :: :query | :schema | :fragment
@type validation_error() :: GraphqlQuery.ValidationError.t()
Functions
@spec document_information(GraphqlQuery.Document.t() | GraphqlQuery.Fragment.t()) :: {:ok, GraphqlQuery.DocumentInfo.t()} | {:error, [validation_error()]}
Extracts GraphQL document information.
@spec validate(GraphqlQuery.Document.t()) :: :ok | {:error, [validation_error()]}
@spec validate(GraphqlQuery.Fragment.t()) :: :ok | {:error, [validation_error()]}
Validates GraphQL documents.
Accepts different input types:
- GraphqlQuery.Document structs
- GraphqlQuery.Fragment structs
Returns {:ok, document} if valid, {:error, [validation_error()]} if invalid with detailed error messages.
If the validation is correct, the document will have its document_info
field populated with the document's signature and other metadata.
Examples
Document struct validation
iex> document = GraphqlQuery.Document.new("query GetUser { user { id } }")
iex> GraphqlQuery.Validator.validate(document)
:ok
iex> schema_doc = GraphqlQuery.Document.new("type Query { field: String }", type: :schema)
iex> GraphqlQuery.Validator.validate(schema_doc)
:ok
Fragment struct validation
iex> fragment = GraphqlQuery.Document.new("fragment UserFields on User { id name }", name: "UserFields", type: :fragment)
iex> GraphqlQuery.Validator.validate(fragment)
:ok
@spec validate(String.t(), String.t(), module() | nil, document_type()) :: :ok | {:error, [validation_error()]}
Validates a GraphQL query string with a specific document path and optional schema. Returns :ok if valid, {:error, [validation_error()]} if invalid with detailed error messages.
Examples
Schema validation
iex> schema = ~s|type Query { field: String }|
iex> GraphqlQuery.Validator.validate(schema, "schema.graphql", nil, :schema)
:ok
Query validation without schema
iex> query = ~s|query GetUser($id: ID!) { user(id: $id) { name } }|
iex> GraphqlQuery.Validator.validate(query, "query.graphql", nil, :query)
:ok
Fragment validation without schema
iex> fragment = ~s|fragment UserFields on User { id name email }|
iex> GraphqlQuery.Validator.validate(fragment, "fragment.graphql", nil, :fragment)
:ok
Document struct validation
iex> document = GraphqlQuery.Document.new("query GetUser { user { id } }")
iex> GraphqlQuery.Validator.validate(document)
:ok