tools/core/writers/board.writer.ts

tools/core/writers/board.writer.ts is a file in Coordination Surface. 27 lines of code and 6 definitions.

import type { CompressOutcome, SpanConflict, Witnessed } from "../types/board.types.ts";
import { readFileSync, writeFileSync } from "node:fs";
import { compareSpans } from "../resolvers/board.resolver.ts";
import { recordContended } from "../strings/board.strings.ts";

export const refuse = function refuse(message: string, code: number): CompressOutcome {
    return { code, excised: [], message, write: null };
};

const contended = function contended(target: string, agent: string, conflict: SpanConflict): CompressOutcome {
    const changes = [
        ...conflict.added.map((line) => `  + ${line.trim().slice(0, 110)}\n`),
        ...conflict.removed.map((line) => `  - ${line.trim().slice(0, 110)}\n`),
    ];

    return { code: 1, excised: [], message: recordContended(target, agent, changes), write: null };
};

export const landWitnessed = function landWitnessed(
    witnessed: Witnessed,
    landed: CompressOutcome,
    retry: () => CompressOutcome,
): CompressOutcome {
    const witness = readFileSync(witnessed.absolute, "utf8");
    if (witness === witnessed.before) {
        writeFileSync(witnessed.absolute, witnessed.written, "utf8");
        return landed;
    }

    const conflict = compareSpans(witnessed.before, witness, witnessed.agent);
    return conflict.overlapping ? contended(witnessed.target, witnessed.agent, conflict) : retry();
};