core/persistence/catalog.persistence.ts
core/persistence/catalog.persistence.ts is a file in GovLab Docs. 38 lines of code and 9 definitions.
import { BARREL_SUFFIX, CATALOG_FILE } from "#configuration/constants/document.constants";
import { ROOT, absolutePath } from "@ssot/paths";
import { mkdirSync, rmSync } from "node:fs";
import type { CatalogPayload } from "#types/index.types";
import { govlabPrettierConfig } from "@govlab/quality/config";
import { healFile } from "#core/persistence/document.persistence";
import { join } from "node:path";
import prettier from "prettier";
import { readDirSafe } from "#core/loaders/base.loader";
export const indexDirectory = function indexDirectory(): string {
const dir = absolutePath("docArch.index");
mkdirSync(dir, { recursive: true });
return dir;
};
export const writeCatalogJson = async function writeCatalogJson(
indexDir: string,
payload: CatalogPayload,
): Promise<boolean> {
const target = join(indexDir, CATALOG_FILE);
const base = await govlabPrettierConfig(ROOT);
const formatted = await prettier.format(JSON.stringify(payload), { ...base, filepath: target });
return healFile(target, formatted);
};
export const barrelPath = function barrelPath(indexDir: string, concern: string): string {
return join(indexDir, `${concern}${BARREL_SUFFIX}`);
};
export const pruneStaleBarrels = function pruneStaleBarrels(indexDir: string, live: ReadonlySet<string>): number {
const stale = readDirSafe(indexDir).filter(
(entry) =>
entry.isFile() &&
entry.name.endsWith(BARREL_SUFFIX) &&
!live.has(entry.name.slice(0, -BARREL_SUFFIX.length)),
);
for (const entry of stale) {
rmSync(join(indexDir, entry.name));
}
return stale.length;
};