@tanstack/db
Version:
A reactive client store for building super fast apps on sync
52 lines (51 loc) • 1.87 kB
text/typescript
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>;