@rindle/client 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -5
- package/dist/query.d.ts +96 -31
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +157 -7
- package/dist/query.js.map +1 -1
- package/dist/store.d.ts +11 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +58 -1
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +32 -19
- package/dist/view.js.map +1 -1
- package/package.json +1 -1
- package/src/query.ts +371 -47
- package/src/store.ts +70 -1
- package/src/types.ts +5 -2
- package/src/view.ts +36 -20
package/README.md
CHANGED
|
@@ -8,22 +8,45 @@ backend such as [`@rindle/wasm`](../wasm) (local, in-process) or a remote (netwo
|
|
|
8
8
|
## Schema + queries
|
|
9
9
|
|
|
10
10
|
```ts
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
table,
|
|
13
|
+
string,
|
|
14
|
+
number,
|
|
15
|
+
boolean,
|
|
16
|
+
json,
|
|
17
|
+
createSchema,
|
|
18
|
+
defineRelationships,
|
|
19
|
+
rel,
|
|
20
|
+
extendSchema,
|
|
21
|
+
eq,
|
|
22
|
+
gt,
|
|
23
|
+
ilike,
|
|
24
|
+
or,
|
|
25
|
+
exists,
|
|
26
|
+
} from "@rindle/client";
|
|
12
27
|
|
|
13
28
|
const issue = table("issue")
|
|
14
29
|
.columns({ id: number(), title: string(), priority: number(), meta: json<{ tags: string[] }>() })
|
|
15
30
|
.primaryKey("id");
|
|
16
31
|
|
|
17
|
-
const
|
|
32
|
+
const comment = table("comment")
|
|
33
|
+
.columns({ id: number(), issueId: number(), body: string() })
|
|
34
|
+
.primaryKey("id");
|
|
35
|
+
|
|
36
|
+
const schema = createSchema({ tables: [issue, comment] }); // pass to `new Store(schema, backend)`
|
|
37
|
+
|
|
38
|
+
const rels = defineRelationships({
|
|
39
|
+
issueComments: rel(issue, comment, { id: "issueId" }),
|
|
40
|
+
});
|
|
18
41
|
```
|
|
19
42
|
|
|
20
43
|
- **Operators** are named value-functions: `eq / ne / gt / ge / lt / le / like / ilike / inList / …`.
|
|
21
44
|
- **`where`** is a typed proxy — `where.closed(false)`, `where.priority(gt(3))` — with camelCase
|
|
22
45
|
sugar `whereClosed(false)`. Multiple `where`s are AND-ed.
|
|
23
46
|
- **`or` / `and` / `exists`** are plain top-level functions (no closure): conditions carry their
|
|
24
|
-
table type, e.g. `where(or(issue.priority(gt(8)), exists(comment, { parent: ["id"], child: ["
|
|
25
|
-
- **Nesting** is `sub(alias,
|
|
26
|
-
|
|
47
|
+
table type, e.g. `where(or(issue.priority(gt(8)), exists(comment, { parent: ["id"], child: ["issueId"] })))`.
|
|
48
|
+
- **Nesting** is `sub(alias, relationship, build?)`, or
|
|
49
|
+
`sub(alias, childTable, correlation, build?)` when you want to spell the join inline.
|
|
27
50
|
- **Paging / single-row**: `orderBy(col, dir)`, `limit(n)`, `start(cursor, { exclusive })` (cursor
|
|
28
51
|
paging from a partial row over the sort columns), and `one()`.
|
|
29
52
|
|
|
@@ -38,6 +61,48 @@ const view = store.query.issue.where.id(id).one().materialize();
|
|
|
38
61
|
view.subscribe((row) => render(row)); // row: Issue | null, not Issue[]
|
|
39
62
|
```
|
|
40
63
|
|
|
64
|
+
## Named queries + fragments
|
|
65
|
+
|
|
66
|
+
Remote subscriptions should be named with `defineQuery`. The returned value is callable: it
|
|
67
|
+
validates untrusted args, builds the query, and stamps it with the `(name, args)` wire identity that
|
|
68
|
+
remote backends subscribe to.
|
|
69
|
+
|
|
70
|
+
Fragments are reusable selections over a table. They compose into named queries with `include`
|
|
71
|
+
(same row) and `sub` (related rows), so a React screen can open one root query while child
|
|
72
|
+
components keep owning their own data declarations.
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
import { defineFragment, defineQuery, newQueryBuilder } from "@rindle/client";
|
|
76
|
+
import type { FragmentData, FragmentRef } from "@rindle/client";
|
|
77
|
+
|
|
78
|
+
const q = newQueryBuilder(schema);
|
|
79
|
+
|
|
80
|
+
export const IssueCardFragment = defineFragment(issue, (i) =>
|
|
81
|
+
i
|
|
82
|
+
.select("id", "title")
|
|
83
|
+
.countAs("commentCount", rels.issueComments),
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
export type IssueCardData = FragmentData<typeof IssueCardFragment>;
|
|
87
|
+
export type IssueCardRef = FragmentRef<typeof IssueCardFragment>;
|
|
88
|
+
|
|
89
|
+
export const issuesPageQuery = defineQuery(
|
|
90
|
+
"issuesPage",
|
|
91
|
+
(raw): { limit: number } => {
|
|
92
|
+
const limit = Number((raw as { limit?: unknown }).limit);
|
|
93
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error("bad limit");
|
|
94
|
+
return { limit };
|
|
95
|
+
},
|
|
96
|
+
({ limit }) => q.issue.orderBy("id", "asc").limit(limit).include(IssueCardFragment),
|
|
97
|
+
);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`FragmentData<F>` is the local data shape read by the component that owns `F`. `FragmentRef<F>` is
|
|
101
|
+
the opaque token React passes between components; use `fragmentKey(ref)` from `@rindle/client` or
|
|
102
|
+
`@rindle/react` for stable list keys. Passing a fragment directly to `sub(alias, rel, ChildFragment)`
|
|
103
|
+
creates child refs in the React-facing local data. Passing an inline builder such as
|
|
104
|
+
`sub(alias, rel, (q) => q.include(ChildFragment).orderBy(...))` keeps that child payload inline for
|
|
105
|
+
the parent to read.
|
|
41
106
|
|
|
42
107
|
## Local-only tables
|
|
43
108
|
|
package/dist/query.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type { Ast, Dir } from "./ast.ts";
|
|
1
|
+
import type { Ast, CorrelatedSubquery, Dir, LitValue } from "./ast.ts";
|
|
2
2
|
import type { Arg, Cond } from "./operators.ts";
|
|
3
3
|
import type { AnyCols, ColsMap, ColT, Relationship, RowOf, Schema, TableLike } from "./schema.ts";
|
|
4
4
|
import type { ArrayView, SingularArrayView } from "./view.ts";
|
|
5
|
-
type FieldFn<C extends AnyCols, K extends keyof C, Rels, One extends boolean, Sel extends string> = (arg: Arg<ColT<C[K]>>) => Query<C, Rels, One, Sel>;
|
|
5
|
+
type FieldFn<C extends AnyCols, K extends keyof C, Rels, One extends boolean, Sel extends string, LocalRels> = (arg: Arg<ColT<C[K]>>) => Query<C, Rels, One, Sel, LocalRels>;
|
|
6
6
|
/** `where.closed(false)`, `where.priority(gt(3))`. */
|
|
7
|
-
type WhereProxy<C extends AnyCols, Rels, One extends boolean, Sel extends string> = {
|
|
8
|
-
[K in keyof C]: FieldFn<C, K, Rels, One, Sel>;
|
|
7
|
+
type WhereProxy<C extends AnyCols, Rels, One extends boolean, Sel extends string, LocalRels> = {
|
|
8
|
+
[K in keyof C]: FieldFn<C, K, Rels, One, Sel, LocalRels>;
|
|
9
9
|
};
|
|
10
10
|
/** `whereClosed(false)`, `wherePriority(gt(3))`. */
|
|
11
|
-
type WhereSugar<C extends AnyCols, Rels, One extends boolean, Sel extends string> = {
|
|
12
|
-
[K in keyof C as `where${Capitalize<string & K>}`]: FieldFn<C, K, Rels, One, Sel>;
|
|
11
|
+
type WhereSugar<C extends AnyCols, Rels, One extends boolean, Sel extends string, LocalRels> = {
|
|
12
|
+
[K in keyof C as `where${Capitalize<string & K>}`]: FieldFn<C, K, Rels, One, Sel, LocalRels>;
|
|
13
13
|
};
|
|
14
14
|
/** What `materialize()` returns: singular (`R | null`) for a top-level `.one()`, else plural. */
|
|
15
15
|
type MaterializedView<R, One extends boolean> = One extends true ? SingularArrayView<R> : ArrayView<R>;
|
|
@@ -22,29 +22,30 @@ type MaterializedView<R, One extends boolean> = One extends true ? SingularArray
|
|
|
22
22
|
* narrowing is always sound versus a runtime row that may still carry more.
|
|
23
23
|
*/
|
|
24
24
|
type Projected<C extends AnyCols, Sel extends string> = [Sel] extends [never] ? RowOf<C> : Pick<RowOf<C>, Sel & keyof C>;
|
|
25
|
-
|
|
25
|
+
type FragmentEdge<C extends AnyCols, Rels, Sel extends string, LocalRels> = (q: Query<C, Rels, false, Sel, LocalRels>) => Query<C, Rels, boolean, Sel, LocalRels>;
|
|
26
|
+
interface QueryBase<C extends AnyCols, Rels, One extends boolean, Sel extends string, LocalRels> {
|
|
26
27
|
/** Present when this local query came from `defineQuery`; used as the remote identity. */
|
|
27
28
|
readonly name?: string;
|
|
28
29
|
/** Present when this local query came from `defineQuery`; sent with `name` upstream. */
|
|
29
30
|
readonly args?: unknown;
|
|
30
31
|
/** Condition form — consumes `or()`/`and()`/`exists()`/field conditions (AND-ed across calls).
|
|
31
32
|
* Filters over the FULL column set (`RowOf<C>`), independent of what's `select`ed/masked. */
|
|
32
|
-
where(cond: Cond<RowOf<C>>): Query<C, Rels, One, Sel>;
|
|
33
|
-
orderBy<K extends keyof C>(col: K, dir: Dir): Query<C, Rels, One, Sel>;
|
|
33
|
+
where(cond: Cond<RowOf<C>>): Query<C, Rels, One, Sel, LocalRels>;
|
|
34
|
+
orderBy<K extends keyof C>(col: K, dir: Dir): Query<C, Rels, One, Sel, LocalRels>;
|
|
34
35
|
/** Project a subset of columns (PROJECTION-SUPPORT-DESIGN.md §6, masking §6/§10.6). Chainable
|
|
35
36
|
* (each call unions into `Sel`); omit to select all. Drives what the server syncs, what the
|
|
36
37
|
* view reports, AND — once any column is named — narrows the result row TYPE to exactly the
|
|
37
38
|
* selection (masking). `where`/`orderBy`/`start`/`sub` still see the full column set. */
|
|
38
|
-
select<K extends keyof C & string>(...cols: K[]): Query<C, Rels, One, Sel | K>;
|
|
39
|
-
limit(n: number): Query<C, Rels, One, Sel>;
|
|
39
|
+
select<K extends keyof C & string>(...cols: K[]): Query<C, Rels, One, Sel | K, LocalRels>;
|
|
40
|
+
limit(n: number): Query<C, Rels, One, Sel, LocalRels>;
|
|
40
41
|
/** Cursor paging: start at (or, with `exclusive`, after) the partial `cursor` row over the
|
|
41
42
|
* sort columns. Lowers to a `Skip` in the engine. */
|
|
42
43
|
start(cursor: Partial<RowOf<C>>, opts?: {
|
|
43
44
|
exclusive?: boolean;
|
|
44
|
-
}): Query<C, Rels, One, Sel>;
|
|
45
|
+
}): Query<C, Rels, One, Sel, LocalRels>;
|
|
45
46
|
/** Return a single row: `materialize()` yields a {@link SingularArrayView} (`data: R | null`)
|
|
46
47
|
* and the engine caps the query to `limit = 1`. */
|
|
47
|
-
one(): Query<C, Rels, true, Sel>;
|
|
48
|
+
one(): Query<C, Rels, true, Sel, LocalRels>;
|
|
48
49
|
/** **Merge** a {@link Fragment} into THIS node — Relay's "spread on the same type" (§5). The
|
|
49
50
|
* fragment must be over the same table (enforced in the result type: a fragment over a different
|
|
50
51
|
* table yields `never`, plus a runtime throw). Unions the projection (`Sel | FSel`), folds in the
|
|
@@ -59,7 +60,38 @@ interface QueryBase<C extends AnyCols, Rels, One extends boolean, Sel extends st
|
|
|
59
60
|
* `include` keeps `C` out of any contravariant position — preserving `Query<Concrete>`'s
|
|
60
61
|
* assignability to `Query<AnyCols>` (needed by `Store<ColsMap>`/`QueryRoot`). Same-table is then
|
|
61
62
|
* checked as the mutual-assignability of `C` and `FC` in the return type. */
|
|
62
|
-
include<FC extends AnyCols, FRels = {}, FSel extends string = never>(fragment: Fragment<FC, FRels, FSel>): [C] extends [FC] ? ([FC] extends [C] ? Query<C, Rels & FRels, One, Sel | FSel> : never) : never;
|
|
63
|
+
include<FC extends AnyCols, FRels = {}, FSel extends string = never, FLocalRels = FRels>(fragment: Fragment<FC, FRels, FSel, FLocalRels>): [C] extends [FC] ? ([FC] extends [C] ? Query<C, Rels & FRels, One, Sel | FSel, LocalRels & FLocalRels> : never) : never;
|
|
64
|
+
/** Nest a child fragment as an opaque local-read ref. The coverage query still composes the
|
|
65
|
+
* child's full AST at runtime; the React-facing fragment data exposes only refs at this
|
|
66
|
+
* boundary so the child component owns its local subscription. */
|
|
67
|
+
sub<A extends string, CC extends AnyCols, CRels = {}, CSel extends string = never, CLocalRels = CRels, F extends Fragment<CC, CRels, CSel, CLocalRels> = Fragment<CC, CRels, CSel, CLocalRels>>(alias: A, child: TableLike<CC>, corr: {
|
|
68
|
+
parent: Array<keyof C & string>;
|
|
69
|
+
child: Array<keyof CC & string>;
|
|
70
|
+
}, build: F, edge: FragmentEdge<CC, CRels, CSel, CLocalRels>): Query<C, Rels & {
|
|
71
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
72
|
+
}, One, Sel, LocalRels & {
|
|
73
|
+
[P in A]: Array<FragmentRef<F>>;
|
|
74
|
+
}>;
|
|
75
|
+
sub<A extends string, CC extends AnyCols, CRels = {}, CSel extends string = never, CLocalRels = CRels, F extends Fragment<CC, CRels, CSel, CLocalRels> = Fragment<CC, CRels, CSel, CLocalRels>>(alias: A, child: TableLike<CC>, corr: {
|
|
76
|
+
parent: Array<keyof C & string>;
|
|
77
|
+
child: Array<keyof CC & string>;
|
|
78
|
+
}, build: F): Query<C, Rels & {
|
|
79
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
80
|
+
}, One, Sel, LocalRels & {
|
|
81
|
+
[P in A]: Array<FragmentRef<F>>;
|
|
82
|
+
}>;
|
|
83
|
+
/** Relationship-value form of the fragment-ref overload above. */
|
|
84
|
+
sub<A extends string, CC extends AnyCols, CRels = {}, CSel extends string = never, CLocalRels = CRels, F extends Fragment<CC, CRels, CSel, CLocalRels> = Fragment<CC, CRels, CSel, CLocalRels>>(alias: A, relationship: Relationship<C, CC>, build: F, edge: FragmentEdge<CC, CRels, CSel, CLocalRels>): Query<C, Rels & {
|
|
85
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
86
|
+
}, One, Sel, LocalRels & {
|
|
87
|
+
[P in A]: Array<FragmentRef<F>>;
|
|
88
|
+
}>;
|
|
89
|
+
/** Relationship-value form of the fragment-ref overload above. */
|
|
90
|
+
sub<A extends string, CC extends AnyCols, CRels = {}, CSel extends string = never, CLocalRels = CRels, F extends Fragment<CC, CRels, CSel, CLocalRels> = Fragment<CC, CRels, CSel, CLocalRels>>(alias: A, relationship: Relationship<C, CC>, build: F): Query<C, Rels & {
|
|
91
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
92
|
+
}, One, Sel, LocalRels & {
|
|
93
|
+
[P in A]: Array<FragmentRef<F>>;
|
|
94
|
+
}>;
|
|
63
95
|
/** Nest a child by EXPLICIT correlation (no schema relationship). `alias` is the result key.
|
|
64
96
|
* The child's own projection (`CSel`) masks the nested row, so a fragment spread here
|
|
65
97
|
* contributes exactly the columns it declared. */
|
|
@@ -68,13 +100,17 @@ interface QueryBase<C extends AnyCols, Rels, One extends boolean, Sel extends st
|
|
|
68
100
|
child: Array<keyof CC & string>;
|
|
69
101
|
}, build?: (q: Query<CC>) => Query<CC, CRels, boolean, CSel>): Query<C, Rels & {
|
|
70
102
|
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
71
|
-
}, One, Sel
|
|
103
|
+
}, One, Sel, LocalRels & {
|
|
104
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
105
|
+
}>;
|
|
72
106
|
/** Nest a child by a named {@link Relationship} (`rel(parent, child, {...})`) — the correlation comes
|
|
73
107
|
* from the relationship, so no `{ parent, child }` keys are restated. The relationship must belong to
|
|
74
108
|
* THIS table (its parent columns are checked against `C`). `alias` is still the result key. */
|
|
75
109
|
sub<A extends string, CC extends AnyCols, CRels = {}, CSel extends string = never>(alias: A, relationship: Relationship<C, CC>, build?: (q: Query<CC>) => Query<CC, CRels, boolean, CSel>): Query<C, Rels & {
|
|
76
110
|
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
77
|
-
}, One, Sel
|
|
111
|
+
}, One, Sel, LocalRels & {
|
|
112
|
+
[P in A]: Array<Projected<CC, CSel> & CRels>;
|
|
113
|
+
}>;
|
|
78
114
|
/** Add a **relationship aggregate** — `issue.countAs("commentCount", comment, …)`
|
|
79
115
|
* (`REDUCE-DESIGN.md` §9). Like {@link sub} (explicit correlation, optional child
|
|
80
116
|
* `build` for a filtered `count(child WHERE …)`), but the relationship surfaces a single
|
|
@@ -85,12 +121,16 @@ interface QueryBase<C extends AnyCols, Rels, One extends boolean, Sel extends st
|
|
|
85
121
|
child: Array<keyof CC & string>;
|
|
86
122
|
}, build?: (q: Query<CC>) => Query<CC, unknown>): Query<C, Rels & {
|
|
87
123
|
[P in A]: number;
|
|
88
|
-
}, One, Sel
|
|
124
|
+
}, One, Sel, LocalRels & {
|
|
125
|
+
[P in A]: number;
|
|
126
|
+
}>;
|
|
89
127
|
/** `countAs` by a named {@link Relationship} — like the explicit form, but the correlation comes from
|
|
90
128
|
* `rel(...)` instead of being restated. */
|
|
91
129
|
countAs<A extends string, CC extends AnyCols>(alias: A, relationship: Relationship<C, CC>, build?: (q: Query<CC>) => Query<CC, unknown>): Query<C, Rels & {
|
|
92
130
|
[P in A]: number;
|
|
93
|
-
}, One, Sel
|
|
131
|
+
}, One, Sel, LocalRels & {
|
|
132
|
+
[P in A]: number;
|
|
133
|
+
}>;
|
|
94
134
|
/** The compiled Zero-wire AST (what a backend's `query` consumes). */
|
|
95
135
|
ast(): Ast;
|
|
96
136
|
/** Materialize into a live, typed view. Wired by the Store/backend. A top-level `.one()`
|
|
@@ -98,10 +138,11 @@ interface QueryBase<C extends AnyCols, Rels, One extends boolean, Sel extends st
|
|
|
98
138
|
* projection ({@link Projected}) — full {@link RowOf} until a column is `select`ed. */
|
|
99
139
|
materialize(): MaterializedView<Projected<C, Sel> & Rels, One>;
|
|
100
140
|
}
|
|
101
|
-
export type Query<C extends AnyCols, Rels = {}, One extends boolean = false, Sel extends string = never> = Omit<QueryBase<C, Rels, One, Sel>, "where"> & {
|
|
102
|
-
where: QueryBase<C, Rels, One, Sel>["where"] & WhereProxy<C, Rels, One, Sel>;
|
|
103
|
-
} & WhereSugar<C, Rels, One, Sel>;
|
|
104
|
-
type AnyQuery = Query<any, any, any>;
|
|
141
|
+
export type Query<C extends AnyCols, Rels = {}, One extends boolean = false, Sel extends string = never, LocalRels = Rels> = Omit<QueryBase<C, Rels, One, Sel, LocalRels>, "where"> & {
|
|
142
|
+
where: QueryBase<C, Rels, One, Sel, LocalRels>["where"] & WhereProxy<C, Rels, One, Sel, LocalRels>;
|
|
143
|
+
} & WhereSugar<C, Rels, One, Sel, LocalRels>;
|
|
144
|
+
export type AnyQuery = Query<any, any, any, any, any>;
|
|
145
|
+
export type QueryLocalData<Q extends AnyQuery> = Q extends Query<infer C, any, infer One, infer Sel, infer LocalRels> ? One extends true ? (Projected<C, Sel> & LocalRels) | null : readonly (Projected<C, Sel> & LocalRels)[] : never;
|
|
105
146
|
/** Turn raw, UNTRUSTED wire args into the canonical, typed args a query is built from. Its return
|
|
106
147
|
* type IS the query's args type — written once, it flows to both the client call signature and the
|
|
107
148
|
* `build` step, so there's no second place to restate the shape. */
|
|
@@ -182,6 +223,7 @@ export declare function defineQuery<Q extends AnyQuery>(name: string, build: ()
|
|
|
182
223
|
export declare function defineQuery<Args, Ctx extends readonly unknown[], Q extends AnyQuery>(name: string, build: (args: Args, ...ctx: Ctx) => Q): NamedQuery<Args, Ctx, Q>;
|
|
183
224
|
export declare function defineQuery<Args, Ctx extends readonly unknown[], Q extends AnyQuery>(name: string, validate: QueryValidator<Args>, build: (args: Args, ...ctx: Ctx) => Q): NamedQuery<Args, Ctx, Q>;
|
|
184
225
|
declare const FRAGMENT_BRAND: unique symbol;
|
|
226
|
+
declare const LOCAL_FRAGMENT_REF_BRAND: unique symbol;
|
|
185
227
|
/**
|
|
186
228
|
* A reusable, typed *selection over a table* — Relay's "fragment", promoted to a first-class
|
|
187
229
|
* value. **Two verbs** compose a fragment, on one axis — does its data belong to THIS row or to a
|
|
@@ -198,18 +240,31 @@ declare const FRAGMENT_BRAND: unique symbol;
|
|
|
198
240
|
* fragments assembles ONE {@link Ast} → one materialization → one `/query` — the whole point
|
|
199
241
|
* (no request waterfall; design §1).
|
|
200
242
|
*/
|
|
201
|
-
export interface Fragment<C extends AnyCols, Rels = {}, Sel extends string = never> {
|
|
202
|
-
(q: Query<C>): Query<C, Rels, false, Sel>;
|
|
243
|
+
export interface Fragment<C extends AnyCols, Rels = {}, Sel extends string = never, LocalRels = Rels> {
|
|
244
|
+
(q: Query<C>): Query<C, Rels, false, Sel, LocalRels>;
|
|
203
245
|
readonly table: TableLike<C>;
|
|
204
246
|
readonly [FRAGMENT_BRAND]: true;
|
|
205
247
|
}
|
|
206
248
|
/**
|
|
207
|
-
* The
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* columns it declared. A fragment with no `select` stays the full `RowOf<C> & Rels` (§10.6).
|
|
249
|
+
* The data returned by `useFragment(fragment, ref)`: the fragment's own selected columns plus
|
|
250
|
+
* immediate relationship values. Relationships whose builder is another fragment surface as
|
|
251
|
+
* opaque {@link FragmentRef}s, so child-owned payload is read only by the child fragment reader.
|
|
211
252
|
*/
|
|
212
|
-
export type
|
|
253
|
+
export type FragmentData<F> = F extends Fragment<infer C, unknown, infer Sel, infer LocalRels> ? Projected<C, Sel> & LocalRels : never;
|
|
254
|
+
export interface FragmentCoverage<Q extends AnyQuery = AnyQuery> {
|
|
255
|
+
readonly key: string;
|
|
256
|
+
readonly query: Q;
|
|
257
|
+
}
|
|
258
|
+
export interface LocalFragmentRef<F extends Fragment<any, any, any, any> = Fragment<any, any, any, any>> {
|
|
259
|
+
readonly [LOCAL_FRAGMENT_REF_BRAND]: true;
|
|
260
|
+
readonly source: "local";
|
|
261
|
+
readonly table: string;
|
|
262
|
+
readonly pk: Readonly<Record<string, LitValue>>;
|
|
263
|
+
readonly coverage: FragmentCoverage;
|
|
264
|
+
readonly __fragment?: F;
|
|
265
|
+
}
|
|
266
|
+
/** The opaque token a parent passes to a component that reads {@link FragmentData} for `F`. */
|
|
267
|
+
export type FragmentRef<F> = F extends Fragment<any, any, any, any> ? LocalFragmentRef<F> : never;
|
|
213
268
|
/**
|
|
214
269
|
* Define a co-located, composable {@link Fragment}: a named selection over `table`. The returned
|
|
215
270
|
* value is callable (the `build` transform), so it threads through the existing `sub`/`Rels`
|
|
@@ -222,9 +277,19 @@ export type FragmentRef<F> = F extends Fragment<infer C, infer Rels, infer Sel>
|
|
|
222
277
|
* .sub("author", schema.user, { parent: ["authorId"], child: ["id"] }, UserAvatar));
|
|
223
278
|
* ```
|
|
224
279
|
*/
|
|
225
|
-
export declare function defineFragment<C extends AnyCols, Rels = {}, Sel extends string = never>(table: TableLike<C>, build: (q: Query<C>) => Query<C, Rels, boolean, Sel>): Fragment<C, Rels, Sel>;
|
|
280
|
+
export declare function defineFragment<C extends AnyCols, Rels = {}, Sel extends string = never, LocalRels = Rels>(table: TableLike<C>, build: (q: Query<C>) => Query<C, Rels, boolean, Sel, LocalRels>): Fragment<C, Rels, Sel, LocalRels>;
|
|
226
281
|
/** Runtime guard: is `v` a {@link Fragment} (a `defineFragment` value, not a plain build fn)? */
|
|
227
|
-
export declare function isFragment(v: unknown): v is Fragment<AnyCols, unknown>;
|
|
282
|
+
export declare function isFragment(v: unknown): v is Fragment<AnyCols, unknown, never, unknown>;
|
|
283
|
+
export declare function isFragmentRelationship(rel: CorrelatedSubquery): boolean;
|
|
284
|
+
export declare function fragmentKey(ref: FragmentRef<any>): string;
|
|
285
|
+
export declare function createLocalFragmentRef<F extends Fragment<any, any, any>>(fragment: F, pk: Record<string, LitValue>, coverage: FragmentCoverage): LocalFragmentRef<F>;
|
|
286
|
+
export declare function createLocalFragmentRefForTable<F extends Fragment<any, any, any>>(table: string, pk: Record<string, LitValue>, coverage: FragmentCoverage): LocalFragmentRef<F>;
|
|
287
|
+
export declare function createRootFragmentRef<F extends Fragment<any, any, any>, Q extends AnyQuery>(fragment: F, query: Q, coverageKey?: string): LocalFragmentRef<F>;
|
|
288
|
+
export declare function fragmentAst<F extends Fragment<any, any, any>>(fragment: F): Ast;
|
|
289
|
+
export declare function localFragmentReadAst<F extends Fragment<any, any, any>>(fragment: F, ref: LocalFragmentRef<F>, primaryKeyFor: (table: string) => readonly string[]): Ast;
|
|
290
|
+
export declare function localRootFragmentRefsAst<F extends Fragment<any, any, any>>(fragment: F, query: AnyQuery, primaryKeyFor: (table: string) => readonly string[]): Ast;
|
|
291
|
+
export declare function localQueryReadAst(query: AnyQuery, primaryKeyFor: (table: string) => readonly string[]): Ast;
|
|
292
|
+
export declare function queryFromAst(ast: Ast): AnyQuery;
|
|
228
293
|
/** Throw if `ast` references a local-only table ANYWHERE — the complete form of the {@link queries}
|
|
229
294
|
* root guard (Q1 / E3 client half). The root proxy `get` only sees the table accessed off the
|
|
230
295
|
* builder root; a local table reached through a relationship / `sub` / `countAs` / `exists` CHILD is
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/query.js
CHANGED
|
@@ -27,6 +27,8 @@ export function defineQuery(name, validateOrBuild, maybeBuild) {
|
|
|
27
27
|
}
|
|
28
28
|
// ----------------------------- fragments (FRAGMENT-COMPOSITION-DESIGN.md, Phase 0) -----------------------------
|
|
29
29
|
const FRAGMENT_BRAND = Symbol("rindle.fragment");
|
|
30
|
+
const LOCAL_FRAGMENT_REF_BRAND = Symbol("rindle.localFragmentRef");
|
|
31
|
+
const FRAGMENT_REL_BRAND = Symbol("rindle.fragmentRelationship");
|
|
30
32
|
/**
|
|
31
33
|
* Define a co-located, composable {@link Fragment}: a named selection over `table`. The returned
|
|
32
34
|
* value is callable (the `build` transform), so it threads through the existing `sub`/`Rels`
|
|
@@ -47,6 +49,143 @@ export function defineFragment(table, build) {
|
|
|
47
49
|
export function isFragment(v) {
|
|
48
50
|
return typeof v === "function" && v[FRAGMENT_BRAND] === true;
|
|
49
51
|
}
|
|
52
|
+
function isLocalFragmentRef(v) {
|
|
53
|
+
return typeof v === "object" && v !== null && v[LOCAL_FRAGMENT_REF_BRAND] === true;
|
|
54
|
+
}
|
|
55
|
+
function markFragmentRelationship(rel) {
|
|
56
|
+
Object.defineProperty(rel, FRAGMENT_REL_BRAND, { value: true });
|
|
57
|
+
return rel;
|
|
58
|
+
}
|
|
59
|
+
export function isFragmentRelationship(rel) {
|
|
60
|
+
return rel[FRAGMENT_REL_BRAND] === true;
|
|
61
|
+
}
|
|
62
|
+
export function fragmentKey(ref) {
|
|
63
|
+
if (!isLocalFragmentRef(ref))
|
|
64
|
+
throw new Error("fragmentKey(): expected an opaque fragment ref.");
|
|
65
|
+
return stableKey({ table: ref.table, pk: ref.pk });
|
|
66
|
+
}
|
|
67
|
+
export function createLocalFragmentRef(fragment, pk, coverage) {
|
|
68
|
+
return createLocalFragmentRefForTable(fragment.table[SCHEMA].name, pk, coverage);
|
|
69
|
+
}
|
|
70
|
+
export function createLocalFragmentRefForTable(table, pk, coverage) {
|
|
71
|
+
return {
|
|
72
|
+
[LOCAL_FRAGMENT_REF_BRAND]: true,
|
|
73
|
+
source: "local",
|
|
74
|
+
table,
|
|
75
|
+
pk: { ...pk },
|
|
76
|
+
coverage,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export function createRootFragmentRef(fragment, query, coverageKey = stableKey({
|
|
80
|
+
ast: query.ast(),
|
|
81
|
+
remote: typeof query.name === "string" ? { name: query.name, args: query.args } : null,
|
|
82
|
+
})) {
|
|
83
|
+
const ast = query.ast();
|
|
84
|
+
const table = fragment.table[SCHEMA];
|
|
85
|
+
if (ast.table !== table.name) {
|
|
86
|
+
throw new Error(`useRoot(): the coverage query is over "${ast.table}" but the fragment is over "${table.name}".`);
|
|
87
|
+
}
|
|
88
|
+
const pk = primaryKeyFromWhere(ast, table.primaryKey);
|
|
89
|
+
return createLocalFragmentRef(fragment, pk, { key: coverageKey, query });
|
|
90
|
+
}
|
|
91
|
+
export function fragmentAst(fragment) {
|
|
92
|
+
return childAst(fragment.table, fragment);
|
|
93
|
+
}
|
|
94
|
+
export function localFragmentReadAst(fragment, ref, primaryKeyFor) {
|
|
95
|
+
const table = fragment.table[SCHEMA].name;
|
|
96
|
+
if (ref.table !== table) {
|
|
97
|
+
throw new Error(`useFragment(): the ref is for "${ref.table}" but the fragment is over "${table}".`);
|
|
98
|
+
}
|
|
99
|
+
const ast = localizeFragmentAst(fragmentAst(fragment), primaryKeyFor);
|
|
100
|
+
ast.where = andConditions(pkConditions(ref.pk), ast.where);
|
|
101
|
+
ast.one = true;
|
|
102
|
+
return ast;
|
|
103
|
+
}
|
|
104
|
+
export function localRootFragmentRefsAst(fragment, query, primaryKeyFor) {
|
|
105
|
+
const ast = query.ast();
|
|
106
|
+
const table = fragment.table[SCHEMA].name;
|
|
107
|
+
if (ast.table !== table) {
|
|
108
|
+
throw new Error(`useRoot(): the coverage query is over "${ast.table}" but the fragment is over "${table}".`);
|
|
109
|
+
}
|
|
110
|
+
const out = { ...ast, select: uniqSort([...primaryKeyFor(table)]) };
|
|
111
|
+
delete out.related;
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
export function localQueryReadAst(query, primaryKeyFor) {
|
|
115
|
+
return localizeFragmentAst(query.ast(), primaryKeyFor);
|
|
116
|
+
}
|
|
117
|
+
export function queryFromAst(ast) {
|
|
118
|
+
return {
|
|
119
|
+
ast: () => ast,
|
|
120
|
+
materialize: () => {
|
|
121
|
+
throw new Error("queryFromAst(): materialize() requires a Store; pass this query through Store/React.");
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function primaryKeyFromWhere(ast, primaryKey) {
|
|
126
|
+
const found = new Map();
|
|
127
|
+
collectLiteralEquals(ast.where, found);
|
|
128
|
+
const pk = {};
|
|
129
|
+
for (const col of primaryKey) {
|
|
130
|
+
if (!found.has(col)) {
|
|
131
|
+
throw new Error(`useRoot(): the coverage query must constrain primary key column "${col}" with a literal equality.`);
|
|
132
|
+
}
|
|
133
|
+
pk[col] = found.get(col);
|
|
134
|
+
}
|
|
135
|
+
return pk;
|
|
136
|
+
}
|
|
137
|
+
function collectLiteralEquals(cond, out) {
|
|
138
|
+
if (!cond)
|
|
139
|
+
return;
|
|
140
|
+
if (cond.type === "and") {
|
|
141
|
+
for (const c of cond.conditions)
|
|
142
|
+
collectLiteralEquals(c, out);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (cond.type !== "simple" || cond.op !== "=")
|
|
146
|
+
return;
|
|
147
|
+
const leftCol = cond.left.type === "column" ? cond.left.name : undefined;
|
|
148
|
+
const rightCol = cond.right.type === "column" ? cond.right.name : undefined;
|
|
149
|
+
if (leftCol !== undefined && cond.right.type === "literal")
|
|
150
|
+
out.set(leftCol, cond.right.value);
|
|
151
|
+
else if (rightCol !== undefined && cond.left.type === "literal")
|
|
152
|
+
out.set(rightCol, cond.left.value);
|
|
153
|
+
}
|
|
154
|
+
function pkConditions(pk) {
|
|
155
|
+
return Object.keys(pk)
|
|
156
|
+
.sort()
|
|
157
|
+
.map((name) => fieldCondition(name, pk[name]));
|
|
158
|
+
}
|
|
159
|
+
function andConditions(conditions, tail) {
|
|
160
|
+
const all = tail ? [...conditions, tail] : conditions;
|
|
161
|
+
if (all.length === 0)
|
|
162
|
+
return undefined;
|
|
163
|
+
if (all.length === 1)
|
|
164
|
+
return all[0];
|
|
165
|
+
return { type: "and", conditions: all };
|
|
166
|
+
}
|
|
167
|
+
function localizeFragmentAst(ast, primaryKeyFor) {
|
|
168
|
+
const out = { ...ast };
|
|
169
|
+
if (ast.select !== undefined)
|
|
170
|
+
out.select = uniqSort([...ast.select, ...primaryKeyFor(ast.table)]);
|
|
171
|
+
if (ast.related !== undefined) {
|
|
172
|
+
out.related = ast.related.map((rel) => {
|
|
173
|
+
if (rel.subquery.aggregate !== undefined)
|
|
174
|
+
return rel;
|
|
175
|
+
if (!isFragmentRelationship(rel)) {
|
|
176
|
+
return { ...rel, subquery: localizeFragmentAst(rel.subquery, primaryKeyFor) };
|
|
177
|
+
}
|
|
178
|
+
const childPk = primaryKeyFor(rel.subquery.table);
|
|
179
|
+
const subquery = {
|
|
180
|
+
...rel.subquery,
|
|
181
|
+
select: uniqSort([...childPk]),
|
|
182
|
+
};
|
|
183
|
+
delete subquery.related;
|
|
184
|
+
return markFragmentRelationship({ ...rel, subquery });
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
50
189
|
function emptyState(table) {
|
|
51
190
|
return { table, wheres: [], orderBy: [], related: [], one: false };
|
|
52
191
|
}
|
|
@@ -115,20 +254,30 @@ function childAst(child, build) {
|
|
|
115
254
|
cq = build(cq);
|
|
116
255
|
return cq.ast();
|
|
117
256
|
}
|
|
257
|
+
function composeCorrelatedBuild(build, edge) {
|
|
258
|
+
if (edge === undefined)
|
|
259
|
+
return build;
|
|
260
|
+
if (!isFragment(build)) {
|
|
261
|
+
throw new Error("sub(): an edge callback is only supported when the child build is a Fragment.");
|
|
262
|
+
}
|
|
263
|
+
return (q) => edge(build(q));
|
|
264
|
+
}
|
|
118
265
|
/** Resolve the two `sub`/`countAs`/`exists` call shapes to a common `{ child, corr, build }`:
|
|
119
266
|
* either a named {@link Relationship} (`(rel, build?)`) or an explicit `(child, corr, build?)`. */
|
|
120
|
-
function resolveCorrelated(a, b, c) {
|
|
267
|
+
function resolveCorrelated(a, b, c, d) {
|
|
121
268
|
if (isRelationship(a)) {
|
|
122
269
|
return {
|
|
123
270
|
child: a.child,
|
|
124
271
|
corr: { parent: [...a.correlation.parent], child: [...a.correlation.child] },
|
|
125
|
-
build: b,
|
|
272
|
+
build: composeCorrelatedBuild(b, c),
|
|
273
|
+
fragment: isFragment(b),
|
|
126
274
|
};
|
|
127
275
|
}
|
|
128
276
|
return {
|
|
129
277
|
child: a,
|
|
130
278
|
corr: b,
|
|
131
|
-
build: c,
|
|
279
|
+
build: composeCorrelatedBuild(c, d),
|
|
280
|
+
fragment: isFragment(c),
|
|
132
281
|
};
|
|
133
282
|
}
|
|
134
283
|
// ----------------------------- the merge pass (`include`, FRAGMENT-COMPOSITION-DESIGN §5) -----------
|
|
@@ -215,7 +364,8 @@ function mergeRelatedLists(base, add) {
|
|
|
215
364
|
`same alias with different correlation/table/where/orderBy/limit. Give them distinct aliases ` +
|
|
216
365
|
`or align them (FRAGMENT-COMPOSITION-DESIGN §10.2).`);
|
|
217
366
|
}
|
|
218
|
-
|
|
367
|
+
const merged = { ...existing, subquery: mergeSubqueryAst(existing.subquery, csq.subquery) };
|
|
368
|
+
byAlias.set(alias, isFragmentRelationship(existing) || isFragmentRelationship(csq) ? markFragmentRelationship(merged) : merged);
|
|
219
369
|
}
|
|
220
370
|
return [...byAlias.values()].sort((a, b) => {
|
|
221
371
|
const x = aliasOf(a);
|
|
@@ -270,15 +420,15 @@ guardAst) {
|
|
|
270
420
|
const fragAst = childAst(fragTable, fragment);
|
|
271
421
|
return makeQuery(meta, mergeIncludedFragment(s, fragAst), onMat, named, guardAst);
|
|
272
422
|
},
|
|
273
|
-
sub: (alias, childOrRel, b, c) => {
|
|
274
|
-
const { child, corr, build } = resolveCorrelated(childOrRel, b, c);
|
|
423
|
+
sub: (alias, childOrRel, b, c, d) => {
|
|
424
|
+
const { child, corr, build, fragment } = resolveCorrelated(childOrRel, b, c, d);
|
|
275
425
|
const sub = childAst(child, build);
|
|
276
426
|
sub.alias = alias;
|
|
277
427
|
const csq = {
|
|
278
428
|
correlation: { parentField: corr.parent, childField: corr.child },
|
|
279
429
|
subquery: sub,
|
|
280
430
|
};
|
|
281
|
-
return next({ related: [...s.related, csq] });
|
|
431
|
+
return next({ related: [...s.related, fragment ? markFragmentRelationship(csq) : csq] });
|
|
282
432
|
},
|
|
283
433
|
countAs: (alias, childOrRel, b, c) => {
|
|
284
434
|
// Same correlated-child mechanism as `sub`, but mark the child a `count` aggregate:
|