@graview/core 0.1.3 → 0.1.5

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 (124) hide show
  1. package/dist/app.d.ts +9 -1
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/capabilities.js +1 -1
  5. package/dist/capabilities.js.map +1 -1
  6. package/dist/cli/check/policy.d.ts.map +1 -1
  7. package/dist/cli/check/policy.js +40 -0
  8. package/dist/cli/check/policy.js.map +1 -1
  9. package/dist/cli/index.d.ts +2 -1
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/document/canonical.d.ts +2 -1
  13. package/dist/document/canonical.d.ts.map +1 -1
  14. package/dist/document/canonical.js +2 -1
  15. package/dist/document/canonical.js.map +1 -1
  16. package/dist/document/compile.d.ts +14 -2
  17. package/dist/document/compile.d.ts.map +1 -1
  18. package/dist/document/compile.js +50 -24
  19. package/dist/document/compile.js.map +1 -1
  20. package/dist/document/diff.d.ts.map +1 -1
  21. package/dist/document/diff.js +3 -1
  22. package/dist/document/diff.js.map +1 -1
  23. package/dist/document/edit.d.ts +7 -1
  24. package/dist/document/edit.d.ts.map +1 -1
  25. package/dist/document/edit.js +46 -2
  26. package/dist/document/edit.js.map +1 -1
  27. package/dist/document/graview-template.d.ts +2 -2
  28. package/dist/document/index.d.ts +2 -2
  29. package/dist/document/index.d.ts.map +1 -1
  30. package/dist/document/index.js +1 -1
  31. package/dist/document/index.js.map +1 -1
  32. package/dist/document/migrate.d.ts.map +1 -1
  33. package/dist/document/migrate.js +3 -2
  34. package/dist/document/migrate.js.map +1 -1
  35. package/dist/document/patch.d.ts.map +1 -1
  36. package/dist/document/patch.js +2 -5
  37. package/dist/document/patch.js.map +1 -1
  38. package/dist/document/schema.d.ts +298 -298
  39. package/dist/document/schema.d.ts.map +1 -1
  40. package/dist/document/schema.js +125 -140
  41. package/dist/document/schema.js.map +1 -1
  42. package/dist/document/to-document.d.ts.map +1 -1
  43. package/dist/document/to-document.js +2 -1
  44. package/dist/document/to-document.js.map +1 -1
  45. package/dist/index.d.ts +9 -6
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +12 -4
  48. package/dist/index.js.map +1 -1
  49. package/dist/integrity.d.ts.map +1 -1
  50. package/dist/integrity.js +35 -5
  51. package/dist/integrity.js.map +1 -1
  52. package/dist/invariants/types.d.ts +1 -1
  53. package/dist/invariants/types.d.ts.map +1 -1
  54. package/dist/mutations/define-mutation.d.ts +26 -3
  55. package/dist/mutations/define-mutation.d.ts.map +1 -1
  56. package/dist/mutations/define-mutation.js +18 -5
  57. package/dist/mutations/define-mutation.js.map +1 -1
  58. package/dist/mutations/derive-edits.js +5 -5
  59. package/dist/mutations/derive-edits.js.map +1 -1
  60. package/dist/mutations/form.d.ts.map +1 -1
  61. package/dist/mutations/form.js +6 -5
  62. package/dist/mutations/form.js.map +1 -1
  63. package/dist/mutations/node-ref.d.ts +16 -5
  64. package/dist/mutations/node-ref.d.ts.map +1 -1
  65. package/dist/mutations/node-ref.js +52 -16
  66. package/dist/mutations/node-ref.js.map +1 -1
  67. package/dist/mutations/types.d.ts +2 -2
  68. package/dist/mutations/types.d.ts.map +1 -1
  69. package/dist/ops/log.d.ts +11 -0
  70. package/dist/ops/log.d.ts.map +1 -1
  71. package/dist/ops/log.js.map +1 -1
  72. package/dist/ops/served.d.ts +80 -0
  73. package/dist/ops/served.d.ts.map +1 -0
  74. package/dist/ops/served.js +316 -0
  75. package/dist/ops/served.js.map +1 -0
  76. package/dist/ops/types.d.ts +8 -0
  77. package/dist/ops/types.d.ts.map +1 -1
  78. package/dist/ops/withheld.d.ts +63 -8
  79. package/dist/ops/withheld.d.ts.map +1 -1
  80. package/dist/ops/withheld.js +198 -22
  81. package/dist/ops/withheld.js.map +1 -1
  82. package/dist/ops/writers.d.ts +29 -0
  83. package/dist/ops/writers.d.ts.map +1 -0
  84. package/dist/ops/writers.js +98 -0
  85. package/dist/ops/writers.js.map +1 -0
  86. package/dist/permissions/sight.d.ts +15 -2
  87. package/dist/permissions/sight.d.ts.map +1 -1
  88. package/dist/permissions/sight.js +34 -5
  89. package/dist/permissions/sight.js.map +1 -1
  90. package/dist/presence.d.ts +24 -2
  91. package/dist/presence.d.ts.map +1 -1
  92. package/dist/presence.js +26 -1
  93. package/dist/presence.js.map +1 -1
  94. package/dist/refusal.d.ts +9 -5
  95. package/dist/refusal.d.ts.map +1 -1
  96. package/dist/refusal.js +9 -5
  97. package/dist/refusal.js.map +1 -1
  98. package/dist/scaffold/project.d.ts.map +1 -1
  99. package/dist/scaffold/project.js +5 -0
  100. package/dist/scaffold/project.js.map +1 -1
  101. package/dist/schema/json-schema.d.ts +2 -3
  102. package/dist/schema/json-schema.d.ts.map +1 -1
  103. package/dist/schema/json-schema.js +30 -10
  104. package/dist/schema/json-schema.js.map +1 -1
  105. package/dist/schema/schema.d.ts +19 -4
  106. package/dist/schema/schema.d.ts.map +1 -1
  107. package/dist/schema/schema.js +2 -2
  108. package/dist/schema/schema.js.map +1 -1
  109. package/dist/schema/zod.d.ts +18 -0
  110. package/dist/schema/zod.d.ts.map +1 -0
  111. package/dist/schema/zod.js +44 -0
  112. package/dist/schema/zod.js.map +1 -0
  113. package/dist/seen.d.ts +54 -1
  114. package/dist/seen.d.ts.map +1 -1
  115. package/dist/seen.js +457 -25
  116. package/dist/seen.js.map +1 -1
  117. package/dist/store.d.ts +141 -17
  118. package/dist/store.d.ts.map +1 -1
  119. package/dist/store.js +203 -84
  120. package/dist/store.js.map +1 -1
  121. package/dist/testing.js.map +1 -1
  122. package/dist/version.d.ts +1 -1
  123. package/dist/version.js +1 -1
  124. package/package.json +2 -2
