Skip to content

Commit b99158d

Browse files
kevin-dpclaude
andcommitted
docs: document materialize() helper for includes subqueries
- Add a "materialize" subsection to the Includes guide in live-queries.md with array vs singleton (findOne) examples and notes on reactivity and expression-context restrictions. - Regenerate reference docs via pnpm generate-docs, which surfaces the new materialize() entry plus other previously-stale references. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent ca8aa0d commit b99158d

150 files changed

Lines changed: 2436 additions & 334 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/guides/live-queries.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,48 @@ const projectsWithIssues = createLiveQueryCollection((q) =>
12521252

12531253
With `toArray()`, the project row is re-emitted whenever its issues change. Without it, the child `Collection` updates independently.
12541254

1255+
### materialize
1256+
1257+
`materialize()` is a single helper that covers both multi-row and single-row includes:
1258+
1259+
- When the wrapped subquery returns multiple rows, the parent receives `Array<T>` — same shape as `toArray()`.
1260+
- When the wrapped subquery ends in `.findOne()`, the parent receives `T | undefined` — a single object, or `undefined` when no child matches.
1261+
1262+
This spares callers from unwrapping a singleton array whenever they know the child query yields at most one row. Reactive semantics match `toArray()`: the parent row is re-emitted whenever the underlying children change, including insert / update / delete transitions and rows moving in or out of a match.
1263+
1264+
```ts
1265+
import { createLiveQueryCollection, eq, materialize } from '@tanstack/db'
1266+
1267+
// Multi-row → issues: Array<Issue>
1268+
const projectsWithIssues = createLiveQueryCollection((q) =>
1269+
q.from({ p: projectsCollection }).select(({ p }) => ({
1270+
...p,
1271+
issues: materialize(
1272+
q
1273+
.from({ i: issuesCollection })
1274+
.where(({ i }) => eq(i.projectId, p.id)),
1275+
),
1276+
})),
1277+
)
1278+
1279+
// Singleton → project: Project | undefined
1280+
const issuesWithProject = createLiveQueryCollection((q) =>
1281+
q.from({ i: issuesCollection }).select(({ i }) => ({
1282+
...i,
1283+
project: materialize(
1284+
q
1285+
.from({ p: projectsCollection })
1286+
.where(({ p }) => eq(p.id, i.projectId))
1287+
.findOne(),
1288+
),
1289+
})),
1290+
)
1291+
```
1292+
1293+
The singleton vs. array result type is inferred from whether the wrapped query ends in `.findOne()` — no extra type annotation is required.
1294+
1295+
Like `toArray()`, `materialize()` is only valid as a top-level value in `.select()` — it cannot be nested inside expression helpers such as `coalesce()` or `eq()`.
1296+
12551297
### Aggregates
12561298

12571299
You can use aggregate functions in child queries. Aggregates are computed per parent:

docs/reference/@tanstack/namespaces/IR/classes/Aggregate.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ title: Aggregate
55

66
# Class: Aggregate\<T\>
77

8-
Defined in: [packages/db/src/query/ir.ts:129](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L129)
8+
Defined in: [packages/db/src/query/ir.ts:166](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L166)
99

1010
## Extends
1111

@@ -25,7 +25,7 @@ Defined in: [packages/db/src/query/ir.ts:129](https://github.com/TanStack/db/blo
2525
new Aggregate<T>(name, args): Aggregate<T>;
2626
```
2727

28-
Defined in: [packages/db/src/query/ir.ts:131](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L131)
28+
Defined in: [packages/db/src/query/ir.ts:168](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L168)
2929

3030
#### Parameters
3131

@@ -55,7 +55,7 @@ BaseExpression<T>.constructor
5555
readonly __returnType: T;
5656
```
5757

58-
Defined in: [packages/db/src/query/ir.ts:73](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L73)
58+
Defined in: [packages/db/src/query/ir.ts:82](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L82)
5959

6060
**`Internal`**
6161

@@ -75,7 +75,7 @@ BaseExpression.__returnType
7575
args: BasicExpression<any>[];
7676
```
7777

78-
Defined in: [packages/db/src/query/ir.ts:133](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L133)
78+
Defined in: [packages/db/src/query/ir.ts:170](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L170)
7979

8080
***
8181

@@ -85,7 +85,7 @@ Defined in: [packages/db/src/query/ir.ts:133](https://github.com/TanStack/db/blo
8585
name: string;
8686
```
8787

88-
Defined in: [packages/db/src/query/ir.ts:132](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L132)
88+
Defined in: [packages/db/src/query/ir.ts:169](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L169)
8989

9090
***
9191

@@ -95,7 +95,7 @@ Defined in: [packages/db/src/query/ir.ts:132](https://github.com/TanStack/db/blo
9595
type: "agg";
9696
```
9797

98-
Defined in: [packages/db/src/query/ir.ts:130](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L130)
98+
Defined in: [packages/db/src/query/ir.ts:167](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L167)
9999

100100
#### Overrides
101101

docs/reference/@tanstack/namespaces/IR/classes/CollectionRef.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ title: CollectionRef
55

66
# Class: CollectionRef
77

8-
Defined in: [packages/db/src/query/ir.ts:76](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L76)
8+
Defined in: [packages/db/src/query/ir.ts:85](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L85)
99

1010
## Extends
1111

@@ -19,7 +19,7 @@ Defined in: [packages/db/src/query/ir.ts:76](https://github.com/TanStack/db/blob
1919
new CollectionRef(collection, alias): CollectionRef;
2020
```
2121

22-
Defined in: [packages/db/src/query/ir.ts:78](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L78)
22+
Defined in: [packages/db/src/query/ir.ts:87](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L87)
2323

2424
#### Parameters
2525

@@ -49,7 +49,7 @@ BaseExpression.constructor
4949
readonly __returnType: any;
5050
```
5151

52-
Defined in: [packages/db/src/query/ir.ts:73](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L73)
52+
Defined in: [packages/db/src/query/ir.ts:82](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L82)
5353

5454
**`Internal`**
5555

@@ -69,7 +69,7 @@ BaseExpression.__returnType
6969
alias: string;
7070
```
7171

72-
Defined in: [packages/db/src/query/ir.ts:80](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L80)
72+
Defined in: [packages/db/src/query/ir.ts:89](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L89)
7373

7474
***
7575

@@ -79,7 +79,7 @@ Defined in: [packages/db/src/query/ir.ts:80](https://github.com/TanStack/db/blob
7979
collection: CollectionImpl;
8080
```
8181

82-
Defined in: [packages/db/src/query/ir.ts:79](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L79)
82+
Defined in: [packages/db/src/query/ir.ts:88](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L88)
8383

8484
***
8585

@@ -89,7 +89,7 @@ Defined in: [packages/db/src/query/ir.ts:79](https://github.com/TanStack/db/blob
8989
type: "collectionRef";
9090
```
9191

92-
Defined in: [packages/db/src/query/ir.ts:77](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L77)
92+
Defined in: [packages/db/src/query/ir.ts:86](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L86)
9393

9494
#### Overrides
9595

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
---
2+
id: ConditionalSelect
3+
title: ConditionalSelect
4+
---
5+
6+
# Class: ConditionalSelect
7+
8+
Defined in: [packages/db/src/query/ir.ts:204](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L204)
9+
10+
## Extends
11+
12+
- `BaseExpression`
13+
14+
## Constructors
15+
16+
### Constructor
17+
18+
```ts
19+
new ConditionalSelect(branches, defaultValue?): ConditionalSelect;
20+
```
21+
22+
Defined in: [packages/db/src/query/ir.ts:206](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L206)
23+
24+
#### Parameters
25+
26+
##### branches
27+
28+
[`ConditionalSelectBranch`](../type-aliases/ConditionalSelectBranch.md)[]
29+
30+
##### defaultValue?
31+
32+
[`SelectValueExpression`](../type-aliases/SelectValueExpression.md)
33+
34+
#### Returns
35+
36+
`ConditionalSelect`
37+
38+
#### Overrides
39+
40+
```ts
41+
BaseExpression.constructor
42+
```
43+
44+
## Properties
45+
46+
### \_\_returnType
47+
48+
```ts
49+
readonly __returnType: any;
50+
```
51+
52+
Defined in: [packages/db/src/query/ir.ts:82](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L82)
53+
54+
**`Internal`**
55+
56+
- Type brand for TypeScript inference
57+
58+
#### Inherited from
59+
60+
```ts
61+
BaseExpression.__returnType
62+
```
63+
64+
***
65+
66+
### branches
67+
68+
```ts
69+
branches: ConditionalSelectBranch[];
70+
```
71+
72+
Defined in: [packages/db/src/query/ir.ts:207](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L207)
73+
74+
***
75+
76+
### defaultValue?
77+
78+
```ts
79+
optional defaultValue: SelectValueExpression;
80+
```
81+
82+
Defined in: [packages/db/src/query/ir.ts:208](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L208)
83+
84+
***
85+
86+
### type
87+
88+
```ts
89+
type: "conditionalSelect";
90+
```
91+
92+
Defined in: [packages/db/src/query/ir.ts:205](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L205)
93+
94+
#### Overrides
95+
96+
```ts
97+
BaseExpression.type
98+
```

docs/reference/@tanstack/namespaces/IR/classes/Func.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ title: Func
55

66
# Class: Func\<T\>
77

8-
Defined in: [packages/db/src/query/ir.ts:114](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L114)
8+
Defined in: [packages/db/src/query/ir.ts:151](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L151)
99

1010
## Extends
1111

@@ -25,7 +25,7 @@ Defined in: [packages/db/src/query/ir.ts:114](https://github.com/TanStack/db/blo
2525
new Func<T>(name, args): Func<T>;
2626
```
2727

28-
Defined in: [packages/db/src/query/ir.ts:116](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L116)
28+
Defined in: [packages/db/src/query/ir.ts:153](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L153)
2929

3030
#### Parameters
3131

@@ -55,7 +55,7 @@ BaseExpression<T>.constructor
5555
readonly __returnType: T;
5656
```
5757

58-
Defined in: [packages/db/src/query/ir.ts:73](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L73)
58+
Defined in: [packages/db/src/query/ir.ts:82](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L82)
5959

6060
**`Internal`**
6161

@@ -75,7 +75,7 @@ BaseExpression.__returnType
7575
args: BasicExpression<any>[];
7676
```
7777

78-
Defined in: [packages/db/src/query/ir.ts:118](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L118)
78+
Defined in: [packages/db/src/query/ir.ts:155](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L155)
7979

8080
***
8181

@@ -85,7 +85,7 @@ Defined in: [packages/db/src/query/ir.ts:118](https://github.com/TanStack/db/blo
8585
name: string;
8686
```
8787

88-
Defined in: [packages/db/src/query/ir.ts:117](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L117)
88+
Defined in: [packages/db/src/query/ir.ts:154](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L154)
8989

9090
***
9191

@@ -95,7 +95,7 @@ Defined in: [packages/db/src/query/ir.ts:117](https://github.com/TanStack/db/blo
9595
type: "func";
9696
```
9797

98-
Defined in: [packages/db/src/query/ir.ts:115](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L115)
98+
Defined in: [packages/db/src/query/ir.ts:152](https://github.com/TanStack/db/blob/main/packages/db/src/query/ir.ts#L152)
9999

100100
#### Overrides
101101

0 commit comments

Comments
 (0)