@intentset/core 0.10.0 → 0.12.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 (48) hide show
  1. package/dist/artifact.d.ts.map +1 -1
  2. package/dist/artifact.js +25 -3
  3. package/dist/artifact.js.map +1 -1
  4. package/dist/delivery.d.ts +11 -0
  5. package/dist/delivery.d.ts.map +1 -0
  6. package/dist/delivery.js +12 -0
  7. package/dist/delivery.js.map +1 -0
  8. package/dist/export.d.ts +9 -1
  9. package/dist/export.d.ts.map +1 -1
  10. package/dist/export.js +15 -6
  11. package/dist/export.js.map +1 -1
  12. package/dist/glob.d.ts +18 -0
  13. package/dist/glob.d.ts.map +1 -0
  14. package/dist/glob.js +62 -0
  15. package/dist/glob.js.map +1 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +4 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/read-export.d.ts.map +1 -1
  21. package/dist/read-export.js +8 -1
  22. package/dist/read-export.js.map +1 -1
  23. package/dist/select.d.ts +166 -0
  24. package/dist/select.d.ts.map +1 -0
  25. package/dist/select.js +579 -0
  26. package/dist/select.js.map +1 -0
  27. package/dist/slices.d.ts +50 -0
  28. package/dist/slices.d.ts.map +1 -0
  29. package/dist/slices.js +111 -0
  30. package/dist/slices.js.map +1 -0
  31. package/dist/types.d.ts +15 -1
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js +10 -1
  34. package/dist/types.js.map +1 -1
  35. package/dist/validate.d.ts.map +1 -1
  36. package/dist/validate.js +40 -1
  37. package/dist/validate.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/artifact.ts +35 -2
  40. package/src/delivery.ts +11 -0
  41. package/src/export.ts +20 -11
  42. package/src/glob.ts +60 -0
  43. package/src/index.ts +4 -0
  44. package/src/read-export.ts +9 -0
  45. package/src/select.ts +753 -0
  46. package/src/slices.ts +149 -0
  47. package/src/types.ts +16 -1
  48. package/src/validate.ts +39 -1
