import { CollectionSubscription } from '../../collection/subscription.js';
import { ChangeMessage, LoadSubsetRequestResult } from '../../types.js';
import { OrderByOptimizationInfo } from '../compiler/order-by.js';
/** Owns the conservative provider-loading policy for one ordered source. */
export declare class OrderedSourceLoader {
    private readonly info;
    private readonly subscription;
    private readonly alias;
    private readonly onResult;
    private pending;
    private hasSettledSourceRequest;
    private settledSourceBoundary;
    private needsFullSourceRecovery;
    private requesting;
    private fullSource;
    private settledFiniteAcquisitions;
    private failedRequest;
    private failedAcquisitions;
    private active;
    private generation;
    private lastPage;
    private lastPrefixCount;
    private lastBoundary;
    constructor(info: OrderByOptimizationInfo, subscription: CollectionSubscription, alias: string, onResult?: (result: LoadSubsetRequestResult, holdPublication: boolean) => void);
    /** Derive invalidation from actual contributions, not a second cursor. */
    onSourceChanges(changes: Array<ChangeMessage<Record<string, unknown>, string | number>>, sentRows: ReadonlyMap<string | number, Record<string, unknown>> | undefined): void;
    start(): void;
    loadMore(windowOperationGeneration?: number): Promise<unknown> | undefined;
    loadFullSource(windowOperationGeneration?: number): void;
    private loadPrefix;
    resetCursor(): void;
    settleFullSourceReplay(): void;
    private retireSettledFiniteAcquisitions;
    invalidateCursor(): void;
    invalidateSourceOrdering(): void;
    dispose(): void;
    private countAcquiredRows;
    private loadPage;
    private observe;
    private loadBoundary;
    private requireFullSourceRecovery;
    private failRequest;
    /** A failed request blocks ordinary refinement until a new operation. */
    private recordRequestFailure;
    /** Observe settlement only after all synchronous request work succeeds. */
    private requestAndObserve;
}
