core/coordinators/catalog.coordinator.ts
core/coordinators/catalog.coordinator.ts is a file in GovLab Docs. 30 lines of code and 8 definitions.
import { barrelPath, pruneStaleBarrels, writeCatalogJson } from "#core/persistence/catalog.persistence";
import { catalogNodes, catalogPayload, concernGroups } from "#core/converters/catalog.converter";
import type { CatalogContext } from "#types/environment.types";
import { buildDocGraph } from "#core/analyzers/graph.analyzer";
import { catalogSummary } from "#configuration/strings/catalog.strings";
import { healMarkdown } from "#core/persistence/document.persistence";
import { print } from "#core/reporters/base.reporter";
import { renderConcernBarrel } from "#core/formatters/catalog.formatter";
export const runCatalog = async function runCatalog(context: CatalogContext, indexDir: string): Promise<void> {
const graph = buildDocGraph(catalogNodes(context));
const superseded = new Set(graph.superseded);
const jsonHealed = await writeCatalogJson(indexDir, catalogPayload(graph, superseded));
const groups = concernGroups(graph);
const barrelContext = { rootPrefix: context.rootPrefix, superseded };
const barrelsHealed = [...groups].filter(([concern, nodes]) =>
healMarkdown(barrelPath(indexDir, concern), renderConcernBarrel(concern, nodes, barrelContext)),
).length;
const pruned = pruneStaleBarrels(indexDir, new Set(groups.keys()));
print(
catalogSummary({
concerns: groups.size,
cycles: graph.cycles.length,
deadEdges: graph.deadEdges.length,
docs: graph.nodes.length,
healed: (jsonHealed ? 1 : 0) + barrelsHealed,
pruned,
superseded: graph.superseded.length,
}),
);
};