42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _utils = require("./utils.js");
|
|
|
|
const getLargerArray = (l, r) => l.length > r.length ? l : r;
|
|
|
|
const preserve = (diff, left, right) => {
|
|
if (!(0, _utils.isObject)(diff)) return diff;
|
|
return Object.keys(diff).reduce((acc, key) => {
|
|
const leftArray = left[key];
|
|
const rightArray = right[key];
|
|
|
|
if (Array.isArray(leftArray) && Array.isArray(rightArray)) {
|
|
const array = [...getLargerArray(leftArray, rightArray)];
|
|
return { ...acc,
|
|
[key]: array.reduce((acc2, item, index) => {
|
|
if ((0, _utils.hasOwnProperty)(diff[key], index)) {
|
|
acc2[index] = preserve(diff[key][index], leftArray[index], rightArray[index]); // diff recurse and check for nested arrays
|
|
|
|
return acc2;
|
|
}
|
|
|
|
delete acc2[index]; // no diff aka empty
|
|
|
|
return acc2;
|
|
}, array)
|
|
};
|
|
}
|
|
|
|
return { ...acc,
|
|
[key]: diff[key]
|
|
};
|
|
}, {});
|
|
};
|
|
|
|
var _default = preserve;
|
|
exports.default = _default; |