import { DocumentNode, FragmentDefinitionNode, GraphQLCompositeType, GraphQLSchema, OperationDefinitionNode } from 'graphql';
import { FieldSet } from './FieldSet';
import { QueryPlan } from './QueryPlan';
import { QueryPlanningContext } from './QueryPlanningContext';
export declare type OperationContext = {
    schema: GraphQLSchema;
    operation: OperationDefinitionNode;
    fragments: FragmentMap;
};
export declare type FragmentMap = {
    [fragmentName: string]: FragmentDefinitionNode;
};
export interface BuildQueryPlanOptions {
    autoFragmentization: boolean;
}
export declare function buildQueryPlan(operationContext: OperationContext, options?: BuildQueryPlanOptions): QueryPlan;
export declare function collectSubfields(context: QueryPlanningContext, returnType: GraphQLCompositeType, fields: FieldSet): FieldSet;
export declare function buildOperationContext(schema: GraphQLSchema, document: DocumentNode, operationName?: string): OperationContext;
export declare function buildQueryPlanningContext({ operation, schema, fragments }: OperationContext, options: BuildQueryPlanOptions): QueryPlanningContext;
//# sourceMappingURL=buildQueryPlan.d.ts.map