@@ -0,0 +1,316 @@
1
+ import { isUnset, UNSET } from "../graph/primitives.js";
2
+ import { edgeId } from "../graph/types.js";
3
+ import { actingAs } from "../permissions/policy.js";
4
+ /** The graph at one moment of the log: now, with what differs held apart. */
5
+ class Moment {
6
+ present;
7
+ timeline;
8
+ unversioned;
9
+ nodes = new Map();
10
+ edges = new Map();
11
+ touching = new Map();
12
+ /** The seq of the op this moment stands just before; who wrote what is read as of it. */
13
+ seq = Number.MAX_SAFE_INTEGER;
14
+ /** Who wrote the fields the op under way has written so far. */
15
+ wrote = new Map();
16
+ constructor(present,
17
+ /** Who wrote each field's value: read only when a record is judged, so a walk that judges none never builds it. */
18
+ timeline,
19
+ /** Records whose versions are never judged (`ServedJudge.sees`): only whether they are there is followed. */
20
+ unversioned) {
21
+ this.present = present;
22
+ this.timeline = timeline;
23
+ this.unversioned = unversioned;
24
+ }
25
+ /** The moment just before op `seq`. */
26
+ begin(seq) {
27
+ this.seq = seq;
28
+ this.wrote.clear();
29
+ }
30
+ /** Who wrote a record's fields' values at this moment. */
31
+ writerOf(id) {
32
+ return (field) => {
33
+ const key = `${id}\u0000${field}`;
34
+ if (this.wrote.has(key))
35
+ return this.wrote.get(key);
36
+ return this.timeline?.writers?.writerAt(id, field, this.seq);
37
+ };
38
+ }
39
+ /** The fields a primitive just wrote, and who wrote them. */
40
+ note(primitive, by) {
41
+ const id = primitive.op === "add-node" ? primitive.node.id : primitive.op === "patch-node" ? primitive.id : "";
42
+ // A record never judged never asks who wrote it.
43
+ if (id === "" || this.unversioned?.has(id))
44
+ return;
45
+ const fields = primitive.op === "add-node" ? Object.keys(primitive.node) : Object.keys(primitive.after);
46
+ for (const field of fields)
47
+ if (field !== "id" && field !== "kind")
48
+ this.wrote.set(`${id}\u0000${field}`, by(id, field));
49
+ }
50
+ node(id) {
51
+ if (this.nodes.has(id))
52
+ return this.nodes.get(id) ?? undefined;
53
+ return this.present.getNode(id);
54
+ }
55
+ setNode(id, node) {
56
+ this.nodes.set(id, node);
57
+ }
58
+ setEdge(edge, there) {
59
+ const key = edgeId(edge);
60
+ this.edges.set(key, there ? edge : null);
61
+ for (const end of [edge.from, edge.to]) {
62
+ let keys = this.touching.get(end);
63
+ if (!keys)
64
+ this.touching.set(end, (keys = new Set()));
65
+ keys.add(key);
66
+ }
67
+ }
68
+ /** Every link a record has at this moment. */
69
+ incident(id) {
70
+ const out = new Map();
71
+ for (const edge of [...this.present.outEdges(id), ...this.present.inEdges(id)]) {
72
+ const key = edgeId(edge);
73
+ if (!this.edges.has(key))
74
+ out.set(key, edge);
75
+ }
76
+ for (const key of this.touching.get(id) ?? []) {
77
+ const edge = this.edges.get(key);
78
+ if (edge)
79
+ out.set(key, edge);
80
+ }
81
+ return [...out.values()];
82
+ }
83
+ /** A primitive, taken back: the moment just before it. */
84
+ undo(primitive) {
85
+ switch (primitive.op) {
86
+ case "add-node":
87
+ this.setNode(primitive.node.id, null);
88
+ return;
89
+ case "remove-node":
90
+ this.setNode(primitive.node.id, primitive.node);
91
+ return;
92
+ case "patch-node": {
93
+ if (this.unversioned?.has(primitive.id))
94
+ return;
95
+ const node = this.node(primitive.id);
96
+ if (!node)
97
+ return;
98
+ this.setNode(primitive.id, patched(node, primitive.before));
99
+ return;
100
+ }
101
+ case "add-edge":
102
+ this.setEdge(primitive.edge, false);
103
+ return;
104
+ case "remove-edge":
105
+ this.setEdge(primitive.edge, true);
106
+ return;
107
+ }
108
+ }
109
+ /** A primitive, applied: the moment just after it. A removed record takes its links with it, as a graph's does. */
110
+ apply(primitive) {
111
+ switch (primitive.op) {
112
+ case "add-node":
113
+ this.setNode(primitive.node.id, primitive.node);
114
+ return;
115
+ case "remove-node":
116
+ for (const edge of this.incident(primitive.node.id))
117
+ this.setEdge(edge, false);
118
+ this.setNode(primitive.node.id, null);
119
+ return;
120
+ case "patch-node": {
121
+ if (this.unversioned?.has(primitive.id))
122
+ return;
123
+ const node = this.node(primitive.id);
124
+ if (!node)
125
+ return;
126
+ this.setNode(primitive.id, patched(node, primitive.after));
127
+ return;
128
+ }
129
+ case "add-edge":
130
+ this.setEdge(primitive.edge, true);
131
+ return;
132
+ case "remove-edge":
133
+ this.setEdge(primitive.edge, false);
134
+ return;
135
+ }
136
+ }
137
+ }
138
+ function patched(node, fields) {
139
+ const next = { ...node };
140
+ for (const [key, value] of Object.entries(fields)) {
141
+ if (isUnset(value))
142
+ delete next[key];
143
+ else
144
+ next[key] = value;
145
+ }
146
+ return next;
147
+ }
148
+ const idOf = (primitive) => primitive.op === "add-node" || primitive.op === "remove-node" ? primitive.node.id : primitive.op === "patch-node" ? primitive.id : undefined;
149
+ /** Judges one primitive at a moment, and moves the moment past it. */
150
+ function serveOne(primitive, moment, judge, by) {
151
+ const servedAt = (id) => {
152
+ const node = moment.node(id);
153
+ return node ? judge.served(node, moment.writerOf(id)) : undefined;
154
+ };
155
+ const id = idOf(primitive);
156
+ if (id === undefined) {
157
+ const edge = primitive.edge;
158
+ const served = judge.edgeClean(edge) && servedAt(edge.from) !== undefined && servedAt(edge.to) !== undefined;
159
+ moment.apply(primitive);
160
+ return served ? { primitives: [primitive], faithful: true } : { primitives: [], faithful: false };
161
+ }
162
+ const was = moment.node(id);
163
+ const before = was ? judge.served(was, moment.writerOf(id)) : undefined;
164
+ moment.apply(primitive);
165
+ moment.note(primitive, by);
166
+ const now = moment.node(id);
167
+ const after = now ? judge.served(now, moment.writerOf(id)) : undefined;
168
+ if (!before && !after)
169
+ return { primitives: [], faithful: false };
170
+ if (!before && after) {
171
+ // Into what the seat is served: the record as it is served, and its links to what the seat is served.
172
+ const links = moment
173
+ .incident(id)
174
+ .filter((edge) => judge.edgeClean(edge) && servedAt(edge.from === id ? edge.to : edge.from) !== undefined)
175
+ .map((edge) => ({ op: "add-edge", edge }));
176
+ const faithful = primitive.op === "add-node" && after === primitive.node && links.length === 0;
177
+ return { primitives: faithful ? [primitive] : [{ op: "add-node", node: after }, ...links], faithful };
178
+ }
179
+ if (before && !after) {
180
+ // Out of it: removed, with its links, from the seat's copy.
181
+ const faithful = primitive.op === "remove-node" && before === was;
182
+ return { primitives: faithful ? [primitive] : [{ op: "remove-node", node: before }], faithful };
183
+ }
184
+ // Served before and after: what changed, as the seat is served it.
185
+ if (primitive.op === "patch-node") {
186
+ // The patch as written, when no field it writes was cleared for the seat on either side.
187
+ const kept = (served, held) => (field) => field in served === (held !== undefined && field in held);
188
+ if (Object.keys(primitive.after).every((field) => kept(before, was)(field) && kept(after, now)(field)))
189
+ return { primitives: [primitive], faithful: true };
190
+ const side = (node) => Object.fromEntries(Object.keys(primitive.after).map((field) => [field, field in node ? node[field] : UNSET]));
191
+ return { primitives: [{ op: "patch-node", id, before: side(before), after: side(after) }], faithful: false };
192
+ }
193
+ // An add of a record already there, or a remove that leaves it: a log that does not fold here; say the record as it is.
194
+ return { primitives: [{ op: "remove-node", node: before }, { op: "add-node", node: after }], faithful: false };
195
+ }
196
+ /**
197
+ * The ops asked about, each with its primitives as the seat is served
198
+ * them, judged at the moment of the log each stood at. Ops that are in the
199
+ * timeline's log are placed there; when any is not (a preview, an op from
200
+ * elsewhere), they are judged in order from the graph as it stands now.
201
+ */
202
+ export function serveAlong(ops, timeline, judge) {
203
+ if (ops.length === 0)
204
+ return [];
205
+ const log = timeline.log.all();
206
+ const base = log[0]?.seq ?? 0;
207
+ const placed = ops.every((op) => log[op.seq - base]?.id === op.id);
208
+ const moment = new Moment(timeline.present, timeline);
209
+ if (!placed) {
210
+ moment.begin(timeline.log.length ?? base + log.length);
211
+ return ops.map((op) => {
212
+ const author = actingAs(op.author).id;
213
+ const served = op.primitives.map((primitive) => serveOne(primitive, moment, judge, () => author));
214
+ return { op, primitives: served.flatMap((one) => one.primitives), faithful: served.every((one) => one.faithful) };
215
+ });
216
+ }
217
+ const wanted = new Set(ops.map((op) => op.seq));
218
+ let first = Number.POSITIVE_INFINITY;
219
+ let last = Number.NEGATIVE_INFINITY;
220
+ for (const seq of wanted) {
221
+ if (seq < first)
222
+ first = seq;
223
+ if (seq > last)
224
+ last = seq;
225
+ }
226
+ first -= base;
227
+ last -= base;
228
+ const along = judgedAlong(log, first, timeline.present, judge);
229
+ const walk = along ? new Moment(timeline.present, timeline, along.unversioned) : moment;
230
+ for (let at = log.length - 1; at >= first; at--) {
231
+ const primitives = log[at].primitives;
232
+ for (let index = primitives.length - 1; index >= 0; index--)
233
+ walk.undo(primitives[index]);
234
+ }
235
+ return servedFrom(ops, log, first, last, wanted, walk, along?.judge ?? judge, timeline);
236
+ }
237
+ /**
238
+ * WHICH RECORDS THE WALK MUST FOLLOW VERSION BY VERSION. A record the seat
239
+ * does not see is served at no moment; one it sees, and no version of
240
+ * which — now, or in any primitive from `first` on — names what it may
241
+ * not see, is served as it is at every moment. Neither needs its versions:
242
+ * only whether it is there. Every other record is judged as before. A
243
+ * judge that cannot say its sight is judged record by record throughout.
244
+ */
245
+ function judgedAlong(log, first, present, judge) {
246
+ const { sees, names } = judge;
247
+ if (!sees || !names)
248
+ return undefined;
249
+ const unseen = new Set();
250
+ const followed = new Set();
251
+ const plain = new Set();
252
+ const version = (id, values) => {
253
+ if (unseen.has(id) || followed.has(id))
254
+ return;
255
+ if (!sees(id)) {
256
+ unseen.add(id);
257
+ plain.delete(id);
258
+ }
259
+ else if (names(values)) {
260
+ followed.add(id);
261
+ plain.delete(id);
262
+ }
263
+ else
264
+ plain.add(id);
265
+ };
266
+ for (let at = first; at < log.length; at++) {
267
+ for (const primitive of log[at].primitives) {
268
+ if (primitive.op === "add-node" || primitive.op === "remove-node")
269
+ version(primitive.node.id, primitive.node);
270
+ else if (primitive.op === "patch-node") {
271
+ version(primitive.id, primitive.before);
272
+ version(primitive.id, primitive.after);
273
+ }
274
+ }
275
+ }
276
+ for (const id of plain) {
277
+ const now = present.getNode(id);
278
+ if (now && names(now)) {
279
+ plain.delete(id);
280
+ followed.add(id);
281
+ }
282
+ }
283
+ const unversioned = new Set([...plain, ...unseen]);
284
+ return {
285
+ unversioned,
286
+ judge: {
287
+ ...judge,
288
+ served: (node, writer) => (plain.has(node.id) ? node : unseen.has(node.id) ? undefined : judge.served(node, writer)),
289
+ },
290
+ };
291
+ }
292
+ /** The walk forward from `first`, each op asked about judged at the moment it stood. */
293
+ function servedFrom(ops, log, first, last, wanted, moment, judge, timeline) {
294
+ const answer = new Map();
295
+ for (let at = first; at <= last; at++) {
296
+ const op = log[at];
297
+ moment.begin(op.seq);
298
+ if (!wanted.has(op.seq)) {
299
+ for (const primitive of op.primitives)
300
+ moment.apply(primitive);
301
+ continue;
302
+ }
303
+ // What this op wrote is written by whom the log says: its author, or for an undo whoever wrote what it puts back.
304
+ const by = (id, field) => timeline.writers?.writerAt(id, field, op.seq + 1);
305
+ const served = op.primitives.map((primitive) => serveOne(primitive, moment, judge, by));
306
+ answer.set(op.seq, { op, primitives: served.flatMap((one) => one.primitives), faithful: served.every((one) => one.faithful) });
307
+ }
308
+ return ops.map((op) => answer.get(op.seq));
309
+ }
310
+ /** Primitives not yet in any log — a preview `author` would make — as the seat would be served them, from the graph as it stands. */
311
+ export function servePrimitives(primitives, timeline, judge, author) {
312
+ const moment = new Moment(timeline.present, timeline);
313
+ moment.begin(timeline.log.length ?? timeline.log.all().length);
314
+ return primitives.flatMap((primitive) => serveOne(primitive, moment, judge, () => author).primitives);
315
+ }
316
+ //# sourceMappingURL=served.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"served.js","sourceRoot":"","sources":["../../src/ops/served.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,14 @@ export interface Operation {
80
80
  * on every op a store makes; an op without it reads as before.
