Skip to main content

Module graphql

Module graphql 

Source
Expand description

GraphQL parsing and query processing.

This module provides runtime GraphQL query handling:

  • Query parsing via graphql-parser crate
  • Fragment resolution and expansion
  • Directive evaluation (@skip, @include)
  • Fragment cycle detection

§Architecture

Incoming GraphQL Query
        │
        ▼
  ┌─────────────┐
  │   Parser    │  ← graphql-parser crate
  └──────┬──────┘
         │ ParsedQuery
         ▼
  ┌─────────────┐
  │  Fragment   │  ← Cycle detection
  │  Validator  │
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │  Fragment   │  ← Spread expansion
  │  Resolver   │
  └──────┬──────┘
         │ Resolved selections
         ▼
  ┌─────────────┐
  │  Directive  │  ← @skip/@include
  │  Evaluator  │
  └──────┬──────┘
         │ Final field list
         ▼
    SQL Generation

§Example

use fraiseql_core::graphql::{parse_query, FragmentResolver, DirectiveEvaluator};

let query = r#"
    fragment UserFields on User { id name }
    query { users { ...UserFields } }
"#;

let parsed = parse_query(query)?;
let resolver = FragmentResolver::new(&parsed.fragments);
let resolved = resolver.resolve_spreads(&parsed.selections)?;

Re-exports§

pub use complexity::ComplexityAnalyzer;
pub use complexity::ComplexityConfig;
pub use directive_evaluator::CustomDirectiveEvaluator;
pub use directive_evaluator::DirectiveError;
pub use directive_evaluator::DirectiveEvaluator;
pub use directive_evaluator::DirectiveHandler;
pub use directive_evaluator::DirectiveResult;
pub use directive_evaluator::EvaluationContext;
pub use directive_evaluator::OperationType;
pub use fragment_resolver::FragmentError;
pub use fragment_resolver::FragmentResolver;
pub use fragments::FragmentGraph;
pub use parser::parse_query;
pub use require_permission_directive::RequirePermissionDirective;
pub use types::Directive;
pub use types::FieldSelection;
pub use types::FragmentDefinition;
pub use types::GraphQLArgument;
pub use types::GraphQLType;
pub use types::ParsedQuery;
pub use types::VariableDefinition;

Modules§

complexity
Query complexity analysis and DoS prevention.
directive_evaluator
Directive evaluation (@skip, @include). Directive evaluation for GraphQL queries.
fragment_resolver
Fragment resolution and expansion. Fragment resolution for GraphQL queries.
fragments
Fragment cycle detection. Fragment cycle detection and validation.
parser
GraphQL query parsing wrapper. GraphQL query parser using graphql-parser crate.
require_permission_directive
Field-level RBAC directive (@require_permission). @require_permission directive handler for field-level RBAC
types
GraphQL AST types for query representation. GraphQL AST types for query representation.