This simple library compares two JSONs and lists the differences found as changes.
The library checks for created, deleted or modified plain attributes. This is done using deep-diff.
Array attributes are treated as plain attributes and compared using deep-equal. If arrays contain any objects or other arrays, those are not separately considered.
Objects are finally treated recursively.
With npm do:
npm i --save auto-change-description
const acd = require('auto-change-description');
var results = acd.describe(before, after);
Comparing these two JSONs:
var before = {
name: 'my object',
puppy: 'yo',
description: 'it\'s an object!',
details: {
it: 'has',
an: 'array',
with: ['a', 'few', 'elements']
}
};
var after = {
name: 'updated object',
yo: 'puppy',
description: 'it\'s an object!',
details: {
it: 'has',
an: 'array',
with: ['a', 'few', 'more', 'elements', {than: 'before'}]
}
};
Produces this output:
[
'Deleted {puppy} with value (yo).',
'Created {yo} with value (puppy).',
'Modified {name} from (my object) to (updated object).',
'Modified {details.with} from (["a","few","elements"]) to (["a","few","more","elements",{"than":"before"}]).'
]
The output was left as an array to allow free joining as people see fit, either with '\n' or '<br>' or whatever else.
The same logic was applied to {} and () wraps, to allow easy replacement with, for example, <strong></strong>, <em></em> or any other formatting syntaxes.