import { parsePatchFiles } from "@pierre/diffs/utils/parsePatchFiles"; export interface TurnDiffFileSummary { readonly path: string; readonly additions: number; readonly deletions: number;} export function parseTurnDiffFilesFromUnifiedDiff( diff: string,): ReadonlyArray<TurnDiffFileSummary> { const normalized = diff.replace(/\r\n/g, "\n").trim(); if (normalized.length === 0) { return []; } const parsedPatches = parsePatchFiles(normalized); const files = parsedPatches.flatMap((patch) => patch.files.map((file) => ({ path: file.name, additions: file.hunks.reduce((total, hunk) => total + hunk.additionLines, 0), deletions: file.hunks.reduce((total, hunk) => total + hunk.deletionLines, 0), })), ); return files.toSorted((left, right) => left.path.localeCompare(right.path));}
import { parsePatchFiles } from "@pierre/diffs/utils/parsePatchFiles";
export interface TurnDiffFileSummary {
readonly path: string;
readonly additions: number;
readonly deletions: number;
}
export function parseTurnDiffFilesFromUnifiedDiff(
diff: string,
): ReadonlyArray<TurnDiffFileSummary> {
const normalized = diff.replace(/\r\n/g, "\n").trim();
if (normalized.length === 0) {
return [];
}
const parsedPatches = parsePatchFiles(normalized);
const files = parsedPatches.flatMap((patch) =>
patch.files.map((file) => ({
path: file.name,
additions: file.hunks.reduce((total, hunk) => total + hunk.additionLines, 0),
deletions: file.hunks.reduce((total, hunk) => total + hunk.deletionLines, 0),
})),
);
return files.toSorted((left, right) => left.path.localeCompare(right.path));
}