core/formatters/ontology.formatter.ts
core/formatters/ontology.formatter.ts is a file in GovLab Context. 130 lines of code and 11 definitions.
import {
COVERAGE_HEADING,
NATIVE_HEADING,
NATIVE_ROWS,
REPORT_HEADING,
SUMMARY_ROWS,
archEdgesRow,
coverageCell,
coverageRow,
lexiconTermsRow,
nativeBacklogRow,
nativeRow,
nativeSubtotalRow,
pagBnfRow,
pagRecognitionRow,
pagTemplateRow,
summaryRow,
symbolStalenessRow,
totalRow,
unreachedRow,
} from "#configuration/strings/ontology.report.strings";
import type { CheckGaps } from "#types/check.types";
import type { ResolutionIssues } from "#types/validation.types";
type SummaryKey = keyof typeof SUMMARY_ROWS;
const HEAD_KEYS: readonly SummaryKey[] = [
"duplicateIds",
"crossFaceIdCollisions",
"lexDefects",
"kindConsistencyViolations",
"tagExampleDefects",
];
const TAIL_KEYS: readonly SummaryKey[] = [
"relationKindViolations",
"unresolvedAlgoComposes",
"danglingPrincipleRefs",
"unknownForces",
"misspelledForces",
"exemplarGaps",
"unreachableAntiPatterns",
"unresolvedTensions",
"deadResolutionSeeds",
"unresolvedReasonEdges",
"unresolvedGrammarGrounds",
"unresolvedLensDetectors",
"ungroundedPagConstructs",
"unresolvedPagGrounds",
"doctypeModelAxis",
"ungroundedGates",
"reasonOntologyDefects",
"unknownRecordKeys",
"emptyRequiredFields",
"invalidSeverities",
"asciiArrows",
"unresolvedExpressions",
"undeclaredAdjacentPairs",
"invalidRecordDistincts",
"aliasDefects",
"repairDefects",
"unresolvedShapeInstances",
"ambiguousReasonRefs",
"idShapedEdgeLabels",
"uncheckedRecords",
"unresolvedCheckRefs",
"checkDeclarationDefects",
"secondCheckHomes",
"uncoveredCollections",
];
const rowsOf = function rowsOf(issues: ResolutionIssues, keys: readonly SummaryKey[]): string[] {
return keys.map((key) => {
const [label, note] = SUMMARY_ROWS[key];
return summaryRow(label, issues[key].length, note);
});
};
export const summaryLines = function summaryLines(issues: ResolutionIssues, terms: number, targets: number): string[] {
return [
REPORT_HEADING,
lexiconTermsRow(terms),
...rowsOf(issues, HEAD_KEYS),
pagTemplateRow([
issues.duplicateKeywordIds.length,
issues.danglingTemplateSlots.length,
issues.docTypesWithoutVerb.length,
issues.unknownTemplateTypes.length,
]),
pagRecognitionRow(issues.unrecognizedDocumentTypes.length, issues.unrecognizedDocumentVerbs.length),
pagBnfRow(issues.danglingNonterminals.length, issues.unusedTerminals.length),
archEdgesRow(issues.unresolvedArchEdges.length, targets),
...rowsOf(issues, TAIL_KEYS),
];
};
export const coverageLines = function coverageLines(gaps: CheckGaps): string[] {
return [
COVERAGE_HEADING,
...gaps.collections.map((coverage) =>
coverageRow(
coverage.collection,
coverage.records,
coverage.questions.map((q) => coverageCell(q.question, q.answered, q.declaredAbsent)).join(", "),
),
),
unreachedRow(gaps.unreachedByPropagation.length),
];
};
const row = function row(entry: readonly [string, string], count: number): string {
return nativeRow(entry[0], count, entry[1]);
};
export const nativeLines = function nativeLines(issues: ResolutionIssues): string[] {
const { integrity, reasonNative } = issues;
const coherence =
reasonNative.invalidStages.length +
reasonNative.invalidAxes.length +
reasonNative.invalidMathTypes.length +
reasonNative.stageAxisMismatches.length +
reasonNative.yieldsShapeMismatches.length +
reasonNative.derivationMapDefects.length;
return [
NATIVE_HEADING,
nativeBacklogRow(reasonNative.untypedRecords.length, reasonNative.unstagedProcessRecords.length),
row(NATIVE_ROWS.coherence, coherence),
row(NATIVE_ROWS.duplicateLoops, reasonNative.duplicateLoopGroundings.length),
row(NATIVE_ROWS.metaLoops, reasonNative.metaLoopGroundings.length),
row(NATIVE_ROWS.metaKernels, reasonNative.metaKernelNaming.length),
row(NATIVE_ROWS.divergent, integrity.intraGrammarDivergentSymbols.length),
symbolStalenessRow(integrity.symbolIndexStale, integrity.indexedSymbolCount, integrity.liveSymbolCount),
nativeSubtotalRow(reasonNative.subtotal + integrity.subtotal),
row(NATIVE_ROWS.crossCatalog, integrity.crossCatalogRedundancy.length),
row(NATIVE_ROWS.invalidDistincts, integrity.invalidDistinctDeclarations.length),
totalRow(issues.total),
];
};