Files
brain/tools/version-diff.mjs
2026-06-16 15:31:31 +03:00

21 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
/** version-diff — чистый построчный diff двух текстов (SP2a). Без зависимостей, fail-safe:
* нестроковый/пустой вход трактуется как пустой текст, никогда не кидает. */
/** Построчный diff old→new. Общий префикс и суффикс опускаются; середина выводится как
* удалённые строки с префиксом '- ' и добавленные с префиксом '+ '. Возвращает текстовый блок
* (пустая строка, если изменений нет). */
export function diffLines(oldText, newText) {
const a = String(oldText == null ? '' : oldText).split('\n');
const b = String(newText == null ? '' : newText).split('\n');
let start = 0;
while (start < a.length && start < b.length && a[start] === b[start]) start++;
let endA = a.length - 1;
let endB = b.length - 1;
while (endA >= start && endB >= start && a[endA] === b[endB]) { endA--; endB--; }
const lines = [];
for (let i = start; i <= endA; i++) lines.push(`- ${a[i]}`);
for (let i = start; i <= endB; i++) lines.push(`+ ${b[i]}`);
return lines.join('\n');
}