@tanstack/db
Version:
A reactive client store for building super fast apps on sync
53 lines (52 loc) • 2.24 kB
TypeScript
import { Collection } from './collection/index.js';
import { DbClient, DehydratedLiveQueryResult } from './client.js';
import { LiveQueryObserver, LiveQuerySnapshot } from './live-query-observer.js';
import { ChangeMessage } from './types.js';
/**
* 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.js').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>;
}