@rindle/client 0.1.6 → 0.3.1
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/ast.d.ts +11 -0
- package/dist/ast.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/operators.d.ts +5 -0
- package/dist/operators.d.ts.map +1 -1
- package/dist/operators.js +5 -0
- package/dist/operators.js.map +1 -1
- package/dist/query.d.ts +155 -34
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +213 -8
- package/dist/query.js.map +1 -1
- package/dist/resolve.d.ts +40 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +109 -0
- package/dist/resolve.js.map +1 -0
- package/dist/store.d.ts +58 -15
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +221 -26
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +41 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/view.d.ts +43 -5
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +109 -31
- package/dist/view.js.map +1 -1
- package/package.json +1 -1
- package/src/ast.ts +11 -0
- package/src/index.ts +5 -0
- package/src/operators.ts +5 -0
- package/src/query.ts +505 -52
- package/src/resolve.ts +136 -0
- package/src/store.ts +227 -35
- package/src/types.ts +40 -3
- package/src/view.ts +127 -30
package/dist/view.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColType, FlatChange, ResultType, WireSchema } from "./types.ts";
|
|
1
|
+
import type { ColType, FlatChange, QueryId, ResultType, WireSchema } from "./types.ts";
|
|
2
2
|
/** Per-level column types (parallel to the WireSchema), used to JSON.parse json columns on
|
|
3
3
|
* projection. Built by the Store from the typed schema; absent ⇒ no parsing (bare values). */
|
|
4
4
|
export interface ViewTypes {
|
|
@@ -9,6 +9,15 @@ export interface ViewTypes {
|
|
|
9
9
|
export interface ArrayView<R> {
|
|
10
10
|
/** The current materialized result (reference-stable where data is unchanged). */
|
|
11
11
|
readonly data: readonly R[];
|
|
12
|
+
/** The engine query id the Store assigned this view (1:1 with the view). The same `qid` the raw
|
|
13
|
+
* change stream ({@link Store.subscribeChanges}) tags each frame with, so a consumer can
|
|
14
|
+
* correlate this query with its `ChangeEvent`s (e.g. to bind a narrator) straight off
|
|
15
|
+
* `materialize(query).qid` — no separate handle needed. */
|
|
16
|
+
readonly qid: QueryId;
|
|
17
|
+
/** The query's view `WireSchema` (the position→name source for {@link resolveChange}), captured
|
|
18
|
+
* from its `hello` frame. `null` while PENDING — a remote backend's `hello` arrives async; an
|
|
19
|
+
* in-process backend (wasm/replica) populates it synchronously during `materialize`. */
|
|
20
|
+
readonly schema: WireSchema | null;
|
|
12
21
|
/** The query's SERVER-CHANNEL state (`unknown` while loading, `complete` once server-authoritative;
|
|
13
22
|
* the `error` variant is reserved and currently unproduced). A pending optimistic mutation no
|
|
14
23
|
* longer moves this — it is a separate axis (FOLDED-MUTATIONS-DESIGN §7). `complete` for backends
|
|
@@ -26,6 +35,10 @@ export interface ArrayView<R> {
|
|
|
26
35
|
export interface SingularArrayView<R> {
|
|
27
36
|
/** The single current row, or `null` when the query matches nothing. */
|
|
28
37
|
readonly data: R | null;
|
|
38
|
+
/** The engine query id — see {@link ArrayView.qid}. */
|
|
39
|
+
readonly qid: QueryId;
|
|
40
|
+
/** The query's view `WireSchema` — see {@link ArrayView.schema}. */
|
|
41
|
+
readonly schema: WireSchema | null;
|
|
29
42
|
/** The query's lifecycle state — see {@link ArrayView.resultType}. */
|
|
30
43
|
readonly resultType: ResultType;
|
|
31
44
|
/** Subscribe; fires immediately with the current row, then after each applied batch (and after
|
|
@@ -40,12 +53,15 @@ export declare class SingularView<R> implements SingularArrayView<R> {
|
|
|
40
53
|
private readonly inner;
|
|
41
54
|
constructor(inner: ArrayView<R>);
|
|
42
55
|
get data(): R | null;
|
|
56
|
+
get qid(): QueryId;
|
|
57
|
+
get schema(): WireSchema | null;
|
|
43
58
|
get resultType(): ResultType;
|
|
44
59
|
subscribe(listener: (data: R | null) => void): () => void;
|
|
45
60
|
destroy(): void;
|
|
46
61
|
}
|
|
47
62
|
export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
|
|
48
|
-
private
|
|
63
|
+
private readonly _qid;
|
|
64
|
+
private _schema;
|
|
49
65
|
private types?;
|
|
50
66
|
private seeded;
|
|
51
67
|
private top;
|
|
@@ -53,7 +69,9 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
|
|
|
53
69
|
private cached;
|
|
54
70
|
private rt;
|
|
55
71
|
private readonly listeners;
|
|
56
|
-
constructor(schema?: WireSchema, types?: ViewTypes);
|
|
72
|
+
constructor(schema?: WireSchema, types?: ViewTypes, qid?: QueryId);
|
|
73
|
+
get qid(): QueryId;
|
|
74
|
+
get schema(): WireSchema | null;
|
|
57
75
|
get resultType(): ResultType;
|
|
58
76
|
/** Set the query's lifecycle state (the Store routes the backend's per-query signal here).
|
|
59
77
|
* Notifies subscribers on a change so a status-bound listener (React `useQueryStatus`) re-reads,
|
|
@@ -72,14 +90,34 @@ export declare class FlatArrayView<R = unknown> implements ArrayView<R> {
|
|
|
72
90
|
seed(rows: readonly R[]): void;
|
|
73
91
|
/** Apply a batch (the hydrate snapshot or one transaction's events) in order, then
|
|
74
92
|
* notify subscribers once. Order is significant (FLAT-CHANGES-DESIGN.md §5.4). A no-op
|
|
75
|
-
* while pending (changes never precede the `hello` that resets the schema).
|
|
76
|
-
|
|
93
|
+
* while pending (changes never precede the `hello` that resets the schema).
|
|
94
|
+
*
|
|
95
|
+
* `enrichRemoves` ⇒ before a removed node is dropped, reconstruct its full subtree and attach it
|
|
96
|
+
* to the `remove` op's `node` (in place, so the same event object the Store fans out to its
|
|
97
|
+
* change subscribers carries it). Off by default — paid only when a consumer asked for it, and
|
|
98
|
+
* only on a real eviction (an rc-decrement that keeps the row leaves `node` absent).
|
|
99
|
+
*
|
|
100
|
+
* `deferNotify` ⇒ fold but do NOT notify; the caller is responsible for calling {@link flush}
|
|
101
|
+
* later. The Store uses this to fold every view in one commit before notifying any subscriber
|
|
102
|
+
* (cross-view-atomic notification — `Store.onCommitBoundary`); standalone use leaves it off, so
|
|
103
|
+
* a bare view still fires its subscribers after each applied batch.
|
|
104
|
+
*
|
|
105
|
+
* Returns whether the batch changed the view (so a deferring caller knows it must be flushed). */
|
|
106
|
+
applyChanges(events: FlatChange[], enrichRemoves?: boolean, deferNotify?: boolean): boolean;
|
|
107
|
+
/** Notify subscribers with the current data. The deferred half of {@link applyChanges} (when
|
|
108
|
+
* `deferNotify` was set): the Store calls this at the commit-notify barrier — after every view
|
|
109
|
+
* touched by the same commit has folded — so a subscriber that re-reads a sibling view inside
|
|
110
|
+
* its callback observes post-commit data, never a torn mid-commit state. */
|
|
111
|
+
flush(): void;
|
|
77
112
|
get data(): readonly R[];
|
|
78
113
|
subscribe(listener: (data: readonly R[]) => void): () => void;
|
|
79
114
|
destroy(): void;
|
|
80
115
|
private applyAt;
|
|
81
116
|
private applyOp;
|
|
82
117
|
private applyAdd;
|
|
118
|
+
/** Drop one path to `row`. Returns the evicted {@link Node} (its full subtree intact) when the
|
|
119
|
+
* last path went away — `null` when another path still holds it (rc decremented, nothing left
|
|
120
|
+
* the result). */
|
|
83
121
|
private applyRemove;
|
|
84
122
|
private applyEdit;
|
|
85
123
|
private project;
|
package/dist/view.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAU,UAAU,EAAY,UAAU,EAAa,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAU,OAAO,EAAE,UAAU,EAAY,UAAU,EAAa,MAAM,YAAY,CAAC;AAEpH;+FAC+F;AAC/F,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC;AAED,6DAA6D;AAC7D,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5B;;;gEAG4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB;;6FAEyF;IACzF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC;;;gEAG4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;+EAC2E;IAC3E,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;wFAEwF;AACxF,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;wCACoC;IACpC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;mFACmF;AACnF,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAI/B,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAEnB;IAED,IAAI,GAAG,IAAI,OAAO,CAEjB;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAIzD,OAAO,IAAI,IAAI;CAGhB;AAyED,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IAG7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAI/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAY;IAI1B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAA6B;IAI3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAEzD,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,GAAE,OAAW;IAMpE,IAAI,GAAG,IAAI,OAAO,CAEjB;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAE9B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED;;wDAEoD;IACpD,aAAa,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAMnC;;;kGAG8F;IAC9F,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI;IASlD;;;;gGAI4F;IAC5F,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI;IAI9B;;;;;;;;;;;;;;uGAcmG;IACnG,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,aAAa,UAAQ,EAAE,WAAW,UAAQ,GAAG,OAAO;IAUvF;;;iFAG6E;IAC7E,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,SAAS,CAAC,EAAE,CAMvB;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ7D,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IAUhB;;uBAEmB;IACnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,SAAS;IAwDjB,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,MAAM;CAIf"}
|
package/dist/view.js
CHANGED
|
@@ -18,6 +18,12 @@ export class SingularView {
|
|
|
18
18
|
get data() {
|
|
19
19
|
return this.inner.data[0] ?? null;
|
|
20
20
|
}
|
|
21
|
+
get qid() {
|
|
22
|
+
return this.inner.qid;
|
|
23
|
+
}
|
|
24
|
+
get schema() {
|
|
25
|
+
return this.inner.schema;
|
|
26
|
+
}
|
|
21
27
|
get resultType() {
|
|
22
28
|
return this.inner.resultType;
|
|
23
29
|
}
|
|
@@ -67,11 +73,35 @@ function buildNode(wnode, schema) {
|
|
|
67
73
|
function cloneNode(n) {
|
|
68
74
|
return { row: n.row.slice(), rc: n.rc, rels: n.rels.map((r) => r.map(cloneNode)), out: null };
|
|
69
75
|
}
|
|
76
|
+
/** Reconstruct a positional {@link WireNode} (row + its populated child slots) from a maintained
|
|
77
|
+
* {@link Node} — the inverse of {@link buildNode}. Used to attach a removed subtree to a `remove`
|
|
78
|
+
* op so a change consumer (a narrator) can resolve its nested subs, which a bare positional remove
|
|
79
|
+
* (just the leaving row) cannot carry. Only in-view (`child !== null`), non-empty slots are emitted,
|
|
80
|
+
* matching how an `add` node ships only populated relationships. */
|
|
81
|
+
function toWireNode(node, schema) {
|
|
82
|
+
const rels = [];
|
|
83
|
+
for (const rel of schema.relationships) {
|
|
84
|
+
if (rel.child === null)
|
|
85
|
+
continue;
|
|
86
|
+
const childList = node.rels[rel.slot] ?? [];
|
|
87
|
+
if (childList.length === 0)
|
|
88
|
+
continue;
|
|
89
|
+
rels.push({ rel: rel.slot, children: childList.map((c) => toWireNode(c, rel.child)) });
|
|
90
|
+
}
|
|
91
|
+
return { row: node.row, rels };
|
|
92
|
+
}
|
|
93
|
+
function rowsEqual(a, b) {
|
|
94
|
+
return a.length === b.length && a.every((v, i) => Object.is(v, b[i]));
|
|
95
|
+
}
|
|
70
96
|
const EMPTY = Object.freeze([]);
|
|
71
97
|
export class FlatArrayView {
|
|
98
|
+
// The engine query id (Store-assigned, 1:1 with this view), exposed read-only via {@link qid}.
|
|
99
|
+
// `0` ⇒ unbound (a bare view never registered with a Store); the Store passes it at construction.
|
|
100
|
+
_qid;
|
|
72
101
|
// `null` ⇒ PENDING (no schema yet): a remote backend's `hello` arrives async, so the view
|
|
73
102
|
// exists (and reads as `[]`) before its schema lands. Set by `reset` (first hello / re-hydrate).
|
|
74
|
-
schema
|
|
103
|
+
// Exposed read-only via the {@link schema} getter (the position→name source for `resolveChange`).
|
|
104
|
+
_schema;
|
|
75
105
|
types;
|
|
76
106
|
// SSR first-paint seed (SSR-DESIGN.md §6): pre-projected rows installed by `seed`, returned by
|
|
77
107
|
// `data` WHILE pending (no live schema yet). Cleared on `reset` — the first live `hello` —
|
|
@@ -85,9 +115,16 @@ export class FlatArrayView {
|
|
|
85
115
|
// (the optimistic backend: `unknown` until hydrated, etc.).
|
|
86
116
|
rt = "complete";
|
|
87
117
|
listeners = new Set();
|
|
88
|
-
constructor(schema, types) {
|
|
89
|
-
this.
|
|
118
|
+
constructor(schema, types, qid = 0) {
|
|
119
|
+
this._schema = schema ?? null;
|
|
90
120
|
this.types = types;
|
|
121
|
+
this._qid = qid;
|
|
122
|
+
}
|
|
123
|
+
get qid() {
|
|
124
|
+
return this._qid;
|
|
125
|
+
}
|
|
126
|
+
get schema() {
|
|
127
|
+
return this._schema;
|
|
91
128
|
}
|
|
92
129
|
get resultType() {
|
|
93
130
|
return this.rt;
|
|
@@ -107,7 +144,7 @@ export class FlatArrayView {
|
|
|
107
144
|
* the caller's view reference and its subscribers survive a re-subscribe. Does NOT notify —
|
|
108
145
|
* the snapshot that follows (`applyChanges`) does, avoiding an empty-then-filled flicker. */
|
|
109
146
|
reset(schema, types) {
|
|
110
|
-
this.
|
|
147
|
+
this._schema = schema;
|
|
111
148
|
this.types = types;
|
|
112
149
|
this.seeded = null; // live data takes over; the seed was first-paint only
|
|
113
150
|
this.top = [];
|
|
@@ -124,21 +161,45 @@ export class FlatArrayView {
|
|
|
124
161
|
}
|
|
125
162
|
/** Apply a batch (the hydrate snapshot or one transaction's events) in order, then
|
|
126
163
|
* notify subscribers once. Order is significant (FLAT-CHANGES-DESIGN.md §5.4). A no-op
|
|
127
|
-
* while pending (changes never precede the `hello` that resets the schema).
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
164
|
+
* while pending (changes never precede the `hello` that resets the schema).
|
|
165
|
+
*
|
|
166
|
+
* `enrichRemoves` ⇒ before a removed node is dropped, reconstruct its full subtree and attach it
|
|
167
|
+
* to the `remove` op's `node` (in place, so the same event object the Store fans out to its
|
|
168
|
+
* change subscribers carries it). Off by default — paid only when a consumer asked for it, and
|
|
169
|
+
* only on a real eviction (an rc-decrement that keeps the row leaves `node` absent).
|
|
170
|
+
*
|
|
171
|
+
* `deferNotify` ⇒ fold but do NOT notify; the caller is responsible for calling {@link flush}
|
|
172
|
+
* later. The Store uses this to fold every view in one commit before notifying any subscriber
|
|
173
|
+
* (cross-view-atomic notification — `Store.onCommitBoundary`); standalone use leaves it off, so
|
|
174
|
+
* a bare view still fires its subscribers after each applied batch.
|
|
175
|
+
*
|
|
176
|
+
* Returns whether the batch changed the view (so a deferring caller knows it must be flushed). */
|
|
177
|
+
applyChanges(events, enrichRemoves = false, deferNotify = false) {
|
|
178
|
+
if (this._schema === null)
|
|
179
|
+
return false;
|
|
180
|
+
let changed = false;
|
|
131
181
|
for (const e of events)
|
|
132
|
-
this.applyAt(this.top, this.
|
|
182
|
+
changed = this.applyAt(this.top, this._schema, e.path, e.op, 0, enrichRemoves) || changed;
|
|
183
|
+
if (!changed)
|
|
184
|
+
return false;
|
|
133
185
|
this.dirty = true;
|
|
186
|
+
if (!deferNotify)
|
|
187
|
+
this.notify();
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
/** Notify subscribers with the current data. The deferred half of {@link applyChanges} (when
|
|
191
|
+
* `deferNotify` was set): the Store calls this at the commit-notify barrier — after every view
|
|
192
|
+
* touched by the same commit has folded — so a subscriber that re-reads a sibling view inside
|
|
193
|
+
* its callback observes post-commit data, never a torn mid-commit state. */
|
|
194
|
+
flush() {
|
|
134
195
|
this.notify();
|
|
135
196
|
}
|
|
136
197
|
get data() {
|
|
137
|
-
if (this.
|
|
198
|
+
if (this._schema === null)
|
|
138
199
|
return this.seeded ?? EMPTY;
|
|
139
200
|
if (!this.dirty && this.cached !== null)
|
|
140
201
|
return this.cached;
|
|
141
|
-
this.cached = this.top.map((n) => this.project(n, this.
|
|
202
|
+
this.cached = this.top.map((n) => this.project(n, this._schema, this.types));
|
|
142
203
|
this.dirty = false;
|
|
143
204
|
return this.cached;
|
|
144
205
|
}
|
|
@@ -154,47 +215,63 @@ export class FlatArrayView {
|
|
|
154
215
|
this.top = [];
|
|
155
216
|
}
|
|
156
217
|
// --- apply -------------------------------------------------------------------
|
|
157
|
-
applyAt(list, schema, path, op, depth) {
|
|
218
|
+
applyAt(list, schema, path, op, depth, enrichRemoves) {
|
|
158
219
|
if (depth === path.length) {
|
|
159
|
-
this.applyOp(list, schema, op);
|
|
160
|
-
return;
|
|
220
|
+
return this.applyOp(list, schema, op, enrichRemoves);
|
|
161
221
|
}
|
|
162
222
|
const seg = path[depth];
|
|
163
223
|
const child = schema.relationships[seg.rel]?.child;
|
|
164
224
|
if (!child)
|
|
165
|
-
return; // in-view gate: a gating slot drops the whole change
|
|
225
|
+
return false; // in-view gate: a gating slot drops the whole change
|
|
166
226
|
const { found, index } = binarySearch(list, seg.parentRow, schema.sort);
|
|
167
227
|
if (!found)
|
|
168
228
|
throw new Error("flat ArrayView: parent not found at path hop (inconsistent stream)");
|
|
169
229
|
const node = list[index];
|
|
170
|
-
|
|
171
|
-
|
|
230
|
+
const changed = this.applyAt(node.rels[seg.rel], child, path, op, depth + 1, enrichRemoves);
|
|
231
|
+
if (changed)
|
|
232
|
+
node.out = null; // a descendant changed → this node must re-project its rel array
|
|
233
|
+
return changed;
|
|
172
234
|
}
|
|
173
|
-
applyOp(list, schema, op) {
|
|
235
|
+
applyOp(list, schema, op, enrichRemoves) {
|
|
174
236
|
if (op.tag === "add")
|
|
175
|
-
this.applyAdd(list, schema, op.node);
|
|
176
|
-
|
|
177
|
-
this.applyRemove(list, schema, op.row);
|
|
178
|
-
|
|
179
|
-
|
|
237
|
+
return this.applyAdd(list, schema, op.node);
|
|
238
|
+
if (op.tag === "remove") {
|
|
239
|
+
const removed = this.applyRemove(list, schema, op.row);
|
|
240
|
+
// Attach the full removed subtree (in place) for an opted-in consumer; absent when the row
|
|
241
|
+
// only lost a reference (rc > 1) and so did not actually leave the result.
|
|
242
|
+
if (removed && enrichRemoves)
|
|
243
|
+
op.node = toWireNode(removed, schema);
|
|
244
|
+
return removed !== null;
|
|
245
|
+
}
|
|
246
|
+
return this.applyEdit(list, schema, op.old, op.new);
|
|
180
247
|
}
|
|
181
248
|
applyAdd(list, schema, wnode) {
|
|
182
249
|
const at = binarySearch(list, wnode.row, schema.sort);
|
|
183
|
-
if (at.found)
|
|
250
|
+
if (at.found) {
|
|
184
251
|
list[at.index].rc += 1; // duplicate path to an existing row; ignore subtree
|
|
185
|
-
|
|
186
|
-
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
list.splice(at.index, 0, buildNode(wnode, schema));
|
|
255
|
+
return true;
|
|
187
256
|
}
|
|
257
|
+
/** Drop one path to `row`. Returns the evicted {@link Node} (its full subtree intact) when the
|
|
258
|
+
* last path went away — `null` when another path still holds it (rc decremented, nothing left
|
|
259
|
+
* the result). */
|
|
188
260
|
applyRemove(list, schema, row) {
|
|
189
261
|
const at = binarySearch(list, row, schema.sort);
|
|
190
262
|
if (!at.found)
|
|
191
263
|
throw new Error("flat ArrayView: remove of a non-existent node");
|
|
192
|
-
|
|
264
|
+
const node = list[at.index];
|
|
265
|
+
if (node.rc === 1) {
|
|
193
266
|
list.splice(at.index, 1);
|
|
194
|
-
|
|
195
|
-
|
|
267
|
+
return node;
|
|
268
|
+
}
|
|
269
|
+
node.rc -= 1;
|
|
270
|
+
return null;
|
|
196
271
|
}
|
|
197
272
|
applyEdit(list, schema, oldRow, newRow) {
|
|
273
|
+
if (rowsEqual(oldRow, newRow))
|
|
274
|
+
return false;
|
|
198
275
|
const sort = schema.sort;
|
|
199
276
|
if (compareRows(oldRow, newRow, sort) === 0) {
|
|
200
277
|
// Sort key unchanged → edit in place (keeps position + children + rc).
|
|
@@ -203,7 +280,7 @@ export class FlatArrayView {
|
|
|
203
280
|
throw new Error("flat ArrayView: edit of a non-existent node");
|
|
204
281
|
list[at.index].row = newRow;
|
|
205
282
|
list[at.index].out = null;
|
|
206
|
-
return;
|
|
283
|
+
return true;
|
|
207
284
|
}
|
|
208
285
|
// Sort key changed → the row may move; rc may be > 1.
|
|
209
286
|
const oldAt = binarySearch(list, oldRow, sort);
|
|
@@ -219,7 +296,7 @@ export class FlatArrayView {
|
|
|
219
296
|
if (oldRc === 1 && (pos === oldPos || pos - 1 === oldPos)) {
|
|
220
297
|
list[oldPos].row = newRow;
|
|
221
298
|
list[oldPos].out = null;
|
|
222
|
-
return;
|
|
299
|
+
return true;
|
|
223
300
|
}
|
|
224
301
|
// General move.
|
|
225
302
|
const newRc = oldRc - 1;
|
|
@@ -245,6 +322,7 @@ export class FlatArrayView {
|
|
|
245
322
|
oldEntry.rc = 1;
|
|
246
323
|
list.splice(adjusted, 0, oldEntry);
|
|
247
324
|
}
|
|
325
|
+
return true;
|
|
248
326
|
}
|
|
249
327
|
// --- projection (memoized, structurally shared) -----------------------------
|
|
250
328
|
project(node, schema, types) {
|
package/dist/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,0FAA0F;AAC1F,4FAA4F;AAC5F,uFAAuF;AACvF,iFAAiF;AACjF,EAAE;AACF,yFAAyF;AACzF,2FAA2F;AAC3F,iFAAiF;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsD3C;mFACmF;AACnF,MAAM,OAAO,YAAY;IACN,KAAK,CAAe;IAErC,YAAY,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,QAAkC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF;AAWD,SAAS,YAAY,CACnB,IAAY,EACZ,GAAgB,EAChB,IAAyB;IAEzB,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC;YAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;aACnB,IAAI,CAAC,GAAG,CAAC;YAAE,EAAE,GAAG,GAAG,CAAC;;YACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC;AAED;;gFAEgF;AAChF,SAAS,SAAS,CAAC,KAAe,EAAE,MAAkB;IACpD,MAAM,IAAI,GAAa,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,6CAA6C;QACnE,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,EAAE,CAAC,KAAK;gBAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;gBACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,CAAO;IACxB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAChG,CAAC;AAED;;;;qEAIqE;AACrE,SAAS,UAAU,CAAC,IAAU,EAAE,MAAkB;IAChD,MAAM,IAAI,GAA4C,EAAE,CAAC;IACzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;YAAE,SAAS;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,KAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,CAAc,EAAE,CAAc;IAC/C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,KAAK,GAAqB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAElD,MAAM,OAAO,aAAa;IACxB,+FAA+F;IAC/F,kGAAkG;IACjF,IAAI,CAAU;IAC/B,0FAA0F;IAC1F,iGAAiG;IACjG,kGAAkG;IAC1F,OAAO,CAAoB;IAC3B,KAAK,CAAa;IAC1B,+FAA+F;IAC/F,2FAA2F;IAC3F,wFAAwF;IAChF,MAAM,GAAwB,IAAI,CAAC;IACnC,GAAG,GAAW,EAAE,CAAC;IACjB,KAAK,GAAG,IAAI,CAAC;IACb,MAAM,GAAwB,IAAI,CAAC;IAC3C,iGAAiG;IACjG,kGAAkG;IAClG,4DAA4D;IACpD,EAAE,GAAe,UAAU,CAAC;IACnB,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAErE,YAAY,MAAmB,EAAE,KAAiB,EAAE,MAAe,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;wDAEoD;IACpD,aAAa,CAAC,EAAc;QAC1B,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO;QAC3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;kGAG8F;IAC9F,KAAK,CAAC,MAAkB,EAAE,KAAiB;QACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,sDAAsD;QAC1E,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;;;gGAI4F;IAC5F,IAAI,CAAC,IAAkB;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;uGAcmG;IACnG,YAAY,CAAC,MAAoB,EAAE,aAAa,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK;QAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,OAAO,CAAC;QAClH,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;iFAG6E;IAC7E,KAAK;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,IAAK,KAAsB,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC;QAClG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,QAAsC;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,gFAAgF;IAExE,OAAO,CAAC,IAAY,EAAE,MAAkB,EAAE,IAAwB,EAAE,EAAU,EAAE,KAAa,EAAE,aAAsB;QAC3H,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QACnD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,qDAAqD;QAC/E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5F,IAAI,OAAO;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,iEAAiE;QAC/F,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,MAAkB,EAAE,EAAU,EAAE,aAAsB;QAClF,IAAI,EAAE,CAAC,GAAG,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACvD,2FAA2F;YAC3F,2EAA2E;YAC3E,IAAI,OAAO,IAAI,aAAa;gBAAE,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,OAAO,KAAK,IAAI,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAEO,QAAQ,CAAC,IAAY,EAAE,MAAkB,EAAE,KAAe;QAChE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,oDAAoD;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;uBAEmB;IACX,WAAW,CAAC,IAAY,EAAE,MAAkB,EAAE,GAAgB;QACpE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,MAAkB,EAAE,MAAmB,EAAE,MAAmB;QAC1F,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,uEAAuE;YACvE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,EAAE,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC9E,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sDAAsD;QACtD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;QACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAEpF,qFAAqF;QACrF,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,IAAI,QAAgB,CAAC;QACrB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACvB,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,6DAA6D;YACtF,QAAQ,GAAG,GAAG,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,8EAA8E;YAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,4EAA4E;YAC5E,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC;YACtB,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAEvE,OAAO,CAAC,IAAU,EAAE,MAAkB,EAAE,KAAiB;QAC/D,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC;QACvC,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,sFAAsF;YACtF,sFAAsF;YACtF,wFAAwF;YACxF,qFAAqF;YACrF,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,8FAA8F;YAC9F,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;gBAAE,SAAS,CAAC,kCAAkC;YACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,sFAAsF;gBACtF,qFAAqF;gBACrF,0FAA0F;gBAC1F,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC7F,MAAM,QAAQ,GAAG,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1F,SAAS;YACX,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ;gBAChC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC3C,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,MAAM;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;CACF"}
|
package/package.json
CHANGED
package/src/ast.ts
CHANGED
|
@@ -90,5 +90,16 @@ export interface Ast {
|
|
|
90
90
|
* with a plain singular join + the same projection instead of a `reduce`. Only meaningful
|
|
91
91
|
* with `aggregate`; absent ⇒ `false`. */
|
|
92
92
|
aggregatePrecomputed?: boolean;
|
|
93
|
+
/** Top-level `GROUP BY` columns (names), meaningful only alongside a root {@link Ast.aggregate}
|
|
94
|
+
* (`REDUCE-DESIGN.md` §8). Empty + `aggregate` set ⇒ a **global** aggregate (one `[count]` row);
|
|
95
|
+
* non-empty ⇒ one `[group…, count]` row per distinct value-tuple. Distinct from a relationship
|
|
96
|
+
* aggregate's implicit grouping (the correlation child key). Absent on the wire ⇒ empty. */
|
|
97
|
+
groupBy?: string[];
|
|
98
|
+
/** `HAVING` — a filter over the **post-aggregation** rows of a root {@link Ast.aggregate}
|
|
99
|
+
* (`REDUCE-DESIGN.md` §4: a filter directly above the `reduce`). Its condition addresses the
|
|
100
|
+
* aggregate's *output* columns — the {@link Ast.groupBy} columns and the synthetic `count`
|
|
101
|
+
* column — not base-table columns (those go in {@link Ast.where}, which filters rows *below* the
|
|
102
|
+
* reduce). Absent ⇒ no post-aggregation filter. */
|
|
103
|
+
having?: Condition;
|
|
93
104
|
orderBy?: OrderPart[];
|
|
94
105
|
}
|
package/src/index.ts
CHANGED
|
@@ -9,12 +9,17 @@ export * from "./view.ts"; // ArrayView, SingularArrayView, FlatArrayView, Singu
|
|
|
9
9
|
export * from "./store.ts"; // Store, WriteTx, AssembledNode, DehydratedQuery, DehydratedState
|
|
10
10
|
export * from "./ssr.ts"; // createServerStore, ServerStore, OneShotBackend, OneShotQueryFn, OneShotResult, ServerStoreOptions
|
|
11
11
|
|
|
12
|
+
export { resolveChange, subRow } from "./resolve.ts"; // positional FlatChange → named rows (inverse of the wire encoder)
|
|
13
|
+
export type { NamedRow, ResolvedChange } from "./resolve.ts";
|
|
14
|
+
|
|
12
15
|
export { stableKey } from "./key.ts"; // canonical viewKey for an AST (shared with @rindle/react)
|
|
13
16
|
|
|
14
17
|
export { COMPARATOR_VERSION, compareNumber, compareRows, compareString, compareValue } from "./compare.ts";
|
|
15
18
|
|
|
16
19
|
export type {
|
|
17
20
|
Backend,
|
|
21
|
+
BackendDevObserver,
|
|
22
|
+
BackendServerDelta,
|
|
18
23
|
ChangeEvent,
|
|
19
24
|
ColType,
|
|
20
25
|
FlatChange,
|
package/src/operators.ts
CHANGED
|
@@ -37,6 +37,11 @@ export const inList = <V>(values: V[]): Pred<V> => mk("IN", values as LitValue);
|
|
|
37
37
|
export const notInList = <V>(values: V[]): Pred<V> => mk("NOT IN", values as LitValue);
|
|
38
38
|
export const is = <V>(v: V): Pred<V> => mk("IS", v as LitValue);
|
|
39
39
|
export const isNot = <V>(v: V): Pred<V> => mk("IS NOT", v as LitValue);
|
|
40
|
+
/** `IS NULL` — a field-agnostic null check. `V` is inferred from the field's expected `Arg<V>`
|
|
41
|
+
* (e.g. `where.signedAt(isNull())`), so it fits a column of any type without a cast. */
|
|
42
|
+
export const isNull = <V = never>(): Pred<V> => mk("IS", null);
|
|
43
|
+
/** `IS NOT NULL` — the negation of {@link isNull}; `V` is inferred from the field, like {@link isNull}. */
|
|
44
|
+
export const isNotNull = <V = never>(): Pred<V> => mk("IS NOT", null);
|
|
40
45
|
|
|
41
46
|
/** A field argument: its typed predicate, or a bare value (bare = `eq` sugar). */
|
|
42
47
|
export type Arg<V> = Pred<V> | V;
|