UNPKG

@modern-kit/utils

Version:
40 lines (36 loc) 1.44 kB
'use strict'; 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