core/loaders/concept.loader.ts

core/loaders/concept.loader.ts is a file in GovLab Quality. 32 lines of code and 7 definitions.

import { isRecord, stringArrayField, stringField } from "#core/selectors/record.selector";
import type { ConceptDefinition } from "#types/concept.types";
import { absolutePath } from "@ssot/paths";
import { jsonRecord } from "#core/parsers/record.parser";
import { readFileSync } from "node:fs";

const CONCEPT_FILE = "concept.data.json";
const EXEMPLAR_FILE = "exemplar.data.json";

const readData = function readData(file: string): unknown {
    return JSON.parse(readFileSync(absolutePath("govlab.quality.data", file), "utf8"));
};

const toDefinition = function toDefinition(value: unknown): ConceptDefinition[] {
    if (!isRecord(value)) {
        return [];
    }
    return [
        {
            cwe: stringArrayField(value, "cwe"),
            dimension: stringField(value, "dimension"),
            exclude: stringArrayField(value, "exclude"),
            id: stringField(value, "id"),
            phrases: stringArrayField(value, "phrases"),
            words: stringArrayField(value, "words"),
        },
    ];
};

export const loadConceptDefinitions = function loadConceptDefinitions(): ConceptDefinition[] {
    const raw = readData(CONCEPT_FILE);
    return Array.isArray(raw) ? raw.flatMap(toDefinition) : [];
};

export const loadExemplars = function loadExemplars(): Record<string, unknown> {
    return jsonRecord(readFileSync(absolutePath("govlab.quality.data", EXEMPLAR_FILE), "utf8"));
};