@astrale-os/kernel-client 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/addressing.d.ts +32 -0
- package/dist/auth/addressing.d.ts.map +1 -0
- package/dist/auth/addressing.js +36 -0
- package/dist/auth/addressing.js.map +1 -0
- package/dist/auth/api.d.ts +69 -0
- package/dist/auth/api.d.ts.map +1 -0
- package/dist/auth/api.js +24 -0
- package/dist/auth/api.js.map +1 -0
- package/dist/auth/batch.d.ts +18 -0
- package/dist/auth/batch.d.ts.map +1 -0
- package/dist/auth/batch.js +25 -0
- package/dist/auth/batch.js.map +1 -0
- package/dist/auth/composition.d.ts +27 -0
- package/dist/auth/composition.d.ts.map +1 -0
- package/dist/auth/composition.js +83 -0
- package/dist/auth/composition.js.map +1 -0
- package/dist/auth/index.d.ts +14 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/minting.d.ts +35 -0
- package/dist/auth/minting.d.ts.map +1 -0
- package/dist/auth/minting.js +35 -0
- package/dist/auth/minting.js.map +1 -0
- package/dist/auth/permissions.d.ts +55 -0
- package/dist/auth/permissions.d.ts.map +1 -0
- package/dist/auth/permissions.js +47 -0
- package/dist/auth/permissions.js.map +1 -0
- package/dist/auth/principal.d.ts +19 -0
- package/dist/auth/principal.d.ts.map +1 -0
- package/dist/auth/principal.js +46 -0
- package/dist/auth/principal.js.map +1 -0
- package/dist/errors/errors.d.ts +53 -0
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +69 -1
- package/dist/errors/errors.js.map +1 -1
- package/dist/errors/guards.d.ts +39 -0
- package/dist/errors/guards.d.ts.map +1 -0
- package/dist/errors/guards.js +127 -0
- package/dist/errors/guards.js.map +1 -0
- package/dist/errors/index.d.ts +4 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/graph/api.d.ts +82 -0
- package/dist/graph/api.d.ts.map +1 -0
- package/dist/graph/api.js +64 -0
- package/dist/graph/api.js.map +1 -0
- package/dist/graph/index.d.ts +24 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +20 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/mutate/builder.d.ts +108 -0
- package/dist/graph/mutate/builder.d.ts.map +1 -0
- package/dist/graph/mutate/builder.js +127 -0
- package/dist/graph/mutate/builder.js.map +1 -0
- package/dist/graph/mutate/index.d.ts +5 -0
- package/dist/graph/mutate/index.d.ts.map +1 -0
- package/dist/graph/mutate/index.js +3 -0
- package/dist/graph/mutate/index.js.map +1 -0
- package/dist/graph/mutate/shorthands.d.ts +42 -0
- package/dist/graph/mutate/shorthands.d.ts.map +1 -0
- package/dist/graph/mutate/shorthands.js +65 -0
- package/dist/graph/mutate/shorthands.js.map +1 -0
- package/dist/graph/named.d.ts +38 -0
- package/dist/graph/named.d.ts.map +1 -0
- package/dist/graph/named.js +47 -0
- package/dist/graph/named.js.map +1 -0
- package/dist/graph/query/builder.d.ts +116 -0
- package/dist/graph/query/builder.d.ts.map +1 -0
- package/dist/graph/query/builder.js +136 -0
- package/dist/graph/query/builder.js.map +1 -0
- package/dist/graph/query/edge-ref.d.ts +13 -0
- package/dist/graph/query/edge-ref.d.ts.map +1 -0
- package/dist/graph/query/edge-ref.js +56 -0
- package/dist/graph/query/edge-ref.js.map +1 -0
- package/dist/graph/query/edges.d.ts +10 -0
- package/dist/graph/query/edges.d.ts.map +1 -0
- package/dist/graph/query/edges.js +11 -0
- package/dist/graph/query/edges.js.map +1 -0
- package/dist/graph/query/errors.d.ts +31 -0
- package/dist/graph/query/errors.d.ts.map +1 -0
- package/dist/graph/query/errors.js +28 -0
- package/dist/graph/query/errors.js.map +1 -0
- package/dist/graph/query/filter.d.ts +50 -0
- package/dist/graph/query/filter.d.ts.map +1 -0
- package/dist/graph/query/filter.js +32 -0
- package/dist/graph/query/filter.js.map +1 -0
- package/dist/graph/query/index.d.ts +12 -0
- package/dist/graph/query/index.d.ts.map +1 -0
- package/dist/graph/query/index.js +7 -0
- package/dist/graph/query/index.js.map +1 -0
- package/dist/graph/query/lower.d.ts +30 -0
- package/dist/graph/query/lower.d.ts.map +1 -0
- package/dist/graph/query/lower.js +171 -0
- package/dist/graph/query/lower.js.map +1 -0
- package/dist/graph/query/shorthands.d.ts +34 -0
- package/dist/graph/query/shorthands.d.ts.map +1 -0
- package/dist/graph/query/shorthands.js +71 -0
- package/dist/graph/query/shorthands.js.map +1 -0
- package/dist/graph/query/traverse.d.ts +59 -0
- package/dist/graph/query/traverse.d.ts.map +1 -0
- package/dist/graph/query/traverse.js +144 -0
- package/dist/graph/query/traverse.js.map +1 -0
- package/dist/graph/result/envelope.d.ts +37 -0
- package/dist/graph/result/envelope.d.ts.map +1 -0
- package/dist/graph/result/envelope.js +59 -0
- package/dist/graph/result/envelope.js.map +1 -0
- package/dist/graph/result/index.d.ts +6 -0
- package/dist/graph/result/index.d.ts.map +1 -0
- package/dist/graph/result/index.js +4 -0
- package/dist/graph/result/index.js.map +1 -0
- package/dist/graph/result/next.d.ts +16 -0
- package/dist/graph/result/next.d.ts.map +1 -0
- package/dist/graph/result/next.js +77 -0
- package/dist/graph/result/next.js.map +1 -0
- package/dist/graph/result/paged.d.ts +30 -0
- package/dist/graph/result/paged.d.ts.map +1 -0
- package/dist/graph/result/paged.js +41 -0
- package/dist/graph/result/paged.js.map +1 -0
- package/dist/graph/wire.d.ts +33 -0
- package/dist/graph/wire.d.ts.map +1 -0
- package/dist/graph/wire.js +16 -0
- package/dist/graph/wire.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/bound/binder.d.ts +49 -0
- package/dist/schema/bound/binder.d.ts.map +1 -0
- package/dist/schema/bound/binder.js +192 -0
- package/dist/schema/bound/binder.js.map +1 -0
- package/dist/schema/bound/bound-node.d.ts +89 -0
- package/dist/schema/bound/bound-node.d.ts.map +1 -0
- package/dist/schema/bound/bound-node.js +77 -0
- package/dist/schema/bound/bound-node.js.map +1 -0
- package/dist/schema/bound/index.d.ts +10 -0
- package/dist/schema/bound/index.d.ts.map +1 -0
- package/dist/schema/bound/index.js +5 -0
- package/dist/schema/bound/index.js.map +1 -0
- package/dist/schema/bound/view.d.ts +48 -0
- package/dist/schema/bound/view.d.ts.map +1 -0
- package/dist/schema/bound/view.js +90 -0
- package/dist/schema/bound/view.js.map +1 -0
- package/dist/schema/bound/write-props.d.ts +38 -0
- package/dist/schema/bound/write-props.d.ts.map +1 -0
- package/dist/schema/bound/write-props.js +2 -0
- package/dist/schema/bound/write-props.js.map +1 -0
- package/dist/schema/extract.d.ts +12 -0
- package/dist/schema/extract.d.ts.map +1 -1
- package/dist/schema/extract.js +16 -0
- package/dist/schema/extract.js.map +1 -1
- package/dist/schema/index.d.ts +7 -3
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/node-proxy.d.ts +9 -0
- package/dist/schema/node-proxy.d.ts.map +1 -1
- package/dist/schema/node-proxy.js +31 -1
- package/dist/schema/node-proxy.js.map +1 -1
- package/dist/{persistence → schema}/persistence.d.ts +1 -22
- package/dist/schema/persistence.d.ts.map +1 -0
- package/dist/schema/persistence.js +2 -0
- package/dist/schema/persistence.js.map +1 -0
- package/dist/schema/proxy-types.d.ts +28 -22
- package/dist/schema/proxy-types.d.ts.map +1 -1
- package/dist/schema/registry.d.ts +1 -2
- package/dist/schema/registry.d.ts.map +1 -1
- package/dist/schema/registry.js +1 -2
- package/dist/schema/registry.js.map +1 -1
- package/dist/session/bound.d.ts.map +1 -1
- package/dist/session/bound.js +15 -2
- package/dist/session/bound.js.map +1 -1
- package/dist/session/client-session.d.ts +1 -1
- package/dist/session/client-session.d.ts.map +1 -1
- package/dist/session/client-session.js +5 -5
- package/dist/session/client-session.js.map +1 -1
- package/dist/session/config.d.ts +8 -4
- package/dist/session/config.d.ts.map +1 -1
- package/dist/{delegation → session/delegation}/cache.d.ts +3 -4
- package/dist/session/delegation/cache.d.ts.map +1 -0
- package/dist/session/delegation/cache.js.map +1 -0
- package/dist/{delegation → session/delegation}/errors.d.ts +1 -1
- package/dist/session/delegation/errors.d.ts.map +1 -0
- package/dist/{delegation → session/delegation}/errors.js +1 -1
- package/dist/session/delegation/errors.js.map +1 -0
- package/dist/session/delegation/policy.d.ts.map +1 -0
- package/dist/{delegation → session/delegation}/policy.js +1 -1
- package/dist/session/delegation/policy.js.map +1 -0
- package/dist/session/delegation-mint.d.ts +13 -0
- package/dist/session/delegation-mint.d.ts.map +1 -0
- package/dist/session/delegation-mint.js +31 -0
- package/dist/session/delegation-mint.js.map +1 -0
- package/dist/session/errors/index.d.ts +2 -2
- package/dist/session/errors/index.d.ts.map +1 -1
- package/dist/session/errors/index.js +2 -2
- package/dist/session/errors/index.js.map +1 -1
- package/dist/session/helpers.js +2 -2
- package/dist/session/helpers.js.map +1 -1
- package/dist/session/index.d.ts +9 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +6 -1
- package/dist/session/index.js.map +1 -1
- package/dist/{redirect → session/redirect}/errors.d.ts +1 -1
- package/dist/session/redirect/errors.d.ts.map +1 -0
- package/dist/{redirect → session/redirect}/errors.js +1 -1
- package/dist/session/redirect/errors.js.map +1 -0
- package/dist/session/redirect/policy.d.ts.map +1 -0
- package/dist/{redirect → session/redirect}/policy.js +1 -1
- package/dist/session/redirect/policy.js.map +1 -0
- package/dist/session/types.d.ts +13 -2
- package/dist/session/types.d.ts.map +1 -1
- package/dist/store/canonicalize.d.ts +44 -0
- package/dist/store/canonicalize.d.ts.map +1 -0
- package/dist/store/canonicalize.js +0 -0
- package/dist/store/canonicalize.js.map +1 -0
- package/dist/store/entities.d.ts +81 -0
- package/dist/store/entities.d.ts.map +1 -0
- package/dist/store/entities.js +202 -0
- package/dist/store/entities.js.map +1 -0
- package/dist/store/index.d.ts +26 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +19 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/invalidate.d.ts +66 -0
- package/dist/store/invalidate.d.ts.map +1 -0
- package/dist/store/invalidate.js +117 -0
- package/dist/store/invalidate.js.map +1 -0
- package/dist/store/memory.d.ts +97 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +790 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/overlay.d.ts +118 -0
- package/dist/store/overlay.d.ts.map +1 -0
- package/dist/store/overlay.js +237 -0
- package/dist/store/overlay.js.map +1 -0
- package/dist/store/schedule.d.ts +31 -0
- package/dist/store/schedule.d.ts.map +1 -0
- package/dist/store/schedule.js +76 -0
- package/dist/store/schedule.js.map +1 -0
- package/dist/store/shapes.d.ts +92 -0
- package/dist/store/shapes.d.ts.map +1 -0
- package/dist/store/shapes.js +369 -0
- package/dist/store/shapes.js.map +1 -0
- package/dist/store/types.d.ts +168 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +7 -0
- package/dist/store/types.js.map +1 -0
- package/dist/transport/fetch.d.ts +1 -1
- package/dist/transport/fetch.js +1 -1
- package/package.json +15 -31
- package/dist/delegation/cache.d.ts.map +0 -1
- package/dist/delegation/cache.js.map +0 -1
- package/dist/delegation/errors.d.ts.map +0 -1
- package/dist/delegation/errors.js.map +0 -1
- package/dist/delegation/index.d.ts +0 -6
- package/dist/delegation/index.d.ts.map +0 -1
- package/dist/delegation/index.js +0 -4
- package/dist/delegation/index.js.map +0 -1
- package/dist/delegation/policy.d.ts.map +0 -1
- package/dist/delegation/policy.js.map +0 -1
- package/dist/persistence/index.d.ts +0 -3
- package/dist/persistence/index.d.ts.map +0 -1
- package/dist/persistence/index.js +0 -2
- package/dist/persistence/index.js.map +0 -1
- package/dist/persistence/persistence.d.ts.map +0 -1
- package/dist/persistence/persistence.js +0 -32
- package/dist/persistence/persistence.js.map +0 -1
- package/dist/redirect/errors.d.ts.map +0 -1
- package/dist/redirect/errors.js.map +0 -1
- package/dist/redirect/index.d.ts +0 -4
- package/dist/redirect/index.d.ts.map +0 -1
- package/dist/redirect/index.js +0 -3
- package/dist/redirect/index.js.map +0 -1
- package/dist/redirect/policy.d.ts.map +0 -1
- package/dist/redirect/policy.js.map +0 -1
- /package/dist/{delegation → session/delegation}/cache.js +0 -0
- /package/dist/{delegation → session/delegation}/policy.d.ts +0 -0
- /package/dist/{redirect → session/redirect}/policy.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGvC,OAAO,EACL,eAAe,EACf,eAAe,EACf,QAAQ,EACR,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAGrC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier-0 invalidation matching (FRONTEND §5.6 / §5.7).
|
|
3
|
+
*
|
|
4
|
+
* Because the runnable algebra is closed (a single `has_parent` descent + N
|
|
5
|
+
* single-hop gathers), "does patch P affect shape S" is decidable client-side
|
|
6
|
+
* with no kernel change. This module is pure over a {@link ShapeView} — the
|
|
7
|
+
* ShapeStore supplies the view, the overlay/memory apply the matches.
|
|
8
|
+
*
|
|
9
|
+
* SHIM CONTRACT (§5.7): this is a deliberately OVER-BROAD disposable shim, the
|
|
10
|
+
* whole reason SAFE MODE is "slow but never wrong". A false positive costs one
|
|
11
|
+
* needless refetch; a false NEGATIVE is a shape that silently never reconciles —
|
|
12
|
+
* a stale view and hours of debugging, and is FORBIDDEN. So every arm biases to
|
|
13
|
+
* "affected" the instant it is uncertain (an unresolved class, an unknown edge
|
|
14
|
+
* selector, a path form it cannot compare). Do NOT grow this toward faithful
|
|
15
|
+
* query semantics to shave refetches — `function.watch` (§7) deletes it whole,
|
|
16
|
+
* and with it the whole dual-semantics burden.
|
|
17
|
+
*/
|
|
18
|
+
import type { GraphNodeWire } from '../graph';
|
|
19
|
+
import type { NormalPatch } from './overlay';
|
|
20
|
+
type NodeId = GraphNodeWire['id'];
|
|
21
|
+
/** One gather step's selector: which edge classes, which direction. */
|
|
22
|
+
export interface GatherSpec {
|
|
23
|
+
/** Matched edge classes; `undefined` = all classes. */
|
|
24
|
+
readonly edgeClasses?: readonly string[];
|
|
25
|
+
readonly dir: 'in' | 'out' | 'both';
|
|
26
|
+
}
|
|
27
|
+
/** The projection of a shape the matcher needs — produced by the ShapeStore. */
|
|
28
|
+
export interface ShapeView {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
/** Resolved root paths (raw). */
|
|
31
|
+
readonly rootPaths: readonly string[];
|
|
32
|
+
/** `has_parent` descent depth; 0 for a point read (no move). */
|
|
33
|
+
readonly depth: number;
|
|
34
|
+
/** The move's `children.classes` restriction, or `undefined` for all. */
|
|
35
|
+
readonly moveClasses?: readonly string[];
|
|
36
|
+
readonly gathers: readonly GatherSpec[];
|
|
37
|
+
/** Membership test — is this node id a root or a member of the shape? */
|
|
38
|
+
hasNode(id: NodeId): boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Context the matcher resolves paths and identifies the tree edge with. */
|
|
41
|
+
export interface InvalidateCtx {
|
|
42
|
+
readonly hasParentClass: string;
|
|
43
|
+
/** Resolve a raw path to a live node id (confirmed ⊕ overlay). */
|
|
44
|
+
resolve(raw: string): NodeId | undefined;
|
|
45
|
+
}
|
|
46
|
+
/** The set of shape ids a patch affects. */
|
|
47
|
+
export declare function affectedShapes(patch: NormalPatch, shapes: Iterable<ShapeView>, ctx: InvalidateCtx): Set<string>;
|
|
48
|
+
/**
|
|
49
|
+
* A node create/delete at `pRaw` (class `cls`) affects a shape when `pRaw`
|
|
50
|
+
* falls in a root's subtree within `depth` and the move's class filter admits
|
|
51
|
+
* it (the root itself is never class-filtered — it is the seed, not a child).
|
|
52
|
+
*/
|
|
53
|
+
export declare function matchesNodeStructural(shape: ShapeView, pRaw: string, cls: string | undefined): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* An edge op affects a shape when some gather selector matches its class and a
|
|
56
|
+
* root is the near endpoint; a `has_parent` edge additionally re-tests subtree
|
|
57
|
+
* membership at its child (source) endpoint.
|
|
58
|
+
*/
|
|
59
|
+
export declare function matchesEdge(shape: ShapeView, edgeClass: string, sourceRaw: string, targetRaw: string, hasParentClass: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Depth of `pRaw` below `rootRaw` in the tree (0 = the root itself), or `null`
|
|
62
|
+
* when `pRaw` is not within the root's subtree. Slug-segment prefix test.
|
|
63
|
+
*/
|
|
64
|
+
export declare function subtreeDelta(rootRaw: string, pRaw: string): number | null;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=invalidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidate.d.ts","sourceRoot":"","sources":["../../src/store/invalidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,KAAK,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;AAEjC,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAA;CACpC;AAED,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,yEAAyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IACvC,yEAAyE;IACzE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;CAC7B;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,kEAAkE;IAClE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,GAAG,EAAE,aAAa,GACjB,GAAG,CAAC,MAAM,CAAC,CAMb;AAyBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAgBT;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,OAAO,CAQT;AAYD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASzE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier-0 invalidation matching (FRONTEND §5.6 / §5.7).
|
|
3
|
+
*
|
|
4
|
+
* Because the runnable algebra is closed (a single `has_parent` descent + N
|
|
5
|
+
* single-hop gathers), "does patch P affect shape S" is decidable client-side
|
|
6
|
+
* with no kernel change. This module is pure over a {@link ShapeView} — the
|
|
7
|
+
* ShapeStore supplies the view, the overlay/memory apply the matches.
|
|
8
|
+
*
|
|
9
|
+
* SHIM CONTRACT (§5.7): this is a deliberately OVER-BROAD disposable shim, the
|
|
10
|
+
* whole reason SAFE MODE is "slow but never wrong". A false positive costs one
|
|
11
|
+
* needless refetch; a false NEGATIVE is a shape that silently never reconciles —
|
|
12
|
+
* a stale view and hours of debugging, and is FORBIDDEN. So every arm biases to
|
|
13
|
+
* "affected" the instant it is uncertain (an unresolved class, an unknown edge
|
|
14
|
+
* selector, a path form it cannot compare). Do NOT grow this toward faithful
|
|
15
|
+
* query semantics to shave refetches — `function.watch` (§7) deletes it whole,
|
|
16
|
+
* and with it the whole dual-semantics burden.
|
|
17
|
+
*/
|
|
18
|
+
/** The set of shape ids a patch affects. */
|
|
19
|
+
export function affectedShapes(patch, shapes, ctx) {
|
|
20
|
+
const out = new Set();
|
|
21
|
+
for (const shape of shapes) {
|
|
22
|
+
if (shapeAffected(shape, patch, ctx))
|
|
23
|
+
out.add(shape.id);
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
function shapeAffected(shape, patch, ctx) {
|
|
28
|
+
// node create/delete — ancestor-chain + class-filter test against resolved roots
|
|
29
|
+
for (const c of patch.nodes.create) {
|
|
30
|
+
if (matchesNodeStructural(shape, c.at, c.class))
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
for (const d of patch.nodes.delete) {
|
|
34
|
+
if (matchesNodeStructural(shape, d.path, d.class))
|
|
35
|
+
return true;
|
|
36
|
+
const id = ctx.resolve(d.path);
|
|
37
|
+
if (id !== undefined && shape.hasNode(id))
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// node update — membership (order re-sort is handled by the resulting recompute)
|
|
41
|
+
for (const u of patch.nodes.update) {
|
|
42
|
+
const id = ctx.resolve(u.path);
|
|
43
|
+
if (id !== undefined && shape.hasNode(id))
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
// edge create/update/delete — gather selector + endpoint-in-roots; has_parent
|
|
47
|
+
// additionally re-tests subtree membership at the child endpoint
|
|
48
|
+
for (const e of [...patch.edges.create, ...patch.edges.update, ...patch.edges.delete]) {
|
|
49
|
+
if (matchesEdge(shape, e.class, e.source, e.target, ctx.hasParentClass))
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A node create/delete at `pRaw` (class `cls`) affects a shape when `pRaw`
|
|
56
|
+
* falls in a root's subtree within `depth` and the move's class filter admits
|
|
57
|
+
* it (the root itself is never class-filtered — it is the seed, not a child).
|
|
58
|
+
*/
|
|
59
|
+
export function matchesNodeStructural(shape, pRaw, cls) {
|
|
60
|
+
for (const root of shape.rootPaths) {
|
|
61
|
+
const delta = subtreeDelta(root, pRaw);
|
|
62
|
+
if (delta === null || delta > shape.depth)
|
|
63
|
+
continue;
|
|
64
|
+
// Bias to affected (§5.7): the root is never class-filtered, an all-classes
|
|
65
|
+
// move admits everything, and an UNKNOWN class (`cls === undefined`) is
|
|
66
|
+
// treated as admitted — a possible false positive (one refetch), never a
|
|
67
|
+
// false negative (a class we couldn't read silently excluding a real child).
|
|
68
|
+
const admits = delta === 0 ||
|
|
69
|
+
shape.moveClasses === undefined ||
|
|
70
|
+
cls === undefined ||
|
|
71
|
+
shape.moveClasses.includes(cls);
|
|
72
|
+
if (admits)
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* An edge op affects a shape when some gather selector matches its class and a
|
|
79
|
+
* root is the near endpoint; a `has_parent` edge additionally re-tests subtree
|
|
80
|
+
* membership at its child (source) endpoint.
|
|
81
|
+
*/
|
|
82
|
+
export function matchesEdge(shape, edgeClass, sourceRaw, targetRaw, hasParentClass) {
|
|
83
|
+
if (edgeClass === hasParentClass && matchesNodeStructural(shape, sourceRaw, undefined))
|
|
84
|
+
return true;
|
|
85
|
+
for (const g of shape.gathers) {
|
|
86
|
+
if (g.edgeClasses !== undefined && !g.edgeClasses.includes(edgeClass))
|
|
87
|
+
continue;
|
|
88
|
+
if (endpointInRoots(shape.rootPaths, g.dir, sourceRaw, targetRaw))
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
function endpointInRoots(rootPaths, dir, sourceRaw, targetRaw) {
|
|
94
|
+
const near = dir === 'out' ? [sourceRaw] : dir === 'in' ? [targetRaw] : [sourceRaw, targetRaw];
|
|
95
|
+
return near.some((p) => rootPaths.includes(p));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Depth of `pRaw` below `rootRaw` in the tree (0 = the root itself), or `null`
|
|
99
|
+
* when `pRaw` is not within the root's subtree. Slug-segment prefix test.
|
|
100
|
+
*/
|
|
101
|
+
export function subtreeDelta(rootRaw, pRaw) {
|
|
102
|
+
if (rootRaw === pRaw)
|
|
103
|
+
return 0;
|
|
104
|
+
const rs = segments(rootRaw);
|
|
105
|
+
const ps = segments(pRaw);
|
|
106
|
+
if (ps.length <= rs.length)
|
|
107
|
+
return null;
|
|
108
|
+
for (let i = 0; i < rs.length; i++) {
|
|
109
|
+
if (rs[i] !== ps[i])
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return ps.length - rs.length;
|
|
113
|
+
}
|
|
114
|
+
function segments(raw) {
|
|
115
|
+
return raw.split('/').filter((s) => s.length > 0);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=invalidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidate.js","sourceRoot":"","sources":["../../src/store/invalidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createMemory (FRONTEND §4.5, SHELL_REACT §5) — the framework-free memory
|
|
3
|
+
* facade over a `GraphApi`.
|
|
4
|
+
*
|
|
5
|
+
* One partial client copy of the graph per scope (= principal): entity store +
|
|
6
|
+
* shape store + optimistic overlay. Reads are shape-keyed, deduped, and
|
|
7
|
+
* stale-while-revalidate; a `subscribe`/`getSnapshot` pair gives
|
|
8
|
+
* useSyncExternalStore semantics (tear-free, referentially stable when
|
|
9
|
+
* unchanged) and `promise` a cold-shape handle for React suspense.
|
|
10
|
+
*
|
|
11
|
+
* SAFE MODE (§5.7 — ratified until the §6 wire amendments land). One rule:
|
|
12
|
+
* **confirmed state comes only from server responses; client predictions live
|
|
13
|
+
* only in a display layer guaranteed to be discarded and replaced by server
|
|
14
|
+
* truth.** Concretely:
|
|
15
|
+
* - Confirmed state (EntityStore + shape membership) is written ONLY by read
|
|
16
|
+
* responses (`integrate` / `integrateShape`).
|
|
17
|
+
* - Every write DISPATCHES, then marks the shapes it touched stale and
|
|
18
|
+
* REVALIDATES them (refetch = reconcile). "Slow but never wrong."
|
|
19
|
+
* - The optimistic overlay is DISPLAY-ONLY. Prop updates on cached nodes and
|
|
20
|
+
* deletes get an overlay (no-flicker prediction); creates/links/unlinks are
|
|
21
|
+
* reconcile-only (a create/link misprediction is a phantom, forbidden; a
|
|
22
|
+
* delete misprediction is loud — a brief reappearance). The overlay is held
|
|
23
|
+
* from apply until the reconciling refetch lands, then dropped — never
|
|
24
|
+
* folded into confirmed state.
|
|
25
|
+
* - Ordering: the logical merge clock is stamped at response ARRIVAL, and a
|
|
26
|
+
* per-scope mutation EPOCH closes the read-straddles-commit window (a
|
|
27
|
+
* response older than a commit is integrated-then-restaled).
|
|
28
|
+
* - Isolation: the `with` lens partitions the ENTITY store, not just the
|
|
29
|
+
* shape key — lenses never share entities.
|
|
30
|
+
*
|
|
31
|
+
* The public surface (`GraphMemory`/`LiveResult`, `createMemory`) is stable:
|
|
32
|
+
* when seq/rev/delta/watch (§6/§7) land, this becomes "fast and never wrong"
|
|
33
|
+
* with no surface change (`commitOverlay` is already the server-delta seam).
|
|
34
|
+
*/
|
|
35
|
+
import type { Node } from '@astrale-os/kernel-core';
|
|
36
|
+
import type { EdgeIdentity, GraphApi, MutationResultWire, PatchBuilder, PatchInput, PathLike, Properties } from '../graph';
|
|
37
|
+
import type { ShapeInput } from './canonicalize';
|
|
38
|
+
import type { LiveResult, MutateOptions, ReadOptions, MemoryOptions } from './types';
|
|
39
|
+
/** The framework-free memory surface (SHELL_REACT §5 + FRONTEND §4.5). */
|
|
40
|
+
export interface GraphMemory {
|
|
41
|
+
/** The principal/isolation key this handle is bound to. */
|
|
42
|
+
readonly scope: string;
|
|
43
|
+
/** The raw floor, untouched. */
|
|
44
|
+
readonly api: GraphApi;
|
|
45
|
+
/** Read-through: resolve the shape, fetching if cold, then return the live result. */
|
|
46
|
+
query(shape: ShapeInput, opts?: ReadOptions): Promise<LiveResult>;
|
|
47
|
+
/** Memory-only, synchronous — no I/O. `null` when the shape is cold. */
|
|
48
|
+
peek(shape: ShapeInput, opts?: ReadOptions): LiveResult | null;
|
|
49
|
+
/** Warm the exact shape a later render reads. */
|
|
50
|
+
preload(shape: ShapeInput, opts?: ReadOptions): Promise<void>;
|
|
51
|
+
/** External-store subscription: `onStoreChange` fires when this shape changes. */
|
|
52
|
+
subscribe(shape: ShapeInput, onStoreChange: () => void, opts?: ReadOptions): () => void;
|
|
53
|
+
/** The current live result for a shape — stable ref when unchanged (getSnapshot). */
|
|
54
|
+
getSnapshot(shape: ShapeInput, opts?: ReadOptions): LiveResult;
|
|
55
|
+
/** A promise that resolves once the shape first has confirmed data (suspense). */
|
|
56
|
+
promise(shape: ShapeInput, opts?: ReadOptions): Promise<LiveResult>;
|
|
57
|
+
/** Convenience: subscribe + push the current (and each subsequent) snapshot to `cb`. */
|
|
58
|
+
watch(shape: ShapeInput, cb: (result: LiveResult) => void, opts?: ReadOptions): () => void;
|
|
59
|
+
/** Batch write — optimistic-auto (§4.4). Builder or pre-built patch. */
|
|
60
|
+
mutate(arg: ((m: PatchBuilder) => void | Promise<void>) | PatchInput, opts?: MutateOptions): Promise<MutationResultWire>;
|
|
61
|
+
update(node: Node | PathLike, props: Properties, opts?: MutateOptions): Promise<void>;
|
|
62
|
+
create(cls: PathLike, at: PathLike, props?: Properties, opts?: MutateOptions): Promise<string>;
|
|
63
|
+
remove(node: Node | PathLike, opts?: MutateOptions): Promise<void>;
|
|
64
|
+
link(edge: EdgeIdentity & {
|
|
65
|
+
props?: Properties;
|
|
66
|
+
}, opts?: MutateOptions): Promise<string>;
|
|
67
|
+
unlink(edge: EdgeIdentity, opts?: MutateOptions): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Apply a MANUAL optimistic overlay decoupled from any dispatch (§1.6 — the
|
|
70
|
+
* method-dispatch seam a patch arm can't express, e.g. `user::switchSpace`).
|
|
71
|
+
* SAFE MODE: only the display-safe arms (prop updates on cached nodes,
|
|
72
|
+
* deletes) predict; the caller dispatches whatever it likes, then `commit()`s
|
|
73
|
+
* (reconcile the touched shapes from the server, drop the overlay) or
|
|
74
|
+
* `rollback()`s.
|
|
75
|
+
*/
|
|
76
|
+
overlay(build: (m: PatchBuilder) => void, opts?: {
|
|
77
|
+
scope?: string;
|
|
78
|
+
}): OptimisticOverlay;
|
|
79
|
+
/** An isolated handle for another scope (principal). No store sharing (§5.4). */
|
|
80
|
+
forScope(scope: string, api?: GraphApi): GraphMemory;
|
|
81
|
+
/** Release unobserved shapes past their ttl and GC unreachable entities. */
|
|
82
|
+
sweep(): void;
|
|
83
|
+
}
|
|
84
|
+
/** A live manual-overlay handle (see {@link GraphMemory.overlay}). */
|
|
85
|
+
export interface OptimisticOverlay {
|
|
86
|
+
/**
|
|
87
|
+
* Reconcile the shapes this overlay touched from the server and drop the
|
|
88
|
+
* display prediction. The `result` param is retained for the §6.3 server-delta
|
|
89
|
+
* path; on Tier-0 it is unused (reconciliation is by refetch).
|
|
90
|
+
*/
|
|
91
|
+
commit(result?: MutationResultWire): void;
|
|
92
|
+
/** Drop the overlay — the dispatch failed. */
|
|
93
|
+
rollback(): void;
|
|
94
|
+
}
|
|
95
|
+
/** Bind the memory onto a `GraphApi`. */
|
|
96
|
+
export declare function createMemory(api: GraphApi, opts?: MemoryOptions): GraphMemory;
|
|
97
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/store/memory.ts"],"names":[],"mappings":"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"}
|