modern-diff
Compare two data structures and create patches with some additional info. Apply patches to objects. Reverting patches.
Features:
- Can produce RFC 6902 style patches or compact patches
- Supports immutable-js or native-data structures via adapters
- Fastest lcs algorithm for arrays
- Can revert patches
- Can patch objects
- Extensible via adapters
- Tests
- Flow types
Limitations: can produce only add, replace, remove, test patches.
Diff immutable with rfc codec
// diff-rfc-immutable.jsImmutableAdapterImmutable = Immutable const diff = /*[ { op: 'test', path: '/a', value: 1 }, { op: 'remove', path: '/a'}, { op: 'test', path: '/b', value: 2 }, { op: 'replace', path: '/b', value: 22 }, { op: 'add', path: '/d', value: 4 }]*/
Diff native with compact codec
const diffCompact = /*[ ['-', ['a'], 1], ['r', ['b'], 2, 22], ['+', ['d'], 4]]*/
Inverting patches
CompactCodec/*[ [ '-', [ 'd' ], 4 ], [ 'r', [ 'b' ], 22, 2 ], [ '+', [ 'a' ], 1 ]]*/ Rfc9602Codec /*[ { op: 'test', path: '/d', value: 4 }, { op: 'remove', path: '/d' }, { op: 'test', path: '/b', value: 22 }, { op: 'replace', path: '/b', value: 2 }, { op: 'add', path: '/a', value: 1 }]*/
Patch immutable with rfc codec
ImmutableAdapterImmutable = Immutable const patch = /* Map {b: 22, c: 3, d: 4}*/