hoda-react
Version:
<div align="center"> <h1>:construction: flowbite-react (unreleased) :construction:</h1> <p> <a href="https://flowbite-react.com"> <img alt="Flowbite - Tailwind CSS components" width="350" src=".github/assets/flowbite-react-github.png"> <
42 lines (41 loc) • 1.38 kB
JavaScript
/**
* Check if provided parameter is plain object
* @param item
* @returns boolean
*/
function isObject(item) {
return item !== null && typeof item === 'object' && item.constructor === Object;
}
function cloneDeep(source) {
if (!isObject(source)) {
return source;
}
const output = { ...source };
Object.keys(source).forEach((key) => {
output[key] = cloneDeep(source[key]);
});
return output;
}
/**
* Merge and deep copy the values of all of the enumerable own properties of target object from source object to a new object
* @param target The target object to get properties from.
* @param source The source object from which to copy properties.
* @return A new merged and deep copied object.
*/
export function mergeDeep(target, source) {
if (isObject(source) && Object.keys(source).length === 0) {
return cloneDeep({ ...target, ...source });
}
let output = { ...target, ...source };
if (isObject(source) && isObject(target)) {
Object.keys(source).forEach((key) => {
if (isObject(source[key]) && key in target && isObject(target[key])) {
output[key] = mergeDeep(target[key], source[key]);
}
else {
output[key] = isObject(source[key]) ? cloneDeep(source[key]) : source[key];
}
});
}
return output;
}