@cruba/crubal 0.0.0-stage → 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 (99) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +97 -2
  3. package/dist/bin/crubal.d.ts +2 -0
  4. package/dist/bin/crubal.js +103 -0
  5. package/dist/bin/crubal.js.map +1 -0
  6. package/dist/src/access.d.ts +126 -0
  7. package/dist/src/access.js +517 -0
  8. package/dist/src/access.js.map +1 -0
  9. package/dist/src/arrival.d.ts +55 -0
  10. package/dist/src/arrival.js +124 -0
  11. package/dist/src/arrival.js.map +1 -0
  12. package/dist/src/browser.d.ts +10 -0
  13. package/dist/src/browser.js +13 -0
  14. package/dist/src/browser.js.map +1 -0
  15. package/dist/src/bundle.d.ts +66 -0
  16. package/dist/src/bundle.js +753 -0
  17. package/dist/src/bundle.js.map +1 -0
  18. package/dist/src/canonical.d.ts +6 -0
  19. package/dist/src/canonical.js +47 -0
  20. package/dist/src/canonical.js.map +1 -0
  21. package/dist/src/conditions.d.ts +28 -0
  22. package/dist/src/conditions.js +216 -0
  23. package/dist/src/conditions.js.map +1 -0
  24. package/dist/src/corpus.d.ts +8 -0
  25. package/dist/src/corpus.js +1207 -0
  26. package/dist/src/corpus.js.map +1 -0
  27. package/dist/src/defs.d.ts +151 -0
  28. package/dist/src/defs.js +611 -0
  29. package/dist/src/defs.js.map +1 -0
  30. package/dist/src/dictionary.d.ts +65 -0
  31. package/dist/src/dictionary.js +557 -0
  32. package/dist/src/dictionary.js.map +1 -0
  33. package/dist/src/exchange.d.ts +236 -0
  34. package/dist/src/exchange.js +1035 -0
  35. package/dist/src/exchange.js.map +1 -0
  36. package/dist/src/forms.d.ts +16 -0
  37. package/dist/src/forms.js +169 -0
  38. package/dist/src/forms.js.map +1 -0
  39. package/dist/src/index.d.ts +27 -0
  40. package/dist/src/index.js +29 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/lex.d.ts +21 -0
  43. package/dist/src/lex.js +142 -0
  44. package/dist/src/lex.js.map +1 -0
  45. package/dist/src/lifecycle.d.ts +84 -0
  46. package/dist/src/lifecycle.js +415 -0
  47. package/dist/src/lifecycle.js.map +1 -0
  48. package/dist/src/log.d.ts +78 -0
  49. package/dist/src/log.js +506 -0
  50. package/dist/src/log.js.map +1 -0
  51. package/dist/src/migrate.d.ts +111 -0
  52. package/dist/src/migrate.js +286 -0
  53. package/dist/src/migrate.js.map +1 -0
  54. package/dist/src/model.d.ts +68 -0
  55. package/dist/src/model.js +188 -0
  56. package/dist/src/model.js.map +1 -0
  57. package/dist/src/packages.d.ts +69 -0
  58. package/dist/src/packages.js +232 -0
  59. package/dist/src/packages.js.map +1 -0
  60. package/dist/src/print-text.d.ts +7 -0
  61. package/dist/src/print-text.js +216 -0
  62. package/dist/src/print-text.js.map +1 -0
  63. package/dist/src/publish.d.ts +27 -0
  64. package/dist/src/publish.js +275 -0
  65. package/dist/src/publish.js.map +1 -0
  66. package/dist/src/read-text.d.ts +10 -0
  67. package/dist/src/read-text.js +385 -0
  68. package/dist/src/read-text.js.map +1 -0
  69. package/dist/src/records.d.ts +31 -0
  70. package/dist/src/records.js +72 -0
  71. package/dist/src/records.js.map +1 -0
  72. package/dist/src/review.d.ts +22 -0
  73. package/dist/src/review.js +198 -0
  74. package/dist/src/review.js.map +1 -0
  75. package/dist/src/rules.d.ts +96 -0
  76. package/dist/src/rules.js +611 -0
  77. package/dist/src/rules.js.map +1 -0
  78. package/dist/src/schedule.d.ts +24 -0
  79. package/dist/src/schedule.js +126 -0
  80. package/dist/src/schedule.js.map +1 -0
  81. package/dist/src/std-packages.d.ts +9 -0
  82. package/dist/src/std-packages.js +268 -0
  83. package/dist/src/std-packages.js.map +1 -0
  84. package/dist/src/store.d.ts +164 -0
  85. package/dist/src/store.js +538 -0
  86. package/dist/src/store.js.map +1 -0
  87. package/dist/src/tree.d.ts +35 -0
  88. package/dist/src/tree.js +159 -0
  89. package/dist/src/tree.js.map +1 -0
  90. package/dist/src/units-table.d.ts +1 -0
  91. package/dist/src/units-table.js +200 -0
  92. package/dist/src/units-table.js.map +1 -0
  93. package/dist/src/units.d.ts +42 -0
  94. package/dist/src/units.js +98 -0
  95. package/dist/src/units.js.map +1 -0
  96. package/dist/src/views.d.ts +216 -0
  97. package/dist/src/views.js +761 -0
  98. package/dist/src/views.js.map +1 -0
  99. package/package.json +60 -4
