import { Path } from '@graphql-tools/utils';
import { DeferUsage } from './collectFields.cjs';
import type { DeferredFragmentRecord, DeliveryGroup } from './DeferredFragments.cjs';
import { DeferredFragmentFactory } from './DeferredFragments.cjs';
import type { IncrementalDataRecord, IncrementalDataRecordResult, StreamRecord, SuccessfulExecutionGroup } from './types.cjs';
/**
 * @internal
 */
export declare class IncrementalGraph {
    private _rootNodes;
    private _deferredFragmentFactory;
    private _completedQueue;
    private _nextQueue;
    constructor(deferredFragmentFactory: DeferredFragmentFactory);
    getNewRootNodes(incrementalDataRecords: ReadonlyArray<IncrementalDataRecord>): ReadonlyArray<DeliveryGroup>;
    addCompletedSuccessfulExecutionGroup(successfulExecutionGroup: SuccessfulExecutionGroup): void;
    getDeepestDeferredFragmentAtRoot(initialDeferUsage: DeferUsage, deferUsages: ReadonlySet<DeferUsage>, path: Path | undefined): DeferredFragmentRecord;
    currentCompletedBatch(): Generator<IncrementalDataRecordResult>;
    nextCompletedBatch(): Promise<Iterable<IncrementalDataRecordResult> | undefined>;
    abort(): void;
    hasNext(): boolean;
    completeDeferredFragment(deferUsage: DeferUsage, path: Path | undefined): {
        deferredFragmentRecord: DeferredFragmentRecord;
        newRootNodes: ReadonlyArray<DeliveryGroup>;
        successfulExecutionGroups: ReadonlyArray<SuccessfulExecutionGroup>;
    } | undefined;
    removeDeferredFragment(deferUsage: DeferUsage, path: Path | undefined): DeferredFragmentRecord | undefined;
    removeStream(streamRecord: StreamRecord): void;
    private _addIncrementalDataRecords;
    private _promoteNonEmptyToRoot;
    private _completesRootNode;
    private _addDeferredFragment;
    private _onExecutionGroup;
    private _onStreamItems;
    private _enqueue;
}
