core/loaders/canon.loader.ts
core/loaders/canon.loader.ts is a file in GovLab Quality. 41 lines of code and 13 definitions.
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<string, unknown> {
return jsonRecord(readFileSync(absolutePath("govlab.quality.generated", file), "utf8"));
};
const readData = function readData(file: string): Record<string, unknown> {
return jsonRecord(readFileSync(absolutePath("govlab.quality.data", file), "utf8"));
};
const isListOf = function isListOf<T>(value: unknown): value is T[] {
return Array.isArray(value);
};
const listOf = function listOf<T>(value: unknown): T[] {
return isListOf<T>(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<ConflictInstance>(surfaces["conflicts"]),
ownership: listOf<OwnershipSurface>(surfaces["surfaces"]),
rows: [...listOf<MappingRow>(rows["rows"]), ...listOf<MappingRow>(values["rows"])],
settings: [
...listOf<CanonicalSettingRecord>(compiled["settings"]),
...listOf<CanonicalSettingRecord>(values["settings"]),
],
};
};