GraphqlQuery.Validator (graphql_query v0.3.7)

View Source

GraphQL 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

document_info()

@type document_info() :: GraphqlQuery.DocumentInfo.t()

document_type()

@type document_type() :: :query | :schema | :fragment

validation_error()

@type validation_error() :: GraphqlQuery.ValidationError.t()

Functions

document_information(document)

@spec document_information(GraphqlQuery.Document.t() | GraphqlQuery.Fragment.t()) ::
  {:ok, GraphqlQuery.DocumentInfo.t()} | {:error, [validation_error()]}

Extracts GraphQL document information.

validate(query)

@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

validate(query, path, schema_module, atom)

@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