@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.
- package/LICENSE +202 -0
- package/README.md +97 -2
- package/dist/bin/crubal.d.ts +2 -0
- package/dist/bin/crubal.js +103 -0
- package/dist/bin/crubal.js.map +1 -0
- package/dist/src/access.d.ts +126 -0
- package/dist/src/access.js +517 -0
- package/dist/src/access.js.map +1 -0
- package/dist/src/arrival.d.ts +55 -0
- package/dist/src/arrival.js +124 -0
- package/dist/src/arrival.js.map +1 -0
- package/dist/src/browser.d.ts +10 -0
- package/dist/src/browser.js +13 -0
- package/dist/src/browser.js.map +1 -0
- package/dist/src/bundle.d.ts +66 -0
- package/dist/src/bundle.js +753 -0
- package/dist/src/bundle.js.map +1 -0
- package/dist/src/canonical.d.ts +6 -0
- package/dist/src/canonical.js +47 -0
- package/dist/src/canonical.js.map +1 -0
- package/dist/src/conditions.d.ts +28 -0
- package/dist/src/conditions.js +216 -0
- package/dist/src/conditions.js.map +1 -0
- package/dist/src/corpus.d.ts +8 -0
- package/dist/src/corpus.js +1207 -0
- package/dist/src/corpus.js.map +1 -0
- package/dist/src/defs.d.ts +151 -0
- package/dist/src/defs.js +611 -0
- package/dist/src/defs.js.map +1 -0
- package/dist/src/dictionary.d.ts +65 -0
- package/dist/src/dictionary.js +557 -0
- package/dist/src/dictionary.js.map +1 -0
- package/dist/src/exchange.d.ts +236 -0
- package/dist/src/exchange.js +1035 -0
- package/dist/src/exchange.js.map +1 -0
- package/dist/src/forms.d.ts +16 -0
- package/dist/src/forms.js +169 -0
- package/dist/src/forms.js.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lex.d.ts +21 -0
- package/dist/src/lex.js +142 -0
- package/dist/src/lex.js.map +1 -0
- package/dist/src/lifecycle.d.ts +84 -0
- package/dist/src/lifecycle.js +415 -0
- package/dist/src/lifecycle.js.map +1 -0
- package/dist/src/log.d.ts +78 -0
- package/dist/src/log.js +506 -0
- package/dist/src/log.js.map +1 -0
- package/dist/src/migrate.d.ts +111 -0
- package/dist/src/migrate.js +286 -0
- package/dist/src/migrate.js.map +1 -0
- package/dist/src/model.d.ts +68 -0
- package/dist/src/model.js +188 -0
- package/dist/src/model.js.map +1 -0
- package/dist/src/packages.d.ts +69 -0
- package/dist/src/packages.js +232 -0
- package/dist/src/packages.js.map +1 -0
- package/dist/src/print-text.d.ts +7 -0
- package/dist/src/print-text.js +216 -0
- package/dist/src/print-text.js.map +1 -0
- package/dist/src/publish.d.ts +27 -0
- package/dist/src/publish.js +275 -0
- package/dist/src/publish.js.map +1 -0
- package/dist/src/read-text.d.ts +10 -0
- package/dist/src/read-text.js +385 -0
- package/dist/src/read-text.js.map +1 -0
- package/dist/src/records.d.ts +31 -0
- package/dist/src/records.js +72 -0
- package/dist/src/records.js.map +1 -0
- package/dist/src/review.d.ts +22 -0
- package/dist/src/review.js +198 -0
- package/dist/src/review.js.map +1 -0
- package/dist/src/rules.d.ts +96 -0
- package/dist/src/rules.js +611 -0
- package/dist/src/rules.js.map +1 -0
- package/dist/src/schedule.d.ts +24 -0
- package/dist/src/schedule.js +126 -0
- package/dist/src/schedule.js.map +1 -0
- package/dist/src/std-packages.d.ts +9 -0
- package/dist/src/std-packages.js +268 -0
- package/dist/src/std-packages.js.map +1 -0
- package/dist/src/store.d.ts +164 -0
- package/dist/src/store.js +538 -0
- package/dist/src/store.js.map +1 -0
- package/dist/src/tree.d.ts +35 -0
- package/dist/src/tree.js +159 -0
- package/dist/src/tree.js.map +1 -0
- package/dist/src/units-table.d.ts +1 -0
- package/dist/src/units-table.js +200 -0
- package/dist/src/units-table.js.map +1 -0
- package/dist/src/units.d.ts +42 -0
- package/dist/src/units.js +98 -0
- package/dist/src/units.js.map +1 -0
- package/dist/src/views.d.ts +216 -0
- package/dist/src/views.js +761 -0
- package/dist/src/views.js.map +1 -0
- package/package.json +60 -4
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// packages.ts: package files (spec chapter 11). A file may hold several packages, each starting at a
|
|
2
|
+
// `package:` line. The checks here are 11.1's prefixes, 11.3's trust entries and 11.4's rule that an
|
|
3
|
+
// extending package may add to what it extends but never change it.
|
|
4
|
+
import { emptyDictionary, readDefinitions, unquote } from "./defs.js";
|
|
5
|
+
import { LANGUAGE } from "./read-text.js";
|
|
6
|
+
import { readContracts } from "./store.js";
|
|
7
|
+
import { readAccess } from "./access.js";
|
|
8
|
+
import { CrubalError, readTree } from "./tree.js";
|
|
9
|
+
const ORIGINS = new Set(["observed", "declared", "derived", "reported"]);
|
|
10
|
+
const AUDIENCES = new Set(["public", "member", "staff", "owner"]);
|
|
11
|
+
const splitList = (v) => v.split(",").map((s) => s.trim()).filter(Boolean);
|
|
12
|
+
/** Split at commas outside parentheses: `controller, curator(ship, returns)` → two pieces. */
|
|
13
|
+
function splitServes(value) {
|
|
14
|
+
const parts = [];
|
|
15
|
+
let depth = 0;
|
|
16
|
+
let cur = "";
|
|
17
|
+
for (const ch of value) {
|
|
18
|
+
if (ch === "(")
|
|
19
|
+
depth++;
|
|
20
|
+
if (ch === ")")
|
|
21
|
+
depth--;
|
|
22
|
+
if (ch === "," && depth === 0) {
|
|
23
|
+
parts.push(cur);
|
|
24
|
+
cur = "";
|
|
25
|
+
}
|
|
26
|
+
else
|
|
27
|
+
cur += ch;
|
|
28
|
+
}
|
|
29
|
+
parts.push(cur);
|
|
30
|
+
return parts.map((s) => s.trim()).filter(Boolean);
|
|
31
|
+
}
|
|
32
|
+
/** Read one `utility:` block. */
|
|
33
|
+
function readUtility(node) {
|
|
34
|
+
const [name = "", version = ""] = node.value.split(/\s+\//).map((s) => s.trim());
|
|
35
|
+
if (!/^[a-z][\w-]*$/.test(name))
|
|
36
|
+
throw new CrubalError(`a utility is "utility: <name> /<version>", the name a lower-case word: ${node.value}`, node.line);
|
|
37
|
+
const u = { name, version, serves: [], needs: [], setup: [], line: node.line };
|
|
38
|
+
for (const c of node.children) {
|
|
39
|
+
if (!c.key)
|
|
40
|
+
continue;
|
|
41
|
+
if (c.key === "label")
|
|
42
|
+
u.label = unquote(c.value.trim());
|
|
43
|
+
else if (c.key === "describe")
|
|
44
|
+
u.describe = unquote(c.value.trim());
|
|
45
|
+
else if (c.key === "serves") {
|
|
46
|
+
for (const p of splitServes(c.value)) {
|
|
47
|
+
const m = p.match(/^([A-Za-z][\w-]*)(?:\((.*)\))?$/);
|
|
48
|
+
if (!m)
|
|
49
|
+
throw new CrubalError(`serves: ${p} is not a name, or a name with items in parentheses`, c.line);
|
|
50
|
+
u.serves.push({ as: m[1], ...(m[2] !== undefined ? { items: splitList(m[2]) } : {}), line: c.line });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (c.key === "needs") {
|
|
54
|
+
for (const n of splitList(c.value)) {
|
|
55
|
+
const [nm = "", ver] = n.split(/\s+\//).map((s) => s.trim());
|
|
56
|
+
if (!/^([a-z0-9.-]+\/[a-z][\w-]*|[a-z][\w-]*)$/.test(nm))
|
|
57
|
+
throw new CrubalError(`needs: ${nm} is not a package identity (domain/name) or a utility name`, c.line);
|
|
58
|
+
u.needs.push({ name: nm, ...(ver ? { version: ver } : {}), line: c.line });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (c.key === "setup") {
|
|
62
|
+
for (const s of splitList(c.value)) {
|
|
63
|
+
const m = s.match(/^(connection|setting)\s+(\S+)$/);
|
|
64
|
+
if (!m)
|
|
65
|
+
throw new CrubalError(`setup: ${s} is not "connection <name>" or "setting <facet>"`, c.line);
|
|
66
|
+
u.setup.push(m[1] === "connection" ? { connection: m[2], line: c.line } : { setting: m[2], line: c.line });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else
|
|
70
|
+
throw new CrubalError(`a utility has label, describe, serves, needs and setup, not ${c.key}`, c.line);
|
|
71
|
+
}
|
|
72
|
+
return u;
|
|
73
|
+
}
|
|
74
|
+
/** Split a file into its packages, keeping line numbers true. */
|
|
75
|
+
export function readPackages(source) {
|
|
76
|
+
const lines = source.split(/\r?\n/);
|
|
77
|
+
const starts = lines.flatMap((l, i) => (/^package: /.test(l) ? [i] : []));
|
|
78
|
+
return starts.map((start, n) => {
|
|
79
|
+
const end = starts[n + 1] ?? lines.length;
|
|
80
|
+
const text = lines.map((l, i) => (i >= start && i < end ? l : "")).join("\n");
|
|
81
|
+
const [head, ...rest] = readTree(text);
|
|
82
|
+
if (!head)
|
|
83
|
+
throw new CrubalError("an empty package", start + 1);
|
|
84
|
+
const [name = "", version = ""] = head.value.split(/\s+\//).map((s) => s.trim());
|
|
85
|
+
const info = { name, version, owner: "", line: head.line, crubal: LANGUAGE, crubalLine: head.line, extends: [], prefixes: new Map(), trust: [], dict: emptyDictionary(), contracts: [], header: {}, terms: {}, utilities: [] };
|
|
86
|
+
for (const c of head.children) {
|
|
87
|
+
if (c.key === "owner")
|
|
88
|
+
info.owner = c.value;
|
|
89
|
+
if (c.key === "crubal") {
|
|
90
|
+
info.crubal = Number(c.value);
|
|
91
|
+
info.crubalLine = c.line;
|
|
92
|
+
}
|
|
93
|
+
if (c.key === "extends") {
|
|
94
|
+
for (const e of c.value.split(",")) {
|
|
95
|
+
const [en = "", ev = ""] = e.trim().split(/\s+\//);
|
|
96
|
+
info.extends.push({ name: en.trim(), version: ev.trim(), line: c.line });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (c.key === "prefixes")
|
|
100
|
+
for (const p of c.children)
|
|
101
|
+
if (p.key)
|
|
102
|
+
info.prefixes.set(p.key, { target: p.value, line: p.line });
|
|
103
|
+
if (c.key === "terms")
|
|
104
|
+
for (const t of c.children)
|
|
105
|
+
if (t.key)
|
|
106
|
+
info.terms[t.key] = t.value.trim();
|
|
107
|
+
if (c.key && !["owner", "crubal", "extends", "prefixes", "terms"].includes(c.key))
|
|
108
|
+
info.header[c.key] = c.value.trim();
|
|
109
|
+
}
|
|
110
|
+
for (const node of rest) {
|
|
111
|
+
if (node.key === "trust")
|
|
112
|
+
for (const t of node.children)
|
|
113
|
+
info.trust.push({ entry: t.text.trim(), line: t.line });
|
|
114
|
+
if (node.key === "utility") {
|
|
115
|
+
const u = readUtility(node);
|
|
116
|
+
if (info.utilities.some((x) => x.name === u.name))
|
|
117
|
+
throw new CrubalError(`the utility ${u.name} twice in one package`, node.line);
|
|
118
|
+
info.utilities.push(u);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Definitions are everything after the header block.
|
|
122
|
+
const headerEnd = Math.max(start, ...head.children.flatMap(function deep(c) { return [c.line - 1, ...c.children.flatMap(deep)]; }));
|
|
123
|
+
const defs = text.split("\n").map((l, i) => (i > headerEnd ? l : "")).join("\n");
|
|
124
|
+
readDefinitions(defs, info.dict);
|
|
125
|
+
info.contracts = readContracts(defs).map((c) => c.name);
|
|
126
|
+
return info;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function sameDefinition(base, mine) {
|
|
130
|
+
if (base.type !== mine.type)
|
|
131
|
+
return "type";
|
|
132
|
+
if (base.pick !== mine.pick)
|
|
133
|
+
return "pick";
|
|
134
|
+
if ((base.unit ?? "") !== (mine.unit ?? ""))
|
|
135
|
+
return "unit";
|
|
136
|
+
const baseValues = (base.values ?? []).map((v) => v.value);
|
|
137
|
+
const mineValues = (mine.values ?? []).map((v) => v.value);
|
|
138
|
+
if (mine.values && baseValues.some((v) => !mineValues.includes(v)))
|
|
139
|
+
return "values";
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/** Check every package in a file (11.1, 11.3, 11.4). Throws the first problem. */
|
|
143
|
+
export function checkPackages(source) {
|
|
144
|
+
// 11.2: a kind's vary step names a level of its kind and facets of this package (a key of another package
|
|
145
|
+
// carries its prefix and is checked where that package is resolved).
|
|
146
|
+
{
|
|
147
|
+
const d = readDefinitions(source);
|
|
148
|
+
for (const [level, keys] of d.vary) {
|
|
149
|
+
if (!d.levels.has(level))
|
|
150
|
+
throw new CrubalError(`vary names ${level}, which isn't a level`, d.varyLines.get(level));
|
|
151
|
+
for (const k of keys)
|
|
152
|
+
if (!k.includes(":") && !d.facets.has(k))
|
|
153
|
+
throw new CrubalError(`vary at ${level} names ${k}, which isn't a facet`, d.varyLines.get(level));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const pkgs = readPackages(source);
|
|
157
|
+
const byName = new Map(pkgs.map((p) => [p.name, p]));
|
|
158
|
+
for (const p of pkgs) {
|
|
159
|
+
// Language versions (11.8): never above this reader's, and never extending a package above one's own.
|
|
160
|
+
if (!Number.isInteger(p.crubal) || p.crubal < 1)
|
|
161
|
+
throw new CrubalError(`${p.name}: the language version is a whole number`, p.crubalLine);
|
|
162
|
+
if (p.crubal > LANGUAGE)
|
|
163
|
+
throw new CrubalError(`${p.name} is written in CRUBAL ${p.crubal}; this reader knows ${LANGUAGE}`, p.crubalLine);
|
|
164
|
+
for (const e of p.extends) {
|
|
165
|
+
const base = byName.get(e.name);
|
|
166
|
+
if (base && base.crubal > p.crubal)
|
|
167
|
+
throw new CrubalError(`${p.name} (CRUBAL ${p.crubal}) extends ${e.name}, written in CRUBAL ${base.crubal}, which it couldn't read`, e.line);
|
|
168
|
+
}
|
|
169
|
+
for (const [prefix, { target, line }] of p.prefixes) {
|
|
170
|
+
if (prefix === "crubal")
|
|
171
|
+
throw new CrubalError("the prefix crubal is reserved for the core", line);
|
|
172
|
+
if (prefix === p.name && target !== `${p.owner}/${p.name}`)
|
|
173
|
+
throw new CrubalError(`${p.name} can't map its own name to something else`, line);
|
|
174
|
+
}
|
|
175
|
+
for (const { entry, line } of p.trust) {
|
|
176
|
+
if (entry === "person" || ORIGINS.has(entry))
|
|
177
|
+
continue;
|
|
178
|
+
const bare = entry.startsWith(`${p.name}:`) ? entry.slice(p.name.length + 1) : entry;
|
|
179
|
+
if (p.contracts.includes(bare))
|
|
180
|
+
continue;
|
|
181
|
+
if (!entry.includes(":") && entry.includes("."))
|
|
182
|
+
continue; // a party's domain
|
|
183
|
+
throw new CrubalError(`${entry} is not a contract of this package`, line);
|
|
184
|
+
}
|
|
185
|
+
for (const f of p.dict.facets.values()) {
|
|
186
|
+
const m = f.key.match(/^([a-z][a-z0-9-]*):(.+)$/);
|
|
187
|
+
if (!m || m[1] === "crubal")
|
|
188
|
+
continue;
|
|
189
|
+
const base = byName.get(m[1]);
|
|
190
|
+
if (!base || !p.extends.some((e) => e.name === base.name))
|
|
191
|
+
continue;
|
|
192
|
+
const original = base.dict.facets.get(m[2]);
|
|
193
|
+
if (!original)
|
|
194
|
+
continue;
|
|
195
|
+
const changed = sameDefinition(original, f);
|
|
196
|
+
if (changed)
|
|
197
|
+
throw new CrubalError(`${p.name} changes ${f.key}'s ${changed}; an extending package may only add to it`, f.line);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
checkUtilities(source, pkgs);
|
|
201
|
+
return pkgs;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Utility blocks (11.1): what a utility `serves` is a preset, a relation or an audience the file declares,
|
|
205
|
+
* and the items in parentheses are presets, menu items or relations; a `setting` in `setup` is a facet the
|
|
206
|
+
* file defines. Packages the file doesn't hold are named by prefix and checked where they are resolved.
|
|
207
|
+
*/
|
|
208
|
+
function checkUtilities(source, pkgs) {
|
|
209
|
+
if (!pkgs.some((p) => p.utilities.length))
|
|
210
|
+
return;
|
|
211
|
+
const { perms } = readAccess(source);
|
|
212
|
+
const dict = readDefinitions(source);
|
|
213
|
+
const known = (n) => perms.presets.has(n) || perms.relations.has(n) || AUDIENCES.has(n);
|
|
214
|
+
const item = (n) => perms.presets.has(n) || perms.menu.has(n) || perms.relations.has(n);
|
|
215
|
+
for (const p of pkgs) {
|
|
216
|
+
for (const u of p.utilities) {
|
|
217
|
+
for (const s of u.serves) {
|
|
218
|
+
if (!known(s.as))
|
|
219
|
+
throw new CrubalError(`${u.name} serves ${s.as}, which isn't a preset, relation or audience here`, s.line);
|
|
220
|
+
for (const i of s.items ?? [])
|
|
221
|
+
if (!item(i))
|
|
222
|
+
throw new CrubalError(`${u.name} serves ${s.as}(${i}): ${i} isn't a preset, menu item or relation here`, s.line);
|
|
223
|
+
}
|
|
224
|
+
for (const s of u.setup)
|
|
225
|
+
if ("setting" in s && !s.setting.includes(":") && !dict.facets.has(s.setting))
|
|
226
|
+
throw new CrubalError(`${u.name} needs the setting ${s.setting}, which isn't a facet here`, s.line);
|
|
227
|
+
if (u.needs.some((n) => n.name === u.name))
|
|
228
|
+
throw new CrubalError(`${u.name} needs itself`, u.line);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../../src/packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Dictionary, type Facet } from "./defs.ts";
|
|
2
|
+
import type { Json, Wrapper } from "./model.ts";
|
|
3
|
+
export type PrintMode = "full" | "plain";
|
|
4
|
+
/** A list item's text form with its qualifiers and without its sources: the selector in an address. */
|
|
5
|
+
export declare function itemText(f: Facet, v: Json): string;
|
|
6
|
+
/** Print a wrapper as text. */
|
|
7
|
+
export declare function printText(w: Wrapper, dict: Dictionary, mode?: PrintMode): string;
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// print-text.ts: the JSON form (spec chapter 3) back to canonical text (chapter 2.9). Full mode writes the
|
|
2
|
+
// envelope lines and sources, so reading the print gives the same pairs back.
|
|
3
|
+
import { blank } from "./defs.js";
|
|
4
|
+
import { writeText } from "./lex.js";
|
|
5
|
+
const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
6
|
+
/** Detail pairs whose values are already spelled for the text form. */
|
|
7
|
+
function detailText(pairs) {
|
|
8
|
+
if (!pairs.length)
|
|
9
|
+
return "";
|
|
10
|
+
return ` [${pairs.map(([k, v]) => `${k}: ${v}`).join(", ")}]`;
|
|
11
|
+
}
|
|
12
|
+
function sourcePairs(s) {
|
|
13
|
+
if (!s)
|
|
14
|
+
return [];
|
|
15
|
+
const out = [["origin", writeText(s.origin, true)], ["via", writeText(s.via, true)]];
|
|
16
|
+
if (s.owner)
|
|
17
|
+
out.push(["owner", writeText(s.owner, true)]);
|
|
18
|
+
return out;
|
|
19
|
+
}
|
|
20
|
+
const TEXT = blank("", "text");
|
|
21
|
+
/** Spellings that would read as another shape under this facet, so text holding them must be quoted. */
|
|
22
|
+
function otherShapes(f) {
|
|
23
|
+
const out = ["_", "-", "n/a", "N/A"];
|
|
24
|
+
if (f.type === "yes-no")
|
|
25
|
+
out.push("yes", "no", ...(f.words ?? []));
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
/** One scalar, as the text form spells it, without detail. */
|
|
29
|
+
function scalarText(f, v) {
|
|
30
|
+
if (typeof v === "boolean") {
|
|
31
|
+
const [yes, no] = f.words ?? ["yes", "no"];
|
|
32
|
+
return v ? yes : no;
|
|
33
|
+
}
|
|
34
|
+
if (typeof v === "string")
|
|
35
|
+
return writeText(v, false, otherShapes(f));
|
|
36
|
+
if (typeof v === "number")
|
|
37
|
+
return String(v);
|
|
38
|
+
if (isObj(v)) {
|
|
39
|
+
if ("$empty" in v)
|
|
40
|
+
return v.$empty === "unknown" ? "_" : "-";
|
|
41
|
+
if ("$link" in v)
|
|
42
|
+
return `&${v.$link}`;
|
|
43
|
+
if ("$qty" in v)
|
|
44
|
+
return `${v.$qty}${v.unit}`;
|
|
45
|
+
if ("$money" in v)
|
|
46
|
+
return `${v.$money}${v.currency}`;
|
|
47
|
+
if ("$image" in v)
|
|
48
|
+
return writeText(String(v.$image));
|
|
49
|
+
}
|
|
50
|
+
return JSON.stringify(v);
|
|
51
|
+
}
|
|
52
|
+
/** The detail pairs a value carries in itself: qualifiers and image fields. */
|
|
53
|
+
function ownDetail(v) {
|
|
54
|
+
if (!isObj(v))
|
|
55
|
+
return [];
|
|
56
|
+
if ("$value" in v) {
|
|
57
|
+
return Object.entries(v)
|
|
58
|
+
.filter(([k]) => k !== "$value")
|
|
59
|
+
.map(([k, q]) => [k, typeof q === "string" ? writeText(q, true) : scalarText(TEXT, q)]);
|
|
60
|
+
}
|
|
61
|
+
if ("$image" in v) {
|
|
62
|
+
return Object.entries(v)
|
|
63
|
+
.filter(([k]) => k !== "$image")
|
|
64
|
+
.map(([k, x]) => [k, typeof x === "string" ? writeText(x, true) : String(x)]);
|
|
65
|
+
}
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
function core(v) {
|
|
69
|
+
return isObj(v) && "$value" in v ? v.$value : v;
|
|
70
|
+
}
|
|
71
|
+
/** A list item's text form with its qualifiers and without its sources: the selector in an address. */
|
|
72
|
+
export function itemText(f, v) {
|
|
73
|
+
return scalarText(f, core(v)) + detailText(ownDetail(v));
|
|
74
|
+
}
|
|
75
|
+
function valueLine(f, v, address, out) {
|
|
76
|
+
const src = out.mode === "full" ? out.sources[address] : undefined;
|
|
77
|
+
return scalarText(f, core(v)) + detailText([...ownDetail(v), ...sourcePairs(src)]);
|
|
78
|
+
}
|
|
79
|
+
function printFields(obj, within, prefix, depth, out) {
|
|
80
|
+
const pad = " ".repeat(depth);
|
|
81
|
+
for (const [key, v] of Object.entries(obj)) {
|
|
82
|
+
const f = within ? within.get(key) : out.dict.facets.get(key);
|
|
83
|
+
const address = prefix ? `${prefix}.${key}` : key;
|
|
84
|
+
if (!f) {
|
|
85
|
+
const [first = "", ...more] = (typeof v === "string" ? v : JSON.stringify(v)).split("\n");
|
|
86
|
+
out.lines.push(first ? `${pad}${key}: ${first}` : `${pad}${key}:`);
|
|
87
|
+
for (const m of more)
|
|
88
|
+
out.lines.push(`${pad} ${m}`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
printValue(f, key, v, address, depth, out);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function printValue(f, key, v, address, depth, out) {
|
|
95
|
+
const pad = " ".repeat(depth);
|
|
96
|
+
if (isObj(v) && "$empty" in v) {
|
|
97
|
+
out.lines.push(`${pad}${key}: ${valueLine(f, v, address, out)}`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Text holding a line break takes the block form (2.4.1): `key: |`, its detail on that line, the lines
|
|
101
|
+
// below, an empty line written as `|`.
|
|
102
|
+
if (f.type === "text" && !f.many && typeof v === "string" && v.includes("\n")) {
|
|
103
|
+
const src = out.mode === "full" ? out.sources[address] : undefined;
|
|
104
|
+
out.lines.push(`${pad}${key}: |${detailText(sourcePairs(src))}`);
|
|
105
|
+
for (const l of v.split("\n"))
|
|
106
|
+
out.lines.push(l === "" ? `${pad} |` : `${pad} ${l}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (f.type === "compound") {
|
|
110
|
+
const children = f.children ?? new Map();
|
|
111
|
+
out.lines.push(`${pad}${key}:`);
|
|
112
|
+
if (!f.many || !Array.isArray(v)) {
|
|
113
|
+
if (isObj(v))
|
|
114
|
+
printFields(v, children, address, depth + 1, out);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (const row of v) {
|
|
118
|
+
if (!isObj(row))
|
|
119
|
+
continue;
|
|
120
|
+
const rowKey = f.identity ? linkTarget(row[f.identity]) : String(row.$row ?? "");
|
|
121
|
+
const fields = {};
|
|
122
|
+
if (f.identity && row[f.identity] !== undefined)
|
|
123
|
+
fields[f.identity] = row[f.identity];
|
|
124
|
+
for (const [k, x] of Object.entries(row))
|
|
125
|
+
if (k !== "$row" && !(k in fields))
|
|
126
|
+
fields[k] = x;
|
|
127
|
+
const start = out.lines.length;
|
|
128
|
+
if (!f.identity)
|
|
129
|
+
out.lines.push(`${pad} - [row: ${rowKey}]`);
|
|
130
|
+
printFields(fields, children, `${address}[${rowKey}]`, depth + 2, out);
|
|
131
|
+
if (f.identity) {
|
|
132
|
+
const first = out.lines[start];
|
|
133
|
+
if (first !== undefined)
|
|
134
|
+
out.lines[start] = `${pad} - ${first.trimStart()}`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!f.many || !Array.isArray(v)) {
|
|
140
|
+
out.lines.push(`${pad}${key}: ${valueLine(f, v, address, out)}`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const items = v.map((item) => {
|
|
144
|
+
const src = out.mode === "full" ? out.sources[`${key}[${JSON.stringify(itemText(f, item))}]`] : undefined;
|
|
145
|
+
return scalarText(f, core(item)) + detailText([...ownDetail(item), ...sourcePairs(src)]);
|
|
146
|
+
});
|
|
147
|
+
const short = `${pad}${key}: ${items.join(", ")}`;
|
|
148
|
+
if (short.length <= 100 && items.every((i) => !i.includes("\n"))) {
|
|
149
|
+
out.lines.push(short);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
out.lines.push(`${pad}${key}:`);
|
|
153
|
+
for (const item of items)
|
|
154
|
+
out.lines.push(`${pad} - ${item}`);
|
|
155
|
+
}
|
|
156
|
+
function linkTarget(v) {
|
|
157
|
+
return isObj(v) && "$link" in v ? String(v.$link) : String(v ?? "");
|
|
158
|
+
}
|
|
159
|
+
function printRecord(r, fileOwner, out) {
|
|
160
|
+
const sources = r.sources ?? {};
|
|
161
|
+
out.sources = sources;
|
|
162
|
+
const star = out.mode === "full" ? detailText(sourcePairs(sources["*"])) : "";
|
|
163
|
+
out.lines.push(`${r.level}: ${r.id}${r.of ? ` of ${r.of}` : ""}${star}`);
|
|
164
|
+
if (r.owner !== fileOwner)
|
|
165
|
+
out.lines.push(` crubal:owner: ${r.owner}`);
|
|
166
|
+
if (r.within)
|
|
167
|
+
out.lines.push(` crubal:within: ${r.within}`);
|
|
168
|
+
if (r.status?.state === "archived") {
|
|
169
|
+
const pairs = [];
|
|
170
|
+
if (r.status.reason)
|
|
171
|
+
pairs.push(["reason", writeText(r.status.reason, true)]);
|
|
172
|
+
if (r.status.into)
|
|
173
|
+
pairs.push(["into", r.status.into]);
|
|
174
|
+
out.lines.push(` crubal:status: archived${detailText(pairs)}`);
|
|
175
|
+
}
|
|
176
|
+
if (r.applied && Object.keys(r.applied).length) {
|
|
177
|
+
out.lines.push(` crubal:applied:${detailText(Object.entries(r.applied).map(([k, n]) => [k, String(n)]))}`);
|
|
178
|
+
}
|
|
179
|
+
if (r.wears?.length)
|
|
180
|
+
out.lines.push(` crubal:wears: ${r.wears.join(", ")}`);
|
|
181
|
+
if (out.mode === "full" && r.created)
|
|
182
|
+
out.lines.push(` crubal:created: ${r.created}`);
|
|
183
|
+
if (out.mode === "full" && r.updated)
|
|
184
|
+
out.lines.push(` crubal:updated: ${r.updated}`);
|
|
185
|
+
printFields(r.values, null, "", 1, out);
|
|
186
|
+
if (r.parts?.length) {
|
|
187
|
+
out.lines.push(" crubal:parts:");
|
|
188
|
+
for (const part of r.parts) {
|
|
189
|
+
if (!isObj(part))
|
|
190
|
+
continue;
|
|
191
|
+
out.lines.push(` - [row: ${part.$row}]`);
|
|
192
|
+
const wears = part.wears;
|
|
193
|
+
if (Array.isArray(wears) && wears.length)
|
|
194
|
+
out.lines.push(` crubal:wears: ${wears.join(", ")}`);
|
|
195
|
+
if (isObj(part.values))
|
|
196
|
+
printFields(part.values, null, `parts[${part.$row}]`, 3, out);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** Print a wrapper as text. */
|
|
201
|
+
export function printText(w, dict, mode = "full") {
|
|
202
|
+
const out = { lines: [], sources: {}, mode, dict };
|
|
203
|
+
const owners = w.records.map((r) => r.owner);
|
|
204
|
+
const fileOwner = owners[0];
|
|
205
|
+
out.lines.push(`crubal: ${w.crubal}`);
|
|
206
|
+
if (w.package)
|
|
207
|
+
out.lines.push(`package: ${w.package}`);
|
|
208
|
+
if (fileOwner)
|
|
209
|
+
out.lines.push(`owner: ${fileOwner}`);
|
|
210
|
+
for (const r of w.records) {
|
|
211
|
+
out.lines.push("");
|
|
212
|
+
printRecord(r, fileOwner, out);
|
|
213
|
+
}
|
|
214
|
+
return `${out.lines.join("\n")}\n`;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=print-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print-text.js","sourceRoot":"","sources":["../../src/print-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Parsed } from "./bundle.ts";
|
|
2
|
+
import type { Json, JsonObject } from "./model.ts";
|
|
3
|
+
export type Change = {
|
|
4
|
+
member: string;
|
|
5
|
+
kind: "unchanged" | "safe" | "minor" | "breaking" | "new" | "retired";
|
|
6
|
+
why: string[];
|
|
7
|
+
recipe?: string[];
|
|
8
|
+
};
|
|
9
|
+
/** Classify every member against the previous bundle. */
|
|
10
|
+
export declare function classify(previous: JsonObject | undefined, next: JsonObject): Change[];
|
|
11
|
+
export type PublishOptions = {
|
|
12
|
+
previous?: JsonObject;
|
|
13
|
+
date: string;
|
|
14
|
+
key?: {
|
|
15
|
+
d: string;
|
|
16
|
+
x: string;
|
|
17
|
+
};
|
|
18
|
+
records?: Json[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Cut a version: versions by diff, the recipe check, `previous`, hash and signature. Throws a CrubalError
|
|
22
|
+
* naming what is missing. Returns the bundle and the classification.
|
|
23
|
+
*/
|
|
24
|
+
export declare function publish(source: string | Parsed, o: PublishOptions): {
|
|
25
|
+
bundle: JsonObject;
|
|
26
|
+
changes: Change[];
|
|
27
|
+
};
|