core/validators/coordination.validator.ts

core/validators/coordination.validator.ts is a file in Bane's Lab Content. 39 lines of code and 9 definitions.

import {
    ENTRIES_BANNER,
    ENTRY_HEADING,
    INDEX_ROW,
    INVOKED_PREFIX,
    SCHEDULE_ROW_FIELD,
} from "#configuration/constants/coordination.constants";

export const hostTermsIn = function hostTermsIn(text: string, terms: readonly string[]): string[] {
    return terms.filter((term) => text.includes(term));
};

const rowLetter = function rowLetter(line: string): string {
    const [, cell] = line.split("|");
    return (cell ?? "").trim();
};

const isSeatLetter = function isSeatLetter(letter: string): boolean {
    const first = letter.charAt(0);
    return first >= "A" && first <= "Z" && !letter.startsWith(INVOKED_PREFIX);
};

export const boundSeats = function boundSeats(index: string): string[] {
    return index
        .split("\n")
        .filter((line) => line.startsWith(INDEX_ROW))
        .map(rowLetter)
        .filter((letter) => letter !== "letter" && isSeatLetter(letter));
};

export const filedEntries = function filedEntries(accumulator: string): string[] {
    const at = accumulator.indexOf(ENTRIES_BANNER);
    if (at === -1) {
        return [];
    }
    return accumulator
        .slice(at)
        .split("\n")
        .filter((line) => line.startsWith(ENTRY_HEADING))
        .map((line) => line.slice(ENTRY_HEADING.length).trim());
};

export const schedulesRows = function schedulesRows(agenda: string): boolean {
    return agenda.includes(SCHEDULE_ROW_FIELD);
};