@tanstack/db
Version:
A reactive client store for building super fast apps on sync
52 lines (51 loc) • 2.71 kB
TypeScript
import { collectCollectionSources, OrderBy, QueryIR } from '../ir.js';
import { RootStreamBuilder } from '@tanstack/db-ivm';
import { Collection } from '../../collection/index.js';
import { ChangeMessage } from '../../types.js';
import { InitialQueryBuilder, QueryBuilder } from '../builder/index.js';
import { Context } from '../builder/types.js';
/**
* Helper function to extract collections from a compiled query.
* Traverses the query IR to find all collection references.
* Maps collections by their ID (not alias) as expected by the compiler.
*/
export declare function extractCollectionsFromQuery(query: QueryIR): Record<string, Collection<any, any, any>>;
export { collectCollectionSources as extractCollectionSources };
/**
* Helper function to extract the collection that is referenced in the query's FROM clause.
* The FROM clause may refer directly to a collection or indirectly to a subquery.
*/
export declare function extractCollectionFromSource(query: any): Collection<any, any, any>;
/**
* Builds a query IR from a config object that contains either a query builder
* function or a QueryBuilder instance.
*/
export declare function buildQueryFromConfig<TContext extends Context>(config: {
query: ((q: InitialQueryBuilder) => QueryBuilder<TContext>) | QueryBuilder<TContext>;
requireObjectResult?: boolean;
}): QueryIR;
/**
* Helper function to send changes to a D2 input stream.
* Converts ChangeMessages to D2 MultiSet data and sends to the input.
*
* @returns The number of multiset entries sent
*/
export declare function sendChangesToInput(input: RootStreamBuilder<unknown>, changes: Iterable<ChangeMessage>): number;
/** Splits updates into a delete of the old value and an insert of the new value */
export declare function splitUpdates<T extends object = Record<string, unknown>, TKey extends string | number = string | number>(changes: Iterable<ChangeMessage<T, TKey>>): Generator<ChangeMessage<T, TKey>>;
/** Keep each source key at one exact D2 contribution. */
export declare function reconcileChangesForD2<T extends object, TKey extends string | number>(changes: Array<ChangeMessage<T, TKey>>, sentRows: Map<TKey, T>): Array<ChangeMessage<T, TKey>>;
/**
* Compute orderBy/limit subscription hints for an alias.
* Returns normalised orderBy and effective limit suitable for passing to
* `subscribeChanges`, or `undefined` values when the query's orderBy cannot
* be scoped to the given alias (e.g. cross-collection refs or aggregates).
*/
export declare function computeSubscriptionOrderByHints(query: {
orderBy?: OrderBy;
limit?: number;
offset?: number;
}, alias: string): {
orderBy: OrderBy | undefined;
limit: number | undefined;
};