tools/core/transformers/venue.transformer.ts
tools/core/transformers/venue.transformer.ts is a file in Coordination Surface. 46 lines of code and 16 definitions.
import { INHERITED_BANNER, LIST_MARKER } from "../constants/blocking.constants.ts";
import { fencedFlags } from "../predicates/fence.predicate.ts";
export const SUCCESSOR_FIELD = "SUCCESSOR:";
const SECTION_HEADING = "## ";
const SUCCESSOR_WORD = "SUCCESSOR";
const successorSectionClose = function successorSectionClose(
lines: readonly string[],
fenced: readonly boolean[],
): number {
const opens = lines.findIndex((line) => {
const trimmed = line.trim();
return trimmed.startsWith(SECTION_HEADING) && trimmed.includes(SUCCESSOR_WORD);
});
if (opens === -1) {
return -1;
}
const ends = lines.findIndex((line, index) => {
const trimmed = line.trim();
return index > opens && trimmed.startsWith(SECTION_HEADING) && !trimmed.includes(SUCCESSOR_WORD);
});
const end = ends === -1 ? lines.length : ends;
return fenced.findLastIndex((flag, index) => flag && index > opens && index < end);
};
export const successorWritten = function successorWritten(before: string, declaration: string): string | null {
const fenced = fencedFlags(before);
const lines = before.split("\n");
const at = lines.findIndex((line, index) => fenced[index] !== true && line.trim().startsWith(SUCCESSOR_FIELD));
if (at !== -1) {
return [...lines.slice(0, at), declaration, ...lines.slice(at + 1)].join("\n");
}
const close = successorSectionClose(lines, fenced);
return close === -1 ? null : [...lines.slice(0, close + 1), "", declaration, ...lines.slice(close + 1)].join("\n");
};
export const lastInheritedItem = function lastInheritedItem(lines: readonly string[]): number {
const trimmed = lines.map((line) => line.trim());
const opens = trimmed.findIndex((line) => line.startsWith(INHERITED_BANNER));
const first = trimmed.findIndex((line, index) => index > opens && line.startsWith(LIST_MARKER));
if (opens === -1 || first === -1) {
return -1;
}
const closes = trimmed.findIndex(
(line, index) => index > first && line.startsWith("═") && !line.startsWith(INHERITED_BANNER),
);
const end = closes === -1 ? trimmed.length : closes;
return trimmed.findLastIndex((line, index) => index >= first && index < end && line.startsWith(LIST_MARKER));
};