@sanity/diff-match-patch
Version:
Robust diff, match and patch algorithms to perform operations required for synchronizing plain text
34 lines (31 loc) • 968 B
text/typescript
import {type Diff, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT} from './diff.js'
/**
* Crush the diff into an encoded string which describes the operations
* required to transform text1 into text2.
* E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.
* Operations are tab-separated. Inserted text is escaped using %xx notation.
*
* @param diffs - Array of diff tuples.
* @returns Delta text.
* @internal
*/
export function toDelta(diffs: Diff[]): string {
const text: string[] = []
for (let x = 0; x < diffs.length; x++) {
const [diffType, diff] = diffs[x]
switch (diffType) {
case DIFF_INSERT:
text.push(`+${encodeURI(diff)}`)
break
case DIFF_DELETE:
text.push(`-${diff.length}`)
break
case DIFF_EQUAL:
text.push(`=${diff.length}`)
break
default:
throw new Error(`Unknown diff type: ${diffType}`)
}
}
return text.join('\t').replace(/%20/g, ' ')
}