UNPKG

bbo

Version:

bbo is a utility library of zero dependencies for javascript.

47 lines (37 loc) 1.26 kB
'use strict'; var is_object = require('./is_object.js'); require('./get_tag.js'); require('./is_array.js'); require('./is_string.js'); require('./is_map.js'); require('./is_set.js'); var is_date = require('./is_date.js'); var is_empty = require('./is_empty.js'); var proper_object = require('./proper_object.js'); var objectDiff = (lhs, rhs) => { if (lhs === rhs) return {}; // equal return no diff if (!is_object(lhs) || !is_object(rhs)) return rhs; // return updated rhs var l = proper_object(lhs); var r = proper_object(rhs); var deletedValues = Object.keys(l).reduce((acc, key) => { return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined }; }, {}); if (is_date(l) || is_date(r)) { // eslint-disable-next-line eqeqeq if (l.valueOf() == r.valueOf()) return {}; return r; } return Object.keys(r).reduce((acc, key) => { if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key var difference = objectDiff(l[key], r[key]); if (is_object(difference) && is_empty(difference) && !is_date(difference)) return acc; // return no diff return { ...acc, [key]: difference }; // return updated key }, deletedValues); }; module.exports = objectDiff;