@chakra-ui/react
Version:
Responsive and accessible React UI components built with React and Emotion
35 lines (32 loc) • 1.01 kB
JavaScript
import { isObject } from './is.js';
function merge(target, source) {
if (source == null) return target;
for (const key of Object.keys(source)) {
if (source[key] === void 0 || key === "__proto__") continue;
if (!isObject(target[key]) && isObject(source[key])) {
Object.assign(target, { [key]: source[key] });
} else if (target[key] && isObject(source[key])) {
merge(target[key], source[key]);
} else if (Array.isArray(source[key]) && Array.isArray(target[key])) {
let i = 0;
for (; i < source[key].length; i++) {
if (isObject(target[key][i]) && isObject(source[key][i])) {
merge(target[key][i], source[key][i]);
} else {
target[key][i] = source[key][i];
}
}
} else {
Object.assign(target, { [key]: source[key] });
}
}
return target;
}
function mergeWith(target, ...sources) {
for (const source of sources) {
merge(target, source);
}
return target;
}
export { mergeWith };
;