core/validators/dependency.validator.ts

core/validators/dependency.validator.ts is a file in GovLab Quality. 23 lines of code and 7 definitions.

import { EMPTY_REQUEST, unknownEcosystem } from "#configuration/strings/dependency.strings";
import { ECOSYSTEM_SHORTCODES } from "#configuration/constants/ecosystem.constants";
import type { InstallRequest } from "#types/dependency.types";
import { loadInstallRegistry } from "#core/loaders/dependency.loader";

const knownEcosystems = function knownEcosystems(): Set<string> {
    return new Set(loadInstallRegistry().records.map((record) => record.ecosystem));
};

const canonicalEcosystem = function canonicalEcosystem(known: Set<string>, name: string): string {
    const ecosystem = ECOSYSTEM_SHORTCODES[name] ?? name;
    if (!known.has(ecosystem)) {
        const listed = [...known].sort((a, b) => a.localeCompare(b)).join(", ");
        throw new Error(unknownEcosystem(name, listed, Object.keys(ECOSYSTEM_SHORTCODES).join(", ")));
    }
    return ecosystem;
};

export const validateInstallRequest = function validateInstallRequest(request: InstallRequest): InstallRequest {
    const known = knownEcosystems();
    const ecosystems = [...new Set(request.ecosystems.map((name) => canonicalEcosystem(known, name)))];
    if (ecosystems.length === 0 && !request.auto) {
        throw new Error(EMPTY_REQUEST);
    }
    return { ...request, ecosystems };
};