@tanstack/db
Version:
A reactive client store for building super fast apps on sync
93 lines (92 loc) • 4.01 kB
text/typescript
import { CollectionSubscription } from "../../collection/subscription.cjs";
import { ChangeMessage, LoadSubsetOptions, LoadSubsetRequestResult } from "../../types.cjs";
import { OrderByOptimizationInfo } from "../compiler/order-by.cjs";
/** The loader's work slot or debt reached a state its rules forbid. */
export declare class OrderedLoaderInvariantError extends Error {
}
/** 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 readonly canRetryRepair;
private readonly getGraphInputRevision?;
private readonly hasPendingJoinedWork;
private pending;
private hasSettledSourceRequest;
private settledSourceBoundary;
private debt;
private requesting;
private work;
private settledFiniteAcquisitions;
private failedRequest;
private failedAcquisitions;
private active;
private orderedLoadGeneration;
private orderingInvalidationGeneration;
private authorityGeneration;
private lastPage;
private lastPrefixCount;
private grownPrefixRows;
private ownPrefixCount;
private lastBoundary;
private needsOptimisticRefill;
private retiringSupersededAcquisitions;
private repairRetries;
private repairTimer;
private stagedContinuation;
private blockedLoadMore;
private drainingNoInputContinuations;
private graphCheckedDuringRequest;
private readonly readsBoundedPrefix;
constructor(info: OrderByOptimizationInfo, subscription: CollectionSubscription, alias: string, onResult?: (result: LoadSubsetRequestResult, holdPublication: boolean, settlesAsync: boolean, options?: LoadSubsetOptions) => void, canRetryRepair?: () => boolean, getGraphInputRevision?: (() => number) | undefined, hasPendingJoinedWork?: () => boolean);
private get needsOrderingRepair();
private moveWork;
private oweDebt;
private checkCoherence;
private coversSource;
private repairNeedsReplacement;
/** 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, hasOptimisticOverlay: (key: string | number) => boolean): void;
start(): void;
loadMore(windowOperationGeneration?: number, continuesOrderedPrefixRepair?: boolean): Promise<void> | undefined;
loadFullSource(windowOperationGeneration?: number): void;
private loadOrderedPrefixRepair;
private loadPrefix;
resetCursor(): void;
settleFullSourceReplay(): void;
private coverSource;
private retireSettledFiniteAcquisitions;
private retireSupersededFailures;
private releaseOwned;
invalidateCursor(): void;
invalidateSourceOrdering(): void;
/**
* The source's sync adapter reports that served pages may have shifted.
* Coverage that one full-source acquisition established has no page
* boundary to repair, and the adapter's refetch has already re-read it.
* A window inside this loader's own first page needs no repair either.
*/
revalidateLoadedCoverage(): void;
private ownPrefixEnd;
private finishOrderedPrefixRepair;
private abandonOrderedPrefixRepair;
dispose(): void;
private countAcquiredRows;
private loadPage;
private standing;
private supersedes;
private runContinuation;
private consumeStagedContinuation;
private graphHasProcessedInput;
private drainNoInputContinuations;
private loadBoundary;
private requireFullSourceRepair;
private cancelRepairRetry;
private scheduleRepairRetry;
/** A failed request blocks ordinary refinement until a new operation. */
private recordRequestFailure;
/** Observe settlement only after all synchronous request work succeeds. */
private requestAndObserve;
}