@modern-kit/utils
Version:
40 lines (36 loc) • 1.44 kB
JavaScript
;
var validatorIsPlainObject = require('../../validator/isPlainObject/index.cjs');
var commonCloneDeep = require('../../common/cloneDeep/index.cjs');
var objectObjectKeys = require('../objectKeys/index.cjs');
require('../../validator/isReference/index.cjs');
require('../../validator/isPrimitive/index.cjs');
function merge(target, source) {
const mergedTarget = commonCloneDeep.cloneDeep(target);
const innerMerge = (target2, source2) => {
const sourceKeys = objectObjectKeys.objectKeys(source2);
for (let i = 0; i < sourceKeys.length; i++) {
const key = sourceKeys[i];
const sourceValue = source2[key];
const targetValue = target2[key];
if (Array.isArray(sourceValue)) {
if (Array.isArray(targetValue)) {
target2[key] = innerMerge(targetValue, sourceValue);
} else {
target2[key] = innerMerge([], sourceValue);
}
} else if (validatorIsPlainObject.isPlainObject(sourceValue)) {
if (validatorIsPlainObject.isPlainObject(targetValue)) {
target2[key] = innerMerge(targetValue, sourceValue);
} else {
target2[key] = innerMerge({}, sourceValue);
}
} else if (targetValue === void 0 || sourceValue !== void 0) {
target2[key] = sourceValue;
}
}
return target2;
};
return innerMerge(mergedTarget, source);
}
exports.merge = merge;
//# sourceMappingURL=index.cjs.map