Source: utility/diff.js

'use strict';
const jsondiff = require('jsondiffpatch').create({});
const compare = jsondiff.diff.bind(jsondiff);
const str2json = require('string-to-json');
const depopulate = require('./depopulate');
const moment = require('moment');

/**
 * Removes reserved fields from objects and then does a comparison of values
 * @param  {Object} original       The original unmodified object
 * @param  {Object} revised        The updated object
 * @param  {Boolean} skipDepopulate If true objects will not be depopulated before doing the object comparison
 * @return {Object}                Returns the result of the object comparison
 */
module.exports = function objectdiff (original, revised, skipDepopulate) {
	let reservedKeys = ['__v','_id','changes','random','createdat','id'];
	let clones = {
		original: Object.assign({}, original),
		revised: Object.assign({}, revised)
	};
	for (let i = 0; i < reservedKeys.length; i++) {
		delete clones.original[reservedKeys[i]];
		delete clones.revised[reservedKeys[i]];
	}
	if (!skipDepopulate) {
		clones.original = depopulate(clones.original);
		clones.revised = depopulate(clones.revised);
	}
	let delta = compare(clones.original, clones.revised);
	return (delta) ? str2json.convert(delta) : {};
};