@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/delta.js ADDED
@@ -0,0 +1,92 @@
1
+ import { array, bool, encode, float, map, tstr } from "./cbor.js";
2
+ import { bytesToHex, contentAddress } from "./hash.js";
3
+ function targetToCbor(t) {
4
+ switch (t.kind) {
5
+ case "primitive": {
6
+ const v = t.value;
7
+ if (typeof v === "string")
8
+ return tstr(v);
9
+ if (typeof v === "boolean")
10
+ return bool(v);
11
+ return float(v);
12
+ }
13
+ case "entity": {
14
+ const entries = [["id", tstr(t.entity.id)]];
15
+ if (t.entity.context !== undefined)
16
+ entries.push(["context", tstr(t.entity.context)]);
17
+ return map(entries);
18
+ }
19
+ case "delta": {
20
+ const entries = [["delta", tstr(t.deltaRef.delta)]];
21
+ if (t.deltaRef.context !== undefined)
22
+ entries.push(["context", tstr(t.deltaRef.context)]);
23
+ return map(entries);
24
+ }
25
+ }
26
+ }
27
+ function pointerToCbor(p) {
28
+ return map([
29
+ ["role", tstr(p.role)],
30
+ ["target", targetToCbor(p.target)],
31
+ ]);
32
+ }
33
+ export function claimsToCbor(claims) {
34
+ return map([
35
+ ["author", tstr(claims.author)],
36
+ ["pointers", array(claims.pointers.map(pointerToCbor))],
37
+ ["timestamp", float(claims.timestamp)],
38
+ ]);
39
+ }
40
+ function assertNfc(s, what) {
41
+ if (s.normalize("NFC") !== s) {
42
+ throw new Error(`${what} must be NFC-normalized (ERRATA D11): ${JSON.stringify(s)}`);
43
+ }
44
+ }
45
+ // Reject malformed claims at the boundary; never repair (SPEC-4 §2).
46
+ export function assertValidClaims(claims) {
47
+ if (claims.author.length === 0)
48
+ throw new Error("author must be non-empty");
49
+ assertNfc(claims.author, "author");
50
+ if (!Number.isFinite(claims.timestamp))
51
+ throw new Error("timestamp must be finite");
52
+ if (claims.pointers.length < 1)
53
+ throw new Error("a delta MUST contain at least one pointer");
54
+ for (const p of claims.pointers) {
55
+ if (p.role.length === 0)
56
+ throw new Error("role must be non-empty");
57
+ assertNfc(p.role, "role");
58
+ if (p.target.kind === "primitive") {
59
+ const v = p.target.value;
60
+ if (typeof v === "number" && !Number.isFinite(v)) {
61
+ throw new Error("numeric primitive must be finite");
62
+ }
63
+ if (typeof v === "string")
64
+ assertNfc(v, "string primitive");
65
+ }
66
+ if (p.target.kind === "entity")
67
+ assertNfc(p.target.entity.id, "entity id");
68
+ if (p.target.kind === "delta")
69
+ assertNfc(p.target.deltaRef.delta, "delta ref");
70
+ const ctx = p.target.kind === "entity"
71
+ ? p.target.entity.context
72
+ : p.target.kind === "delta"
73
+ ? p.target.deltaRef.context
74
+ : undefined;
75
+ if (ctx !== undefined) {
76
+ if (ctx.length === 0)
77
+ throw new Error("context, when present, must be non-empty");
78
+ assertNfc(ctx, "context");
79
+ }
80
+ }
81
+ }
82
+ export function canonicalBytes(claims) {
83
+ assertValidClaims(claims);
84
+ return encode(claimsToCbor(claims));
85
+ }
86
+ export function canonicalHex(claims) {
87
+ return bytesToHex(canonicalBytes(claims));
88
+ }
89
+ export function computeId(claims) {
90
+ return contentAddress(canonicalBytes(claims));
91
+ }
92
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../src/delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { HView } from "./hview.js";
2
+ import { Reactor, type IngestResult } from "./reactor.js";
3
+ import type { Claims, Delta, Pointer } from "./types.js";
4
+ export type DerivedFn = (view: HView, root: string) => Pointer[][];
5
+ export interface BindingSpec {
6
+ readonly name: string;
7
+ readonly fnId: string;
8
+ readonly materialization: string;
9
+ readonly pure: boolean;
10
+ readonly budget: number;
11
+ readonly emit: "append" | "supersede" | {
12
+ readonly keyed: readonly string[];
13
+ };
14
+ }
15
+ export declare function derivedClaims(spec: BindingSpec, author: string, substantive: readonly Pointer[], inputHex: string): Claims;
16
+ export declare class DerivationHost {
17
+ readonly reactor: Reactor;
18
+ private readonly bindings;
19
+ constructor(reactor: Reactor);
20
+ install(spec: BindingSpec, fn: DerivedFn, seedHex: string): string;
21
+ isSuspended(name: string): boolean;
22
+ authorOf(name: string): string | undefined;
23
+ ingest(delta: Delta): IngestResult;
24
+ private drain;
25
+ private emitSigned;
26
+ private trigger;
27
+ }
28
+ export declare function verifyPureDerivation(emitted: Delta, spec: BindingSpec, fn: DerivedFn, view: HView, root: string, viewHex: string): boolean;
29
+ //# sourceMappingURL=derivation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivation.d.ts","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,cAAc,CAAC;AAItF,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,EAAE,EAAE,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC/E;AA2CD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,OAAO,EAAE,EAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR;AAED,qBAAa,cAAc;IAGb,QAAQ,CAAC,OAAO,EAAE,OAAO;IAFrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAEpC,OAAO,EAAE,OAAO;IAGrC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IA8BlE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK1C,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY;IAOlC,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,OAAO;CAsDhB;AAID,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAWT"}
@@ -0,0 +1,183 @@
1
+ // The derivation layer (SPEC-7, ERRATA-7): everything that computes is an author. Derived
2
+ // authors read materializations and write signed claims back through the ordinary ingest path.
3
+ import { computeId } from "./delta.js";
4
+ import { VOCAB_PREFIX } from "./schema-deltas.js";
5
+ import { makeNegationClaims } from "./set.js";
6
+ import { authorForSeed, signClaims, verifyDelta } from "./sign.js";
7
+ // The subject key of an emission under keyed(contextSet): sorted (entity id, context) pairs of
8
+ // the substantive entity pointers whose context is in the set; "" when none match (G4).
9
+ function emissionKey(substantive, contexts) {
10
+ const pairs = [];
11
+ for (const p of substantive) {
12
+ if (p.target.kind !== "entity")
13
+ continue;
14
+ const ctx = p.target.entity.context;
15
+ if (ctx !== undefined && contexts.includes(ctx)) {
16
+ pairs.push(`${p.target.entity.id}${ctx}`);
17
+ }
18
+ }
19
+ return pairs.sort().join("");
20
+ }
21
+ function provenancePointers(spec, inputHex) {
22
+ return [
23
+ {
24
+ role: `${VOCAB_PREFIX}.derived.by`,
25
+ target: { kind: "entity", entity: { id: spec.fnId } },
26
+ },
27
+ { role: `${VOCAB_PREFIX}.derived.from`, target: { kind: "primitive", value: inputHex } },
28
+ {
29
+ role: `${VOCAB_PREFIX}.derived.under`,
30
+ target: { kind: "entity", entity: { id: spec.name } },
31
+ },
32
+ ];
33
+ }
34
+ // Build the full claims for one emission — the exact recipe replay verification re-runs (G5).
35
+ export function derivedClaims(spec, author, substantive, inputHex) {
36
+ // timestamp 0: pure output must be a function of (fn, input hash) only (G3).
37
+ return {
38
+ timestamp: 0,
39
+ author,
40
+ pointers: [...substantive, ...provenancePointers(spec, inputHex)],
41
+ };
42
+ }
43
+ export class DerivationHost {
44
+ reactor;
45
+ bindings = new Map();
46
+ constructor(reactor) {
47
+ this.reactor = reactor;
48
+ }
49
+ // Installation is an assertion: a signed rdb.derived.binds delta (SPEC-7 §3).
50
+ install(spec, fn, seedHex) {
51
+ if (this.bindings.has(spec.name))
52
+ throw new Error(`duplicate binding: ${spec.name}`);
53
+ const author = authorForSeed(seedHex);
54
+ const binds = signClaims({
55
+ timestamp: 0,
56
+ author,
57
+ pointers: [
58
+ {
59
+ role: `${VOCAB_PREFIX}.derived.binds`,
60
+ target: { kind: "entity", entity: { id: spec.fnId, context: "bindings" } },
61
+ },
62
+ { role: `${VOCAB_PREFIX}.derived.author`, target: { kind: "primitive", value: author } },
63
+ ],
64
+ }, seedHex);
65
+ this.reactor.ingest(binds);
66
+ this.bindings.set(spec.name, {
67
+ spec,
68
+ fn,
69
+ seedHex,
70
+ author,
71
+ liveEmissions: new Map(),
72
+ triggerCount: 0,
73
+ suspended: false,
74
+ });
75
+ return author;
76
+ }
77
+ isSuspended(name) {
78
+ return this.bindings.get(name)?.suspended ?? false;
79
+ }
80
+ authorOf(name) {
81
+ return this.bindings.get(name)?.author;
82
+ }
83
+ // The write-back loop (G2): ingest, then drain triggers until quiescent.
84
+ ingest(delta) {
85
+ const result = this.reactor.ingest(delta);
86
+ if (result.status !== "accepted")
87
+ return result;
88
+ this.drain([...this.reactor.changesFromLastIngest()]);
89
+ return result;
90
+ }
91
+ drain(pending) {
92
+ let depth = 0;
93
+ while (pending.length > 0 && depth < 32) {
94
+ depth += 1;
95
+ const next = [];
96
+ for (const change of pending) {
97
+ for (const b of this.bindings.values()) {
98
+ if (b.spec.materialization !== change.materialization)
99
+ continue;
100
+ next.push(...this.trigger(b, change));
101
+ }
102
+ }
103
+ pending = next;
104
+ }
105
+ }
106
+ emitSigned(b, claims) {
107
+ const signed = signClaims(claims, b.seedHex);
108
+ const result = this.reactor.ingest(signed);
109
+ if (result.status === "rejected")
110
+ throw new Error("derived emission rejected");
111
+ return result.status === "accepted" ? [...this.reactor.changesFromLastIngest()] : [];
112
+ }
113
+ trigger(b, change) {
114
+ if (b.suspended)
115
+ return [];
116
+ // The default non-reentrancy guard (SPEC-7 §6): skip when the trigger is entirely our own.
117
+ const own = change.responsibleDeltaIds.every((id) => this.reactor.get(id)?.claims.author === b.author);
118
+ if (own)
119
+ return [];
120
+ if (b.triggerCount >= b.spec.budget) {
121
+ b.suspended = true;
122
+ // Divergence becomes an observable event, not a melted reactor (G2).
123
+ return this.emitSigned(b, {
124
+ timestamp: 0,
125
+ author: b.author,
126
+ pointers: [
127
+ {
128
+ role: `${VOCAB_PREFIX}.derived.suspended`,
129
+ target: { kind: "entity", entity: { id: b.spec.name, context: "suspensions" } },
130
+ },
131
+ ],
132
+ });
133
+ }
134
+ b.triggerCount += 1;
135
+ const view = this.reactor.materializedView(change.materialization, change.root);
136
+ if (view === undefined)
137
+ return [];
138
+ const out = [];
139
+ if (b.spec.emit === "supersede") {
140
+ // Wholesale supersession: negate every live emission before emitting anew (G4).
141
+ for (const prior of [...b.liveEmissions.values()].flat()) {
142
+ out.push(...this.emitSigned(b, makeNegationClaims(b.author, 0, prior)));
143
+ }
144
+ b.liveEmissions.clear();
145
+ }
146
+ const keyed = typeof b.spec.emit === "object" ? b.spec.emit.keyed : undefined;
147
+ for (const substantive of b.fn(view, change.root)) {
148
+ const claims = derivedClaims(b.spec, b.author, substantive, change.newHex);
149
+ const signed = signClaims(claims, b.seedHex);
150
+ const key = keyed === undefined ? "" : emissionKey(substantive, keyed);
151
+ // Per-subject supersession: negate only the same-key priors; an empty key appends (G4).
152
+ if (keyed !== undefined && key !== "") {
153
+ for (const prior of b.liveEmissions.get(key) ?? []) {
154
+ out.push(...this.emitSigned(b, makeNegationClaims(b.author, 0, prior)));
155
+ }
156
+ b.liveEmissions.set(key, []);
157
+ }
158
+ const result = this.reactor.ingest(signed);
159
+ if (result.status === "accepted") {
160
+ const bucket = b.liveEmissions.get(key);
161
+ if (bucket === undefined)
162
+ b.liveEmissions.set(key, [signed.id]);
163
+ else
164
+ bucket.push(signed.id);
165
+ out.push(...this.reactor.changesFromLastIngest());
166
+ }
167
+ }
168
+ return out;
169
+ }
170
+ }
171
+ // Pure-replay verification (SPEC-7 §4, G5): recompute the emission from (fn, input view) and
172
+ // compare content addresses; the signature must also verify.
173
+ export function verifyPureDerivation(emitted, spec, fn, view, root, viewHex) {
174
+ if (verifyDelta(emitted) !== "verified")
175
+ return false;
176
+ const fromPtr = emitted.claims.pointers.find((p) => p.role === `${VOCAB_PREFIX}.derived.from` && p.target.kind === "primitive");
177
+ if (fromPtr?.target.kind !== "primitive" || fromPtr.target.value !== viewHex)
178
+ return false;
179
+ // Re-derive ids: the replayed claims must content-address to the emitted delta's id.
180
+ const ids = fn(view, root).map((substantive) => computeId(derivedClaims(spec, emitted.claims.author, substantive, viewHex)));
181
+ return ids.includes(emitted.id);
182
+ }
183
+ //# sourceMappingURL=derivation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivation.js","sourceRoot":"","sources":["../src/derivation.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,+FAA+F;AAE/F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA2BnE,+FAA+F;AAC/F,wFAAwF;AACxF,SAAS,WAAW,CAAC,WAA+B,EAAE,QAA2B;IAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACzC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAiB,EAAE,QAAgB;IAC7D,OAAO;QACL;YACE,IAAI,EAAE,GAAG,YAAY,aAAa;YAClC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;SACtD;QACD,EAAE,IAAI,EAAE,GAAG,YAAY,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACxF;YACE,IAAI,EAAE,GAAG,YAAY,gBAAgB;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;SACtD;KACF,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAC3B,IAAiB,EACjB,MAAc,EACd,WAA+B,EAC/B,QAAgB;IAEhB,6EAA6E;IAC7E,OAAO;QACL,SAAS,EAAE,CAAC;QACZ,MAAM;QACN,QAAQ,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IAGJ;IAFJ,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEzD,YAAqB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEzC,8EAA8E;IAC9E,OAAO,CAAC,IAAiB,EAAE,EAAa,EAAE,OAAe;QACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CACtB;YACE,SAAS,EAAE,CAAC;YACZ,MAAM;YACN,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,GAAG,YAAY,gBAAgB;oBACrC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;iBAC3E;gBACD,EAAE,IAAI,EAAE,GAAG,YAAY,iBAAiB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;aACzF;SACF,EACD,OAAO,CACR,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI;YACJ,EAAE;YACF,OAAO;YACP,MAAM;YACN,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACzC,CAAC;IAED,yEAAyE;IACzE,MAAM,CAAC,KAAY;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,OAAgC;QAC5C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,CAAC;YACX,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe;wBAAE,SAAS;oBAChE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,CAAY,EAAE,MAAc;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,CAAC;IAEO,OAAO,CAAC,CAAY,EAAE,MAA6B;QACzD,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC3B,2FAA2F;QAC3F,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAC1C,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CACzD,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;YACnB,qEAAqE;YACrE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;gBACxB,SAAS,EAAE,CAAC;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,GAAG,YAAY,oBAAoB;wBACzC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE;qBAChF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QACD,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,gFAAgF;YAChF,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,KAAK,MAAM,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACvE,wFAAwF;YACxF,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACtC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC;gBACD,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,MAAM,KAAK,SAAS;oBAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;;oBAC3D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,6FAA6F;AAC7F,6DAA6D;AAC7D,MAAM,UAAU,oBAAoB,CAClC,OAAc,EACd,IAAiB,EACjB,EAAa,EACb,IAAW,EACX,IAAY,EACZ,OAAe;IAEf,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,YAAY,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAClF,CAAC;IACF,IAAI,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3F,qFAAqF;IACrF,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAC7C,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAC5E,CAAC;IACF,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC"}
package/dist/eval.d.ts ADDED
@@ -0,0 +1,91 @@
1
+ import { type HView } from "./hview.js";
2
+ import { type Policy, type View } from "./policy.js";
3
+ import { type Bindings, type Pred, type StrMatch } from "./pred.js";
4
+ import { SchemaRegistry } from "./schema.js";
5
+ import { DeltaSet } from "./set.js";
6
+ export type MaskPolicy = {
7
+ readonly kind: "drop";
8
+ } | {
9
+ readonly kind: "annotate";
10
+ } | {
11
+ readonly kind: "trust";
12
+ readonly pred: Pred;
13
+ };
14
+ export type SchemaRefT = {
15
+ readonly kind: "name";
16
+ readonly name: string;
17
+ } | {
18
+ readonly kind: "pinned";
19
+ readonly hash: string;
20
+ };
21
+ export type GroupKey = {
22
+ readonly kind: "byTargetContext";
23
+ } | {
24
+ readonly kind: "byRole";
25
+ } | {
26
+ readonly kind: "const";
27
+ readonly prop: string;
28
+ };
29
+ export type Term = {
30
+ readonly kind: "input";
31
+ } | {
32
+ readonly kind: "select";
33
+ readonly pred: Pred;
34
+ readonly of: Term;
35
+ } | {
36
+ readonly kind: "union";
37
+ readonly left: Term;
38
+ readonly right: Term;
39
+ } | {
40
+ readonly kind: "mask";
41
+ readonly policy: MaskPolicy;
42
+ readonly of: Term;
43
+ } | {
44
+ readonly kind: "group";
45
+ readonly key: GroupKey;
46
+ readonly of: Term;
47
+ } | {
48
+ readonly kind: "prune";
49
+ readonly keep: "all" | StrMatch;
50
+ readonly of: Term;
51
+ } | {
52
+ readonly kind: "expand";
53
+ readonly role: StrMatch;
54
+ readonly schema: SchemaRefT;
55
+ readonly of: Term;
56
+ } | {
57
+ readonly kind: "fix";
58
+ readonly schema: SchemaRefT;
59
+ readonly entity: string;
60
+ readonly bindings?: Bindings;
61
+ } | {
62
+ readonly kind: "resolve";
63
+ readonly policy: Policy;
64
+ readonly of: Term;
65
+ };
66
+ interface DSetResult {
67
+ readonly sort: "dset";
68
+ readonly set: DeltaSet;
69
+ readonly negated: ReadonlySet<string>;
70
+ readonly annotated: boolean;
71
+ }
72
+ interface HViewResult {
73
+ readonly sort: "hview";
74
+ readonly hview: HView;
75
+ }
76
+ interface ViewResult {
77
+ readonly sort: "view";
78
+ readonly view: View;
79
+ }
80
+ export type EvalResult = DSetResult | HViewResult | ViewResult;
81
+ export interface AliasedSpec {
82
+ readonly name: string;
83
+ readonly via?: string;
84
+ readonly trust?: Pred;
85
+ }
86
+ export declare function aliasClosure(input: DeltaSet, spec: AliasedSpec, root?: string): string[];
87
+ export declare function expandAliased(pred: Pred, input: DeltaSet, root: string | undefined): Pred;
88
+ export declare function evalTerm(term: Term, input: DeltaSet, root?: string, registry?: SchemaRegistry, bindings?: Bindings): EvalResult;
89
+ export declare function resultCanonicalHex(result: EvalResult): string;
90
+ export {};
91
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}