core/validators/algorithm.reference.validator.ts
core/validators/algorithm.reference.validator.ts is a file in GovLab Context. 49 lines of code and 7 definitions.
import type { AlgoContractView, GrammarGroundingFaces } from "#types/reference.types";
import {
DOMAIN_CONCEPT_CATEGORIES,
GATE_SUFFIX,
REASON_PREFIX,
REF_SEPARATOR,
} from "#configuration/constants/reference.constants";
import { bareReasonId, kindRefResolves, kindsHolding } from "#core/resolvers/reference.resolver";
export const ungroundedGatesOf = function ungroundedGatesOf(faces: {
algo: { all: () => AlgoContractView[] };
}): string[] {
return faces.algo
.all()
.filter(
(contract) =>
contract.id.endsWith(GATE_SUFFIX) &&
!DOMAIN_CONCEPT_CATEGORIES.has(contract.domain) &&
(contract.grounds ?? []).length === 0,
)
.map((contract) => contract.id)
.toSorted((a, b) => a.localeCompare(b));
};
export const unresolvedGrammarGroundsOf = function unresolvedGrammarGroundsOf(
faces: GrammarGroundingFaces,
): { from: string; target: string }[] {
const kindMembers = faces.reason.kindMembers();
return faces.algo.all().flatMap((contract) =>
(contract.grounds ?? [])
.filter((target) => {
const id = bareReasonId(target);
return id.includes(REF_SEPARATOR)
? !kindRefResolves(kindMembers, `${REASON_PREFIX}${id}`)
: faces.reason.resolve(id) === null;
})
.map((target) => ({ from: contract.id, target })),
);
};
export const ambiguousReasonRefsOf = function ambiguousReasonRefsOf(
faces: GrammarGroundingFaces,
): { from: string; kinds: string[]; target: string }[] {
const kindMembers = faces.reason.kindMembers();
return faces.algo.all().flatMap((contract) =>
(contract.grounds ?? []).flatMap((target) => {
const bare = bareReasonId(target);
const kinds = bare.includes(REF_SEPARATOR) ? [] : kindsHolding(kindMembers, bare);
return kinds.length > 1 ? [{ from: contract.id, kinds, target }] : [];
}),
);
};