core/predicates/concern.predicate.ts

core/predicates/concern.predicate.ts is a file in GovLab Quality. 24 lines of code and 3 definitions.

import type { Indices, QualityQueryFilter } from "#types/quality.types";
import type { QualityConcern } from "#types/catalog.types";

type MatchCheck = (indices: Indices, concern: QualityConcern, filter: QualityQueryFilter) => boolean;

const MATCH_CHECKS: readonly MatchCheck[] = [
    (_indices, concern, filter): boolean => filter.numeric === undefined || concern.numeric === filter.numeric,
    (_indices, concern, filter): boolean =>
        filter.crossTool === undefined || concern.toolCount > 1 === filter.crossTool,
    (_indices, concern, filter): boolean =>
        filter.hasConfigOptions === undefined || Boolean(concern.configOptions?.length) === filter.hasConfigOptions,
    (_indices, concern, filter): boolean =>
        typeof filter.minValue !== "number" || (typeof concern.value === "number" && concern.value >= filter.minValue),
    (indices, concern, filter): boolean =>
        typeof filter.tool !== "string" || (indices.concernTools.get(concern.id)?.has(filter.tool) ?? false),
    (indices, concern, filter): boolean =>
        typeof filter.ecosystem !== "string" ||
        (indices.concernEcosystems.get(concern.id)?.has(filter.ecosystem) ?? false),
];

export const matchesFilter = function matchesFilter(
    indices: Indices,
    concern: QualityConcern,
    filter: QualityQueryFilter,
): boolean {
    return MATCH_CHECKS.every((check) => check(indices, concern, filter));
};