@rhizomes/rhizomatic 0.1.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.
Files changed (119) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +54 -0
  4. package/dist/alias.d.ts +4 -0
  5. package/dist/alias.d.ts.map +1 -0
  6. package/dist/alias.js +34 -0
  7. package/dist/alias.js.map +1 -0
  8. package/dist/cbor.d.ts +24 -0
  9. package/dist/cbor.d.ts.map +1 -0
  10. package/dist/cbor.js +267 -0
  11. package/dist/cbor.js.map +1 -0
  12. package/dist/delta.d.ts +8 -0
  13. package/dist/delta.d.ts.map +1 -0
  14. package/dist/delta.js +92 -0
  15. package/dist/delta.js.map +1 -0
  16. package/dist/derivation.d.ts +29 -0
  17. package/dist/derivation.d.ts.map +1 -0
  18. package/dist/derivation.js +183 -0
  19. package/dist/derivation.js.map +1 -0
  20. package/dist/eval.d.ts +91 -0
  21. package/dist/eval.d.ts.map +1 -0
  22. package/dist/eval.js +318 -0
  23. package/dist/eval.js.map +1 -0
  24. package/dist/hash.d.ts +4 -0
  25. package/dist/hash.d.ts.map +1 -0
  26. package/dist/hash.js +17 -0
  27. package/dist/hash.js.map +1 -0
  28. package/dist/http.d.ts +21 -0
  29. package/dist/http.d.ts.map +1 -0
  30. package/dist/http.js +110 -0
  31. package/dist/http.js.map +1 -0
  32. package/dist/hview.d.ts +15 -0
  33. package/dist/hview.d.ts.map +1 -0
  34. package/dist/hview.js +72 -0
  35. package/dist/hview.js.map +1 -0
  36. package/dist/index.d.ts +23 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +22 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/json-profile.d.ts +4 -0
  41. package/dist/json-profile.d.ts.map +1 -0
  42. package/dist/json-profile.js +97 -0
  43. package/dist/json-profile.js.map +1 -0
  44. package/dist/pack.d.ts +5 -0
  45. package/dist/pack.d.ts.map +1 -0
  46. package/dist/pack.js +227 -0
  47. package/dist/pack.js.map +1 -0
  48. package/dist/peer.d.ts +26 -0
  49. package/dist/peer.d.ts.map +1 -0
  50. package/dist/peer.js +111 -0
  51. package/dist/peer.js.map +1 -0
  52. package/dist/policy.d.ts +46 -0
  53. package/dist/policy.d.ts.map +1 -0
  54. package/dist/policy.js +186 -0
  55. package/dist/policy.js.map +1 -0
  56. package/dist/pred.d.ts +78 -0
  57. package/dist/pred.d.ts.map +1 -0
  58. package/dist/pred.js +228 -0
  59. package/dist/pred.js.map +1 -0
  60. package/dist/reactor.d.ts +67 -0
  61. package/dist/reactor.d.ts.map +1 -0
  62. package/dist/reactor.js +433 -0
  63. package/dist/reactor.js.map +1 -0
  64. package/dist/schema-deltas.d.ts +14 -0
  65. package/dist/schema-deltas.d.ts.map +1 -0
  66. package/dist/schema-deltas.js +87 -0
  67. package/dist/schema-deltas.js.map +1 -0
  68. package/dist/schema.d.ts +17 -0
  69. package/dist/schema.d.ts.map +1 -0
  70. package/dist/schema.js +102 -0
  71. package/dist/schema.js.map +1 -0
  72. package/dist/set.d.ts +18 -0
  73. package/dist/set.d.ts.map +1 -0
  74. package/dist/set.js +83 -0
  75. package/dist/set.js.map +1 -0
  76. package/dist/sign.d.ts +8 -0
  77. package/dist/sign.d.ts.map +1 -0
  78. package/dist/sign.js +44 -0
  79. package/dist/sign.js.map +1 -0
  80. package/dist/term-io.d.ts +13 -0
  81. package/dist/term-io.d.ts.map +1 -0
  82. package/dist/term-io.js +216 -0
  83. package/dist/term-io.js.map +1 -0
  84. package/dist/term-json.d.ts +7 -0
  85. package/dist/term-json.d.ts.map +1 -0
  86. package/dist/term-json.js +362 -0
  87. package/dist/term-json.js.map +1 -0
  88. package/dist/types.d.ts +34 -0
  89. package/dist/types.d.ts.map +1 -0
  90. package/dist/types.js +4 -0
  91. package/dist/types.js.map +1 -0
  92. package/dist/vocab.d.ts +2 -0
  93. package/dist/vocab.d.ts.map +1 -0
  94. package/dist/vocab.js +4 -0
  95. package/dist/vocab.js.map +1 -0
  96. package/package.json +83 -0
  97. package/src/alias.ts +36 -0
  98. package/src/cbor.ts +280 -0
  99. package/src/delta.ts +89 -0
  100. package/src/derivation.ts +229 -0
  101. package/src/eval.ts +401 -0
  102. package/src/hash.ts +19 -0
  103. package/src/http.ts +124 -0
  104. package/src/hview.ts +91 -0
  105. package/src/index.ts +83 -0
  106. package/src/json-profile.ts +96 -0
  107. package/src/pack.ts +239 -0
  108. package/src/peer.ts +126 -0
  109. package/src/policy.ts +216 -0
  110. package/src/pred.ts +307 -0
  111. package/src/reactor.ts +490 -0
  112. package/src/schema-deltas.ts +100 -0
  113. package/src/schema.ts +111 -0
  114. package/src/set.ts +98 -0
  115. package/src/sign.ts +48 -0
  116. package/src/term-io.ts +228 -0
  117. package/src/term-json.ts +364 -0
  118. package/src/types.ts +38 -0
  119. package/src/vocab.ts +3 -0
