@tanstack/db
Version:
A reactive client store for building super fast apps on sync
62 lines (61 loc) • 2.32 kB
text/typescript
import { Collection } from "./collection/index.cjs";
import { DbClient, DehydratedLiveQueryResult } from "./client.cjs";
import { LiveQueryObserver, LiveQuerySnapshot } from "./live-query-observer.cjs";
import { ChangeMessage } from "./types.cjs";
/**
* DbClient supplies transport behavior to the shared observer. Keeping this
* implementation behind the client means ordinary framework queries do not
* import server admission, hydration reconciliation, or streaming machinery.
*/
export interface LiveQueryObserverClientHost<T extends object, TKey extends string | number> {
observer: LiveQueryObserver<T, TKey>;
read: (forServerSnapshot: boolean) => LiveQuerySnapshot<T, TKey>;
entries: () => Array<[
TKey,
T
]>;
isAttached: () => boolean;
isDisposed: () => boolean;
dirty: () => void;
publish: (changes: Array<ChangeMessage<T, TKey>>, entries?: Array<[
TKey,
T
]>) => void;
preload: () => Promise<void>;
}
export declare class LiveQueryObserverClient<T extends object, TKey extends string | number> {
private readonly client;
private readonly collection;
private readonly queryHash;
private readonly usesSettledHydration;
private readonly host;
private hydrationSeed;
error: unknown;
failed: boolean;
private authoritative;
private handoffScheduled;
private unregisterResource;
private preloadPromise;
constructor(client: DbClient, collection: Collection<T, TKey, any> | null, queryHash: string | undefined, usesSettledHydration: boolean, host: LiveQueryObserverClientHost<T, TKey>);
get seed(): {
dehydratedAt: number;
entries: Array<[
TKey,
T
]>;
snapshot: DehydratedLiveQueryResult;
} | undefined;
get query(): import("./client.cjs").DbClientLiveQuery | undefined;
sync(forServerSnapshot?: boolean): boolean;
getServerSnapshot(preloadRequested: boolean): LiveQuerySnapshot<T, TKey>;
private diffEntries;
markAuthoritative(dehydratedAt?: number): boolean;
scheduleHandoff(): void;
handoff(): void;
assertSources(): void;
subscribe(): () => void;
registerResource(): void;
takeResourceRelease(): (() => void) | undefined;
private getSourceInfo;
preload(): Promise<void>;
}