@cruba/crubal 0.1.0 → 0.2.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 (86) hide show
  1. package/README.md +30 -2
  2. package/dist/bin/crubal.js +70 -4
  3. package/dist/bin/crubal.js.map +1 -1
  4. package/dist/src/access.d.ts +126 -0
  5. package/dist/src/access.js +517 -0
  6. package/dist/src/access.js.map +1 -0
  7. package/dist/src/arrival.d.ts +55 -0
  8. package/dist/src/arrival.js +124 -0
  9. package/dist/src/arrival.js.map +1 -0
  10. package/dist/src/bundle.d.ts +66 -0
  11. package/dist/src/bundle.js +753 -0
  12. package/dist/src/bundle.js.map +1 -0
  13. package/dist/src/conditions.d.ts +7 -1
  14. package/dist/src/conditions.js +52 -11
  15. package/dist/src/conditions.js.map +1 -1
  16. package/dist/src/corpus.js +568 -34
  17. package/dist/src/corpus.js.map +1 -1
  18. package/dist/src/defs.d.ts +37 -2
  19. package/dist/src/defs.js +95 -14
  20. package/dist/src/defs.js.map +1 -1
  21. package/dist/src/dictionary.d.ts +15 -0
  22. package/dist/src/dictionary.js +72 -13
  23. package/dist/src/dictionary.js.map +1 -1
  24. package/dist/src/exchange.d.ts +202 -11
  25. package/dist/src/exchange.js +759 -45
  26. package/dist/src/exchange.js.map +1 -1
  27. package/dist/src/forms.d.ts +16 -0
  28. package/dist/src/forms.js +169 -0
  29. package/dist/src/forms.js.map +1 -0
  30. package/dist/src/index.d.ts +18 -6
  31. package/dist/src/index.js +17 -5
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/lifecycle.d.ts +84 -0
  34. package/dist/src/lifecycle.js +415 -0
  35. package/dist/src/lifecycle.js.map +1 -0
  36. package/dist/src/log.d.ts +78 -0
  37. package/dist/src/log.js +506 -0
  38. package/dist/src/log.js.map +1 -0
  39. package/dist/src/migrate.d.ts +24 -1
  40. package/dist/src/migrate.js +104 -9
  41. package/dist/src/migrate.js.map +1 -1
  42. package/dist/src/model.d.ts +33 -1
  43. package/dist/src/model.js +158 -2
  44. package/dist/src/model.js.map +1 -1
  45. package/dist/src/packages.d.ts +44 -0
  46. package/dist/src/packages.js +137 -3
  47. package/dist/src/packages.js.map +1 -1
  48. package/dist/src/print-text.js +22 -0
  49. package/dist/src/print-text.js.map +1 -1
  50. package/dist/src/publish.d.ts +27 -0
  51. package/dist/src/publish.js +275 -0
  52. package/dist/src/publish.js.map +1 -0
  53. package/dist/src/read-text.d.ts +2 -0
  54. package/dist/src/read-text.js +72 -4
  55. package/dist/src/read-text.js.map +1 -1
  56. package/dist/src/records.d.ts +31 -0
  57. package/dist/src/records.js +72 -0
  58. package/dist/src/records.js.map +1 -0
  59. package/dist/src/review.d.ts +22 -0
  60. package/dist/src/review.js +198 -0
  61. package/dist/src/review.js.map +1 -0
  62. package/dist/src/rules.d.ts +34 -2
  63. package/dist/src/rules.js +147 -22
  64. package/dist/src/rules.js.map +1 -1
  65. package/dist/src/schedule.d.ts +24 -0
  66. package/dist/src/schedule.js +126 -0
  67. package/dist/src/schedule.js.map +1 -0
  68. package/dist/src/std-packages.d.ts +9 -0
  69. package/dist/src/std-packages.js +268 -0
  70. package/dist/src/std-packages.js.map +1 -0
  71. package/dist/src/store.d.ts +38 -7
  72. package/dist/src/store.js +166 -24
  73. package/dist/src/store.js.map +1 -1
  74. package/dist/src/tree.d.ts +3 -0
  75. package/dist/src/tree.js +36 -0
  76. package/dist/src/tree.js.map +1 -1
  77. package/dist/src/units-table.d.ts +1 -0
  78. package/dist/src/units-table.js +200 -0
  79. package/dist/src/units-table.js.map +1 -0
  80. package/dist/src/units.d.ts +42 -4
  81. package/dist/src/units.js +91 -30
  82. package/dist/src/units.js.map +1 -1
  83. package/dist/src/views.d.ts +108 -6
  84. package/dist/src/views.js +389 -64
  85. package/dist/src/views.js.map +1 -1
  86. package/package.json +5 -3