@@ -0,0 +1,611 @@
1
+ // defs.ts: facet, class and kind definitions (spec chapters 4, 5 and 11.2), read from the long form and
2
+ // the shorthand into one model. The Reader uses only a facet's type, how many, unit, words, children and
3
+ // identity; the Dictionary level uses the rest.
4
+ import { CrubalError, readTree } from "./tree.js";
5
+ import { readList, splitTop } from "./lex.js";
6
+ import { unitOf } from "./units.js";
7
+ /** The table's unit for a spelling (`hr` → `h`); a currency, `currency` or an unknown word as written. */
8
+ const canonicalUnit = (u) => unitOf(u) ?? u;
9
+ export const TYPES = ["text", "number", "date", "time", "yes-no", "choice", "link", "image", "compound"];
10
+ export function emptyDictionary() {
11
+ const d = { facets: new Map(), classes: new Map(), kinds: new Map(), levels: new Map(), vary: new Map(), varyLines: new Map(), trust: [], facetTrust: new Map(), identify: new Map(), match: new Map(), archive: new Map() };
12
+ // Core facets (spec 1.6, 5.6).
13
+ d.facets.set("crubal:count", { ...blank("crubal:count", "number") });
14
+ const notables = blank("crubal:notables", "compound");
15
+ notables.many = true;
16
+ notables.pick = "any";
17
+ notables.children = new Map([
18
+ ["key", blank("key", "text")],
19
+ ["value", blank("value", "text")],
20
+ ]);
21
+ d.facets.set("crubal:notables", notables);
22
+ // The core's list facet (12.2): a hand-made list holds ordered links to the records it shows.
23
+ const items = blank("crubal:items", "link");
24
+ items.many = true;
25
+ items.pick = "any";
26
+ items.ordered = true;
27
+ items.label = "Items";
28
+ d.facets.set("crubal:items", items);
29
+ // The core's read-through link (7.8 observed): the presenter's record this one reads, never copied.
30
+ const observes = blank("crubal:observes", "link");
31
+ observes.label = "Observes";
32
+ d.facets.set("crubal:observes", observes);
33
+ return d;
34
+ }
35
+ export function blank(key, type) {
36
+ return { key, type, many: false, pick: "1", ordered: false, aliases: [], sameAs: [], qualifiers: [], accepts: [], extra: {} };
37
+ }
38
+ const KEY = /^(?:[a-z][a-z0-9-]*:)?[A-Za-z_]\w*/;
39
+ const PRECISION = {
40
+ y: "year", ym: "month", ymd: "day", ymdh: "hour", ymdhm: "minute", ymdhms: "second", any: "any", "": "any",
41
+ hm: "minute", hms: "second",
42
+ };
43
+ /** Tokens of a shorthand line: split on spaces outside quotes, braces and parentheses. */
44
+ export function tokens(s, line) {
45
+ const out = [];
46
+ let depth = 0;
47
+ let quoted = false;
48
+ let cur = "";
49
+ for (let i = 0; i < s.length; i++) {
50
+ const ch = s[i];
51
+ if (quoted && ch === "\\") {
52
+ cur += ch + (s[i + 1] ?? "");
53
+ i++;
54
+ continue;
55
+ }
56
+ if (ch === '"')
57
+ quoted = !quoted;
58
+ if (!quoted && (ch === "{" || ch === "("))
59
+ depth++;
60
+ if (!quoted && (ch === "}" || ch === ")"))
61
+ depth--;
62
+ if (!quoted && depth === 0 && ch === " ") {
63
+ if (cur)
64
+ out.push(cur);
65
+ cur = "";
66
+ continue;
67
+ }
68
+ cur += ch;
69
+ }
70
+ if (quoted || depth !== 0)
71
+ throw new CrubalError(`an unbalanced line: ${s}`, line);
72
+ if (cur)
73
+ out.push(cur);
74
+ return out;
75
+ }
76
+ function closing(s, start, open, close, line) {
77
+ let depth = 0;
78
+ let quoted = false;
79
+ for (let i = start; i < s.length; i++) {
80
+ const ch = s[i];
81
+ if (quoted && ch === "\\") {
82
+ i++;
83
+ continue;
84
+ }
85
+ if (ch === '"')
86
+ quoted = !quoted;
87
+ if (quoted)
88
+ continue;
89
+ if (ch === open)
90
+ depth++;
91
+ if (ch === close && --depth === 0)
92
+ return i;
93
+ }
94
+ throw new CrubalError(`"${open}" is not closed in ${s}`, line);
95
+ }
96
+ /** A quoted value's text (2.5); an unquoted one as it is. */
97
+ export const unquote = (s) => (s.startsWith('"') ? JSON.parse(s) : s);
98
+ /** A choice list's inside: `DVD~"DVD Video"|Blu-ray~BD|...` */
99
+ function readChoices(inner, line) {
100
+ const parts = splitOutside(inner, "|", line);
101
+ let open = false;
102
+ const values = [];
103
+ for (const p of parts) {
104
+ if (p === "...") {
105
+ open = true;
106
+ continue;
107
+ }
108
+ const [v, ...aliases] = splitOutside(p, "~", line);
109
+ values.push({ value: unquote(v ?? ""), aliases: aliases.map(unquote) });
110
+ }
111
+ return { values, open };
112
+ }
113
+ function splitOutside(s, sep, line) {
114
+ const out = [];
115
+ let quoted = false;
116
+ let cur = "";
117
+ for (let i = 0; i < s.length; i++) {
118
+ const ch = s[i];
119
+ if (quoted && ch === "\\") {
120
+ cur += ch + (s[i + 1] ?? "");
121
+ i++;
122
+ continue;
123
+ }
124
+ if (ch === '"')
125
+ quoted = !quoted;
126
+ if (!quoted && ch === sep) {
127
+ out.push(cur.trim());
128
+ cur = "";
129
+ continue;
130
+ }
131
+ cur += ch;
132
+ }
133
+ if (quoted)
134
+ throw new CrubalError(`a quote is not closed in ${s}`, line);
135
+ out.push(cur.trim());
136
+ return out;
137
+ }
138
+ function parseLine(text, line) {
139
+ let s = text.trim();
140
+ let whenText;
141
+ const w = s.search(/ when /);
142
+ if (w >= 0) {
143
+ whenText = s.slice(w + 6).trim();
144
+ s = s.slice(0, w).trim();
145
+ }
146
+ let required = false;
147
+ if (s.startsWith("!")) {
148
+ required = true;
149
+ s = s.slice(1);
150
+ }
151
+ let level;
152
+ const lv = s.match(/^([a-z]\w*)::/);
153
+ if (lv) {
154
+ level = lv[1];
155
+ s = s.slice(lv[0].length);
156
+ }
157
+ const keyMatch = s.match(KEY);
158
+ if (!keyMatch)
159
+ throw new CrubalError(`a facet line must start with a key: ${text}`, line);
160
+ const key = keyMatch[0];
161
+ let rest = s.slice(key.length);
162
+ const facet = blank(key, "text");
163
+ facet.line = line;
164
+ if (required)
165
+ facet.required = true;
166
+ let marked = true;
167
+ const mark = rest[0];
168
+ if (mark === "$") {
169
+ const len = rest.slice(1).match(/^\d+/);
170
+ if (len)
171
+ facet.length = Number(len[0]);
172
+ rest = rest.slice(1 + (len?.[0].length ?? 0));
173
+ }
174
+ else if (mark === "#") {
175
+ facet.type = "number";
176
+ const unit = rest.slice(1).match(/^[A-Za-z%°µ/]+/);
177
+ if (unit)
178
+ facet.unit = canonicalUnit(unit[0]);
179
+ rest = rest.slice(1 + (unit?.[0].length ?? 0));
180
+ }
181
+ else if (mark === "@") {
182
+ // The letters run y, m, d, h, m, s: `@ymdhm` is a date with a time to the minute, `@hm` a time of day.
183
+ const p = rest.slice(1).match(/^(ymdhms|ymdhm|ymdh|ymd|ym|y|hms|hm|any)?/)?.[0] ?? "";
184
+ facet.type = p.startsWith("h") ? "time" : "date";
185
+ facet.precision = PRECISION[p];
186
+ rest = rest.slice(1 + p.length);
187
+ }
188
+ else if (mark === "?") {
189
+ facet.type = "yes-no";
190
+ rest = rest.slice(1);
191
+ }
192
+ else if (mark === "{") {
193
+ facet.type = "choice";
194
+ const end = closing(rest, 0, "{", "}", line);
195
+ const { values, open } = readChoices(rest.slice(1, end), line);
196
+ facet.values = values;
197
+ if (open)
198
+ facet.open = true;
199
+ rest = rest.slice(end + 1);
200
+ }
201
+ else if (mark === "&") {
202
+ facet.type = "link";
203
+ const to = rest.slice(1).match(/^[^\s*]+/);
204
+ if (to)
205
+ facet.to = to[0];
206
+ rest = rest.slice(1 + (to?.[0].length ?? 0));
207
+ }
208
+ else if (mark === "^") {
209
+ facet.type = "image";
210
+ rest = rest.slice(1);
211
+ }
212
+ else if (mark === "(") {
213
+ facet.type = "compound";
214
+ const end = closing(rest, 0, "(", ")", line);
215
+ facet.children = new Map();
216
+ for (const child of tokens(rest.slice(1, end), line)) {
217
+ const c = parseLine(child, line).facet;
218
+ facet.children.set(c.key, c);
219
+ }
220
+ rest = rest.slice(end + 1);
221
+ }
222
+ else {
223
+ marked = false;
224
+ }
225
+ let count = null;
226
+ const cm = rest.match(/^\*(\d*)/);
227
+ if (cm) {
228
+ count = cm[1] || "any";
229
+ facet.pick = count;
230
+ facet.many = count !== "1";
231
+ rest = rest.slice(cm[0].length);
232
+ }
233
+ const tails = tokens(rest, line);
234
+ let frame;
235
+ for (let i = 0; i < tails.length; i++) {
236
+ const t = tails[i];
237
+ if (t === "frame:") {
238
+ // Placement (5.3.3): which photo slot an image fills; a class line's setting, never the facet's.
239
+ frame = tails[++i];
240
+ continue;
241
+ }
242
+ if (t.startsWith("~"))
243
+ facet.aliases.push(unquote(t.slice(1)));
244
+ else if (t.startsWith("="))
245
+ facet.sameAs.push(t.slice(1));
246
+ else if (t.startsWith("+"))
247
+ facet.combine = t.slice(1);
248
+ else if (t.startsWith("/"))
249
+ facet.version = t.slice(1);
250
+ else if (/^-?[\d.]+\.\.-?[\d.]+$/.test(t)) {
251
+ const [min, max] = t.split("..");
252
+ facet.range = { min: min, max: max };
253
+ if (tails[i + 1] === "step") {
254
+ facet.range.step = tails[i + 2];
255
+ i += 2;
256
+ }
257
+ }
258
+ else if (t.endsWith(":")) {
259
+ // A value runs on after a trailing comma: `accepts: g, lb, oz`.
260
+ let value = tails[i + 1] ?? "";
261
+ i++;
262
+ while (value.endsWith(",") && i + 1 < tails.length)
263
+ value += ` ${tails[++i]}`;
264
+ applySetting(facet, t.slice(0, -1), value, line);
265
+ }
266
+ else if (/^[a-z][\w-]*$/.test(t))
267
+ applySetting(facet, t, "yes", line);
268
+ else
269
+ throw new CrubalError(`unknown tail ${t} in ${text}`, line);
270
+ }
271
+ return { facet, marked, count, whenText, level, required, ...(frame ? { frame } : {}) };
272
+ }
273
+ /** Read one shorthand facet line (spec 4.5). */
274
+ export function readShorthand(text, line) {
275
+ const p = parseLine(text, line);
276
+ if (p.level)
277
+ throw new CrubalError("the level mark belongs to class lines, not a facet's definition", line);
278
+ if (p.whenText)
279
+ p.facet.when = p.whenText;
280
+ return p.facet;
281
+ }
282
+ const yes = (v) => v === "yes" || v === "true";
283
+ function applySetting(f, name, value, line) {
284
+ const v = value.trim();
285
+ switch (name) {
286
+ case "type":
287
+ if (!TYPES.includes(v))
288
+ throw new CrubalError(`unknown type ${v}`, line);
289
+ f.type = v;
290
+ if (v === "compound" && !f.children)
291
+ f.children = new Map();
292
+ return;
293
+ case "pick":
294
+ f.pick = v;
295
+ f.many = v !== "1";
296
+ return;
297
+ case "ordered":
298
+ f.ordered = yes(v);
299
+ return;
300
+ case "unit":
301
+ // A unit is a spelling (4.2); the definition keeps the table's unit so values convert and compare by it.
302
+ f.unit = canonicalUnit(v);
303
+ return;
304
+ case "identity":
305
+ f.identity = v;
306
+ return;
307
+ case "words": {
308
+ const [a, b] = splitTop(v, ",", line);
309
+ if (a && b)
310
+ f.words = [unquote(a), unquote(b)];
311
+ return;
312
+ }
313
+ case "label":
314
+ case "ask":
315
+ case "describe":
316
+ case "version":
317
+ case "to":
318
+ case "combine":
319
+ case "when":
320
+ f[name] = unquote(v);
321
+ return;
322
+ case "agree-by":
323
+ f.agreeBy = v;
324
+ return;
325
+ case "zone":
326
+ if (v !== "local")
327
+ throw new CrubalError(`zone is "local" or absent, not ${v}`, line);
328
+ f.zone = v;
329
+ return;
330
+ case "state":
331
+ if (v !== "candidate" && v !== "active" && v !== "retired")
332
+ throw new CrubalError(`unknown state ${v}`, line);
333
+ f.state = v;
334
+ return;
335
+ case "aliases":
336
+ f.aliases.push(...readList(v, line).map((p) => p.text));
337
+ return;
338
+ case "same-as":
339
+ f.sameAs.push(...readList(v, line).map((p) => p.text));
340
+ return;
341
+ case "qualifiers":
342
+ f.qualifiers.push(...readList(v, line).map((p) => p.text));
343
+ return;
344
+ case "accepts":
345
+ f.accepts.push(...readList(v, line).map((p) => canonicalUnit(p.text)));
346
+ return;
347
+ case "length":
348
+ f.length = Number(v);
349
+ return;
350
+ case "places":
351
+ f.places = Number(v);
352
+ return;
353
+ case "precision":
354
+ f.precision = v;
355
+ return;
356
+ case "range": {
357
+ const m = v.match(/^(-?[\d.]+)\.\.(-?[\d.]+)(?: step (\S+))?$/);
358
+ if (!m)
359
+ throw new CrubalError(`a range is "min..max": ${v}`, line);
360
+ f.range = { min: m[1], max: m[2] };
361
+ if (m[3])
362
+ f.range.step = m[3];
363
+ return;
364
+ }
365
+ case "values": {
366
+ f.values = [];
367
+ for (const piece of splitTop(v, ",", line)) {
368
+ if (piece === "...") {
369
+ f.open = true;
370
+ continue;
371
+ }
372
+ const [val, ...al] = splitOutside(piece, "~", line);
373
+ f.values.push({ value: unquote(val ?? ""), aliases: al.map(unquote) });
374
+ }
375
+ return;
376
+ }
377
+ case "fixed":
378
+ case "ranked":
379
+ case "scored":
380
+ case "required":
381
+ case "na":
382
+ case "unique":
383
+ case "open":
384
+ case "transitions":
385
+ f[name] = yes(v);
386
+ return;
387
+ case "fungible":
388
+ case "match":
389
+ return; // part-slot settings; read by the class reader
390
+ }
391
+ if (name.includes(":")) {
392
+ f.extra[name] = v;
393
+ return;
394
+ }
395
+ throw new CrubalError(`unknown setting ${name}`, line);
396
+ }
397
+ /** Read a `facet: key` block (spec 4.2). */
398
+ function readLongForm(node) {
399
+ const f = blank(node.value.trim(), "text");
400
+ f.line = node.line;
401
+ for (const child of node.children) {
402
+ if (child.kind !== "pair" || !child.key)
403
+ throw new CrubalError(`expected "setting: value": ${child.text}`, child.line);
404
+ if (child.key === "facets") {
405
+ f.children ??= new Map();
406
+ for (const c of child.children) {
407
+ const cf = c.kind === "pair" && c.key === "facet" ? readLongForm(c) : readShorthand(c.text, c.line);
408
+ f.children.set(cf.key, cf);
409
+ }
410
+ continue;
411
+ }
412
+ applySetting(f, child.key, child.value, child.line);
413
+ }
414
+ return f;
415
+ }
416
+ export function readClassLine(text, line, section) {
417
+ const p = parseLine(text, line);
418
+ const f = p.facet;
419
+ // A line narrows; it never sets what the facet means (5.3.1).
420
+ const meaning = ["label", "ask", "describe"].find((k) => f[k] !== undefined) ?? (f.aliases.length ? "aliases" : f.sameAs.length ? "same-as" : f.values?.some((v) => v.aliases.length) ? "value aliases" : undefined);
421
+ if (meaning)
422
+ throw new CrubalError(`the class line ${text.trim()} sets ${meaning}, which is the facet's meaning, not a narrowing`, line);
423
+ const cl = { facet: f.key, line, text: text.trim() };
424
+ if (p.required)
425
+ cl.required = true;
426
+ if (p.level)
427
+ cl.level = p.level;
428
+ if (p.whenText)
429
+ cl.when = p.whenText;
430
+ if (p.frame)
431
+ cl.frame = p.frame;
432
+ if (section)
433
+ cl.section = section;
434
+ if (p.marked) {
435
+ cl.type = f.type;
436
+ if (f.values)
437
+ cl.values = f.values.map((v) => v.value);
438
+ if (f.length !== undefined)
439
+ cl.length = f.length;
440
+ if (f.precision && f.type === "date")
441
+ cl.precision = f.precision;
442
+ }
443
+ if (p.count)
444
+ cl.pick = p.count;
445
+ if (f.range)
446
+ cl.range = { min: f.range.min, max: f.range.max };
447
+ return cl;
448
+ }
449
+ function readClass(node) {
450
+ const c = { name: node.value.trim(), line: node.line, for: [], uses: [], lines: [], parts: [] };
451
+ for (const child of node.children) {
452
+ if (child.kind !== "pair" || !child.key)
453
+ throw new CrubalError(`expected "setting: value": ${child.text}`, child.line);
454
+ switch (child.key) {
455
+ case "for":
456
+ c.for = readList(child.value, child.line).map((p) => p.text);
457
+ break;
458
+ case "uses":
459
+ c.uses = readList(child.value, child.line).map((p) => p.text);
460
+ break;
461
+ case "label":
462
+ c.label = unquote(child.value);
463
+ break;
464
+ case "describe":
465
+ c.describe = unquote(child.value);
466
+ break;
467
+ case "version":
468
+ c.version = child.value;
469
+ break;
470
+ case "state":
471
+ c.state = child.value;
472
+ break;
473
+ case "facets": {
474
+ let section;
475
+ for (const l of child.children) {
476
+ if (l.kind === "pair" && l.key === "section") {
477
+ section = unquote(l.value);
478
+ continue;
479
+ }
480
+ c.lines.push(readClassLine(l.text, l.line, section));
481
+ }
482
+ break;
483
+ }
484
+ case "parts":
485
+ for (const l of child.children) {
486
+ const pair = l.kind === "pair" && l.key ? { key: l.key, value: l.value } : null;
487
+ if (!pair)
488
+ throw new CrubalError(`a part slot is "slot: Class": ${l.text}`, l.line);
489
+ const t = tokens(pair.value, l.line);
490
+ const wears = t[0] ?? "";
491
+ const slot = { slot: pair.key, wears, many: false, fungible: false, line: l.line };
492
+ for (let i = 1; i < t.length; i++) {
493
+ const tok = t[i];
494
+ if (tok.startsWith("*"))
495
+ slot.many = tok !== "*1";
496
+ else if (tok === "fungible:")
497
+ slot.fungible = yes(t[++i] ?? "");
498
+ else if (tok === "match:")
499
+ slot.match = t[++i];
500
+ else if (tok === "fungible")
501
+ slot.fungible = true;
502
+ }
503
+ c.parts.push(slot);
504
+ }
505
+ break;
506
+ default:
507
+ if (!child.key.includes(":"))
508
+ throw new CrubalError(`unknown class setting ${child.key}`, child.line);
509
+ }
510
+ }
511
+ return c;
512
+ }
513
+ const SKIP = new Set(["rule", "contract", "view", "shape", "filter", "role", "migration", "package", "resolve", "permissions", "ownership", "emergency", "edge", "instructions", "utility"]);
514
+ /** Read definition text (facets, classes and kinds) into a dictionary. Other blocks are skipped. */
515
+ export function readDefinitions(source, into = emptyDictionary()) {
516
+ for (const node of readTree(source)) {
517
+ if (node.kind === "pair" && node.key) {
518
+ if (node.key === "facet") {
519
+ const f = readLongForm(node);
520
+ into.facets.set(f.key, f);
521
+ continue;
522
+ }
523
+ if (node.key === "class") {
524
+ const c = readClass(node);
525
+ into.classes.set(c.name, c);
526
+ continue;
527
+ }
528
+ if (node.key === "trust") {
529
+ into.trust = node.children.map((c) => c.text.trim());
530
+ continue;
531
+ }
532
+ if (node.key === "facet-trust") {
533
+ for (const c of node.children)
534
+ if (c.key)
535
+ into.facetTrust.set(c.key, readList(c.value, c.line).map((p) => p.text));
536
+ continue;
537
+ }
538
+ if (node.key === "kind") {
539
+ const kind = node.value.trim();
540
+ const levels = node.children.find((c) => c.key === "levels");
541
+ const names = levels ? splitTop(levels.value, ",", levels.line) : [kind];
542
+ for (const level of names) {
543
+ // Level names are unique across the kinds of one package (1.2), so a level names its kind.
544
+ const had = into.levels.get(level);
545
+ if (had && had !== kind)
546
+ throw new CrubalError(`${level} is already a level of ${had}`, levels?.line ?? node.line);
547
+ into.levels.set(level, kind);
548
+ }
549
+ const def = { name: kind, line: node.line, levels: names };
550
+ const base = node.children.find((c) => c.key === "base");
551
+ if (base)
552
+ def.base = base.value.trim();
553
+ const schema = node.children.find((c) => c.key === "schema");
554
+ if (schema)
555
+ def.schema = schema.children.length ? Object.fromEntries(schema.children.filter((c) => c.key).map((c) => [c.key, c.value.trim()])) : schema.value.trim();
556
+ const follows = node.children.find((c) => c.key === "follows");
557
+ if (follows)
558
+ def.follows = Object.fromEntries(follows.children.filter((c) => c.key).map((c) => [c.key, c.value.trim()]));
559
+ into.kinds.set(kind, def);
560
+ const vary = node.children.find((c) => c.key === "vary");
561
+ for (const step of vary?.children ?? []) {
562
+ if (!step.key)
563
+ continue;
564
+ const set = into.vary.get(step.key) ?? new Set();
565
+ for (const k of splitTop(step.value, ",", step.line))
566
+ if (k)
567
+ set.add(k);
568
+ into.vary.set(step.key, set);
569
+ into.varyLines.set(step.key, step.line);
570
+ }
571
+ // Arrival keys (9.2a) and the archive cascade (1.12).
572
+ const identify = node.children.find((c) => c.key === "identify");
573
+ for (const l of identify?.children ?? [])
574
+ if (l.key)
575
+ into.identify.set(l.key, splitTop(l.value, ",", l.line).filter(Boolean));
576
+ const match = node.children.find((c) => c.key === "match");
577
+ for (const l of match?.children ?? []) {
578
+ if (!l.key)
579
+ continue;
580
+ const groups = l.value.split(";").map((g) => g.split("+").map((k) => k.trim()).filter(Boolean)).filter((g) => g.length);
581
+ into.match.set(l.key, groups);
582
+ }
583
+ const archive = node.children.find((c) => c.key === "archive");
584
+ if (archive) {
585
+ const a = archive.value.trim();
586
+ if (!["independent", "cascade of", "cascade within", "cascade both"].includes(a))
587
+ throw new CrubalError(`archive is independent, cascade of, cascade within or cascade both, not ${a}`, archive.line);
588
+ into.archive.set(kind, a);
589
+ }
590
+ continue;
591
+ }
592
+ if (SKIP.has(node.key) || node.key === "crubal" || node.key === "owner")
593
+ continue;
594
+ }
595
+ const f = readShorthand(node.text, node.line);
596
+ into.facets.set(f.key, f);
597
+ }
598
+ return into;
599
+ }
600
+ /** Split a case input into its definitions part and its data part (the data starts at `crubal:`). */
601
+ export function splitCaseInput(source) {
602
+ const lines = source.split(/\r?\n/);
603
+ const at = lines.findIndex((l) => /^crubal: /.test(l));
604
+ if (at < 0)
605
+ return { defs: source, data: "", dataLine: 0 };
606
+ // Blank the other part's lines instead of cutting them, so line numbers stay true.
607
+ const defs = lines.map((l, i) => (i < at ? l : "")).join("\n");
608
+ const data = lines.map((l, i) => (i >= at ? l : "")).join("\n");
609
+ return { defs, data, dataLine: at + 1 };
610
+ }
611
+ //# sourceMappingURL=defs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defs.js","sourceRoot":"","sources":["../../src/defs.ts"],"names":[],"mappings":"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"}