shared/matchers/pattern.matcher.ts

shared/matchers/pattern.matcher.ts is a file in GovLab Extension Host. 24 lines of code and 7 definitions.

const WILDCARD = "*";

export const matchesPattern = function matchesPattern(pattern: string, name: string): boolean {
    const parts = pattern.split(WILDCARD);
    if (parts.length === 1) {
        return pattern === name;
    }
    const first = parts[0] ?? "";
    const last = parts.at(-1) ?? "";
    if (!name.startsWith(first) || !name.endsWith(last)) {
        return false;
    }
    if (name.length < first.length + last.length) {
        return false;
    }
    let cursor = first.length;
    for (const middle of parts.slice(1, -1)) {
        const at = name.indexOf(middle, cursor);
        if (at === -1 || at + middle.length > name.length - last.length) {
            return false;
        }
        cursor = at + middle.length;
    }
    return true;
};