package/dist/select.js ADDED
@@ -0,0 +1,579 @@
1
+ /**
2
+ * Selecting records (spec/list.md, ADR 0016): a closed, typed selector over a
3
+ * graph or a checked export, and the `intentset/list/0.1` result.
4
+ *
5
+ * The selector is data, not a language. Its fields combine with AND and the
6
+ * values within one field with OR, as availability does (Core §7); matching is
7
+ * exact, except that an ID ending in `*` matches by prefix. A link predicate
8
+ * looks one hop: the record at the far end is matched on its own fields, never
9
+ * on its links. An unknown key is an error, never ignored.
10
+ *
11
+ * Both sources are read through the export's projection (spec/export.md §3),
12
+ * so a list from the tree and a list from its export give the same answer.
13
+ * Where the answer depends on a link end the source withheld, the record is
14
+ * undetermined: counted and listed apart, never a match and never a miss
15
+ * (design invariant 6).
16
+ */
17
+ import { projectArtifacts } from "./export.js";
18
+ import { matchGlob } from "./glob.js";
19
+ import { compareStrings, isRecord } from "./report.js";
20
+ import { deliveryOf } from "./delivery.js";
21
+ import { describing, linkPossible } from "./slices.js";
22
+ import { ARTIFACT_TYPES, DELIVERIES, LINK_KINDS, PARENT_TARGETS, STATUSES, VISIBILITIES, } from "./types.js";
23
+ /** The result's contract (spec/list.md §5). A reader rejects any other value. */
24
+ export const LIST_CONTRACT = "intentset/list/0.1";
25
+ /** What `deliveries` matches: a record's effective delivery, or `unstated` when it has none (ADR 0017). */
26
+ export const DELIVERY_VALUES = [...DELIVERIES, "unstated"];
27
+ /** The availability dimensions a selector matches, `notReleases` the one negative. */
28
+ export const AVAILABILITY_SELECTORS = ["products", "releases", "notReleases", "roles", "editions", "flags"];
29
+ /** The fields a link's far end may be matched on: a record's own fields, never its links (one hop). */
30
+ export const END_FIELDS = [
31
+ "ids",
32
+ "types",
33
+ "statuses",
34
+ "deliveries",
35
+ "owners",
36
+ "audiences",
37
+ "visibilities",
38
+ "under",
39
+ "availability",
40
+ "hasExtension",
41
+ ];
42
+ /** Every selector field, in the order the normalized selector is written. */
43
+ export const SELECTOR_FIELDS = [...END_FIELDS, "links", "describing", "claims"];
44
+ export const LINK_DIRECTIONS = ["out", "in"];
45
+ export const LINK_QUANTIFIERS = ["some", "none", "all"];
46
+ const CLOSED_VALUES = {
47
+ types: ARTIFACT_TYPES,
48
+ statuses: STATUSES,
49
+ deliveries: DELIVERY_VALUES,
50
+ visibilities: VISIBILITIES,
51
+ };
52
+ /**
53
+ * spec/list.md §1: read a selector from data (a parsed `--where` file, or what the command line compiled), and
54
+ * normalize it: every list sorted with duplicates removed, a link's quantifier written out. Every problem is
55
+ * collected; one makes the selector unusable.
56
+ */
57
+ export function readSelector(value) {
58
+ const problems = [];
59
+ const selector = readFields(value, "", SELECTOR_FIELDS, problems);
60
+ return problems.length === 0 ? { ok: true, selector } : { ok: false, problems };
61
+ }
62
+ function readFields(value, at, allowed, problems) {
63
+ const out = {};
64
+ if (!isRecord(value)) {
65
+ problems.push({ pointer: at, message: "A selector is an object of fields." });
66
+ return out;
67
+ }
68
+ for (const key of Object.keys(value).sort(compareStrings)) {
69
+ const pointer = `${at}/${escapePointer(key)}`;
70
+ if (!allowed.includes(key)) {
71
+ const hop = SELECTOR_FIELDS.includes(key);
72
+ problems.push({
73
+ pointer,
74
+ message: hop
75
+ ? `${key} cannot match a link's far end: a link predicate looks one hop, so its match holds only ${END_FIELDS.join(", ")}.`
76
+ : `${key} is not a selector field; the fields are ${allowed.join(", ")}.`,
77
+ });
78
+ }
79
+ }
80
+ for (const field of allowed) {
81
+ if (!Object.hasOwn(value, field))
82
+ continue;
83
+ const pointer = `${at}/${field}`;
84
+ const given = value[field];
85
+ if (field === "availability") {
86
+ const availability = readAvailability(given, pointer, problems);
87
+ if (availability !== null)
88
+ out.availability = availability;
89
+ }
90
+ else if (field === "links") {
91
+ const links = readLinks(given, pointer, problems);
92
+ if (links !== null)
93
+ out.links = links;
94
+ }
95
+ else {
96
+ const list = readList(given, pointer, problems, CLOSED_VALUES[field]);
97
+ if (list === null)
98
+ continue;
99
+ if (field === "ids") {
100
+ for (const [i, id] of list.entries()) {
101
+ if (id.indexOf("*") !== -1 && id.indexOf("*") !== id.length - 1) {
102
+ problems.push({
103
+ pointer: `${pointer}/${i}`,
104
+ message: `${id}: only a trailing * is a pattern, matching every ID that starts with what is before it.`,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ out[field] = list;
110
+ }
111
+ }
112
+ return out;
113
+ }
114
+ function readList(value, pointer, problems, closed) {
115
+ if (!Array.isArray(value) || value.length === 0) {
116
+ problems.push({
117
+ pointer,
118
+ message: "Give a nonempty list of values; the values in one field combine with OR, and an empty list would match nothing.",
119
+ });
120
+ return null;
121
+ }
122
+ let ok = true;
123
+ for (const [i, item] of value.entries()) {
124
+ if (typeof item !== "string" || item === "") {
125
+ problems.push({ pointer: `${pointer}/${i}`, message: "Each value is a nonempty string." });
126
+ ok = false;
127
+ }
128
+ else if (closed !== undefined && !closed.includes(item)) {
129
+ problems.push({ pointer: `${pointer}/${i}`, message: `${item} is not one of ${closed.join(", ")}.` });
130
+ ok = false;
131
+ }
132
+ }
133
+ return ok ? [...new Set(value)].sort(compareStrings) : null;
134
+ }
135
+ function readAvailability(value, pointer, problems) {
136
+ if (!isRecord(value) || Object.keys(value).length === 0) {
137
+ problems.push({
138
+ pointer,
139
+ message: `availability is an object of one or more of ${AVAILABILITY_SELECTORS.join(", ")}.`,
140
+ });
141
+ return null;
142
+ }
143
+ const out = {};
144
+ for (const key of Object.keys(value).sort(compareStrings)) {
145
+ if (!AVAILABILITY_SELECTORS.includes(key)) {
146
+ problems.push({
147
+ pointer: `${pointer}/${escapePointer(key)}`,
148
+ message: `${key} is not an availability field; the fields are ${AVAILABILITY_SELECTORS.join(", ")}.`,
149
+ });
150
+ }
151
+ }
152
+ for (const name of AVAILABILITY_SELECTORS) {
153
+ if (!Object.hasOwn(value, name))
154
+ continue;
155
+ const list = readList(value[name], `${pointer}/${name}`, problems);
156
+ if (list !== null)
157
+ out[name] = list;
158
+ }
159
+ return out;
160
+ }
161
+ const LINK_KEYS = ["direction", "kind", "quantifier", "match"];
162
+ function readLinks(value, pointer, problems) {
163
+ if (!Array.isArray(value) || value.length === 0) {
164
+ problems.push({ pointer, message: "links is a nonempty list of link predicates, each a condition of its own." });
165
+ return null;
166
+ }
167
+ const out = [];
168
+ for (const [i, item] of value.entries()) {
169
+ const at = `${pointer}/${i}`;
170
+ if (!isRecord(item)) {
171
+ problems.push({ pointer: at, message: "A link predicate is an object: direction, kind, quantifier, match." });
172
+ continue;
173
+ }
174
+ const before = problems.length;
175
+ for (const key of Object.keys(item).sort(compareStrings)) {
176
+ if (!LINK_KEYS.includes(key)) {
177
+ problems.push({
178
+ pointer: `${at}/${escapePointer(key)}`,
179
+ message: `${key} is not part of a link predicate; its keys are ${LINK_KEYS.join(", ")}.`,
180
+ });
181
+ }
182
+ }
183
+ const direction = item.direction;
184
+ if (!LINK_DIRECTIONS.includes(direction)) {
185
+ problems.push({
186
+ pointer: `${at}/direction`,
187
+ message: "direction is out (links the record authors) or in (links authored to it).",
188
+ });
189
+ }
190
+ const kind = item.kind;
191
+ if (!LINK_KINDS.includes(kind)) {
192
+ problems.push({ pointer: `${at}/kind`, message: `kind is one of ${LINK_KINDS.join(", ")}.` });
193
+ }
194
+ const quantifier = item.quantifier ?? "some";
195
+ if (!LINK_QUANTIFIERS.includes(quantifier)) {
196
+ problems.push({ pointer: `${at}/quantifier`, message: `quantifier is one of ${LINK_QUANTIFIERS.join(", ")}.` });
197
+ }
198
+ let match;
199
+ if (Object.hasOwn(item, "match")) {
200
+ match = readFields(item.match, `${at}/match`, END_FIELDS, problems);
201
+ }
202
+ else if (quantifier === "all") {
203
+ problems.push({
204
+ pointer: `${at}/match`,
205
+ message: "all needs a match: every link of a kind is trivially a link of that kind.",
206
+ });
207
+ }
208
+ if (problems.length > before)
209
+ continue;
210
+ const predicate = {
211
+ direction: direction,
212
+ kind: kind,
213
+ quantifier: quantifier,
214
+ };
215
+ if (match !== undefined)
216
+ predicate.match = match;
217
+ out.push(predicate);
218
+ }
219
+ return problems.length === 0 ? out.sort(comparePredicates) : null;
220
+ }
221
+ function comparePredicates(a, b) {
222
+ return compareStrings(JSON.stringify(sortedKeys(a)), JSON.stringify(sortedKeys(b)));
223
+ }
224
+ function sortedKeys(value) {
225
+ if (Array.isArray(value))
226
+ return value.map(sortedKeys);
227
+ if (!isRecord(value))
228
+ return value;
229
+ return Object.fromEntries(Object.keys(value)
230
+ .sort(compareStrings)
231
+ .map((key) => [key, sortedKeys(value[key])]));
232
+ }
233
+ function escapePointer(key) {
234
+ return key.replace(/~/g, "~0").replace(/\//g, "~1");
235
+ }
236
+ function all(answers) {
237
+ let unknown = false;
238
+ for (const answer of answers) {
239
+ if (answer === false)
240
+ return false;
241
+ if (answer === null)
242
+ unknown = true;
243
+ }
244
+ return unknown ? null : true;
245
+ }
246
+ function any(answers) {
247
+ let unknown = false;
248
+ for (const answer of answers) {
249
+ if (answer === true)
250
+ return true;
251
+ if (answer === null)
252
+ unknown = true;
253
+ }
254
+ return unknown ? null : false;
255
+ }
256
+ function isGraph(source) {
257
+ return source.artifacts instanceof Map;
258
+ }
259
+ function readSource(source, options) {
260
+ if (isGraph(source)) {
261
+ const projected = projectArtifacts(source, options.includeRestricted === true);
262
+ return {
263
+ views: new Map(projected.artifacts.map((artifact) => [artifact.id, artifact])),
264
+ withheld: projected.withheld,
265
+ review: (id) => {
266
+ const meta = source.artifacts.get(id)?.meta;
267
+ return { reviewedBy: meta?.reviewedBy ?? null, reviewedAt: meta?.reviewedAt ?? null };
268
+ },
269
+ registries: options.registries ?? null,
270
+ };
271
+ }
272
+ return {
273
+ views: new Map(source.artifacts.map((artifact) => [artifact.id, artifact])),
274
+ withheld: source.withholding.artifacts,
275
+ // Export 0.4 does not carry Core §4's review fields.
276
+ review: () => ({ reviewedBy: "not-supplied", reviewedAt: "not-supplied" }),
277
+ registries: source.registries,
278
+ };
279
+ }
280
+ function viewIndex(source) {
281
+ const hiddenByType = new Map();
282
+ for (const view of [...source.views.values()].sort((a, b) => compareStrings(a.id, b.id))) {
283
+ if (view.withheldLinks === 0)
284
+ continue;
285
+ const list = hiddenByType.get(view.type);
286
+ if (list === undefined)
287
+ hiddenByType.set(view.type, [view.id]);
288
+ else
289
+ list.push(view.id);
290
+ }
291
+ return {
292
+ has: (id) => source.views.has(id),
293
+ type: (id) => source.views.get(id)?.type,
294
+ targets: (id, kind) => ends(source.views.get(id), "out", kind),
295
+ sources: (id, kind) => ends(source.views.get(id), "in", kind),
296
+ hidden: (id) => (source.views.get(id)?.withheldLinks ?? 0) > 0,
297
+ hiddenOfType: (type) => hiddenByType.get(type) ?? [],
298
+ withholds: source.withheld > 0,
299
+ };
300
+ }
301
+ /** The visible ends of a record's `kind` links in one direction, as the export projection carries them. */
302
+ function ends(view, direction, kind) {
303
+ if (view === undefined)
304
+ return [];
305
+ if (direction === "in")
306
+ return view.derived[kind] ?? [];
307
+ if (kind === "parent")
308
+ return view.parent === null ? [] : [view.parent];
309
+ return view.links[kind] ?? [];
310
+ }
311
+ /**
312
+ * spec/list.md: the records of `source` the selector picks. A graph is read through the export's projection, so
313
+ * restricted artifacts are withheld unless `includeRestricted`; an export is read as it is, and should come from
314
+ * `readExport`. Throws on a selector `readSelector` would reject.
315
+ */
316
+ export function select(source, selector, options = {}) {
317
+ const read = readSelector(selector);
318
+ if (!read.ok) {
319
+ throw new TypeError(`select: ${read.problems.map((p) => `${p.pointer || "/"} ${p.message}`).join("; ")}`);
320
+ }
321
+ const normalized = read.selector;
322
+ const src = readSource(source, options);
323
+ const index = viewIndex(src);
324
+ // A record that is not a slice has no describing records (Core §10), so naming one matches nothing.
325
+ const describingSets = (normalized.describing ?? []).map((slice) => src.views.has(slice) && src.views.get(slice)?.type !== "slice"
326
+ ? { exact: new Set(), loose: new Set() }
327
+ : { exact: describing(index, slice, false).ids, loose: describing(index, slice, true).ids });
328
+ const rows = [];
329
+ const undetermined = [];
330
+ for (const id of [...src.views.keys()].sort(compareStrings)) {
331
+ const view = src.views.get(id);
332
+ const answer = all([
333
+ matchEnd(view, normalized, src),
334
+ ...(normalized.links ?? []).map((predicate) => matchLink(view, predicate, src)),
335
+ normalized.describing === undefined
336
+ ? true
337
+ : any(describingSets.map((sets) => (sets.exact.has(id) ? true : sets.loose.has(id) ? null : false))),
338
+ normalized.claims === undefined ? true : claims(view, normalized.claims),
339
+ ]);
340
+ if (answer === true)
341
+ rows.push(toRow(view, src));
342
+ else if (answer === null)
343
+ undetermined.push(id);
344
+ }
345
+ return {
346
+ selector: normalized,
347
+ counts: {
348
+ considered: src.views.size,
349
+ withheld: src.withheld,
350
+ matched: rows.length,
351
+ undetermined: undetermined.length,
352
+ },
353
+ rows,
354
+ undetermined,
355
+ notes: notesFor(normalized, src),
356
+ };
357
+ }
358
+ function toRow(view, source) {
359
+ return {
360
+ id: view.id,
361
+ type: view.type,
362
+ title: view.title,
363
+ status: view.status,
364
+ owner: view.owner,
365
+ visibility: view.visibility,
366
+ audiences: view.audiences,
367
+ path: view.path,
368
+ parent: view.parent,
369
+ availability: view.availability,
370
+ ...source.review(view.id),
371
+ };
372
+ }
373
+ function matchEnd(view, selector, source) {
374
+ const has = (list, value) => list === undefined || list.includes(value);
375
+ if (selector.ids !== undefined && !selector.ids.some((pattern) => idMatches(pattern, view.id)))
376
+ return false;
377
+ if (!has(selector.types, view.type) || !has(selector.statuses, view.status))
378
+ return false;
379
+ if (!has(selector.deliveries, deliveryOf(view) ?? "unstated"))
380
+ return false;
381
+ if (!has(selector.owners, view.owner) || !has(selector.visibilities, view.visibility))
382
+ return false;
383
+ if (selector.audiences !== undefined && !view.audiences.some((a) => selector.audiences?.includes(a)))
384
+ return false;
385
+ if (selector.hasExtension !== undefined) {
386
+ const keys = Object.keys(view.extensions ?? {});
387
+ if (!keys.some((key) => selector.hasExtension?.includes(key)))
388
+ return false;
389
+ }
390
+ if (selector.availability !== undefined && !availabilityMatches(view.availability, selector.availability)) {
391
+ return false;
392
+ }
393
+ return selector.under === undefined ? true : under(view, selector.under, source);
394
+ }
395
+ function idMatches(pattern, id) {
396
+ return pattern.endsWith("*") ? id.startsWith(pattern.slice(0, -1)) : id === pattern;
397
+ }
398
+ /**
399
+ * Exact matching in each dimension the selector names (Core §7): a record has a value the list names. A record with
400
+ * no availability has no value in any dimension, so it never matches a positive dimension and always matches
401
+ * `notReleases`.
402
+ */
403
+ function availabilityMatches(availability, selector) {
404
+ const values = (name) => availability?.[name] ?? [];
405
+ for (const name of ["products", "releases", "roles", "editions", "flags"]) {
406
+ const wanted = selector[name];
407
+ if (wanted !== undefined && !values(name).some((value) => wanted.includes(value)))
408
+ return false;
409
+ }
410
+ const excluded = selector.notReleases;
411
+ return excluded === undefined || !values("releases").some((value) => excluded.includes(value));
412
+ }
413
+ /**
414
+ * True when one of `ancestors` is on the record's navigation chain (Core §5, the ancestors impact reports), the
415
+ * record itself not included. Undetermined when the chain stops at a record whose parent may be withheld.
416
+ */
417
+ function under(view, ancestors, source) {
418
+ const visited = new Set([view.id]);
419
+ let current = view;
420
+ while (true) {
421
+ const parent = current.parent;
422
+ if (parent === null) {
423
+ const cut = current.withheldLinks > 0 && PARENT_TARGETS[current.type] !== undefined;
424
+ return cut ? null : false;
425
+ }
426
+ if (visited.has(parent))
427
+ return false;
428
+ const next = source.views.get(parent);
429
+ if (next === undefined)
430
+ return false;
431
+ if (ancestors.includes(parent))
432
+ return true;
433
+ visited.add(parent);
434
+ current = next;
435
+ }
436
+ }
437
+ /**
438
+ * One link predicate (spec/list.md §1.3): the visible ends of the record's `kind` links in the direction, each
439
+ * matched on its own fields, and the quantifier over them. A withheld end of a kind the record can have leaves a
440
+ * definite answer only where the visible ends already decide it.
441
+ */
442
+ function matchLink(view, predicate, source) {
443
+ const answers = ends(view, predicate.direction, predicate.kind).map((id) => {
444
+ if (predicate.match === undefined)
445
+ return true;
446
+ const far = source.views.get(id);
447
+ return far === undefined ? false : matchEnd(far, predicate.match, source);
448
+ });
449
+ const hidden = view.withheldLinks > 0 && linkPossible(view.type, predicate.direction, predicate.kind);
450
+ const unknowns = hidden ? [null] : [];
451
+ if (predicate.quantifier === "some")
452
+ return any([...answers, ...unknowns]);
453
+ if (predicate.quantifier === "all")
454
+ return all([...answers, ...unknowns]);
455
+ const some = any([...answers, ...unknowns]);
456
+ return some === null ? null : !some;
457
+ }
458
+ function claims(view, paths) {
459
+ if (view.type !== "slice" || view.status === "retired" || view.slice === null)
460
+ return false;
461
+ const claimed = view.slice.claims;
462
+ return paths.some((path) => claimed.some((claim) => matchGlob(claim.path, path)));
463
+ }
464
+ const REGISTRY_CHECKS = [
465
+ { name: "owners", registry: "owners", values: (s) => s.owners },
466
+ { name: "audiences", registry: "audiences", values: (s) => s.audiences },
467
+ { name: "availability.releases", registry: "releases", values: (s) => s.availability?.releases },
468
+ { name: "availability.notReleases", registry: "releases", values: (s) => s.availability?.notReleases },
469
+ { name: "availability.roles", registry: "roles", values: (s) => s.availability?.roles },
470
+ { name: "availability.editions", registry: "editions", values: (s) => s.availability?.editions },
471
+ { name: "availability.flags", registry: "flags", values: (s) => s.availability?.flags },
472
+ ];
473
+ /** spec/list.md §4: what a reader needs to read the answer right. */
474
+ function notesFor(selector, source) {
475
+ const notes = [];
476
+ const ends = [selector, ...(selector.links ?? []).flatMap((link) => link.match ?? [])];
477
+ if (ends.some((end) => end.availability !== undefined)) {
478
+ notes.push("Status and availability are authored claims, not a reviewed release snapshot (Core §7).");
479
+ }
480
+ if (source.registries !== null) {
481
+ const registries = source.registries;
482
+ const unknown = new Set();
483
+ for (const end of ends) {
484
+ for (const check of REGISTRY_CHECKS) {
485
+ const declared = registries[check.registry];
486
+ for (const value of check.values(end) ?? []) {
487
+ if (!declared.includes(value)) {
488
+ const effect = check.name.endsWith("notReleases") ? "excludes" : "matches";
489
+ unknown.add(`${check.name}: ${value} is not in the ${check.registry} registry, so it ${effect} no record.`);
490
+ }
491
+ }
492
+ }
493
+ }
494
+ notes.push(...[...unknown].sort(compareStrings));
495
+ }
496
+ for (const slice of selector.describing ?? []) {
497
+ const view = source.views.get(slice);
498
+ if (view?.type === "slice")
499
+ continue;
500
+ notes.push(view !== undefined
501
+ ? `describing: ${slice} is ${/^[aeiou]/.test(view.type) ? "an" : "a"} ${view.type}, not a slice.`
502
+ : source.withheld > 0
503
+ ? `describing: ${slice} is not a visible slice; it may be withheld, so what describes it is undetermined.`
504
+ : `describing: ${slice} is not a slice in this source, so nothing describes it.`);
505
+ }
506
+ return notes;
507
+ }
508
+ /** The fields `--count-by` groups by: a record's own, and each availability dimension. */
509
+ export const COUNT_FIELDS = [
510
+ "type",
511
+ "status",
512
+ "owner",
513
+ "visibility",
514
+ "audience",
515
+ "product",
516
+ "release",
517
+ "role",
518
+ "edition",
519
+ "flag",
520
+ ];
521
+ const MULTI_VALUED = {
522
+ audience: (row) => row.audiences,
523
+ product: (row) => row.availability?.products ?? [],
524
+ release: (row) => row.availability?.releases ?? [],
525
+ role: (row) => row.availability?.roles ?? [],
526
+ edition: (row) => row.availability?.editions ?? [],
527
+ flag: (row) => row.availability?.flags ?? [],
528
+ };
529
+ /** spec/list.md §5.2: the matched records counted by one field. Counts only: never a percentage. */
530
+ export function countBy(selection, field) {
531
+ const counts = new Map();
532
+ const bump = (value) => counts.set(value, (counts.get(value) ?? 0) + 1);
533
+ const multi = MULTI_VALUED[field];
534
+ for (const row of selection.rows) {
535
+ if (multi === undefined)
536
+ bump(row[field]);
537
+ else {
538
+ const values = [...new Set(multi(row))];
539
+ if (values.length === 0)
540
+ bump(null);
541
+ for (const value of values)
542
+ bump(value);
543
+ }
544
+ }
545
+ const groups = [...counts.entries()]
546
+ .map(([value, count]) => ({ value, count }))
547
+ .sort((a, b) => (a.value === null ? 1 : b.value === null ? -1 : compareStrings(a.value, b.value)));
548
+ return { field, multiValued: multi !== undefined, groups };
549
+ }
550
+ /** The snapshot and validation an export names, for a list read from it. */
551
+ export function exportListMeta(envelope) {
552
+ const snapshot = {
553
+ repository: envelope.repository,
554
+ commit: envelope.source.commit,
555
+ uncommitted: envelope.source.uncommitted,
556
+ graphHash: envelope.graphHash,
557
+ generatedAt: envelope.generatedAt,
558
+ };
559
+ if (envelope.source.commitUnavailable !== undefined)
560
+ snapshot.commitUnavailable = envelope.source.commitUnavailable;
561
+ const { level, status, errors, warnings } = envelope.validation;
562
+ return { snapshot, validation: { level, status, errors, warnings } };
563
+ }
564
+ /** spec/list.md §5: a selection as the versioned result, with the snapshot and validation it was made over. */
565
+ export function listOutput(selection, meta, countField = null) {
566
+ return {
567
+ contract: LIST_CONTRACT,
568
+ source: meta.source,
569
+ snapshot: meta.snapshot,
570
+ validation: meta.validation,
571
+ selector: selection.selector,
572
+ counts: selection.counts,
573
+ rows: selection.rows,
574
+ undetermined: selection.undetermined,
575
+ countBy: countField === null ? null : countBy(selection, countField),
576
+ notes: selection.notes,
577
+ };
578
+ }
579
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}