core/selectors/exclusions.selector.ts

core/selectors/exclusions.selector.ts is a file in GovLab Quality. 35 lines of code and 10 definitions.

import type { GovlabConfig } from "#types/config.types";

const GLOB_PREFIX = "**/";
const GLOB_SUFFIX = "/**";
const SLASH = "/";

export const masterExclude = (config: GovlabConfig): string[] => config.qualityMaster?.exclude ?? [];

export const withMasterExclude = (config: GovlabConfig, own: string[]): string[] => [
    ...new Set<string>([...masterExclude(config), ...own]),
];

const stripGlob = (pattern: string): string => {
    let inner = pattern;
    while (inner.startsWith(GLOB_PREFIX)) {
        inner = inner.slice(GLOB_PREFIX.length);
    }
    while (inner.endsWith(GLOB_SUFFIX)) {
        inner = inner.slice(0, -GLOB_SUFFIX.length);
    }
    if (inner.startsWith(SLASH)) {
        inner = inner.slice(1);
    }
    if (inner.endsWith(SLASH)) {
        inner = inner.slice(0, -1);
    }
    return inner;
};

export const masterExcludeMarkers = (config: GovlabConfig, tool?: string): string[] => {
    const markers = new Set<string>();
    const own = tool === undefined ? [] : (config.qualityMaster?.toolExclude?.[tool] ?? []);
    for (const pattern of [...masterExclude(config), ...own]) {
        const inner = stripGlob(pattern);
        if (inner.length > 0) {
            markers.add(inner);
        }
    }
    return [...markers];
};