Tiny Merge Patch
An implementation of the JSON Merge Patch
RFC 7396: a standard format used to
describe modifications to JSON documents.
This library complies with the functional programming style: it does not mutate
the original target, but recycles what it can.
tiny-merge-patch
passes all RFC 7396 tests.
Install
Install the current version (and save it as a dependency):
npm
npm install tiny-merge-patch --save
Import
CommonJs with node
const mergePatch = require('tiny-merge-patch').apply;
ES modules in the browser
import mergePatch from 'https://unpkg.com/tiny-merge-patch/esm/index.js'
Usage
const doc = {
a: 'b',
c: { d: 'e', f: 'g' },
h: { i: 0 }
};
const patch = {
a: 'z',
c: { f: null }
};
const patchedDoc = mergePatch(doc, patch);
assert.deepEqual(patchedDoc, {
a: 'z',
c: { d: 'e' },
h: { i: 0 },
});
assert(patchedDoc !== doc);
assert(patchedDoc.c !== doc.c);
assert(patchedDoc.h === doc.h);
Alternatives
All are in-place.
To avoid mutations of the original object, one can deep-clone beforehand, but it can be expensive.
At the contrary, tiny-merge-patch
does not alter any of its arguments—but
recycles what it can.
Recycling also allows efficient strict identity-based memoization
(used by React's PureComponent for example).
All of the above libraries also embed additional functionalities, such as patch generation from two objects or merge of patches.
tiny-merge-patch
only focuses on the IETF standard and on patch applications.
(None of the above libraries are particularly big.
Still, tiny-merge-patch
is smaller if you only need to apply patches.
It is also worth mentioning that unlike
JSON patches, there is no way to
implement merge of merge patches that reliably preserves deletion.)
JSON merge patch implementation for Immutable.js.
License
MIT