package/dist/policy.js ADDED
@@ -0,0 +1,186 @@
1
+ // Resolution policies and Views (SPEC-5, ERRATA-5). resolve : Policy -> HView -> View is the
2
+ // only exit from the algebra into application space; all pluralism is policy choice (P5).
3
+ import { array, bool, encode, float, map, tstr } from "./cbor.js";
4
+ import { bytesToHex } from "./hash.js";
5
+ import { comparePrimitives, evalPred } from "./pred.js";
6
+ // --- ordering (R3: every chain ends in an implicit lexById tiebreak) ------------------------------
7
+ function cmpByOrder(order, a, b) {
8
+ switch (order.kind) {
9
+ case "byTimestamp": {
10
+ const d = a.delta.claims.timestamp - b.delta.claims.timestamp;
11
+ if (d !== 0)
12
+ return order.dir === "desc" ? -d : d;
13
+ return 0;
14
+ }
15
+ case "byAuthorRank": {
16
+ const rank = (author) => {
17
+ const i = order.authors.indexOf(author);
18
+ return i === -1 ? order.authors.length : i;
19
+ };
20
+ return rank(a.delta.claims.author) - rank(b.delta.claims.author);
21
+ }
22
+ case "byPred": {
23
+ const am = evalPred(order.pred, a.delta) ? 0 : 1;
24
+ const bm = evalPred(order.pred, b.delta) ? 0 : 1;
25
+ if (am !== bm)
26
+ return am - bm; // matches first
27
+ return cmpByOrder(order.then, a, b);
28
+ }
29
+ case "lexById":
30
+ return a.delta.id < b.delta.id ? -1 : a.delta.id > b.delta.id ? 1 : 0;
31
+ }
32
+ }
33
+ function sortEntries(order, entries) {
34
+ return [...entries].sort((a, b) => {
35
+ const primary = cmpByOrder(order, a, b);
36
+ if (primary !== 0)
37
+ return primary;
38
+ return a.delta.id < b.delta.id ? -1 : a.delta.id > b.delta.id ? 1 : 0;
39
+ });
40
+ }
41
+ // --- candidate value extraction (R1) ---------------------------------------------------------------
42
+ function renderTarget(t, expansion, policy) {
43
+ if (expansion !== undefined)
44
+ return resolveView(policy, expansion);
45
+ switch (t.kind) {
46
+ case "primitive":
47
+ return t.value;
48
+ case "entity":
49
+ return t.entity.id;
50
+ case "delta":
51
+ return t.deltaRef.delta;
52
+ }
53
+ }
54
+ function candidateValue(e, root, policy) {
55
+ const nonFiling = [];
56
+ e.delta.claims.pointers.forEach((p, i) => {
57
+ const filing = p.target.kind === "entity" && p.target.entity.id === root;
58
+ if (filing)
59
+ return;
60
+ nonFiling.push([p.role, renderTarget(p.target, e.expanded?.get(i), policy)]);
61
+ });
62
+ if (nonFiling.length === 0)
63
+ return true; // the bare fact of the edge
64
+ if (nonFiling.length === 1)
65
+ return nonFiling[0][1];
66
+ const obj = {};
67
+ for (const [role, v] of nonFiling) {
68
+ const existing = obj[role];
69
+ if (existing === undefined)
70
+ obj[role] = v;
71
+ else if (Array.isArray(existing))
72
+ obj[role] = [...existing, v];
73
+ else
74
+ obj[role] = [existing, v];
75
+ }
76
+ return obj;
77
+ }
78
+ // --- View canonical form (R4) ----------------------------------------------------------------------
79
+ export function viewToCbor(v) {
80
+ if (typeof v === "string")
81
+ return tstr(v);
82
+ if (typeof v === "number")
83
+ return float(v);
84
+ if (typeof v === "boolean")
85
+ return bool(v);
86
+ if (Array.isArray(v))
87
+ return array(v.map(viewToCbor));
88
+ const entries = Object.entries(v).map(([k, x]) => [k, viewToCbor(x)]);
89
+ return map(entries);
90
+ }
91
+ export function viewCanonicalHex(v) {
92
+ return bytesToHex(encode(viewToCbor(v)));
93
+ }
94
+ // --- resolution ------------------------------------------------------------------------------------
95
+ const ABSENT = Symbol("absent");
96
+ function isPrimitive(v) {
97
+ return typeof v === "string" || typeof v === "number" || typeof v === "boolean";
98
+ }
99
+ function applyMerge(fn, entries, root, policy) {
100
+ // Fold in ascending delta-id order — float addition is order-dependent (R2).
101
+ const sorted = sortEntries({ kind: "lexById" }, entries);
102
+ if (fn === "count")
103
+ return sorted.length === 0 ? ABSENT : sorted.length;
104
+ const prims = sorted
105
+ .map((e) => candidateValue(e, root, policy))
106
+ .filter((v) => isPrimitive(v));
107
+ switch (fn) {
108
+ case "max":
109
+ case "min": {
110
+ if (prims.length === 0)
111
+ return ABSENT;
112
+ return prims.reduce((acc, v) => {
113
+ const c = comparePrimitives(v, acc);
114
+ return (fn === "max" ? c > 0 : c < 0) ? v : acc;
115
+ });
116
+ }
117
+ case "sum": {
118
+ const nums = prims.filter((v) => typeof v === "number");
119
+ if (nums.length === 0)
120
+ return ABSENT;
121
+ return nums.reduce((a, b) => a + b, 0);
122
+ }
123
+ case "and":
124
+ case "or": {
125
+ const bools = prims.filter((v) => typeof v === "boolean");
126
+ if (bools.length === 0)
127
+ return ABSENT;
128
+ return fn === "and" ? bools.every(Boolean) : bools.some(Boolean);
129
+ }
130
+ case "concatSorted": {
131
+ if (prims.length === 0)
132
+ return ABSENT;
133
+ return [...prims].sort(comparePrimitives);
134
+ }
135
+ }
136
+ }
137
+ function applyPropPolicy(pp, entries, root, policy) {
138
+ switch (pp.kind) {
139
+ case "pick": {
140
+ if (entries.length === 0)
141
+ return ABSENT;
142
+ const sorted = sortEntries(pp.order, entries);
143
+ return candidateValue(sorted[0], root, policy);
144
+ }
145
+ case "all": {
146
+ if (entries.length === 0)
147
+ return ABSENT;
148
+ return sortEntries(pp.order, entries).map((e) => candidateValue(e, root, policy));
149
+ }
150
+ case "merge":
151
+ return applyMerge(pp.fn, entries, root, policy);
152
+ case "conflicts": {
153
+ const sorted = sortEntries(pp.order, entries);
154
+ const seen = new Set();
155
+ const distinct = [];
156
+ for (const e of sorted) {
157
+ const v = candidateValue(e, root, policy);
158
+ const key = viewCanonicalHex(v);
159
+ if (!seen.has(key)) {
160
+ seen.add(key);
161
+ distinct.push(v);
162
+ }
163
+ }
164
+ return distinct.length >= 2 ? distinct : ABSENT;
165
+ }
166
+ case "absentAs": {
167
+ const inner = applyPropPolicy(pp.then, entries, root, policy);
168
+ return inner === ABSENT ? pp.constant : inner;
169
+ }
170
+ }
171
+ }
172
+ // resolve(policy, HView) -> View. Deterministic; total; provenance-optional (SPEC-5 §2).
173
+ // The View covers every property named in the policy plus every HView property (R3).
174
+ export function resolveView(policy, hview) {
175
+ const keys = new Set([...policy.props.keys(), ...hview.props.keys()]);
176
+ const obj = {};
177
+ for (const key of keys) {
178
+ const entries = hview.props.get(key) ?? [];
179
+ const pp = policy.props.get(key) ?? policy.default;
180
+ const v = applyPropPolicy(pp, entries, hview.id, policy);
181
+ if (v !== ABSENT)
182
+ obj[key] = v;
183
+ }
184
+ return obj;
185
+ }
186
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
package/dist/pred.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ import type { Delta, Primitive } from "./types.js";
2
+ export type Cmp = "eq" | "neq" | "lt" | "lte" | "gt" | "gte" | "prefix" | "inSet";
3
+ export interface Hole {
4
+ readonly kind: "hole";
5
+ readonly name: string;
6
+ }
7
+ export type Bindings = ReadonlyMap<string, Primitive>;
8
+ export declare function resolveParam(p: Primitive | Hole, bindings: Bindings | undefined): Primitive;
9
+ export type StrMatch = {
10
+ readonly kind: "exact";
11
+ readonly value: string;
12
+ } | {
13
+ readonly kind: "prefix";
14
+ readonly value: string;
15
+ } | {
16
+ readonly kind: "inSet";
17
+ readonly values: readonly string[];
18
+ } | {
19
+ readonly kind: "aliased";
20
+ readonly name: string;
21
+ readonly via?: string;
22
+ readonly trust?: Pred;
23
+ };
24
+ export type ValMatch = {
25
+ readonly kind: "vcmp";
26
+ readonly cmp: Cmp;
27
+ readonly value: Primitive | Hole;
28
+ } | {
29
+ readonly kind: "between";
30
+ readonly lo: Primitive;
31
+ readonly hi: Primitive;
32
+ } | {
33
+ readonly kind: "inSet";
34
+ readonly values: readonly Primitive[];
35
+ };
36
+ export type EntityMatch = {
37
+ readonly kind: "const";
38
+ readonly id: string;
39
+ } | {
40
+ readonly kind: "root";
41
+ } | Hole;
42
+ export interface PPred {
43
+ readonly role?: StrMatch;
44
+ readonly targetEntity?: EntityMatch;
45
+ readonly targetDelta?: string;
46
+ readonly context?: StrMatch;
47
+ readonly targetIsPrimitive?: boolean;
48
+ readonly targetValue?: ValMatch;
49
+ }
50
+ export type Pred = {
51
+ readonly kind: "true";
52
+ } | {
53
+ readonly kind: "false";
54
+ } | {
55
+ readonly kind: "match";
56
+ readonly field: "author" | "timestamp" | "id";
57
+ readonly cmp: Cmp;
58
+ readonly constant: Primitive | Hole | readonly Primitive[];
59
+ } | {
60
+ readonly kind: "hasPointer";
61
+ readonly ppred: PPred;
62
+ } | {
63
+ readonly kind: "and";
64
+ readonly left: Pred;
65
+ readonly right: Pred;
66
+ } | {
67
+ readonly kind: "or";
68
+ readonly left: Pred;
69
+ readonly right: Pred;
70
+ } | {
71
+ readonly kind: "not";
72
+ readonly pred: Pred;
73
+ };
74
+ export declare function comparePrimitives(a: Primitive, b: Primitive): number;
75
+ export declare function strMatch(m: StrMatch, s: string): boolean;
76
+ export declare function substituteHoles(pred: Pred, bindings: Bindings | undefined): Pred;
77
+ export declare function evalPred(pred: Pred, delta: Delta, root?: string, bindings?: Bindings): boolean;
78
+ //# sourceMappingURL=pred.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pred.d.ts","sourceRoot":"","sources":["../src/pred.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAW,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAGlF,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAGtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAK3F;AAED,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAE9D;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GAC9E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAGtE,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAAC;AAET,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;CACjC;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,SAAS,EAAE,CAAC;CAC5D,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAwBlD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAUpE;AAmCD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAYxD;AAmED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAqDhF;AAKD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAiC9F"}
package/dist/pred.js ADDED
@@ -0,0 +1,228 @@
1
+ // The predicate grammar and its evaluator (SPEC-2 §3). Predicates are total, terminating,
2
+ // single-delta: they see one delta at a time, never the rest of the set.
3
+ // Resolve a possibly-parameterized primitive. Unbound holes fail loudly (E15).
4
+ export function resolveParam(p, bindings) {
5
+ if (typeof p !== "object")
6
+ return p;
7
+ const bound = bindings?.get(p.name);
8
+ if (bound === undefined)
9
+ throw new Error(`unbound hole "${p.name}" (E15)`);
10
+ return bound;
11
+ }
12
+ // --- the canonical total order over primitives (ERRATA-2 E3) ------------------------------------
13
+ const utf8 = new TextEncoder();
14
+ function utf8Compare(a, b) {
15
+ const ab = utf8.encode(a);
16
+ const bb = utf8.encode(b);
17
+ const n = Math.min(ab.length, bb.length);
18
+ for (let i = 0; i < n; i++) {
19
+ const d = ab[i] - bb[i];
20
+ if (d !== 0)
21
+ return d;
22
+ }
23
+ return ab.length - bb.length;
24
+ }
25
+ function typeRank(v) {
26
+ if (typeof v === "boolean")
27
+ return 0;
28
+ if (typeof v === "number")
29
+ return 1;
30
+ return 2;
31
+ }
32
+ // Type rank first (bool < number < string), then value; strings by NFC UTF-8 bytes.
33
+ export function comparePrimitives(a, b) {
34
+ const ra = typeRank(a);
35
+ const rb = typeRank(b);
36
+ if (ra !== rb)
37
+ return ra - rb;
38
+ if (typeof a === "boolean")
39
+ return (a ? 1 : 0) - (b ? 1 : 0);
40
+ if (typeof a === "number") {
41
+ const bn = b;
42
+ return a < bn ? -1 : a > bn ? 1 : 0;
43
+ }
44
+ return utf8Compare(a, b);
45
+ }
46
+ function compareWith(cmp, subject, constant) {
47
+ if (cmp === "inSet") {
48
+ const values = constant;
49
+ return values.some((v) => comparePrimitives(subject, v) === 0);
50
+ }
51
+ if (cmp === "prefix") {
52
+ return (typeof subject === "string" && typeof constant === "string" && subject.startsWith(constant));
53
+ }
54
+ const c = comparePrimitives(subject, constant);
55
+ switch (cmp) {
56
+ case "eq":
57
+ return c === 0;
58
+ case "neq":
59
+ return c !== 0;
60
+ case "lt":
61
+ return c < 0;
62
+ case "lte":
63
+ return c <= 0;
64
+ case "gt":
65
+ return c > 0;
66
+ case "gte":
67
+ return c >= 0;
68
+ }
69
+ }
70
+ // --- evaluation ----------------------------------------------------------------------------------
71
+ export function strMatch(m, s) {
72
+ switch (m.kind) {
73
+ case "exact":
74
+ return s === m.value;
75
+ case "prefix":
76
+ return s.startsWith(m.value);
77
+ case "inSet":
78
+ return m.values.includes(s);
79
+ case "aliased":
80
+ // Every consumer expands aliased against the ambient input first (SPEC-9 §4.1).
81
+ throw new Error(`aliased("${m.name}") must be expanded before matching (SPEC-9)`);
82
+ }
83
+ }
84
+ function valMatch(m, v, bindings) {
85
+ switch (m.kind) {
86
+ case "vcmp":
87
+ // cmp "inSet" is rejected at parse time (E1) — ValMatch has its own inSet arm.
88
+ return compareWith(m.cmp, v, resolveParam(m.value, bindings));
89
+ case "between":
90
+ return comparePrimitives(v, m.lo) >= 0 && comparePrimitives(v, m.hi) <= 0;
91
+ case "inSet":
92
+ return m.values.some((x) => comparePrimitives(v, x) === 0);
93
+ }
94
+ }
95
+ function entityWant(m, root, bindings) {
96
+ if (m.kind === "const")
97
+ return m.id;
98
+ // The root variable matches nothing without an ambient root (E10).
99
+ if (m.kind === "root")
100
+ return root;
101
+ const bound = resolveParam(m, bindings);
102
+ if (typeof bound !== "string") {
103
+ throw new Error(`hole "${m.name}" bound to a non-string where an entity id is required (E15)`);
104
+ }
105
+ return bound;
106
+ }
107
+ function pointerMatches(p, ptr, root, bindings) {
108
+ if (p.role !== undefined && !strMatch(p.role, ptr.role))
109
+ return false;
110
+ if (p.targetEntity !== undefined) {
111
+ if (ptr.target.kind !== "entity")
112
+ return false;
113
+ const want = entityWant(p.targetEntity, root, bindings);
114
+ if (want === undefined || ptr.target.entity.id !== want)
115
+ return false;
116
+ }
117
+ if (p.targetDelta !== undefined) {
118
+ if (ptr.target.kind !== "delta" || ptr.target.deltaRef.delta !== p.targetDelta)
119
+ return false;
120
+ }
121
+ if (p.context !== undefined) {
122
+ const ctx = ptr.target.kind === "entity"
123
+ ? ptr.target.entity.context
124
+ : ptr.target.kind === "delta"
125
+ ? ptr.target.deltaRef.context
126
+ : undefined;
127
+ if (ctx === undefined || !strMatch(p.context, ctx))
128
+ return false;
129
+ }
130
+ if (p.targetIsPrimitive !== undefined) {
131
+ if ((ptr.target.kind === "primitive") !== p.targetIsPrimitive)
132
+ return false;
133
+ }
134
+ if (p.targetValue !== undefined) {
135
+ if (ptr.target.kind !== "primitive" || !valMatch(p.targetValue, ptr.target.value, bindings)) {
136
+ return false;
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ // Eagerly resolve every hole in a predicate against the ambient bindings (E15). Applied where
142
+ // a predicate meets data (select / mask-trust), so an unbound hole errors deterministically —
143
+ // regardless of how many deltas the operand happens to hold.
144
+ export function substituteHoles(pred, bindings) {
145
+ switch (pred.kind) {
146
+ case "true":
147
+ case "false":
148
+ return pred;
149
+ case "match": {
150
+ const c = pred.constant;
151
+ if (typeof c === "object" && !Array.isArray(c)) {
152
+ return { ...pred, constant: resolveParam(c, bindings) };
153
+ }
154
+ return pred;
155
+ }
156
+ case "hasPointer": {
157
+ const p = pred.ppred;
158
+ let te = p.targetEntity;
159
+ if (te !== undefined && te.kind === "hole") {
160
+ const bound = resolveParam(te, bindings);
161
+ if (typeof bound !== "string") {
162
+ throw new Error(`hole "${te.name}" bound to a non-string where an entity id is required (E15)`);
163
+ }
164
+ te = { kind: "const", id: bound };
165
+ }
166
+ let tv = p.targetValue;
167
+ if (tv !== undefined && tv.kind === "vcmp" && typeof tv.value === "object") {
168
+ tv = { ...tv, value: resolveParam(tv.value, bindings) };
169
+ }
170
+ if (te === p.targetEntity && tv === p.targetValue)
171
+ return pred;
172
+ return {
173
+ kind: "hasPointer",
174
+ ppred: {
175
+ ...p,
176
+ ...(te === undefined ? {} : { targetEntity: te }),
177
+ ...(tv === undefined ? {} : { targetValue: tv }),
178
+ },
179
+ };
180
+ }
181
+ case "and":
182
+ return {
183
+ kind: "and",
184
+ left: substituteHoles(pred.left, bindings),
185
+ right: substituteHoles(pred.right, bindings),
186
+ };
187
+ case "or":
188
+ return {
189
+ kind: "or",
190
+ left: substituteHoles(pred.left, bindings),
191
+ right: substituteHoles(pred.right, bindings),
192
+ };
193
+ case "not":
194
+ return { kind: "not", pred: substituteHoles(pred.pred, bindings) };
195
+ }
196
+ }
197
+ // Total and terminating: O(|delta|) per evaluation, no data dereference (SPEC-2 §3).
198
+ // `root` is the ambient root entity, consulted only by the root variable (E10). Holes are
199
+ // substituted away before predicates meet data; a stray hole here means "unbound" (E15).
200
+ export function evalPred(pred, delta, root, bindings) {
201
+ switch (pred.kind) {
202
+ case "true":
203
+ return true;
204
+ case "false":
205
+ return false;
206
+ case "match": {
207
+ const subject = pred.field === "author"
208
+ ? delta.claims.author
209
+ : pred.field === "timestamp"
210
+ ? delta.claims.timestamp
211
+ : delta.id;
212
+ const c = pred.constant;
213
+ const constant = typeof c === "object" && !Array.isArray(c)
214
+ ? resolveParam(c, bindings)
215
+ : c;
216
+ return compareWith(pred.cmp, subject, constant);
217
+ }
218
+ case "hasPointer":
219
+ return delta.claims.pointers.some((ptr) => pointerMatches(pred.ppred, ptr, root, bindings));
220
+ case "and":
221
+ return (evalPred(pred.left, delta, root, bindings) && evalPred(pred.right, delta, root, bindings));
222
+ case "or":
223
+ return (evalPred(pred.left, delta, root, bindings) || evalPred(pred.right, delta, root, bindings));
224
+ case "not":
225
+ return !evalPred(pred.pred, delta, root, bindings);
226
+ }
227
+ }
228
+ //# sourceMappingURL=pred.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pred.js","sourceRoot":"","sources":["../src/pred.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { type EvalResult, type Term } from "./eval.js";
2
+ import { type HView } from "./hview.js";
3
+ import { type ValMatch } from "./pred.js";
4
+ import type { SchemaRegistry } from "./schema.js";
5
+ import { DeltaSet } from "./set.js";
6
+ import type { Delta, Primitive } from "./types.js";
7
+ export interface MaterializationChange {
8
+ readonly materialization: string;
9
+ readonly root: string;
10
+ readonly changedProps: readonly string[];
11
+ readonly responsibleDeltaIds: readonly string[];
12
+ readonly newHex: string;
13
+ }
14
+ export type IngestResult = {
15
+ readonly status: "accepted";
16
+ } | {
17
+ readonly status: "duplicate";
18
+ } | {
19
+ readonly status: "rejected";
20
+ readonly reason: string;
21
+ };
22
+ export declare class Reactor {
23
+ private readonly log;
24
+ private readonly set;
25
+ private readonly targetIndex;
26
+ private readonly negationIndex;
27
+ private readonly materializations;
28
+ private readonly valueIndex;
29
+ ingest(delta: Delta): IngestResult;
30
+ private index;
31
+ byTarget(entityId: string): string[];
32
+ negationsOf(deltaId: string): string[];
33
+ byValue(role: string, match: (v: Primitive) => boolean): string[];
34
+ byValueBetween(role: string, lo: Primitive, hi: Primitive): string[];
35
+ get size(): number;
36
+ has(id: string): boolean;
37
+ get(id: string): Delta | undefined;
38
+ arrivalLog(): readonly Delta[];
39
+ digest(): string;
40
+ snapshot(): DeltaSet;
41
+ eval(term: Term, root?: string, registry?: SchemaRegistry): EvalResult;
42
+ private lastChanges;
43
+ register(name: string, term: Term, roots: readonly string[], registry?: SchemaRegistry): void;
44
+ materializedHex(name: string, root: string): string | undefined;
45
+ materializedView(name: string, root: string): HView | undefined;
46
+ evalCountOf(name: string): number;
47
+ changesFromLastIngest(): readonly MaterializationChange[];
48
+ private refresh;
49
+ private dispatchAndUpdate;
50
+ private affects;
51
+ private targetsSupport;
52
+ private chainTouchesSupport;
53
+ private readonly rawSubscribers;
54
+ private readonly matSubscribers;
55
+ subscribeRaw(cb: (delta: Delta) => void): void;
56
+ subscribe(materialization: string, cb: (change: MaterializationChange) => void): void;
57
+ ingestBundle(manifest: Delta, members: readonly Delta[]): IngestResult;
58
+ holdsAllMembers(manifestId: string): boolean;
59
+ }
60
+ export declare function makeManifestClaims(author: string, timestamp: number, memberIds: readonly string[], options?: {
61
+ readonly prior?: string;
62
+ readonly intent?: string;
63
+ }): import("./types.js").Claims;
64
+ export declare function manifestMemberIds(manifest: Delta): string[];
65
+ export declare function isRootAnchored(term: Term, registry: SchemaRegistry | undefined): boolean;
66
+ export type { ValMatch };
67
+ //# sourceMappingURL=reactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../src/reactor.ts"],"names":[],"mappings":"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"}