@rindle/devtools 0.2.0 → 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 CHANGED
@@ -9,8 +9,8 @@ live read-model of three things ([`DEBUG-TOOLS-BROWSER-DESIGN.md`](../../designs
9
9
  authoritative server result. This is the thing no refetch-based devtools can show.
10
10
  - **Queries inspector** — every live materialized view: its AST, `resultType`, row count + a sample,
11
11
  and whether a pending mutation touches its tables (the pending axis).
12
- - **Delta stream** — the raw IVM change tape: `Add` / `Remove` / `Edit` and nested (child) deltas, off
13
- the per-query event seam.
12
+ - **Delta stream** — authoritative server deltas when the backend can expose them, falling back to
13
+ the local per-query view stream for purely local/in-process backends.
14
14
 
15
15
  This package has **no DOM assumptions** — pair it with a panel (`@rindle/react-devtools`) or read the
16
16
  model yourself. It surfaces state the client already holds; it adds no hot-path instrumentation.
@@ -50,9 +50,10 @@ getDevtoolsHub().subscribe(() => {
50
50
 
51
51
  ## How it stays zero-cost in production
52
52
 
53
- The core reads `Store.__inspect()` / `Store.__attachDevtools()` and the optimistic backend's
54
- `__inspect()` — small read-only methods. Nothing here runs unless you import this package and call
55
- `attachDevtools`, which you do only in a dev build. The wasm engine is untouched.
53
+ The core reads `Store.__inspect()` / `Store.__attachDevtools()`, the optimistic backend's
54
+ `__inspect()`, and an optional backend server-delta tap — small read-only/additive methods. Nothing
55
+ here runs unless you import this package and call `attachDevtools`, which you do only in a dev build.
56
+ The wasm engine is untouched.
56
57
 
57
58
  See the design doc for the full picture and the deferred phases (normalized-cache view, consistency
58
59
  check, engine internals).
package/dist/core.d.ts CHANGED
@@ -3,6 +3,8 @@ export declare class DevtoolsCore {
3
3
  private readonly store;
4
4
  private readonly backend?;
5
5
  private readonly detachStore;
6
+ private readonly detachServerDeltas?;
7
+ private readonly hasServerDeltaTap;
6
8
  private readonly timelineCap;
7
9
  private readonly deltaCap;
8
10
  private readonly sampleRows;
@@ -40,7 +42,9 @@ export declare class DevtoolsCore {
40
42
  clearHistory(): void;
41
43
  /** Detach from the client: stop the poll, drop the store tap, deregister from the global hub. */
42
44
  detach(): void;
43
- private onDelta;
45
+ private attachServerDeltas;
46
+ private onStoreDelta;
47
+ private onServerDelta;
44
48
  private onResultType;
45
49
  private markDirty;
46
50
  private flush;
@@ -51,7 +55,9 @@ export declare class DevtoolsCore {
51
55
  * counted. */
52
56
  private reconcileTimeline;
53
57
  private rebuildQueries;
54
- private pushDelta;
58
+ private pushServerDelta;
59
+ private pushChangeDelta;
60
+ private pushNormalizedDelta;
55
61
  private appendDelta;
56
62
  private addEntry;
57
63
  private renameEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAKV,mBAAmB,EACnB,aAAa,EAEb,cAAc,EAOf,MAAM,YAAY,CAAC;AAiBpB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAiC;IAG7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,kGAAkG;IAClG,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAK;IACrB;kEAC8D;IAC9D,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,UAAU,CAAC,CAAoB;IAEvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEV,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,mBAAwB;IA4BlE;+DAC2D;IAC3D,QAAQ,IAAI,aAAa;IAIzB,iGAAiG;IACjG,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQ3C,qFAAqF;IACrF,OAAO,IAAI,IAAI;IAKf,gEAAgE;IAChE,WAAW,IAAI,IAAI;IAKnB,mGAAmG;IACnG,YAAY,IAAI,IAAI;IAYpB,iGAAiG;IACjG,MAAM,IAAI,IAAI;IASd,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,SAAS;IAsBjB;;;mBAGe;IACf,OAAO,CAAC,iBAAiB;IAiFzB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,WAAW;CASpB"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAMV,mBAAmB,EACnB,aAAa,EAEb,cAAc,EAQf,MAAM,YAAY,CAAC;AAiBpB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAa;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAE5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAiC;IAG7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,kGAAkG;IAClG,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAK;IACrB;kEAC8D;IAC9D,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,UAAU,CAAC,CAAoB;IAEvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEV,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,mBAAwB;IAoClE;+DAC2D;IAC3D,QAAQ,IAAI,aAAa;IAIzB,iGAAiG;IACjG,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQ3C,qFAAqF;IACrF,OAAO,IAAI,IAAI;IAKf,gEAAgE;IAChE,WAAW,IAAI,IAAI;IAKnB,mGAAmG;IACnG,YAAY,IAAI,IAAI;IAYpB,iGAAiG;IACjG,MAAM,IAAI,IAAI;IAUd,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,SAAS;IAsBjB;;;mBAGe;IACf,OAAO,CAAC,iBAAiB;IAiFzB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,WAAW;CASpB"}
package/dist/core.js CHANGED
@@ -1,14 +1,17 @@
1
1
  // DevtoolsCore — the framework-agnostic engine (DEBUG-TOOLS-BROWSER-DESIGN.md §6.1). It attaches to
2
- // a running client through the read-only seams (`Store.__attachDevtools` / `__inspect`, and the
3
- // optimistic backend's `__inspect`), then maintains the §4 read-model: the mutation TIMELINE
2
+ // a running client through the read-only seams (`Store.subscribeChanges` / `subscribeResultType` /
3
+ // `__inspect`, and the optimistic backend's `__inspect`), then maintains the §4 read-model: the
4
+ // mutation TIMELINE
4
5
  // (reconstructed by diffing successive pending-stack snapshots), the QUERIES inspector, and the
5
- // DELTA stream (off the raw per-query `ChangeEvent` tap). No DOM, no app-code changes, no hot path.
6
+ // DELTA stream (preferentially off authoritative backend/server frames, with the Store's raw
7
+ // per-query `ChangeEvent` tap as the local fallback). No DOM, no app-code changes, no hot path.
6
8
  import { collectTables, summarizeAst } from "./ast.js";
7
- /** Narrow a candidate backend to the optimistic capability (the `__inspect` probe, §6.2). */
8
- function asOptimisticBackend(backend) {
9
- return backend && typeof backend.__inspect === "function"
10
- ? backend
11
- : undefined;
9
+ /** Narrow a candidate backend to the optional devtools capability surface (§6.2). */
10
+ function asDevtoolsBackend(backend) {
11
+ if (!backend || typeof backend !== "object")
12
+ return undefined;
13
+ const b = backend;
14
+ return typeof b.__inspect === "function" || typeof b.__attachDevtoolsServerDeltas === "function" ? b : undefined;
12
15
  }
13
16
  const EMPTY_STATE = {
14
17
  timeline: [],
@@ -21,6 +24,8 @@ export class DevtoolsCore {
21
24
  store;
22
25
  backend;
23
26
  detachStore;
27
+ detachServerDeltas;
28
+ hasServerDeltaTap;
24
29
  timelineCap;
25
30
  deltaCap;
26
31
  sampleRows;
@@ -48,16 +53,23 @@ export class DevtoolsCore {
48
53
  onDetach;
49
54
  constructor(target, opts = {}) {
50
55
  this.store = target.store;
51
- this.backend = asOptimisticBackend(target.backend);
56
+ this.backend = asDevtoolsBackend(target.backend);
52
57
  this.timelineCap = opts.timelineCap ?? 200;
53
58
  this.deltaCap = opts.deltaCap ?? 500;
54
59
  this.sampleRows = opts.sampleRows ?? 25;
55
60
  this.autoFlush = opts.autoFlush ?? true;
56
61
  this.now = opts.now ?? (() => Date.now());
57
- this.detachStore = this.store.__attachDevtools({
58
- onDelta: (qid, ev) => this.onDelta(qid, ev),
59
- onResultType: (qid, rt) => this.onResultType(qid, rt),
60
- });
62
+ this.detachServerDeltas = this.attachServerDeltas();
63
+ this.hasServerDeltaTap = !!this.detachServerDeltas;
64
+ // The post-fold delta + resultType taps off the Store's supported subscription seams (the same
65
+ // `subscribeChanges` an app narrates off — no private back door). Both fire AFTER the view folds,
66
+ // which is the timing the snap-back/churn heuristics need.
67
+ const detachDeltas = this.store.subscribeChanges((qid, ev) => this.onStoreDelta(qid, ev));
68
+ const detachResultType = this.store.subscribeResultType((qid, rt) => this.onResultType(qid, rt));
69
+ this.detachStore = () => {
70
+ detachDeltas();
71
+ detachResultType();
72
+ };
61
73
  const pollMs = opts.pollMs ?? 0;
62
74
  if (pollMs > 0) {
63
75
  this.pollHandle = setInterval(() => this.refresh(), pollMs);
@@ -109,17 +121,36 @@ export class DevtoolsCore {
109
121
  if (this.pollHandle)
110
122
  clearInterval(this.pollHandle);
111
123
  this.detachStore();
124
+ this.detachServerDeltas?.();
112
125
  this.onDetach?.();
113
126
  this.listeners.clear();
114
127
  }
115
128
  // --- event taps --------------------------------------------------------------
116
- onDelta(qid, ev) {
117
- this.pushDelta(qid, ev);
129
+ attachServerDeltas() {
130
+ try {
131
+ return this.backend?.__attachDevtoolsServerDeltas?.({
132
+ onServerDelta: (qid, ev) => this.onServerDelta(qid, ev),
133
+ });
134
+ }
135
+ catch {
136
+ return undefined;
137
+ }
138
+ }
139
+ onStoreDelta(qid, ev) {
140
+ // Prefer the authoritative backend/server stream for the visible Deltas pane. The Store tap is
141
+ // still observed for timeline churn: it fires after the view folded the event, which is the
142
+ // signal the snap-back heuristic needs.
143
+ if (!this.hasServerDeltaTap)
144
+ this.pushChangeDelta(qid, ev);
118
145
  // A `batch` carrying real changes is view churn — the signal the snap-back heuristic keys on.
119
146
  if (ev.type === "batch" && ev.events.length > 0)
120
147
  this.churnSeen = true;
121
148
  this.markDirty();
122
149
  }
150
+ onServerDelta(qid, ev) {
151
+ this.pushServerDelta(qid, ev);
152
+ this.markDirty();
153
+ }
123
154
  onResultType(_qid, _rt) {
124
155
  this.markDirty();
125
156
  }
@@ -144,7 +175,7 @@ export class DevtoolsCore {
144
175
  // --- recompute ---------------------------------------------------------------
145
176
  recompute() {
146
177
  let opt;
147
- if (this.backend) {
178
+ if (this.backend?.__inspect) {
148
179
  try {
149
180
  opt = this.backend.__inspect();
150
181
  }
@@ -162,7 +193,7 @@ export class DevtoolsCore {
162
193
  queries: this.queries,
163
194
  deltas: this.deltas.slice(),
164
195
  optimistic: opt,
165
- capabilities: { optimistic: !!this.backend },
196
+ capabilities: { optimistic: typeof this.backend?.__inspect === "function" },
166
197
  };
167
198
  }
168
199
  /** Reconstruct the fork/rebase lifecycle by diffing this pending snapshot against the previous
@@ -276,7 +307,14 @@ export class DevtoolsCore {
276
307
  }
277
308
  }
278
309
  // --- delta ring --------------------------------------------------------------
279
- pushDelta(qid, ev) {
310
+ pushServerDelta(qid, ev) {
311
+ if (ev.format === "flat") {
312
+ this.pushChangeDelta(qid, ev.event);
313
+ return;
314
+ }
315
+ this.pushNormalizedDelta(qid, ev.event);
316
+ }
317
+ pushChangeDelta(qid, ev) {
280
318
  if (ev.type === "hello") {
281
319
  this.appendDelta(qid, "hello", 0, `hello · ${ev.schema.columns.length} col${ev.schema.columns.length === 1 ? "" : "s"}`);
282
320
  }
@@ -291,6 +329,19 @@ export class DevtoolsCore {
291
329
  }
292
330
  }
293
331
  }
332
+ pushNormalizedDelta(qid, ev) {
333
+ if (ev.type === "hello") {
334
+ this.appendDelta(qid, "hello", 0, `server hello · ${ev.tables.length} table${ev.tables.length === 1 ? "" : "s"}`);
335
+ }
336
+ else if (ev.type === "snapshot") {
337
+ const n = ev.ops.length;
338
+ this.appendDelta(qid, "snapshot", 0, `server snapshot · ${n} op${n === 1 ? "" : "s"}${cvLabel(ev.cv)}`);
339
+ }
340
+ else {
341
+ for (const op of ev.ops)
342
+ this.appendDelta(qid, op.op, 0, describeNormalizedOp(op) + cvLabel(ev.cv));
343
+ }
344
+ }
294
345
  appendDelta(qid, kind, depth, label) {
295
346
  this.deltas.push({ seq: this.deltaSeq++, at: this.now(), qid, kind, depth, label });
296
347
  if (this.deltas.length > this.deltaCap)
@@ -339,6 +390,16 @@ function describeOp(op) {
339
390
  return `remove ${rowPreview(op.row)}`;
340
391
  return `edit ${rowPreview(op.old)} → ${rowPreview(op.new)}`;
341
392
  }
393
+ function describeNormalizedOp(op) {
394
+ if (op.op === "add")
395
+ return `add ${op.table} ${rowPreview(op.row)}`;
396
+ if (op.op === "remove")
397
+ return `remove ${op.table} ${rowPreview(op.row)}`;
398
+ return `edit ${op.table} ${rowPreview(op.old)} → ${rowPreview(op.new)}`;
399
+ }
400
+ function cvLabel(cv) {
401
+ return cv === undefined ? "" : ` · cv ${cv}`;
402
+ }
342
403
  function rowPreview(row) {
343
404
  const head = row.slice(0, 3).map(cellStr).join(", ");
344
405
  return `[${head}${row.length > 3 ? ", …" : ""}]`;
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export { DevtoolsCore } from "./core.ts";
2
2
  export { attachDevtools, getDevtoolsCore, getDevtoolsHub } from "./global.ts";
3
3
  export type { DevtoolsHub } from "./global.ts";
4
4
  export { collectTables, summarizeAst } from "./ast.ts";
5
- export type { DeltaEntry, DeltaKind, DevtoolsBackend, DevtoolsCoreOptions, DevtoolsState, DevtoolsStore, DevtoolsTarget, FoldInspect, MutationState, OptimisticInspect, PendingInspect, QueryEntry, TimelineEntry, } from "./types.ts";
6
- export type { Ast, ChangeEvent, QueryId, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
5
+ export type { BackendDevObserver, BackendServerDelta, DeltaEntry, DeltaKind, DevtoolsBackend, DevtoolsCoreOptions, DevtoolsState, DevtoolsStore, DevtoolsTarget, FoldInspect, MutationState, OptimisticInspect, PendingInspect, QueryEntry, TimelineEntry, } from "./types.ts";
6
+ export type { Ast, ChangeEvent, NormalizedOp, QueryId, ResultType, StoreInspect } from "@rindle/client";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvD,YAAY,EACV,UAAU,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { Ast, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
2
- export type { Ast, ChangeEvent, FlatChange, FlatOp, QueryId, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
1
+ import type { Ast, BackendDevObserver, ChangeEvent, QueryId, ResultType, StoreInspect } from "@rindle/client";
2
+ export type { Ast, BackendDevObserver, BackendServerDelta, ChangeEvent, FlatChange, FlatOp, NormalizedOp, QueryId, ResultType, StoreInspect, } from "@rindle/client";
3
3
  /** One folded entry's debounce window — mirror of `@rindle/optimistic`'s `FoldInspect`. */
4
4
  export interface FoldInspect {
5
5
  foldKey: string;
@@ -26,15 +26,19 @@ export interface OptimisticInspect {
26
26
  bufferedFrames: number;
27
27
  pendingTables: string[];
28
28
  }
29
- /** The Store surface the core reads (a structural subset of `@rindle/client`'s `Store`). */
29
+ /** The Store surface the core reads (a structural subset of `@rindle/client`'s `Store`). The delta
30
+ * + resultType taps are the SUPPORTED app-facing seams (no private devtools back door). */
30
31
  export interface DevtoolsStore {
31
- __attachDevtools(observer: StoreDevObserver): () => void;
32
+ subscribeChanges(listener: (qid: QueryId, ev: ChangeEvent) => void): () => void;
33
+ subscribeResultType(listener: (qid: QueryId, rt: ResultType) => void): () => void;
32
34
  __inspect(sampleRows?: number): StoreInspect;
33
35
  }
34
- /** The optional optimistic-backend capability present on `OptimisticBackend`, absent on a plain
35
- * wasm/replica backend (then there is no mutation timeline, but queries + deltas still work). */
36
+ /** Optional backend-side devtools capabilities. `__inspect` is present on `OptimisticBackend`;
37
+ * `__attachDevtoolsServerDeltas` is present on backends that can surface authoritative server
38
+ * frames separately from the Store's post-apply view stream. */
36
39
  export interface DevtoolsBackend {
37
- __inspect(): OptimisticInspect;
40
+ __inspect?(): OptimisticInspect;
41
+ __attachDevtoolsServerDeltas?(observer: BackendDevObserver): () => void;
38
42
  }
39
43
  /** What {@link attachDevtools} binds to: a `createRindleClient` app, or any `{ store, backend }`. */
40
44
  export interface DevtoolsTarget {
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindle/devtools",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  "README.md"
26
26
  ],
27
27
  "dependencies": {
28
- "@rindle/client": "0.2.0"
28
+ "@rindle/client": "0.3.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.10.0",
package/src/core.ts CHANGED
@@ -1,11 +1,14 @@
1
1
  // DevtoolsCore — the framework-agnostic engine (DEBUG-TOOLS-BROWSER-DESIGN.md §6.1). It attaches to
2
- // a running client through the read-only seams (`Store.__attachDevtools` / `__inspect`, and the
3
- // optimistic backend's `__inspect`), then maintains the §4 read-model: the mutation TIMELINE
2
+ // a running client through the read-only seams (`Store.subscribeChanges` / `subscribeResultType` /
3
+ // `__inspect`, and the optimistic backend's `__inspect`), then maintains the §4 read-model: the
4
+ // mutation TIMELINE
4
5
  // (reconstructed by diffing successive pending-stack snapshots), the QUERIES inspector, and the
5
- // DELTA stream (off the raw per-query `ChangeEvent` tap). No DOM, no app-code changes, no hot path.
6
+ // DELTA stream (preferentially off authoritative backend/server frames, with the Store's raw
7
+ // per-query `ChangeEvent` tap as the local fallback). No DOM, no app-code changes, no hot path.
6
8
 
7
9
  import { collectTables, summarizeAst } from "./ast.ts";
8
10
  import type {
11
+ BackendServerDelta,
9
12
  ChangeEvent,
10
13
  DeltaEntry,
11
14
  DeltaKind,
@@ -15,6 +18,7 @@ import type {
15
18
  DevtoolsStore,
16
19
  DevtoolsTarget,
17
20
  FlatOp,
21
+ NormalizedOp,
18
22
  OptimisticInspect,
19
23
  QueryEntry,
20
24
  QueryId,
@@ -22,11 +26,11 @@ import type {
22
26
  TimelineEntry,
23
27
  } from "./types.ts";
24
28
 
25
- /** Narrow a candidate backend to the optimistic capability (the `__inspect` probe, §6.2). */
26
- function asOptimisticBackend(backend: unknown): DevtoolsBackend | undefined {
27
- return backend && typeof (backend as DevtoolsBackend).__inspect === "function"
28
- ? (backend as DevtoolsBackend)
29
- : undefined;
29
+ /** Narrow a candidate backend to the optional devtools capability surface (§6.2). */
30
+ function asDevtoolsBackend(backend: unknown): DevtoolsBackend | undefined {
31
+ if (!backend || typeof backend !== "object") return undefined;
32
+ const b = backend as DevtoolsBackend;
33
+ return typeof b.__inspect === "function" || typeof b.__attachDevtoolsServerDeltas === "function" ? b : undefined;
30
34
  }
31
35
 
32
36
  const EMPTY_STATE: DevtoolsState = {
@@ -41,6 +45,8 @@ export class DevtoolsCore {
41
45
  private readonly store: DevtoolsStore;
42
46
  private readonly backend?: DevtoolsBackend;
43
47
  private readonly detachStore: () => void;
48
+ private readonly detachServerDeltas?: () => void;
49
+ private readonly hasServerDeltaTap: boolean;
44
50
 
45
51
  private readonly timelineCap: number;
46
52
  private readonly deltaCap: number;
@@ -74,17 +80,25 @@ export class DevtoolsCore {
74
80
 
75
81
  constructor(target: DevtoolsTarget, opts: DevtoolsCoreOptions = {}) {
76
82
  this.store = target.store;
77
- this.backend = asOptimisticBackend(target.backend);
83
+ this.backend = asDevtoolsBackend(target.backend);
78
84
  this.timelineCap = opts.timelineCap ?? 200;
79
85
  this.deltaCap = opts.deltaCap ?? 500;
80
86
  this.sampleRows = opts.sampleRows ?? 25;
81
87
  this.autoFlush = opts.autoFlush ?? true;
82
88
  this.now = opts.now ?? (() => Date.now());
83
89
 
84
- this.detachStore = this.store.__attachDevtools({
85
- onDelta: (qid, ev) => this.onDelta(qid, ev),
86
- onResultType: (qid, rt) => this.onResultType(qid, rt),
87
- });
90
+ this.detachServerDeltas = this.attachServerDeltas();
91
+ this.hasServerDeltaTap = !!this.detachServerDeltas;
92
+
93
+ // The post-fold delta + resultType taps off the Store's supported subscription seams (the same
94
+ // `subscribeChanges` an app narrates off — no private back door). Both fire AFTER the view folds,
95
+ // which is the timing the snap-back/churn heuristics need.
96
+ const detachDeltas = this.store.subscribeChanges((qid, ev) => this.onStoreDelta(qid, ev));
97
+ const detachResultType = this.store.subscribeResultType((qid, rt) => this.onResultType(qid, rt));
98
+ this.detachStore = () => {
99
+ detachDeltas();
100
+ detachResultType();
101
+ };
88
102
 
89
103
  const pollMs = opts.pollMs ?? 0;
90
104
  if (pollMs > 0) {
@@ -144,19 +158,38 @@ export class DevtoolsCore {
144
158
  detach(): void {
145
159
  if (this.pollHandle) clearInterval(this.pollHandle);
146
160
  this.detachStore();
161
+ this.detachServerDeltas?.();
147
162
  this.onDetach?.();
148
163
  this.listeners.clear();
149
164
  }
150
165
 
151
166
  // --- event taps --------------------------------------------------------------
152
167
 
153
- private onDelta(qid: QueryId, ev: ChangeEvent): void {
154
- this.pushDelta(qid, ev);
168
+ private attachServerDeltas(): (() => void) | undefined {
169
+ try {
170
+ return this.backend?.__attachDevtoolsServerDeltas?.({
171
+ onServerDelta: (qid, ev) => this.onServerDelta(qid, ev),
172
+ });
173
+ } catch {
174
+ return undefined;
175
+ }
176
+ }
177
+
178
+ private onStoreDelta(qid: QueryId, ev: ChangeEvent): void {
179
+ // Prefer the authoritative backend/server stream for the visible Deltas pane. The Store tap is
180
+ // still observed for timeline churn: it fires after the view folded the event, which is the
181
+ // signal the snap-back heuristic needs.
182
+ if (!this.hasServerDeltaTap) this.pushChangeDelta(qid, ev);
155
183
  // A `batch` carrying real changes is view churn — the signal the snap-back heuristic keys on.
156
184
  if (ev.type === "batch" && ev.events.length > 0) this.churnSeen = true;
157
185
  this.markDirty();
158
186
  }
159
187
 
188
+ private onServerDelta(qid: QueryId, ev: BackendServerDelta): void {
189
+ this.pushServerDelta(qid, ev);
190
+ this.markDirty();
191
+ }
192
+
160
193
  private onResultType(_qid: QueryId, _rt: ResultType): void {
161
194
  this.markDirty();
162
195
  }
@@ -183,7 +216,7 @@ export class DevtoolsCore {
183
216
 
184
217
  private recompute(): void {
185
218
  let opt: OptimisticInspect | undefined;
186
- if (this.backend) {
219
+ if (this.backend?.__inspect) {
187
220
  try {
188
221
  opt = this.backend.__inspect();
189
222
  } catch {
@@ -199,7 +232,7 @@ export class DevtoolsCore {
199
232
  queries: this.queries,
200
233
  deltas: this.deltas.slice(),
201
234
  optimistic: opt,
202
- capabilities: { optimistic: !!this.backend },
235
+ capabilities: { optimistic: typeof this.backend?.__inspect === "function" },
203
236
  };
204
237
  }
205
238
 
@@ -317,7 +350,15 @@ export class DevtoolsCore {
317
350
 
318
351
  // --- delta ring --------------------------------------------------------------
319
352
 
320
- private pushDelta(qid: QueryId, ev: ChangeEvent): void {
353
+ private pushServerDelta(qid: QueryId, ev: BackendServerDelta): void {
354
+ if (ev.format === "flat") {
355
+ this.pushChangeDelta(qid, ev.event);
356
+ return;
357
+ }
358
+ this.pushNormalizedDelta(qid, ev.event);
359
+ }
360
+
361
+ private pushChangeDelta(qid: QueryId, ev: ChangeEvent): void {
321
362
  if (ev.type === "hello") {
322
363
  this.appendDelta(qid, "hello", 0, `hello · ${ev.schema.columns.length} col${ev.schema.columns.length === 1 ? "" : "s"}`);
323
364
  } else if (ev.type === "snapshot") {
@@ -331,6 +372,17 @@ export class DevtoolsCore {
331
372
  }
332
373
  }
333
374
 
375
+ private pushNormalizedDelta(qid: QueryId, ev: Extract<BackendServerDelta, { format: "normalized" }>["event"]): void {
376
+ if (ev.type === "hello") {
377
+ this.appendDelta(qid, "hello", 0, `server hello · ${ev.tables.length} table${ev.tables.length === 1 ? "" : "s"}`);
378
+ } else if (ev.type === "snapshot") {
379
+ const n = ev.ops.length;
380
+ this.appendDelta(qid, "snapshot", 0, `server snapshot · ${n} op${n === 1 ? "" : "s"}${cvLabel(ev.cv)}`);
381
+ } else {
382
+ for (const op of ev.ops) this.appendDelta(qid, op.op, 0, describeNormalizedOp(op) + cvLabel(ev.cv));
383
+ }
384
+ }
385
+
334
386
  private appendDelta(qid: QueryId, kind: DeltaKind, depth: number, label: string): void {
335
387
  this.deltas.push({ seq: this.deltaSeq++, at: this.now(), qid, kind, depth, label });
336
388
  if (this.deltas.length > this.deltaCap) this.deltas.splice(0, this.deltas.length - this.deltaCap);
@@ -377,6 +429,16 @@ function describeOp(op: FlatOp): string {
377
429
  return `edit ${rowPreview(op.old)} → ${rowPreview(op.new)}`;
378
430
  }
379
431
 
432
+ function describeNormalizedOp(op: NormalizedOp): string {
433
+ if (op.op === "add") return `add ${op.table} ${rowPreview(op.row)}`;
434
+ if (op.op === "remove") return `remove ${op.table} ${rowPreview(op.row)}`;
435
+ return `edit ${op.table} ${rowPreview(op.old)} → ${rowPreview(op.new)}`;
436
+ }
437
+
438
+ function cvLabel(cv: number | undefined): string {
439
+ return cv === undefined ? "" : ` · cv ${cv}`;
440
+ }
441
+
380
442
  function rowPreview(row: readonly unknown[]): string {
381
443
  const head = row.slice(0, 3).map(cellStr).join(", ");
382
444
  return `[${head}${row.length > 3 ? ", …" : ""}]`;
package/src/index.ts CHANGED
@@ -10,6 +10,8 @@ export type { DevtoolsHub } from "./global.ts";
10
10
  export { collectTables, summarizeAst } from "./ast.ts";
11
11
 
12
12
  export type {
13
+ BackendDevObserver,
14
+ BackendServerDelta,
13
15
  DeltaEntry,
14
16
  DeltaKind,
15
17
  DevtoolsBackend,
@@ -27,4 +29,4 @@ export type {
27
29
 
28
30
  // Re-export the client types a panel or a custom attach target needs, so it can depend on
29
31
  // `@rindle/devtools` alone.
30
- export type { Ast, ChangeEvent, QueryId, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
32
+ export type { Ast, ChangeEvent, NormalizedOp, QueryId, ResultType, StoreInspect } from "@rindle/client";
package/src/types.ts CHANGED
@@ -2,9 +2,28 @@
2
2
  // attaches to. Everything here is derived, in dev, from state the client already holds — the core
3
3
  // adds no hot-path instrumentation (§1.1 "surface, not instrument").
4
4
 
5
- import type { Ast, ChangeEvent, QueryId, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
6
-
7
- export type { Ast, ChangeEvent, FlatChange, FlatOp, QueryId, ResultType, StoreDevObserver, StoreInspect } from "@rindle/client";
5
+ import type {
6
+ Ast,
7
+ BackendDevObserver,
8
+ BackendServerDelta,
9
+ ChangeEvent,
10
+ QueryId,
11
+ ResultType,
12
+ StoreInspect,
13
+ } from "@rindle/client";
14
+
15
+ export type {
16
+ Ast,
17
+ BackendDevObserver,
18
+ BackendServerDelta,
19
+ ChangeEvent,
20
+ FlatChange,
21
+ FlatOp,
22
+ NormalizedOp,
23
+ QueryId,
24
+ ResultType,
25
+ StoreInspect,
26
+ } from "@rindle/client";
8
27
 
9
28
  // --- the attach target (duck-typed) ------------------------------------------------
10
29
  // The core binds to a running client by structural type only — it never imports `@rindle/optimistic`
@@ -41,16 +60,20 @@ export interface OptimisticInspect {
41
60
  pendingTables: string[];
42
61
  }
43
62
 
44
- /** The Store surface the core reads (a structural subset of `@rindle/client`'s `Store`). */
63
+ /** The Store surface the core reads (a structural subset of `@rindle/client`'s `Store`). The delta
64
+ * + resultType taps are the SUPPORTED app-facing seams (no private devtools back door). */
45
65
  export interface DevtoolsStore {
46
- __attachDevtools(observer: StoreDevObserver): () => void;
66
+ subscribeChanges(listener: (qid: QueryId, ev: ChangeEvent) => void): () => void;
67
+ subscribeResultType(listener: (qid: QueryId, rt: ResultType) => void): () => void;
47
68
  __inspect(sampleRows?: number): StoreInspect;
48
69
  }
49
70
 
50
- /** The optional optimistic-backend capability present on `OptimisticBackend`, absent on a plain
51
- * wasm/replica backend (then there is no mutation timeline, but queries + deltas still work). */
71
+ /** Optional backend-side devtools capabilities. `__inspect` is present on `OptimisticBackend`;
72
+ * `__attachDevtoolsServerDeltas` is present on backends that can surface authoritative server
73
+ * frames separately from the Store's post-apply view stream. */
52
74
  export interface DevtoolsBackend {
53
- __inspect(): OptimisticInspect;
75
+ __inspect?(): OptimisticInspect;
76
+ __attachDevtoolsServerDeltas?(observer: BackendDevObserver): () => void;
54
77
  }
55
78
 
56
79
  /** What {@link attachDevtools} binds to: a `createRindleClient` app, or any `{ store, backend }`. */