/** * Created by Ivo Meißner on 28.07.17. */ import { ValidationContext, FragmentDefinitionNode, OperationDefinitionNode, FieldNode, InlineFragmentNode, GraphQLField, GraphQLCompositeType, GraphQLSchema, DocumentNode, GraphQLDirective, GraphQLUnionType, GraphQLObjectType, GraphQLInterfaceType, GraphQLError } from 'graphql'; export declare type ComplexityEstimatorArgs = { type: GraphQLCompositeType; field: GraphQLField; node: FieldNode; args: { [key: string]: any; }; childComplexity: number; context?: Record; }; export declare type ComplexityEstimator = (options: ComplexityEstimatorArgs) => number | void; export declare type Complexity = any; export interface QueryComplexityOptions { maximumComplexity: number; variables?: Record; operationName?: string; onComplete?: (complexity: number) => void; createError?: (max: number, actual: number) => GraphQLError; estimators: Array; context?: Record; maxQueryNodes?: number; } export declare function getComplexity(options: { estimators: ComplexityEstimator[]; schema: GraphQLSchema; query: DocumentNode; variables?: Record; operationName?: string; context?: Record; maxQueryNodes?: number; }): number; export default class QueryComplexity { context: ValidationContext; complexity: number; options: QueryComplexityOptions; OperationDefinition: Record; estimators: Array; includeDirectiveDef: GraphQLDirective; skipDirectiveDef: GraphQLDirective; variableValues: Record; requestContext?: Record; evaluatedNodes: number; maxQueryNodes: number; constructor(context: ValidationContext, options: QueryComplexityOptions); onOperationDefinitionEnter(operation: OperationDefinitionNode): void; onOperationDefinitionLeave(operation: OperationDefinitionNode): GraphQLError | void; nodeComplexity(node: FieldNode | FragmentDefinitionNode | InlineFragmentNode | OperationDefinitionNode, typeDef: GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | undefined): number; createError(): GraphQLError; }