@@ -0,0 +1,415 @@
1
+ // lifecycle.ts: a record's life (spec 1.12), values down the levels with an optional parent (1.7), and
2
+ // instructions (10.7). Folded keys are read from the record above; owned keys (the kind's `vary` steps and
3
+ // the classes' `level::` lines) belong to the lower record. Attaching folds values up, detaching copies them
4
+ // down, archiving snapshots them so history stays true, merging folds one record into another, and
5
+ // instructions change which keys lower records hold, pending per record until applied.
6
+ import { serialize } from "./canonical.js";
7
+ import { MemoryRecords } from "./records.js";
8
+ import { readUnder } from "./read-text.js";
9
+ import { land } from "./store.js";
10
+ import { CrubalError, readTree } from "./tree.js";
11
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
12
+ export function emptyStore() {
13
+ return { records: new MemoryRecords(), bindings: new Map(), instructions: new Map(), review: [] };
14
+ }
15
+ /** A record's values with everything above it read through (1.7); a record standing alone reads nothing. */
16
+ export function effective(records, r) {
17
+ const up = r.of ? records.get(r.of) : undefined;
18
+ return { ...(up ? effective(records, up) : {}), ...r.values };
19
+ }
20
+ function classLines(dict, name, seen = new Set()) {
21
+ if (seen.has(name))
22
+ return [];
23
+ seen.add(name);
24
+ const c = dict.classes.get(name);
25
+ if (!c)
26
+ return [];
27
+ return [...c.uses.flatMap((u) => classLines(dict, u, seen)), ...c.lines];
28
+ }
29
+ /** The keys a record owns (1.7): its level's vary step, and the `level::` lines of the classes above and on it. */
30
+ export function ownedKeys(dict, records, r) {
31
+ const keys = new Set(dict.vary.get(r.level) ?? []);
32
+ const up = r.of ? records.get(r.of) : undefined;
33
+ for (const w of [...(up?.wears ?? []), ...(r.wears ?? [])])
34
+ for (const l of classLines(dict, w))
35
+ if (l.level === r.level)
36
+ keys.add(l.facet);
37
+ return keys;
38
+ }
39
+ function sourceFor(r, key) {
40
+ return r.sources?.[key] ?? r.sources?.["*"];
41
+ }
42
+ function setValue(r, key, v, s) {
43
+ r.values = { ...r.values, [key]: v };
44
+ if (s)
45
+ r.sources = { ...(r.sources ?? {}), [key]: s };
46
+ }
47
+ function dropValue(r, key) {
48
+ const { [key]: _v, ...values } = r.values;
49
+ r.values = values;
50
+ if (r.sources?.[key]) {
51
+ const { [key]: _s, ...sources } = r.sources;
52
+ r.sources = sources;
53
+ }
54
+ }
55
+ function suggest(r, key, v, s) {
56
+ const bag = { ...(r.suggestions ?? {}) };
57
+ bag[key] = [...(bag[key] ?? []), { value: v, origin: s?.origin ?? "reported", via: s?.via ?? "" }];
58
+ r.suggestions = bag;
59
+ }
60
+ const empty = (v) => v === undefined || (isObj(v) && "$empty" in v);
61
+ /**
62
+ * Fold a lower record's folded-key values up into the record above (1.7): the same value is dropped and
63
+ * read through; an empty above is filled; a different value is a conflict for the trust order. Without
64
+ * `edit` on the record above, what would move up lands there as a suggestion and the lower record keeps
65
+ * its value.
66
+ */
67
+ export function foldUp(store, lowerId, dict, mayEditUpper = true) {
68
+ const lower = store.records.get(lowerId);
69
+ const upper = lower?.of ? store.records.get(lower.of) : undefined;
70
+ if (!lower || !upper)
71
+ return;
72
+ const owned = ownedKeys(dict, store.records, lower);
73
+ let up = { ...upper };
74
+ const low = { ...lower };
75
+ const upValues = effective(store.records, upper);
76
+ for (const [key, v] of Object.entries(lower.values)) {
77
+ if (owned.has(key))
78
+ continue;
79
+ const s = sourceFor(lower, key);
80
+ const above = upValues[key];
81
+ if (!empty(above) && serialize(above) === serialize(v)) {
82
+ dropValue(low, key);
83
+ continue;
84
+ }
85
+ if (!mayEditUpper) {
86
+ suggest(up, key, v, s);
87
+ continue;
88
+ }
89
+ if (empty(above)) {
90
+ setValue(up, key, v, s);
91
+ dropValue(low, key);
92
+ continue;
93
+ }
94
+ up = land(up, { outcomes: [{ from: key, to: key, outcome: "conflict", value: v }] }, s ?? { origin: "reported", via: "" }, dict.trust, dict.facetTrust);
95
+ dropValue(low, key);
96
+ }
97
+ store.records.set(up.id, up);
98
+ store.records.set(low.id, low);
99
+ }
100
+ /** Attach a standing-alone record to the record above it, then fold its values up. */
101
+ export function attach(store, lowerId, upperId, dict, mayEditUpper = true) {
102
+ const lower = store.records.get(lowerId);
103
+ if (!lower)
104
+ throw new Error(`no record ${lowerId}`);
105
+ if (!store.records.has(upperId))
106
+ throw new Error(`no record ${upperId}`);
107
+ store.records.set(lowerId, { ...lower, of: upperId });
108
+ foldUp(store, lowerId, dict, mayEditUpper);
109
+ }
110
+ /** Copy every folded value onto the record, with its source, then clear `of`. */
111
+ function copyDown(store, r, dict) {
112
+ const up = r.of ? store.records.get(r.of) : undefined;
113
+ if (!up)
114
+ return r;
115
+ const owned = ownedKeys(dict, store.records, r);
116
+ const out = { ...r, values: { ...r.values }, sources: { ...(r.sources ?? {}) } };
117
+ for (const [key, v] of Object.entries(effective(store.records, up))) {
118
+ if (owned.has(key) || out.values[key] !== undefined)
119
+ continue;
120
+ out.values[key] = v;
121
+ const s = sourceAbove(store, up, key);
122
+ if (s)
123
+ out.sources[key] = s;
124
+ }
125
+ if (!Object.keys(out.sources ?? {}).length)
126
+ delete out.sources;
127
+ return out;
128
+ }
129
+ function sourceAbove(store, r, key) {
130
+ if (r.values[key] !== undefined)
131
+ return sourceFor(r, key);
132
+ const up = r.of ? store.records.get(r.of) : undefined;
133
+ return up ? sourceAbove(store, up, key) : undefined;
134
+ }
135
+ /** Detach: the record keeps working as it was. */
136
+ export function detach(store, lowerId, dict) {
137
+ const r = store.records.get(lowerId);
138
+ if (!r?.of)
139
+ return;
140
+ const copied = copyDown(store, r, dict);
141
+ delete copied.of;
142
+ store.records.set(lowerId, copied);
143
+ }
144
+ function childrenOf(store, id, along) {
145
+ return store.records.childrenOf(id, along);
146
+ }
147
+ /**
148
+ * Adopt a value (8.2): it stops following its rule or presenter; the source gains `adopted`. A `must`
149
+ * production refuses; a `should` one is flagged (the caller decides what to do with the flag).
150
+ */
151
+ export function adopt(store, id, address, rules = []) {
152
+ const r = store.records.get(id);
153
+ if (!r)
154
+ throw new CrubalError(`no record ${id}`);
155
+ if (r.values[address] === undefined)
156
+ throw new CrubalError(`${id} has no value at ${address} to adopt`);
157
+ const rule = rules.find((x) => x.produces?.key === address);
158
+ if (rule?.strength === "must")
159
+ throw new CrubalError(`${address} is produced by ${rule.name}, a must rule: it can't be adopted`);
160
+ const was = (r.sources?.[address] ?? r.sources?.["*"] ?? { origin: "reported", via: "" });
161
+ store.records.set(id, { ...r, sources: { ...(r.sources ?? {}), [address]: { ...was, adopted: true } } });
162
+ return rule?.strength === "should" ? { flagged: rule.name } : {};
163
+ }
164
+ /**
165
+ * Split (1.12): a new record minted beside the origin, the named children moved under it (`of`), the
166
+ * named values written on it with the origin's sources where it has them, the named bindings moved. The
167
+ * reverse of a merge names what the merge brought; a version split names the instances that disagreed.
168
+ */
169
+ export function split(store, fromId, into, what, source = { origin: "declared", via: "split" }) {
170
+ const origin = store.records.get(fromId);
171
+ if (!origin)
172
+ throw new CrubalError(`no record ${fromId}`);
173
+ if (store.records.has(into))
174
+ throw new CrubalError(`${into} exists`);
175
+ const values = {};
176
+ const sources = {};
177
+ for (const [k, v] of Object.entries(what.values ?? {})) {
178
+ values[k] = v;
179
+ const own = origin.sources?.[k] ?? origin.sources?.["*"];
180
+ sources[k] = origin.values[k] !== undefined && serialize(origin.values[k]) === serialize(v) && own ? { ...own } : { ...source };
181
+ }
182
+ const next = { id: into, kind: origin.kind, level: origin.level, owner: origin.owner, values, sources };
183
+ if (origin.of)
184
+ next.of = origin.of;
185
+ if (origin.within)
186
+ next.within = origin.within;
187
+ if (origin.wears)
188
+ next.wears = [...origin.wears];
189
+ store.records.set(into, next);
190
+ for (const id of what.children ?? []) {
191
+ const c = store.records.get(id);
192
+ if (!c)
193
+ throw new CrubalError(`no record ${id}`);
194
+ if (c.of !== fromId)
195
+ throw new CrubalError(`${id} isn't of ${fromId}`);
196
+ store.records.set(id, { ...c, of: into });
197
+ }
198
+ for (const key of what.bindings ?? []) {
199
+ if (store.bindings.get(key) !== fromId)
200
+ throw new CrubalError(`${key} isn't bound to ${fromId}`);
201
+ store.bindings.set(key, into);
202
+ }
203
+ return next;
204
+ }
205
+ /** Give an adopted value back (8.2): the mark goes, and the next rule run or update replaces it. */
206
+ export function giveBack(store, id, address) {
207
+ const r = store.records.get(id);
208
+ if (!r)
209
+ throw new CrubalError(`no record ${id}`);
210
+ const s = r.sources?.[address];
211
+ if (!s?.adopted)
212
+ throw new CrubalError(`${id} hasn't adopted ${address}`);
213
+ const { adopted: _a, ...rest } = s;
214
+ store.records.set(id, { ...r, sources: { ...(r.sources ?? {}), [address]: rest } });
215
+ }
216
+ /** Adopt another owner's whole record (8.2): a new record of ours, every value with its source, linked by crubal:clonedFrom. */
217
+ export function clone(store, fromId, newId, owner) {
218
+ const r = store.records.get(fromId);
219
+ if (!r)
220
+ throw new CrubalError(`no record ${fromId}`);
221
+ if (store.records.has(newId))
222
+ throw new CrubalError(`${newId} exists`);
223
+ const sources = {};
224
+ for (const k of Object.keys(r.values)) {
225
+ const s = (r.sources?.[k] ?? r.sources?.["*"] ?? { origin: "reported", via: "" });
226
+ sources[k] = { ...s, ...(s.owner || r.owner === owner ? {} : { owner: r.owner }) };
227
+ }
228
+ const link = `${r.owner === owner ? "" : `${r.owner}:`}${fromId}`;
229
+ const next = { id: newId, kind: r.kind, level: r.level, owner, values: { ...r.values, "crubal:clonedFrom": { $link: link } }, sources: { ...sources, "crubal:clonedFrom": { origin: "declared", via: "clone" } } };
230
+ if (r.wears)
231
+ next.wears = [...r.wears];
232
+ if (r.parts)
233
+ next.parts = structuredClone(r.parts);
234
+ store.records.set(newId, next);
235
+ return next;
236
+ }
237
+ export function archive(store, id, reason, dict, into) {
238
+ const r = store.records.get(id);
239
+ if (!r)
240
+ throw new Error(`no record ${id}`);
241
+ const snap = { ...copyDown(store, r, dict) };
242
+ snap.status = { state: "archived", reason, ...(into ? { into } : {}) };
243
+ store.records.set(id, snap);
244
+ const rule = dict.archive.get(r.kind) ?? "independent";
245
+ const along = rule === "cascade of" ? ["of"] : rule === "cascade within" ? ["within"] : rule === "cascade both" ? ["of", "within"] : [];
246
+ for (const a of along)
247
+ for (const c of childrenOf(store, id, a))
248
+ if (!c.status)
249
+ archive(store, c.id, "parent archived", dict);
250
+ }
251
+ /** Unarchive: back to active; an attached record's copied values fold up again; the cascade is undone. */
252
+ export function unarchive(store, id, dict) {
253
+ const r = store.records.get(id);
254
+ if (!r?.status)
255
+ return;
256
+ const { status: _s, ...rest } = r;
257
+ store.records.set(id, rest);
258
+ if (rest.of)
259
+ foldUp(store, id, dict, true);
260
+ for (const along of ["of", "within"])
261
+ for (const c of childrenOf(store, id, along))
262
+ if (c.status?.reason === "parent archived")
263
+ unarchive(store, c.id, dict);
264
+ }
265
+ /** Merge: the loser's values fold into the survivor under the trust order; the loser is archived as merged. */
266
+ export function merge(store, loserId, survivorId, dict) {
267
+ const loser = store.records.get(loserId);
268
+ let survivor = store.records.get(survivorId);
269
+ if (!loser || !survivor)
270
+ throw new Error(`merge needs both ${loserId} and ${survivorId}`);
271
+ for (const [key, v] of Object.entries(loser.values)) {
272
+ const s = sourceFor(loser, key) ?? { origin: "reported", via: "" };
273
+ const current = survivor.values[key];
274
+ const outcome = empty(current) ? "absorbed" : serialize(current) === serialize(v) ? "absorbed" : "conflict";
275
+ survivor = land(survivor, { outcomes: [{ from: key, to: key, outcome, value: v }] }, s, dict.trust, dict.facetTrust);
276
+ }
277
+ store.records.set(survivorId, survivor);
278
+ for (const c of childrenOf(store, loserId, "of"))
279
+ store.records.set(c.id, { ...c, of: survivorId });
280
+ for (const c of childrenOf(store, loserId, "within"))
281
+ store.records.set(c.id, { ...c, within: survivorId });
282
+ for (const [k, v] of store.bindings)
283
+ if (v === loserId)
284
+ store.bindings.set(k, survivorId);
285
+ store.records.set(loserId, { ...loser, status: { state: "archived", reason: "merged", into: survivorId } });
286
+ }
287
+ // ─── Instructions (10.7) ─────────────────────────────────────────────────────
288
+ const unq = (s) => (s.trim().startsWith('"') ? JSON.parse(s.trim()) : s.trim());
289
+ /** Read instruction lines (`+key`, `-key`, `-key -> other` with value maps below) for one issuer. */
290
+ export function readInstructions(issuer, lines, from = 0) {
291
+ return lines.map((l, i) => {
292
+ const text = l.text.trim().replace(/^\d+:\s*/, "");
293
+ const op = text[0] === "+" ? "+" : text[0] === "-" ? "-" : null;
294
+ if (!op)
295
+ throw new Error(`an instruction is +key, -key or -key -> other: ${text}`);
296
+ const body = text.slice(1).trim();
297
+ const at = body.indexOf(" -> ");
298
+ const key = at < 0 ? body : body.slice(0, at).trim();
299
+ const to = at < 0 ? undefined : body.slice(at + 4).trim();
300
+ const map = l.children.map((c) => {
301
+ const m = c.text.indexOf(" -> ");
302
+ if (m < 0)
303
+ throw new Error(`a value map is "theirs -> ours": ${c.text}`);
304
+ return [unq(c.text.slice(0, m)), unq(c.text.slice(m + 4))];
305
+ });
306
+ return { issuer, n: from + i + 1, op, key, ...(to ? { to } : {}), map };
307
+ });
308
+ }
309
+ /** Read `instructions: <issuer>` blocks. */
310
+ export function readInstructionBlocks(source) {
311
+ const out = new Map();
312
+ for (const n of readTree(source)) {
313
+ if (n.kind !== "pair" || n.key !== "instructions")
314
+ continue;
315
+ const issuer = n.value.trim();
316
+ out.set(issuer, [...(out.get(issuer) ?? []), ...readInstructions(issuer, n.children, out.get(issuer)?.length ?? 0)]);
317
+ }
318
+ return out;
319
+ }
320
+ /** Issue instructions from a record or a class version; they are numbered on from the issuer's last. */
321
+ export function issue(store, issuer, lines) {
322
+ const have = store.instructions.get(issuer) ?? [];
323
+ const added = readInstructions(issuer, lines, have.length);
324
+ store.instructions.set(issuer, [...have, ...added]);
325
+ return added;
326
+ }
327
+ /**
328
+ * The issuers whose instructions reach a record, in the order they apply (10.7): the record above, then
329
+ * its kind's versions, then the class versions above and on it, each group by name then version.
330
+ */
331
+ export function issuersFor(store, r) {
332
+ const out = [];
333
+ if (r.of)
334
+ out.push(r.of);
335
+ const up = r.of ? store.records.get(r.of) : undefined;
336
+ const worn = new Set([...(up?.wears ?? []), ...(r.wears ?? [])]);
337
+ const kinds = [];
338
+ const classes = [];
339
+ for (const issuer of store.instructions.keys()) {
340
+ const k = issuer.match(/^kind:([^/]+)\//);
341
+ if (k && k[1] === r.kind)
342
+ kinds.push(issuer);
343
+ const c = issuer.match(/^class:([^/]+)\//);
344
+ if (c && worn.has(c[1]))
345
+ classes.push(issuer);
346
+ }
347
+ return [...out, ...kinds.sort(), ...classes.sort()];
348
+ }
349
+ /** The instructions a record hasn't applied yet, in issuer order then number. */
350
+ export function pending(store, r) {
351
+ return issuersFor(store, r).flatMap((issuer) => (store.instructions.get(issuer) ?? []).filter((i) => i.n > (r.applied?.[issuer] ?? 0)));
352
+ }
353
+ function plain(v) {
354
+ if (typeof v === "string")
355
+ return v;
356
+ if (typeof v === "boolean")
357
+ return v ? "yes" : "no";
358
+ if (isObj(v)) {
359
+ if ("$value" in v)
360
+ return plain(v.$value);
361
+ if ("$link" in v)
362
+ return `&${v.$link}`;
363
+ if ("$qty" in v)
364
+ return `${v.$qty}${v.unit}`;
365
+ if ("$money" in v)
366
+ return `${v.$money}${v.currency}`;
367
+ if ("$empty" in v)
368
+ return v.$empty === "unknown" ? "_" : "-";
369
+ }
370
+ return serialize(v);
371
+ }
372
+ /** Apply a record's pending instructions, in order; an archived record is skipped. */
373
+ export function apply(store, id, dict) {
374
+ const r = store.records.get(id);
375
+ if (!r || r.status?.state === "archived")
376
+ return [];
377
+ const todo = pending(store, r);
378
+ const out = { ...r, values: { ...r.values }, sources: { ...(r.sources ?? {}) }, applied: { ...(r.applied ?? {}) } };
379
+ for (const i of todo) {
380
+ const via = `${i.issuer}#${i.n}`;
381
+ if (i.op === "+") {
382
+ if (out.values[i.key] === undefined)
383
+ setValue(out, i.key, { $empty: "unknown" }, { origin: "declared", via });
384
+ }
385
+ else {
386
+ const v = out.values[i.key];
387
+ const s = sourceFor(out, i.key);
388
+ dropValue(out, i.key);
389
+ if (i.to && v !== undefined) {
390
+ const f = dict.facets.get(i.to);
391
+ if (!i.map.length)
392
+ setValue(out, i.to, v, s);
393
+ else {
394
+ const hit = i.map.find(([theirs]) => theirs === plain(v));
395
+ if (!hit) {
396
+ store.review.push({ record: id, address: i.key, instruction: `${via} -${i.key} -> ${i.to}`, value: v, reason: "no value map for this value", held: true });
397
+ out.held = { ...(out.held ?? {}), [i.key]: { value: v, instruction: via } };
398
+ }
399
+ else if (hit[1] === "-")
400
+ setValue(out, i.to, { $empty: "n/a" }, s);
401
+ else
402
+ setValue(out, i.to, (f ? readUnder(f, hit[1], dict) : undefined) ?? hit[1], s);
403
+ }
404
+ }
405
+ }
406
+ out.applied[i.issuer] = i.n;
407
+ }
408
+ if (!Object.keys(out.sources ?? {}).length)
409
+ delete out.sources;
410
+ if (!Object.keys(out.applied ?? {}).length)
411
+ delete out.applied;
412
+ store.records.set(id, out);
413
+ return todo;
414
+ }
415
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { Edge } from "./access.ts";
2
+ import type { Json, JsonObject, Record } from "./model.ts";
3
+ import { type RecordSet } from "./records.ts";
4
+ export type Entry = JsonObject;
5
+ /** Everything a store holds that the log carries. */
6
+ export type State = {
7
+ records: RecordSet;
8
+ /** Every edge written, by id; the store's commit checks each (14.5, 14.12) before it lands here. */
9
+ edges: Map<string, Edge>;
10
+ /** `contract|ref` → record */
11
+ bindings: Map<string, string>;
12
+ /** issuer → its instructions, in order */
13
+ instructions: Map<string, JsonObject[]>;
14
+ observations: JsonObject[];
15
+ reviews: JsonObject[];
16
+ runs: Map<string, JsonObject>;
17
+ installed: JsonObject[];
18
+ reads: JsonObject[];
19
+ /** The owner's working package (11.4): `<member>:<name>` → the definition as it now stands. */
20
+ definitions: Map<string, JsonObject>;
21
+ };
22
+ export declare function emptyState(): State;
23
+ /** Apply one entry's effects to the state. */
24
+ export declare function applyEntry(state: State, entry: Entry): void;
25
+ /** Rebuild a store's state from its log alone (8.5.3). */
26
+ export declare function rebuild(entries: Entry[]): State;
27
+ /** The state as JSON, for comparing and for a dump. */
28
+ export declare function stateJson(state: State): JsonObject;
29
+ /** What an operation works on: a scratch copy of the state. Nothing in it is the truth until it is logged. */
30
+ export type Draft = {
31
+ records: RecordSet;
32
+ bindings: Map<string, string>;
33
+ instructions: Map<string, JsonObject[]>;
34
+ edges: Map<string, Edge>;
35
+ review: JsonObject[];
36
+ };
37
+ /** One write of an entry (8.5): a value at an address, an envelope field, a held value, an edge, a define, a review. */
38
+ export type Write = JsonObject & {
39
+ record?: string;
40
+ address?: string;
41
+ value?: Json;
42
+ removed?: true;
43
+ envelope?: string;
44
+ as?: "held";
45
+ source?: JsonObject;
46
+ edge?: Edge;
47
+ };
48
+ /** The writes that take `before` to `after`: exactly the effects, nothing computed (8.5). */
49
+ export declare function diffWrites(before: State, after: Draft): JsonObject[];
50
+ /** Where a draft and a state disagree, or null. */
51
+ export declare function differs(state: State, draft: Draft): string | null;
52
+ /**
53
+ * The journal (8.5): operations work on a draft, every change becomes an entry, and the state is only ever
54
+ * what applying the entries gives. A commit whose entries don't describe the whole change is refused, so
55
+ * the log can never fall behind the state.
56
+ */
57
+ export declare class Journal {
58
+ readonly state: State;
59
+ readonly entries: Entry[];
60
+ readonly draft: Draft;
61
+ readonly owner: string;
62
+ private n;
63
+ constructor(owner: string, records?: Record[], at?: string);
64
+ /**
65
+ * Run an operation on the draft, log what it changed, and apply the entry to the state. `extra` carries
66
+ * writes the diff can't see (a run's state, a read under an emergency edge, a define).
67
+ */
68
+ commit(by: JsonObject, mutate: (draft: Draft) => void, at?: string, extra?: JsonObject[]): Entry | null;
69
+ }
70
+ /**
71
+ * Can this whole entry be redacted (8.5.2)? Only when it holds nothing but value, observation and read
72
+ * writes and isn't witnessed; otherwise it is redacted write by write. Returns the reason it can't, or null.
73
+ */
74
+ export declare function redactable(entry: Entry): string | null;
75
+ /** Can this write be redacted (8.5.2)? Null when it can, else why not. */
76
+ export declare function redactableWrite(entry: Entry, w: JsonObject): string | null;
77
+ /** Redact one write of an entry (8.5.2): it becomes its own hash, and the entry's hash stays where it was. */
78
+ export declare function redactWrite(entry: Entry, index: number): Entry;