# core/validators/coordination.validator.ts

> 39 lines of code and 9 definitions.

Tree: Build tree
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/build#file-build-core-validators-coordination-validator-ts
Source text: https://banes-lab.com/assets/sources/source.170edc2a8adee7914bb80c76290d63e501a506ee855a793f4700457bd1ce4191.generated.txt

## Definitions

- `isSeatLetter` (lexical_declaration, line 18)
- `boundSeats` (lexical_declaration, line 23, exported)
- `hostTermsIn` (lexical_declaration, line 9, exported)
- `rowLetter` (lexical_declaration, line 13)
- `[, cell]` (lexical_declaration, line 14)
- `first` (lexical_declaration, line 19)
- `filedEntries` (lexical_declaration, line 31, exported)
- `at` (lexical_declaration, line 32, exported)
- `schedulesRows` (lexical_declaration, line 43, exported)

## Source

```typescript
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);
};
```
