#!/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'); }