strapi-plugin-config-sync/server/utils/getObjectDiff.js

31 lines
1.0 KiB
JavaScript
Raw Normal View History

2021-10-14 14:37:00 +02:00
'use strict';
2024-11-06 11:59:15 +01:00
import { transform, isEqual, isArray, isObject } from 'lodash';
2021-10-14 14:37:00 +02:00
/**
* Find difference between two objects
* @param {object} origObj - Source object to compare newObj against
* @param {object} newObj - New object with potential changes
* @return {object} differences
*/
const difference = (origObj, newObj) => {
let arrayIndexCounter = 0;
const newObjChange = transform(newObj, (result, value, key) => {
if (!isEqual(value, origObj[key])) {
const resultKey = isArray(origObj) ? arrayIndexCounter++ : key;
result[resultKey] = (isObject(value) && isObject(origObj[key])) ? difference(value, origObj[key]) : value;
}
});
const origObjChange = transform(origObj, (result, value, key) => {
if (!isEqual(value, newObj[key])) {
const resultKey = isArray(newObj) ? arrayIndexCounter++ : key;
result[resultKey] = (isObject(value) && isObject(newObj[key])) ? difference(value, newObj[key]) : value;
}
});
return Object.assign(newObjChange, origObjChange);
};
2024-11-06 11:59:15 +01:00
export default difference;