core/loaders/dependency.loader.ts

core/loaders/dependency.loader.ts is a file in GovLab Quality. 28 lines of code and 6 definitions.

import type { InstallRecord, InstallRegistry } from "#types/dependency.types";
import { absolutePath } from "@ssot/paths";
import { invalidRegistry } from "#configuration/strings/dependency.strings";
import { readFileSync } from "node:fs";

const isInstallRegistry = function isInstallRegistry(value: unknown): value is InstallRegistry {
    return typeof value === "object" && value !== null && "records" in value && Array.isArray(value.records);
};

export const loadInstallRegistry = function loadInstallRegistry(): InstallRegistry {
    const file = absolutePath("govlab.quality.data.registry");
    const parsed: unknown = JSON.parse(readFileSync(file, "utf8"));
    if (isInstallRegistry(parsed)) {
        return parsed;
    }
    throw new Error(invalidRegistry(file));
};

export const installRecordFor = function installRecordFor(
    tool: string,
    registry: InstallRegistry = loadInstallRegistry(),
): InstallRecord | undefined {
    return registry.records.find((record) => record.tool === tool);
};

export const selectableTools = function selectableTools(
    registry: InstallRegistry = loadInstallRegistry(),
): Set<string> {
    return new Set(
        registry.records.filter((record) => record.disposition === "selectable").map((record) => record.tool),
    );
};