81
81
  */
82
82
  readonly withheld?: true;
83
+ /**
84
+ * THE RECORDS ITS SENTENCE READ (FR-55): the ids the act's `describe`
85
+ * looked up to word `intent` ("in favour of Freya Davies"). A sentence
86
+ * names records by their labels, which no id check catches, so a seat
87
+ * that may not see one of these is served the op withheld. Absent on an
88
+ * act without `describe`, and on ops made before it was kept.
89
+ */
90
+ readonly described?: readonly string[];
83
91
  /**
84
92
  * THE MODULES THIS OP LEAVES ON (FR-12). Set only on an op authored
85
93
  * `system · modules`, which turns modules off or on and touches no
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ops/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,MAAM;IACrB;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,MAAM,EAAE,GAAG,QAAQ,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ops/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,MAAM;IACrB;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,MAAM,EAAE,GAAG,QAAQ,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B"}
@@ -1,4 +1,5 @@
1
- import type { Primitive } from "../graph/primitives.js";
1
+ import { type Primitive } from "../graph/primitives.js";
2
+ import { type FieldWriter, type Timeline } from "./served.js";
2
3
  import type { Author, Operation } from "./types.js";
3
4
  /**
4
5
  * A LOG A SEAT MAY NOT FULLY SEE IS REDACTED, NOT GAPPED (FR-16).
@@ -17,6 +18,52 @@ export declare const WITHHELD_AUTHOR: Author;
17
18
  export declare function isWithheld(op: Pick<Operation, "withheld">): boolean;
18
19
  /** The record ids a primitive touches. */
