UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

52 lines (51 loc) • 1.87 kB
import { IncludeWrapper, MaterializeWrapper, ToArrayWrapper } from "./functions.cjs"; import { SingleResult } from "../../types.cjs"; import { QueryBuilder } from "./index.cjs"; import { Context, GetInlineResult } from "./types.cjs"; export declare function toArray<TContext extends Context>(query: QueryBuilder<TContext>): ToArrayWrapper<GetInlineResult<TContext>>; /** * Materialize an includes subquery into a plain value on the parent row. * * - For multi-row subqueries, the parent receives an `Array<T>` snapshot * (equivalent to `toArray()`). * - For `findOne()` subqueries, the parent receives a single `T | undefined` * value — `undefined` when no child matches. * * The snapshot updates reactively: parent rows re-emit when the underlying * children change. * * @example * ```ts * // Multi-row: produces Array<Issue> on each project * select(({ p }) => ({ * ...p, * issues: materialize( * q.from({ i: issues }).where(({ i }) => eq(i.projectId, p.id)), * ), * })) * * // Singleton: produces Author | undefined on each post * select(({ p }) => ({ * ...p, * author: materialize( * q.from({ a: authors }).where(({ a }) => eq(a.id, p.authorId)).findOne(), * ), * })) * ``` */ export declare function materialize<TContext extends Context>(query: QueryBuilder<TContext>): MaterializeWrapper<GetInlineResult<TContext>, TContext extends SingleResult ? true : false>; /** * Includes a correlated subquery as a live child Collection on each parent * row. Use `toArray()` or `materialize()` for inline values instead. * * @example * ```ts * select(({ p }) => ({ * ...p, * issues: include( * q.from({ i: issues }).where(({ i }) => eq(i.projectId, p.id)), * ), * })) * ``` */ export declare function include<TContext extends Context>(query: QueryBuilder<TContext>): IncludeWrapper<TContext>;