import type { CanonicalData, CanonicalSettingRecord, ConflictInstance, MappingRow, OwnershipSurface, } from "#types/canon.types"; import { absolutePath } from "@ssot/paths"; import { jsonRecord } from "#core/parsers/record.parser"; import { readFileSync } from "node:fs"; const SETTINGS_FILE = "canonical-settings.generated.json"; const ROWS_FILE = "mapping-rows.generated.json"; const VALUES_FILE = "canon.data.json"; const SURFACES_FILE = "surface.data.json"; const readGenerated = function readGenerated(file: string): Record { return jsonRecord(readFileSync(absolutePath("govlab.quality.generated", file), "utf8")); }; const readData = function readData(file: string): Record { return jsonRecord(readFileSync(absolutePath("govlab.quality.data", file), "utf8")); }; const isListOf = function isListOf(value: unknown): value is T[] { return Array.isArray(value); }; const listOf = function listOf(value: unknown): T[] { return isListOf(value) ? value : []; }; export const loadCanonicalData = function loadCanonicalData(): CanonicalData { const compiled = readGenerated(SETTINGS_FILE); const rows = readGenerated(ROWS_FILE); const values = readData(VALUES_FILE); const surfaces = readData(SURFACES_FILE); return { conflicts: listOf(surfaces["conflicts"]), ownership: listOf(surfaces["surfaces"]), rows: [...listOf(rows["rows"]), ...listOf(values["rows"])], settings: [ ...listOf(compiled["settings"]), ...listOf(values["settings"]), ], }; };