core/formatters/validation.formatter.ts
core/formatters/validation.formatter.ts is a file in GovLab Context. 112 lines of code and 7 definitions.
import {
BLOCK_HEADINGS,
aliasLine,
ambiguousLine,
blockHeading,
checkRefLine,
collisionLine,
deadSeedLine,
declarationLine,
distinctLine,
edgeLabelLine,
expressionLine,
failedItem,
fieldLine,
groundLine,
kindConflictLine,
lensLine,
lexDefectLine,
misspelledLine,
moreItems,
pairLine,
reasonEdgeLine,
reasonedLine,
relationLine,
repairLine,
shapeInstanceLine,
tensionLine,
uncheckedLine,
ungroundedGateLine,
unknownKeyLine,
unreachableLine,
} from "#configuration/strings/validation.report.strings";
import type { ResolutionIssues } from "#types/validation.types";
import { SAMPLE } from "#configuration/constants/invocation.constants";
type Heading = keyof typeof BLOCK_HEADINGS;
const blockOf = function blockOf<T>(items: readonly T[], heading: Heading, format: (item: T) => string): string[] {
return items.length === 0
? []
: [blockHeading(BLOCK_HEADINGS[heading]), ...items.map((item) => failedItem(format(item)))];
};
const sampledBlockOf = function sampledBlockOf<T>(
items: readonly T[],
limit: number,
heading: Heading,
format: (item: T) => string,
): string[] {
const lines = blockOf(items.slice(0, limit), heading, format);
return items.length > limit ? [...lines, moreItems(items.length - limit)] : lines;
};
export const defectLines = function defectLines(issues: ResolutionIssues): string[] {
return [
...issues.lexDefects.map((d) => failedItem(lexDefectLine(d.id, d.reason))),
...issues.crossFaceIdCollisions.map((c) => failedItem(collisionLine(c))),
...issues.kindConsistencyViolations.map((v) =>
failedItem(kindConflictLine(v.id, v.declaredKind, v.opening, v.signalsKind)),
),
];
};
export const worklistLines = function worklistLines(issues: ResolutionIssues, list: boolean): string[] {
const limit = list ? Number.POSITIVE_INFINITY : SAMPLE;
return [
...sampledBlockOf(issues.unreachableAntiPatterns, limit, "unreachableAntiPatterns", unreachableLine),
...sampledBlockOf(issues.exemplarGaps, limit, "exemplarGaps", (g) => reasonedLine(g.id, g.reason)),
...sampledBlockOf(issues.unresolvedTensions, limit, "unresolvedTensions", (t) =>
tensionLine(t.from, t.target, t.reason),
),
...blockOf(issues.tagExampleDefects.slice(0, limit), "tagExampleDefects", (d) => reasonedLine(d.id, d.reason)),
...blockOf(issues.misspelledForces, "misspelledForces", (f) => misspelledLine(f.record, f.token, f.canonical)),
...blockOf(issues.deadResolutionSeeds, "deadResolutionSeeds", (t) => deadSeedLine(t.from, t.target, t.reason)),
...blockOf(issues.ungroundedGates, "ungroundedGates", ungroundedGateLine),
...blockOf(issues.reasonOntologyDefects, "reasonOntologyDefects", (d) => d),
...blockOf(issues.invalidSeverities, "invalidSeverities", (s) => reasonedLine(s.id, s.reason)),
...blockOf(issues.asciiArrows.slice(0, limit), "asciiArrows", (a) => fieldLine(a.collection, a.id, a.field)),
...blockOf(issues.unresolvedExpressions, "unresolvedExpressions", (e) => expressionLine(e.from, e.target)),
...blockOf(issues.undeclaredAdjacentPairs.slice(0, limit), "undeclaredAdjacentPairs", (p) =>
pairLine(p.kind, p.a, p.b, p.basis),
),
...blockOf(issues.invalidRecordDistincts, "invalidRecordDistincts", (d) =>
distinctLine(d.from, d.target, d.reason),
),
...blockOf(issues.aliasDefects, "aliasDefects", (d) => aliasLine(d.ref, d.alias, d.reason)),
...blockOf(issues.repairDefects, "repairDefects", (d) => repairLine(d.ref, d.field, d.target, d.reason)),
...blockOf(issues.emptyRequiredFields.slice(0, limit), "emptyRequiredFields", (f) =>
fieldLine(f.collection, f.id, f.field),
),
...blockOf(issues.unresolvedShapeInstances, "unresolvedShapeInstances", (i) =>
shapeInstanceLine(i.shape, i.instance),
),
...blockOf(issues.ambiguousReasonRefs, "ambiguousReasonRefs", (r) => ambiguousLine(r.from, r.target, r.kinds)),
...blockOf(issues.idShapedEdgeLabels, "idShapedEdgeLabels", (l) => edgeLabelLine(l.from, l.label)),
...blockOf(issues.unresolvedCheckRefs, "unresolvedCheckRefs", (r) =>
checkRefLine(r.collection, r.id, r.field, r.ref),
),
...blockOf(issues.checkDeclarationDefects, "checkDeclarationDefects", (d) =>
declarationLine(d.check, d.field, d.ref, d.resolved),
),
...blockOf(issues.secondCheckHomes, "secondCheckHomes", (h) => fieldLine(h.collection, h.id, h.home)),
...blockOf(issues.uncoveredCollections, "uncoveredCollections", (name) => name),
...blockOf(issues.uncheckedRecords.slice(0, limit), "uncheckedRecords", (u) =>
uncheckedLine(u.collection, u.id, u.missing),
),
...blockOf(issues.unknownRecordKeys, "unknownRecordKeys", (k) =>
unknownKeyLine(k.collection, k.record, k.key, k.reason),
),
...blockOf(issues.unresolvedReasonEdges, "unresolvedReasonEdges", reasonEdgeLine),
...blockOf(issues.unresolvedLensDetectors, "unresolvedLensDetectors", (d) => lensLine(d.lens, d.target)),
...blockOf(issues.unresolvedGrammarGrounds, "unresolvedGrammarGrounds", (g) => groundLine(g.from, g.target)),
...blockOf(issues.relationKindViolations, "relationKindViolations", (v) =>
relationLine(v.from, v.relation, v.target, v.kind, v.allowed),
),
];
};