core/validators/binding.validator.ts

core/validators/binding.validator.ts is a file in GovLab Quality. 24 lines of code and 3 definitions.

import type { BindingFinding, RuleSource } from "#types/binding.types";
import { ALGO_FACE } from "@govlab/constants";
import { canonicalOf } from "#core/parsers/binding.parser";

export const bindingFindings = function bindingFindings(
    rules: readonly RuleSource[],
    contracts: ReadonlySet<string>,
    isConcept: (concept: string) => boolean,
): BindingFinding[] {
    return rules.flatMap((rule): BindingFinding[] => {
        const findings: BindingFinding[] = [];
        if (!contracts.has(rule.id)) {
            findings.push({ detail: `${ALGO_FACE}:${rule.id}`, file: rule.file, id: rule.id, reason: "no-contract" });
        }
        const canonical = canonicalOf(rule.text);
        if (canonical === null || canonical.length === 0) {
            findings.push({ detail: "", file: rule.file, id: rule.id, reason: "no-canonical" });
            return findings;
        }
        for (const concept of canonical.filter((entry) => !isConcept(entry))) {
            findings.push({ detail: concept, file: rule.file, id: rule.id, reason: "unknown-concept" });
        }
        return findings;
    });
};