core/matchers/architecture.matcher.ts
core/matchers/architecture.matcher.ts is a file in GovLab Context. 26 lines of code and 5 definitions.
import type { Principle, PrincipleFilter } from "#types/architecture.types";
const isWanted = function isWanted(value: string | undefined): value is string {
return typeof value === "string" && value.length > 0;
};
const matchesScalars = function matchesScalars(principle: Principle, filter: PrincipleFilter): boolean {
const checks: [string | undefined, string][] = [
[filter.type, principle.type],
[filter.category, principle.category],
[filter.severity, principle.severity],
];
return checks.every(([value, actual]) => !isWanted(value) || actual === value);
};
const matchesLists = function matchesLists(principle: Principle, filter: PrincipleFilter): boolean {
const checks: [string | undefined, string[]][] = [
[filter.scope, principle.scope],
[filter.enables, principle.enables],
[filter.requires, principle.requires],
[filter.reinforces, principle.reinforces],
[filter.conflictsWith, principle.conflicts_with],
[filter.tensionsWith, principle.tensions_with],
];
return checks.every(([value, list]) => !isWanted(value) || list.includes(value));
};
export const matchesPrinciple = function matchesPrinciple(principle: Principle, filter: PrincipleFilter): boolean {
return matchesScalars(principle, filter) && matchesLists(principle, filter);
};