19
20
  export declare function touchedBy(primitive: Primitive): readonly string[];
21
+ /**
22
+ * WHAT ONE SEAT IS SERVED (FR-55): the judgement a log is redacted by.
23
+ * `sees` is the seat's sight — the ids it may be told. `shows` is what it
24
+ * is served: a record it sees, unless a field the record cannot do without
25
+ * names one it may not see. `served` is a record as the seat receives it,
26
+ * and `optional` says whether a kind's field may be left off one. A bare
27
+ * `(id) => boolean` is a lens that clears nothing: a record whose field
28
+ * names an unseen id is not served at all.
29
+ */
30
+ export interface SeatLens {
31
+ readonly sees: (id: string) => boolean;
32
+ readonly shows: (id: string) => boolean;
33
+ readonly served: <N extends {
34
+ readonly id: string;
35
+ readonly kind: string;
36
+ }>(node: N) => N | undefined;
37
+ /** A record as the seat is served it, given who wrote each field's value: the seat's own words are served as written (FR-55). */
38
+ readonly servedWith: <N extends {
39
+ readonly id: string;
40
+ readonly kind: string;
41
+ }>(node: N, writer: FieldWriter) => N | undefined;
42
+ /** The seat whose words these are — the person, for an agent acting for one. */
43
+ readonly actor?: string;
44
+ readonly optional: (kind: string, field: string) => boolean;
45
+ /** The kind of a record, by id, when it is known: for a patch, whose primitive does not say. */
46
+ readonly kindOf: (id: string) => string | undefined;
47
+ /** The store's graph now and the log that led to it, so an op is judged where it stood (`serveAlong`). */
48
+ readonly timeline?: Timeline;
49
+ /**
50
+ * THIS LENS AS OF NOW, ITS JUDGEMENTS KEPT: each id judged once, each
51
+ * record served once, for one reading of a store that does not change
52
+ * while it is read — a log redacted, a snapshot served. A lens follows
53
+ * the store as it is asked (FR-51); a pinned one is thrown away after the
54
+ * reading it was made for, so it never answers for a store that moved.
55
+ */
56
+ readonly pin?: () => SeatLens;
57
+ }
58
+ /** A lens over a bare sight: it serves a record whole or not at all. */
59
+ export declare function lensOf(seeing: SeatLens | ((id: string) => boolean)): SeatLens;
60
+ /**
61
+ * WHETHER A VALUE NAMES ANYTHING THE SEAT MAY NOT SEE (FR-55): any string
62
+ * in it, at any depth, a value or a key, that is an unseen record's id. An
63
+ * id is minted from a label, so an id a seat is served is the name of what
64
+ * it was kept from.
65
+ */
66
+ export declare function namesUnseen(value: unknown, sees: (id: string) => boolean): boolean;
20
67
  /**
21
68
  * Whether an op touched, read or named anything `sees` says no to: then it
22
69
  * is withheld whole, because its sentence ("Book a test drive for Freya")
@@ -26,12 +73,20 @@ export declare function touchesUnseen(op: Operation, sees: (id: string) => boole
26
73
  /**
27
74
  * THE OP AS A SEAT THAT MAY NOT SEE IT RECEIVES IT. Its id, seq, batch and
28
75
  * time stand; who made it, what it meant, the call and the inverse go. Its
29
- * primitives keep the ones that touch only what the seat sees — a change to
30
- * a record the seat can see still reaches it, or its copy of the graph
31
- * would go stale — and its reads and writes keep only seen ids, so an undo
32
- * the seat asks for is still blocked by it where it should be.
76
+ * primitives keep the ones that touch only what the seat is served, as it
77
+ * is served them (FR-55) — a change to a record the seat can see still
78
+ * reaches it, or its copy of the graph would go stale, and no id of what it
79
+ * may not see rides along in a field — and its reads and writes keep only
80
+ * served ids, so an undo the seat asks for is still blocked by it where it
81
+ * should be.
82
+ */
83
+ export declare function withhold(op: Operation, seeing: SeatLens | ((id: string) => boolean), served?: readonly Primitive[]): Operation;
84
+ /**
85
+ * Every op of a log as a seat receives it: what it may see as it is, the
86
+ * rest withheld in place. An op is withheld when it touches a record the
87
+ * seat is not served, or names one it may not see ANYWHERE — its call, its
88
+ * sentence, its author, a field value in a primitive or its inverse
89
+ * (FR-55). One withheld already is withheld again under this seat's lens.
33
90
  */
