feat(round-memory): version-diff + round-memory-store (SP2a)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
#!/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');
|
||||
}
|
||||
Reference in New Issue
Block a user