UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

52 lines (51 loc) 2.71 kB
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; };