UNPKG

polen

Version:

A framework for delightful GraphQL developer portals

117 lines 3.95 kB
import type { DocumentNode, GraphQLError, GraphQLSchema } from 'graphql'; /** * Represents a GraphQL identifier found in a document */ export interface Identifier { /** The name of the identifier (e.g., 'User', 'name', 'id') */ name: string; /** The kind of GraphQL construct this identifier represents */ kind: `Type` | `Field` | `Argument` | `Directive` | `Variable` | `Fragment`; /** Position information in the source document */ position: { /** Character offset from start of document */ start: number; /** Character offset for end of identifier */ end: number; /** Line number (1-based) */ line: number; /** Column number (1-based) */ column: number; }; /** The parent type name if this is a field or argument */ parentType?: string; /** Path through the schema to this identifier (e.g., ['User', 'posts', 'title']) */ schemaPath: string[]; /** Context about where this identifier appears */ context: IdentifierContext; } /** * Additional context about where an identifier appears in the document */ export interface IdentifierContext { /** The operation type if this identifier is within an operation */ operationType?: `query` | `mutation` | `subscription`; /** The operation name if this identifier is within a named operation */ operationName?: string; /** Whether this identifier is in a fragment definition */ inFragment?: string; /** The selection path leading to this identifier */ selectionPath: string[]; } /** * Map of all identifiers found in a GraphQL document */ export interface IdentifierMap { /** Quick lookup by character position */ byPosition: Map<number, Identifier>; /** Grouped by identifier kind for easy filtering */ byKind: Map<Identifier[`kind`], Identifier[]>; /** Any validation errors found during analysis */ errors: AnalysisError[]; /** All identifiers as a flat array */ all: Identifier[]; } /** * Analysis error with context about the identifier that caused it */ export interface AnalysisError { /** The identifier that caused the error (if applicable) */ identifier?: Identifier; /** Human-readable error message */ message: string; /** Error severity level */ severity: `error` | `warning` | `info`; /** Position in the document where the error occurred */ position?: { line: number; column: number; }; } /** * Result of analyzing a GraphQL document */ export interface AnalysisResult { /** The parsed AST */ ast: DocumentNode; /** Map of all identifiers found */ identifiers: IdentifierMap; /** Whether the document parsed successfully */ isValid: boolean; /** Any parse or validation errors */ errors: GraphQLError[]; } /** * Configuration for GraphQL document analysis */ export interface AnalysisConfig { /** Whether to include position information for identifiers */ includePositions?: boolean; /** Whether to validate against a schema (if provided) */ validateAgainstSchema?: boolean; /** Schema to validate against */ schema?: GraphQLSchema; /** Whether to extract fragment information */ includeFragments?: boolean; } /** * Interface for the main GraphQL analyzer */ export interface GraphQLAnalyzer { /** * Parse a GraphQL document string into an AST */ parse(source: string): DocumentNode; /** * Extract all identifiers from a GraphQL AST */ extractIdentifiers(ast: DocumentNode, config?: AnalysisConfig): IdentifierMap; /** * Validate a GraphQL document against a schema */ validateAgainstSchema(ast: DocumentNode, schema: GraphQLSchema): GraphQLError[]; /** * Perform complete analysis of a GraphQL document */ analyze(source: string, config?: AnalysisConfig): AnalysisResult; } //# sourceMappingURL=types.d.ts.map