hedgedoc/frontend/src/components/editor-page/document-bar/revisions/invert-unified-patch.ts
Tilman Vatteroth 762a0a850e
fix: Move content into to frontend directory
Doing this BEFORE the merge prevents a lot of merge conflicts.

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
2022-11-20 19:48:40 +01:00

47 lines
1.2 KiB
TypeScript

/*
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import type { Hunk, ParsedDiff } from 'diff'
/**
* Inverts a given unified patch.
* A patch that e.g. adds a line, will remove it then.
*
* @param parsedDiff The patch to invert
* @return The inverted patch
*/
export const invertUnifiedPatch = (parsedDiff: ParsedDiff): ParsedDiff => {
const { oldFileName, newFileName, oldHeader, newHeader, hunks, index } = parsedDiff
const newHunks: Hunk[] = hunks.map((hunk) => {
const { oldLines, oldStart, newLines, newStart, lines, linedelimiters } = hunk
return {
oldLines: newLines,
oldStart: newStart,
newLines: oldLines,
newStart: oldStart,
linedelimiters: linedelimiters,
lines: lines.map((line) => {
if (line.startsWith('-')) {
return `+${line.slice(1)}`
} else if (line.startsWith('+')) {
return `-${line.slice(1)}`
} else {
return line
}
})
}
})
return {
hunks: newHunks,
index: index,
newFileName: oldFileName,
newHeader: oldHeader,
oldFileName: newFileName,
oldHeader: newHeader
}
}