@rindle/client 0.1.1 → 0.1.3
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 +52 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query.d.ts +17 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +64 -9
- package/dist/query.js.map +1 -1
- package/dist/schema.d.ts +45 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +64 -5
- package/dist/schema.js.map +1 -1
- package/dist/ssr.d.ts +2 -1
- package/dist/ssr.d.ts.map +1 -1
- package/dist/ssr.js +8 -0
- package/dist/ssr.js.map +1 -1
- package/dist/store.d.ts +55 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +95 -5
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/query.ts +74 -7
- package/src/schema.ts +90 -5
- package/src/ssr.ts +8 -1
- package/src/store.ts +132 -6
- package/src/types.ts +5 -0
package/dist/ssr.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
//
|
|
10
10
|
// `useQuery` is byte-for-byte identical in both — only the injected backend (and whether a live
|
|
11
11
|
// subscribe ever happens) differs.
|
|
12
|
+
import { assertNoLocalTables } from "./query.js";
|
|
12
13
|
import { Store } from "./store.js";
|
|
13
14
|
/**
|
|
14
15
|
* A no-op live backend for SSR (SSR-DESIGN.md §6.1): it opens no transport and never streams.
|
|
@@ -31,15 +32,22 @@ export class OneShotBackend {
|
|
|
31
32
|
*/
|
|
32
33
|
export class ServerStore {
|
|
33
34
|
store;
|
|
35
|
+
schema;
|
|
34
36
|
opts;
|
|
35
37
|
constructor(schema, opts) {
|
|
36
38
|
this.store = new Store(schema, new OneShotBackend());
|
|
39
|
+
this.schema = schema;
|
|
37
40
|
this.opts = opts;
|
|
38
41
|
}
|
|
39
42
|
/** Run the one-shot read for `query` and seed its first-paint snapshot (SSR-DESIGN.md §6.2).
|
|
40
43
|
* Call once per query in the route loader, before the synchronous render. */
|
|
41
44
|
async preload(query) {
|
|
42
45
|
const ast = query.ast();
|
|
46
|
+
// E3 backstop: a local-only table must never be forwarded to the daemon. The `OneShotBackend`'s
|
|
47
|
+
// `registerQuery` is a no-op (no engine-side E3 check runs on the SSR path), and a query built
|
|
48
|
+
// from the LOCAL builder permits local tables — so the AST is re-checked here regardless of how
|
|
49
|
+
// it was built (201-LOCAL-ONLY-TABLES-DESIGN.md E3).
|
|
50
|
+
assertNoLocalTables(ast, this.schema);
|
|
43
51
|
// Forward the AST (a direct-to-daemon backend reads it) plus the named identity when this came
|
|
44
52
|
// from `defineQuery` (an API-tier backend resolves `(name, args)` → AST itself, never trusting
|
|
45
53
|
// a client AST). The seed is keyed by the AST's `viewKey` either way, so the browser's
|
package/dist/ssr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,gGAAgG;AAChG,EAAE;AACF,+EAA+E;AAC/E,iGAAiG;AACjG,mGAAmG;AACnG,kGAAkG;AAClG,4FAA4F;AAC5F,EAAE;AACF,gGAAgG;AAChG,mCAAmC;
|
|
1
|
+
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,gGAAgG;AAChG,EAAE;AACF,+EAA+E;AAC/E,iGAAiG;AACjG,mGAAmG;AACnG,kGAAkG;AAClG,4FAA4F;AAC5F,EAAE;AACF,gGAAgG;AAChG,mCAAmC;AAEnC,OAAO,EAAE,mBAAmB,EAAc,MAAM,YAAY,CAAC;AAE7D,OAAO,EAA4C,KAAK,EAAE,MAAM,YAAY,CAAC;AA0B7E;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACzB,aAAa,CAAC,IAAa,EAAE,IAAa,EAAE,OAAqB,IAAS,CAAC;IAC3E,eAAe,CAAC,IAAa,IAAS,CAAC;IACvC,MAAM,CAAC,UAAsB;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,CAAC,QAAwD,IAAS,CAAC;CAC3E;AAgBD;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACb,KAAK,CAAW;IACR,MAAM,CAAY;IAClB,IAAI,CAAqB;IAE1C,YAAY,MAAiB,EAAE,IAAwB;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;kFAC8E;IAC9E,KAAK,CAAC,OAAO,CAAC,KAA2B;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,gGAAgG;QAChG,+FAA+F;QAC/F,gGAAgG;QAChG,qDAAqD;QACrD,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,+FAA+F;QAC/F,+FAA+F;QAC/F,uFAAuF;QACvF,qDAAqD;QACrD,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACnC,GAAG;YACH,GAAG,KAAK;YACR,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YACtC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED;kDAC8C;IAC9C,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;CACF;AAED,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,IAAwB;IAExB,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Ast } from "./ast.ts";
|
|
2
2
|
import { type Query, type QueryRoot } from "./query.ts";
|
|
3
3
|
import type { ColsMap, RowOf, Schema } from "./schema.ts";
|
|
4
|
-
import type { Backend, WireValue } from "./types.ts";
|
|
4
|
+
import type { Backend, ChangeEvent, QueryId, ResultType, WireValue } from "./types.ts";
|
|
5
5
|
/** One query's SSR snapshot, keyed by its `viewKey` ({@link stableKey} of the AST): the
|
|
6
6
|
* pre-projected first-paint `rows` plus the `cvMin` watermark they reflect (SSR-DESIGN.md §6.2).
|
|
7
7
|
* Serializable as-is into the HTML — `rows` are already JSON values (json columns parsed). */
|
|
@@ -34,6 +34,36 @@ export interface CachedQueryView<Q extends Query<any, any, any>> {
|
|
|
34
34
|
retain(query: Q): () => void;
|
|
35
35
|
destroy(): void;
|
|
36
36
|
}
|
|
37
|
+
/** One live materialized view's read-only summary for a devtools pane (DEBUG-TOOLS-BROWSER-DESIGN
|
|
38
|
+
* §4.2 — "surface, not instrument"). All fields are already held by the {@link Store}; this is the
|
|
39
|
+
* single read-only accessor over the otherwise-private `views`/`asts` maps. */
|
|
40
|
+
export interface QueryInspect {
|
|
41
|
+
/** The Store-assigned query id (also the backend's qid — the Store passes it straight through). */
|
|
42
|
+
qid: QueryId;
|
|
43
|
+
/** The query's AST (`Store.asts`), for the inspector's pretty-print / table-derivation. */
|
|
44
|
+
ast: Ast;
|
|
45
|
+
/** The view's SERVER-CHANNEL state (`unknown` while loading, `complete` once authoritative). */
|
|
46
|
+
resultType: ResultType;
|
|
47
|
+
/** Current materialized row count (`view.data.length`). */
|
|
48
|
+
rowCount: number;
|
|
49
|
+
/** A capped peek at the projected rows (reference-stable objects off the live view). */
|
|
50
|
+
sample: readonly unknown[];
|
|
51
|
+
}
|
|
52
|
+
/** A frozen snapshot of the Store's live query state for a devtools pane ({@link Store.__inspect}). */
|
|
53
|
+
export interface StoreInspect {
|
|
54
|
+
queries: QueryInspect[];
|
|
55
|
+
}
|
|
56
|
+
/** A dev-only passive tap over the Store's per-query streams (DEBUG-TOOLS-BROWSER-DESIGN §6.2).
|
|
57
|
+
* Registered via {@link Store.__attachDevtools}; it ADDS a listener and never displaces the
|
|
58
|
+
* single `backend.onEvent`/`onResultType` handlers the Store already owns, so attaching devtools
|
|
59
|
+
* cannot perturb the app. Both hooks are optional. */
|
|
60
|
+
export interface StoreDevObserver {
|
|
61
|
+
/** The raw per-query {@link ChangeEvent} (hello / snapshot / batch) the Store just routed to its
|
|
62
|
+
* view — the source of the devtools delta stream (§4.3). Fired AFTER the view has folded it. */
|
|
63
|
+
onDelta?(qid: QueryId, ev: ChangeEvent): void;
|
|
64
|
+
/** A per-query {@link ResultType} transition the Store just applied to its view (§4.2). */
|
|
65
|
+
onResultType?(qid: QueryId, rt: ResultType): void;
|
|
66
|
+
}
|
|
37
67
|
export declare class Store<S extends ColsMap> {
|
|
38
68
|
/** Type-safe query entry: `store.query.issue.where.closed(false).materialize()`. */
|
|
39
69
|
readonly query: QueryRoot<S>;
|
|
@@ -43,6 +73,7 @@ export declare class Store<S extends ColsMap> {
|
|
|
43
73
|
private readonly views;
|
|
44
74
|
private readonly asts;
|
|
45
75
|
private readonly seeds;
|
|
76
|
+
private devObservers?;
|
|
46
77
|
constructor(schema: Schema<S>, backend: Backend);
|
|
47
78
|
/** Materialize any fluent query object. Named queries subscribe remotely by `(name,args)`;
|
|
48
79
|
* ad-hoc builder queries are local-only for local-first backends. */
|
|
@@ -59,6 +90,21 @@ export declare class Store<S extends ColsMap> {
|
|
|
59
90
|
* accepted them (local: applied; remote: sent). The resulting view updates flow back via
|
|
60
91
|
* the backend's event stream. */
|
|
61
92
|
write(fn: (tx: WriteTx<S>) => void): Promise<void>;
|
|
93
|
+
/** Direct-commit write to LOCAL-only tables (`201-LOCAL-ONLY-TABLES-DESIGN.md` §6): the
|
|
94
|
+
* client-authoritative path for selection state, draft text, view prefs, scratch rows. It
|
|
95
|
+
* bypasses the optimistic pending stack entirely — a local table is untracked, so it never
|
|
96
|
+
* rebases, reverts, or waits on a server confirmation (it "moves on its own").
|
|
97
|
+
*
|
|
98
|
+
* Rejects a synced/tracked table (M2): a direct write to one would be un-applied on the very
|
|
99
|
+
* next server rewind. Local writes also must NOT live inside a replayable mutator (M1) — the
|
|
100
|
+
* server runs the mutator from `args` alone and cannot see local tables; use this instead.
|
|
101
|
+
* Same keyed `WriteTx` shape as {@link write}. `async` so the no-seam / M2 guards surface as a
|
|
102
|
+
* REJECTED promise (the `Promise<void>` contract) rather than a synchronous throw that escapes a
|
|
103
|
+
* caller's `.catch` and crashes the event handler / render frame. */
|
|
104
|
+
writeLocal(fn: (tx: WriteTx<S>) => void): Promise<void>;
|
|
105
|
+
/** Drain a keyed `WriteTx` callback into positional {@link Mutation}s (shared by
|
|
106
|
+
* {@link write} / {@link writeLocal}; json columns stringified, rows in column order). */
|
|
107
|
+
private collectMutations;
|
|
62
108
|
/** Seed a query's first-paint snapshot from a `POST /query` response (server side): convert the
|
|
63
109
|
* assembled rows to the view's projected shape and stash them by `viewKey`. A view materialized
|
|
64
110
|
* for this AST (during the synchronous render) reads the seed; {@link dehydrate} serializes it. */
|
|
@@ -81,6 +127,14 @@ export declare class Store<S extends ColsMap> {
|
|
|
81
127
|
private registerMaterialized;
|
|
82
128
|
private retainRemote;
|
|
83
129
|
private onEvent;
|
|
130
|
+
/** Register a devtools {@link StoreDevObserver}; returns a detach function. Multiple panes may
|
|
131
|
+
* attach. The observer is ADDITIVE — it does not touch the backend's single handler slots. */
|
|
132
|
+
__attachDevtools(observer: StoreDevObserver): () => void;
|
|
133
|
+
/** A read-only snapshot of every live materialized view (DEBUG-TOOLS-BROWSER-DESIGN §4.2): its
|
|
134
|
+
* qid, AST, {@link ResultType}, row count, and a capped row sample. Built fresh on each call from
|
|
135
|
+
* the live `views`/`asts` maps — never cached, never mutating. `sampleRows` caps the per-query
|
|
136
|
+
* peek (default 50) so a large view doesn't bloat the snapshot. */
|
|
137
|
+
__inspect(sampleRows?: number): StoreInspect;
|
|
84
138
|
private columns;
|
|
85
139
|
/** An object row → a positional cell array in the table's column order (json → string). */
|
|
86
140
|
private positionalize;
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAW,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -21,14 +21,27 @@ export class Store {
|
|
|
21
21
|
// seeded for first paint; a seed is consumed (dropped) the moment its query's first live
|
|
22
22
|
// `hello` lands, so later mounts don't flash stale SSR data.
|
|
23
23
|
seeds = new Map();
|
|
24
|
+
// Dev-only devtools taps (DEBUG-TOOLS-BROWSER-DESIGN §6.2). `undefined` until the first
|
|
25
|
+
// `__attachDevtools`, so a production app that never attaches a pane pays one undefined-check per
|
|
26
|
+
// routed event and nothing else — there is no global singleton and no hot-path instrumentation.
|
|
27
|
+
devObservers;
|
|
24
28
|
constructor(schema, backend) {
|
|
25
29
|
this.schema = schema;
|
|
26
30
|
this.backend = backend;
|
|
27
31
|
this.backend.onEvent((qid, ev) => this.onEvent(qid, ev));
|
|
28
32
|
// Route the backend's per-query lifecycle onto its view (`view.resultType`). Backends without a
|
|
29
|
-
// lifecycle omit `onResultType`, leaving every view `complete`.
|
|
30
|
-
|
|
31
|
-
this.
|
|
33
|
+
// lifecycle omit `onResultType`, leaving every view `complete`. A devtools tap mirrors the
|
|
34
|
+
// transition (it never displaces this single handler).
|
|
35
|
+
this.backend.onResultType?.((qid, rt) => {
|
|
36
|
+
this.views.get(qid)?.setResultType(rt);
|
|
37
|
+
if (this.devObservers)
|
|
38
|
+
for (const o of this.devObservers)
|
|
39
|
+
o.onResultType?.(qid, rt);
|
|
40
|
+
});
|
|
41
|
+
// `store.query` is the LOCAL builder (201-LOCAL-ONLY-TABLES-DESIGN.md §5): it scopes over
|
|
42
|
+
// synced AND local-only tables, so a local query can join the two. Server/named queries use
|
|
43
|
+
// the synced-only `newQueryBuilder`, which excludes local tables.
|
|
44
|
+
this.query = queries(this.schema, (query) => this.materialize(query), { includeLocal: true });
|
|
32
45
|
}
|
|
33
46
|
/** Materialize any fluent query object. Named queries subscribe remotely by `(name,args)`;
|
|
34
47
|
* ad-hoc builder queries are local-only for local-first backends. */
|
|
@@ -64,6 +77,36 @@ export class Store {
|
|
|
64
77
|
* accepted them (local: applied; remote: sent). The resulting view updates flow back via
|
|
65
78
|
* the backend's event stream. */
|
|
66
79
|
write(fn) {
|
|
80
|
+
return Promise.resolve(this.backend.mutate(this.collectMutations(fn)));
|
|
81
|
+
}
|
|
82
|
+
/** Direct-commit write to LOCAL-only tables (`201-LOCAL-ONLY-TABLES-DESIGN.md` §6): the
|
|
83
|
+
* client-authoritative path for selection state, draft text, view prefs, scratch rows. It
|
|
84
|
+
* bypasses the optimistic pending stack entirely — a local table is untracked, so it never
|
|
85
|
+
* rebases, reverts, or waits on a server confirmation (it "moves on its own").
|
|
86
|
+
*
|
|
87
|
+
* Rejects a synced/tracked table (M2): a direct write to one would be un-applied on the very
|
|
88
|
+
* next server rewind. Local writes also must NOT live inside a replayable mutator (M1) — the
|
|
89
|
+
* server runs the mutator from `args` alone and cannot see local tables; use this instead.
|
|
90
|
+
* Same keyed `WriteTx` shape as {@link write}. `async` so the no-seam / M2 guards surface as a
|
|
91
|
+
* REJECTED promise (the `Promise<void>` contract) rather than a synchronous throw that escapes a
|
|
92
|
+
* caller's `.catch` and crashes the event handler / render frame. */
|
|
93
|
+
async writeLocal(fn) {
|
|
94
|
+
if (!this.backend.writeLocal) {
|
|
95
|
+
throw new Error("store.writeLocal: this backend has no local-write seam (local-only tables need the wasm/optimistic backend).");
|
|
96
|
+
}
|
|
97
|
+
const muts = this.collectMutations(fn);
|
|
98
|
+
// Defense in depth (M2): a clear Store-level rejection of any non-local table, before the
|
|
99
|
+
// backend's own chokepoint guard. Local writes are authoritative-for-themselves only.
|
|
100
|
+
for (const m of muts) {
|
|
101
|
+
if (!this.schema.tables[m.table]?.local) {
|
|
102
|
+
throw new Error(`store.writeLocal: "${m.table}" is not a local-only table — use store.write or a named mutator (M2).`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.backend.writeLocal(muts);
|
|
106
|
+
}
|
|
107
|
+
/** Drain a keyed `WriteTx` callback into positional {@link Mutation}s (shared by
|
|
108
|
+
* {@link write} / {@link writeLocal}; json columns stringified, rows in column order). */
|
|
109
|
+
collectMutations(fn) {
|
|
67
110
|
const muts = [];
|
|
68
111
|
const tx = {
|
|
69
112
|
add: (t, row) => muts.push({ op: "add", table: t, row: this.positionalize(t, row) }),
|
|
@@ -71,7 +114,7 @@ export class Store {
|
|
|
71
114
|
edit: (t, o, n) => muts.push({ op: "edit", table: t, old: this.positionalize(t, o), new: this.positionalize(t, n) }),
|
|
72
115
|
};
|
|
73
116
|
fn(tx);
|
|
74
|
-
return
|
|
117
|
+
return muts;
|
|
75
118
|
}
|
|
76
119
|
// --- SSR (SSR-DESIGN.md §6) ---------------------------------------------------
|
|
77
120
|
/** Seed a query's first-paint snapshot from a `POST /query` response (server side): convert the
|
|
@@ -147,7 +190,17 @@ export class Store {
|
|
|
147
190
|
}
|
|
148
191
|
baseDestroy();
|
|
149
192
|
};
|
|
150
|
-
|
|
193
|
+
// If the backend rejects the registration (E3: a remote query naming a local-only table), roll
|
|
194
|
+
// back the per-qid state we just created — otherwise the view + ast entry leak (the caller never
|
|
195
|
+
// gets a handle to `destroy()` them, since the throw aborts before we return).
|
|
196
|
+
try {
|
|
197
|
+
this.backend.registerQuery(qid, ast, remote);
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
this.views.delete(qid);
|
|
201
|
+
this.asts.delete(qid);
|
|
202
|
+
throw e;
|
|
203
|
+
}
|
|
151
204
|
// SSR first paint (SSR-DESIGN.md §6): if this AST was preloaded/hydrated, seed the view now.
|
|
152
205
|
// A synchronous backend (wasm) already reset the view above, so its live data wins and the
|
|
153
206
|
// seed is inert; an async backend (ws) leaves it PENDING, so the seed shows until `hello`.
|
|
@@ -190,6 +243,43 @@ export class Store {
|
|
|
190
243
|
else {
|
|
191
244
|
this.views.get(qid)?.applyChanges(ev.events);
|
|
192
245
|
}
|
|
246
|
+
// Mirror the raw delta to any devtools tap, AFTER the view has folded it (so a pane re-reading
|
|
247
|
+
// `__inspect` sees the post-apply state). No-op (one undefined-check) when no pane is attached.
|
|
248
|
+
if (this.devObservers)
|
|
249
|
+
for (const o of this.devObservers)
|
|
250
|
+
o.onDelta?.(qid, ev);
|
|
251
|
+
}
|
|
252
|
+
// --- dev-only introspection (DEBUG-TOOLS-BROWSER-DESIGN §2/§6.2) --------------
|
|
253
|
+
// A single read-only accessor + a passive tap per the design's "surface, not instrument" rule.
|
|
254
|
+
// Only ever called by `@rindle/devtools` (imported in dev); inert otherwise.
|
|
255
|
+
/** Register a devtools {@link StoreDevObserver}; returns a detach function. Multiple panes may
|
|
256
|
+
* attach. The observer is ADDITIVE — it does not touch the backend's single handler slots. */
|
|
257
|
+
__attachDevtools(observer) {
|
|
258
|
+
(this.devObservers ??= new Set()).add(observer);
|
|
259
|
+
return () => {
|
|
260
|
+
this.devObservers?.delete(observer);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/** A read-only snapshot of every live materialized view (DEBUG-TOOLS-BROWSER-DESIGN §4.2): its
|
|
264
|
+
* qid, AST, {@link ResultType}, row count, and a capped row sample. Built fresh on each call from
|
|
265
|
+
* the live `views`/`asts` maps — never cached, never mutating. `sampleRows` caps the per-query
|
|
266
|
+
* peek (default 50) so a large view doesn't bloat the snapshot. */
|
|
267
|
+
__inspect(sampleRows = 50) {
|
|
268
|
+
const queries = [];
|
|
269
|
+
for (const [qid, view] of this.views) {
|
|
270
|
+
const ast = this.asts.get(qid);
|
|
271
|
+
if (!ast)
|
|
272
|
+
continue; // a view mid-teardown (ast already dropped) — skip
|
|
273
|
+
const data = view.data;
|
|
274
|
+
queries.push({
|
|
275
|
+
qid,
|
|
276
|
+
ast,
|
|
277
|
+
resultType: view.resultType,
|
|
278
|
+
rowCount: data.length,
|
|
279
|
+
sample: sampleRows >= data.length ? data : data.slice(0, sampleRows),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
return { queries };
|
|
193
283
|
}
|
|
194
284
|
columns(table) {
|
|
195
285
|
const meta = this.schema.tables[table];
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -174,6 +174,11 @@ export interface Backend {
|
|
|
174
174
|
releaseRemoteQuery?(queryId: QueryId): void;
|
|
175
175
|
/** Local: applies now (changes flow back on the stream). Remote: sends to the server. */
|
|
176
176
|
mutate(mutations: Mutation[]): Promise<void>;
|
|
177
|
+
/** Optional DIRECT-COMMIT path for LOCAL-only tables (`201-LOCAL-ONLY-TABLES-DESIGN.md` §6):
|
|
178
|
+
* applies the writes straight to the engine, OUTSIDE the optimistic pending stack (a local
|
|
179
|
+
* table is untracked, so it never rebases). The backend rejects any synced/tracked table (M2).
|
|
180
|
+
* Backends with no local-table support (a plain remote sync backend) omit it. */
|
|
181
|
+
writeLocal?(mutations: Mutation[]): void;
|
|
177
182
|
onEvent(handler: (queryId: QueryId, event: ChangeEvent) => void): void;
|
|
178
183
|
/** Optional: the backend pushes per-query {@link ResultType} changes here and the core routes
|
|
179
184
|
* each to the matching view (so `view.resultType` tracks it). Backends with no lifecycle (the
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,0EAA0E;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,0EAA0E;AAqM1E;;8EAE8E;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE;;mEAEmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD;qDACqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAA0B;IAC5D,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,CAAC;CAChB,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// comparator, Backend seam, and the ArrayView contract. (The ArrayView folding impl + the
|
|
3
3
|
// Store/backend wiring land in later slices.)
|
|
4
4
|
|
|
5
|
-
export * from "./schema.ts"; // table/columns/primaryKey, createSchema, string/number/boolean/json, Col, RowOf, Row, TableDef, tableSpec, SCHEMA
|
|
5
|
+
export * from "./schema.ts"; // table/columns/primaryKey, createSchema/extendSchema, string/number/boolean/json, Col, RowOf, Row, TableDef, tableSpec, SCHEMA
|
|
6
6
|
export * from "./operators.ts"; // eq/ne/gt/ge/lt/le/like/notLike/ilike/notIlike/inList/notInList/is/isNot, and/or, Pred, Cond, Arg
|
|
7
7
|
export * from "./query.ts"; // Query, QueryRoot, queries/newQueryBuilder, defineQuery/NamedQuery, exists, notExists, defineFragment/Fragment/FragmentRef/isFragment
|
|
8
8
|
export * from "./view.ts"; // ArrayView, SingularArrayView, FlatArrayView, SingularView, ViewTypes
|
package/src/query.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { stableKey } from "./key.ts";
|
|
|
11
11
|
import type { Arg, Cond } from "./operators.ts";
|
|
12
12
|
import { fieldCondition } from "./operators.ts";
|
|
13
13
|
import type { AnyCols, AnyRelationship, AnyTable, ColsMap, ColT, Relationship, RowOf, Schema, TableLike, TableMeta } from "./schema.ts";
|
|
14
|
-
import { isRelationship, SCHEMA } from "./schema.ts";
|
|
14
|
+
import { isLocalTable, isRelationship, SCHEMA } from "./schema.ts";
|
|
15
15
|
import type { ArrayView, SingularArrayView } from "./view.ts";
|
|
16
16
|
|
|
17
17
|
// ----------------------------- the public Query type -----------------------------
|
|
@@ -354,6 +354,41 @@ function compile(s: State): Ast {
|
|
|
354
354
|
return ast;
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
+
/** Every base table an AST draws rows from — the root plus every related / `EXISTS` subquery (a
|
|
358
|
+
* conservative deep scan for `table` fields, mirroring the optimistic backend's `collectTables`). */
|
|
359
|
+
function astTables(ast: Ast): Set<string> {
|
|
360
|
+
const out = new Set<string>();
|
|
361
|
+
const walk = (v: unknown): void => {
|
|
362
|
+
if (Array.isArray(v)) {
|
|
363
|
+
for (const x of v) walk(x);
|
|
364
|
+
} else if (v && typeof v === "object") {
|
|
365
|
+
const o = v as Record<string, unknown>;
|
|
366
|
+
if (typeof o.table === "string") out.add(o.table);
|
|
367
|
+
for (const k of Object.keys(o)) walk(o[k]);
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
walk(ast);
|
|
371
|
+
return out;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** Throw if `ast` references a local-only table ANYWHERE — the complete form of the {@link queries}
|
|
375
|
+
* root guard (Q1 / E3 client half). The root proxy `get` only sees the table accessed off the
|
|
376
|
+
* builder root; a local table reached through a relationship / `sub` / `countAs` / `exists` CHILD is
|
|
377
|
+
* passed as a value and never touches the proxy, so it is caught here instead: at `.ast()` for a
|
|
378
|
+
* server-scope builder, and again as an SSR backstop in `ServerStore.preload`. A server/named query
|
|
379
|
+
* may never name a local table (`201-LOCAL-ONLY-TABLES-DESIGN.md` §5). */
|
|
380
|
+
export function assertNoLocalTables<S extends ColsMap>(ast: Ast, schema: Schema<S>): void {
|
|
381
|
+
for (const t of astTables(ast)) {
|
|
382
|
+
if (isLocalTable(schema, t)) {
|
|
383
|
+
throw new Error(
|
|
384
|
+
`local-only table "${t}" may not be used in a server/named query — it was reached through a ` +
|
|
385
|
+
`relationship/subquery; build it from store.query (the local builder) instead ` +
|
|
386
|
+
`(201-LOCAL-ONLY-TABLES-DESIGN.md §5 / Q1 / E3).`,
|
|
387
|
+
);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
357
392
|
/** Build a child AST for `sub`/`exists`: a fresh child query, the optional `build`, compiled. */
|
|
358
393
|
function childAst(child: AnyTable, build: ((q: unknown) => unknown) | undefined): Ast {
|
|
359
394
|
const cm = child[SCHEMA];
|
|
@@ -510,8 +545,12 @@ function makeQuery(
|
|
|
510
545
|
s: State,
|
|
511
546
|
onMat?: (query: AnyQuery) => unknown,
|
|
512
547
|
named?: NamedQueryState,
|
|
548
|
+
// Set on a SERVER-scope root (`newQueryBuilder` / `includeLocal: false`); validates the finalized
|
|
549
|
+
// AST has no local-only table (caught even when reached via a child). Threaded to descendants of
|
|
550
|
+
// the same root so chained `.where`/`.sub`/`.countAs`/stamp keep enforcing it (Q1 / E3).
|
|
551
|
+
guardAst?: (ast: Ast) => void,
|
|
513
552
|
): unknown {
|
|
514
|
-
const next = (patch: Partial<State>): unknown => makeQuery(meta, { ...s, ...patch }, onMat, named);
|
|
553
|
+
const next = (patch: Partial<State>): unknown => makeQuery(meta, { ...s, ...patch }, onMat, named, guardAst);
|
|
515
554
|
const applyField = (field: string, arg: unknown) =>
|
|
516
555
|
next({ wheres: [...s.wheres, fieldCondition(field, arg)] });
|
|
517
556
|
let proxy: unknown;
|
|
@@ -535,7 +574,7 @@ function makeQuery(
|
|
|
535
574
|
);
|
|
536
575
|
}
|
|
537
576
|
const fragAst = childAst(fragTable as AnyTable, fragment as unknown as (q: unknown) => unknown);
|
|
538
|
-
return makeQuery(meta, mergeIncludedFragment(s, fragAst), onMat, named);
|
|
577
|
+
return makeQuery(meta, mergeIncludedFragment(s, fragAst), onMat, named, guardAst);
|
|
539
578
|
},
|
|
540
579
|
sub: (alias: string, childOrRel: AnyTable | AnyRelationship, b?: unknown, c?: unknown) => {
|
|
541
580
|
const { child, corr, build } = resolveCorrelated(childOrRel, b, c);
|
|
@@ -560,7 +599,11 @@ function makeQuery(
|
|
|
560
599
|
};
|
|
561
600
|
return next({ related: [...s.related, csq] });
|
|
562
601
|
},
|
|
563
|
-
ast: () =>
|
|
602
|
+
ast: () => {
|
|
603
|
+
const a = compile(s);
|
|
604
|
+
guardAst?.(a);
|
|
605
|
+
return a;
|
|
606
|
+
},
|
|
564
607
|
materialize: () => {
|
|
565
608
|
if (!onMat) throw new Error("materialize() requires a Store — use store.query.<table>");
|
|
566
609
|
return onMat(proxy as AnyQuery);
|
|
@@ -578,7 +621,8 @@ function makeQuery(
|
|
|
578
621
|
proxy = new Proxy(base, {
|
|
579
622
|
get(target, prop) {
|
|
580
623
|
if (prop === "where") return whereProxy;
|
|
581
|
-
if (prop === STAMP_NAMED_QUERY)
|
|
624
|
+
if (prop === STAMP_NAMED_QUERY)
|
|
625
|
+
return (name: string, args: unknown) => makeQuery(meta, s, onMat, { name, args }, guardAst);
|
|
582
626
|
if (typeof prop === "string" && prop.length > 5 && prop.startsWith("where")) {
|
|
583
627
|
const field = prop[5].toLowerCase() + prop.slice(6);
|
|
584
628
|
return (arg: unknown) => applyField(field, arg);
|
|
@@ -707,11 +751,21 @@ export function notExistsNoSync(a: AnyTable | AnyRelationship, b?: unknown, c?:
|
|
|
707
751
|
|
|
708
752
|
export type QueryRoot<S extends ColsMap> = { [N in keyof S]: Query<S[N]> };
|
|
709
753
|
|
|
754
|
+
/** Scoping for {@link queries} (`201-LOCAL-ONLY-TABLES-DESIGN.md` §5). */
|
|
755
|
+
export interface QueriesOptions {
|
|
756
|
+
/** Include {@link TableMeta.local local-only} tables in the builder's root scope. The **local**
|
|
757
|
+
* builder (`store.query`) sets this; the **server** builder ({@link newQueryBuilder}) does NOT,
|
|
758
|
+
* so naming a local table in a remote/named query is a build error (Q1 / E3 client half). */
|
|
759
|
+
includeLocal?: boolean;
|
|
760
|
+
}
|
|
761
|
+
|
|
710
762
|
/** A typed query entry over a schema: `queries(schema).issue.where.closed(false)…`. */
|
|
711
763
|
export function queries<S extends ColsMap>(
|
|
712
764
|
schema: Schema<S>,
|
|
713
765
|
onMaterialize?: (query: AnyQuery) => unknown,
|
|
766
|
+
opts?: QueriesOptions,
|
|
714
767
|
): QueryRoot<S> {
|
|
768
|
+
const includeLocal = opts?.includeLocal ?? false;
|
|
715
769
|
return new Proxy({} as Record<string, unknown>, {
|
|
716
770
|
get(_t, prop) {
|
|
717
771
|
if (typeof prop !== "string") return undefined;
|
|
@@ -723,12 +777,25 @@ export function queries<S extends ColsMap>(
|
|
|
723
777
|
if (prop[0] === "$" || prop === "then" || prop === "toJSON") return undefined;
|
|
724
778
|
const meta = schema.tables[prop];
|
|
725
779
|
if (!meta) throw new Error(`unknown table: ${prop}`);
|
|
726
|
-
|
|
780
|
+
// Server scope: a local-only table is absent (Q1 / E3 client half) — a remote/named query
|
|
781
|
+
// may never reference one. The local builder (`store.query`) opts in via `includeLocal`.
|
|
782
|
+
if (meta.local && !includeLocal) {
|
|
783
|
+
throw new Error(
|
|
784
|
+
`local-only table "${prop}" may not be used in a server/named query — build it from ` +
|
|
785
|
+
`store.query (the local builder) and materialize it ad-hoc (201-LOCAL-ONLY-TABLES-DESIGN.md §5 / Q1).`,
|
|
786
|
+
);
|
|
787
|
+
}
|
|
788
|
+
// A SERVER-scope builder (`!includeLocal`) also guards CHILD references: the root proxy never
|
|
789
|
+
// sees a table passed by value to `sub`/`countAs`/`exists`, so the finalized AST is re-checked
|
|
790
|
+
// at `.ast()` (Q1 / E3 client half — the complete form of the root check above).
|
|
791
|
+
const guardAst = includeLocal ? undefined : (ast: Ast) => assertNoLocalTables(ast, schema);
|
|
792
|
+
return makeQuery(meta, emptyState(meta.name), onMaterialize, undefined, guardAst);
|
|
727
793
|
},
|
|
728
794
|
}) as QueryRoot<S>;
|
|
729
795
|
}
|
|
730
796
|
|
|
731
|
-
/** A schema-bound query-builder factory for portable client/server query definitions.
|
|
797
|
+
/** A schema-bound query-builder factory for portable client/server query definitions. SERVER
|
|
798
|
+
* scope: local-only tables are excluded (a named/remote query may never reference one). */
|
|
732
799
|
export function newQueryBuilder<S extends ColsMap>(schema: Schema<S>): QueryRoot<S> {
|
|
733
800
|
return queries(schema);
|
|
734
801
|
}
|