51654894c8
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
21 lines
1.2 KiB
JavaScript
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');
|
|
}
|