import { readFile, writeFile, mkdir } from "node:fs/promises"; import path from "node:path"; import { segmentProse, proposeParagraphs, compareParagraphs, exportRevisions, renderDesk, } from "./main.ts"; async function main() { const [input, output = "output", reviewFile] = process.argv.slice(2); if (!input || input === "--help") { console.log("node cli.ts INPUT.json [OUTPUT_DIRECTORY] [REVIEW.json]"); return input ? 0 : 2; } const data = JSON.parse(await readFile(input, "utf8")); const review = reviewFile ? JSON.parse(await readFile(reviewFile, "utf8")) : undefined; await mkdir(output, { recursive: true }); const save = async (name: string, value: any) => writeFile( path.join(output, name), typeof value === "string" ? value : JSON.stringify(value, null, 2) + "\n", ); const paragraphs = segmentProse(data.text, data.protectedTerms ?? []), proposals = proposeParagraphs(paragraphs, data.proposals ?? {}), comparisons = compareParagraphs( paragraphs, proposals, data.definitions ?? {}, ), result = exportRevisions(comparisons, review); await save("accepted.md", result.markdown); await save("changes.md", result.changeRecord); await save("revision-decisions.json", result.decisions); await save("comparisons.json", comparisons); await save("report.html", renderDesk(comparisons, result)); console.log( JSON.stringify( { paragraphs: comparisons.length, issues: comparisons.map((c) => ({ id: c.id, issues: c.issues })), unresolved: result.unresolved, output, }, null, 2, ), ); return 0; } main() .then((code) => { process.exitCode = code; }) .catch((error) => { console.error(error.message); process.exitCode = 2; });