34
- export declare function withhold(op: Operation, sees: (id: string) => boolean): Operation;
35
- /** Every op of a log as a seat receives it: what it may see as it is, the rest withheld in place. */
36
- export declare function redact(ops: readonly Operation[], sees: (id: string) => boolean): Operation[];
91
+ export declare function redact(ops: readonly Operation[], seeing: SeatLens | ((id: string) => boolean)): Operation[];
37
92
  //# sourceMappingURL=withheld.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withheld.d.ts","sourceRoot":"","sources":["../../src/ops/withheld.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,0EAA0E;AAC1E,eAAO,MAAM,eAAe,EAAE,MAA4D,CAAC;AAE3F,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAEnE;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAWjE;AAUD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAInF;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAgBhF;AAED,qGAAqG;AACrG,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,EAAE,CAE5F"}
1
+ {"version":3,"file":"withheld.d.ts","sourceRoot":"","sources":["../../src/ops/withheld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,0EAA0E;AAC1E,eAAO,MAAM,eAAe,EAAE,MAA4D,CAAC;AAE3F,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,CAEnE;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAWjE;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACtG,iIAAiI;IACjI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,CAAC,GAAG,SAAS,CAAC;IAC/H,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5D,gGAAgG;IAChG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACpD,0GAA0G;IAC1G,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC/B;AAMD,wEAAwE;AACxE,wBAAgB,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,QAAQ,CAW7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAalF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAInF;AAwCD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAsB9H;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,EAAE,CAmB3G"}