core/validators/exemplar.validator.ts
core/validators/exemplar.validator.ts is a file in GovLab Context. 24 lines of code and 5 definitions.
import type { AlgoGrammar, Contract } from "#types/algorithm.types";
import { CODELESS_EXEMPLAR, IDENTICAL_EXEMPLAR, MISSING_EXEMPLAR } from "#configuration/strings/validation.strings";
import type { ExemplarGap } from "#types/validation.types";
const CODE_SYNTAX = ["(", ")", "{", "}", ";", "="];
const CODE_MEDIUM = "code";
const exemplarGap = function exemplarGap(contract: Contract): ExemplarGap | null {
const { exemplar } = contract;
if (!exemplar || exemplar.before.trim() === "" || exemplar.after.trim() === "") {
return { id: contract.id, reason: MISSING_EXEMPLAR };
}
if (exemplar.before.trim() === exemplar.after.trim()) {
return { id: contract.id, reason: IDENTICAL_EXEMPLAR };
}
if (exemplar.medium === CODE_MEDIUM && !CODE_SYNTAX.some((token) => exemplar.after.includes(token))) {
return { id: contract.id, reason: CODELESS_EXEMPLAR };
}
return null;
};
export const exemplarGapsOf = function exemplarGapsOf(algo: AlgoGrammar): ExemplarGap[] {
return algo
.all()
.filter((entry) => entry.meta !== true)
.flatMap((contract) => exemplarGap(contract) ?? []);
};