tools/core/runners/member.runner.ts
tools/core/runners/member.runner.ts is a file in Coordination Surface. 51 lines of code and 13 definitions.
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import {
headingTaken,
memberAdded,
memberContended,
regionMissing,
surfaceMissing,
} from "../strings/member.strings.ts";
import { appendSection } from "../formatters/text.formatter.ts";
interface MemberRequest {
readonly target: string;
readonly absolute: string;
readonly heading: string;
readonly body: string;
}
interface MemberOutcome {
readonly message: string;
readonly code: number;
}
const MEMBER_MARKER = "## ";
const REGION_LEAD = "═";
const REGION_WORD = "ROWS";
const regionAt = function regionAt(lines: readonly string[]): number {
for (let index = 0; index < lines.length; index += 1) {
const line = lines[index] ?? "";
if (line.startsWith(REGION_LEAD) && line.includes(REGION_WORD)) {
return index;
}
}
return -1;
};
export const runMember = function runMember(request: MemberRequest): MemberOutcome {
if (!existsSync(request.absolute)) {
return { code: 2, message: surfaceMissing(request.target) };
}
const before = readFileSync(request.absolute, "utf8");
const lines = before.split("\n");
if (regionAt(lines) === -1) {
return { code: 2, message: regionMissing(request.target) };
}
if (before.includes(`${MEMBER_MARKER}${request.heading}`)) {
return { code: 2, message: headingTaken(request.heading, request.target) };
}
const written = appendSection(before, `${MEMBER_MARKER}${request.heading}`, request.body);
const witness = readFileSync(request.absolute, "utf8");
if (witness !== before) {
return { code: 2, message: memberContended(request.target) };
}
writeFileSync(request.absolute, written, "utf8");
return { code: 0, message: memberAdded(request.heading, request.target) };
};