@sanity/diff-match-patch
A TypeScript fork of the JavaScript version of google/diff-match-patch, that includes a few long-standing pull requests, fixing certain bugs and with an API more familiar to the JavaScript ecosystem.
What is it?
The Diff Match and Patch libraries offer robust algorithms to perform the
operations required for synchronizing plain text.
- Diff:
- Compare two blocks of plain text and efficiently return a list of differences.
- Diff Demo
- Match:
- Given a search string, find its best fuzzy match in a block of plain text. Weighted for both accuracy and location.
- Match Demo
- Patch:
- Apply a list of patches onto plain text. Use best-effort to apply patch even when the underlying text doesn't match.
- Patch Demo
Originally built in 2006 to power Google Docs, this library is now available in C++, C#, Dart, Java, JavaScript, Lua, Objective C, and Python.
API
Creating and applying patches
import {
makePatches,
applyPatches,
stringifyPatches,
} from '@sanity/diff-match-patch'
const patches = makePatches('from this', 'to this')
const patch = stringifyPatches(patches)
const newValue = applyPatches('from this', patches)
Creating diffs
import { makeDiff } from '@sanity/diff-match-patch'
const diff = makeDiff('from this', 'to this')
Matching text
import { match } from '@sanity/diff-match-patch'
const position = match('some text to match against', 'match', 9)
Algorithms
This library implements Myer's diff algorithm which is generally considered to be the best general-purpose diff. A layer of pre-diff speedups and post-diff cleanups surround the diff algorithm, improving both performance and output quality.
This library also implements a Bitap matching algorithm at the heart of a flexible matching and patching strategy.
Significant changes
This fork has a few modifications to the original:
- API has changed - individual methods are exposed as importable functions instead of being attached to a
DiffMatchPatch
prototype - Includes a fix for surrogate pair handling, by Dennis Snell
- Uses modern tooling for code compilation and testing