core/loaders/algorithm.loader.ts

core/loaders/algorithm.loader.ts is a file in GovLab Context. 24 lines of code and 4 definitions.

import type { Contract, ContractCategory, SymbolEntry } from "#types/algorithm.types";
import { foldCategories, loadCategories, readJsonFile } from "#core/loaders/ontology.loader";
import type { ReadAudit } from "#core/observers/record.observer";
import { SYMBOLS_KEY } from "#configuration/constants/algorithm.constants";
import { absolutePath } from "@ssot/paths";
import { isObject } from "#core/predicates/record.predicate";
import { normalizeContract } from "#core/normalizers/algorithm.normalizer";

export const loadContracts = function loadContracts(audit: ReadAudit, data?: ContractCategory[]): Contract[] {
    return data
        ? foldCategories(data, normalizeContract, audit)
        : loadCategories(absolutePath("govlab.context.algorithms"), normalizeContract, audit);
};

const asSymbolEntries = function asSymbolEntries(value: unknown): SymbolEntry[] {
    if (!isObject(value) || !Array.isArray(value[SYMBOLS_KEY])) {
        return [];
    }
    return value[SYMBOLS_KEY].filter((entry): entry is SymbolEntry => isObject(entry));
};

export const symbolsPath = function symbolsPath(): string {
    return absolutePath("govlab.context.symbols");
};

export const loadBundledSymbols = function loadBundledSymbols(): SymbolEntry[] {
    return asSymbolEntries(readJsonFile(symbolsPath()));
};