@sap-ux/ui-components
Version:
SAP UI Components Library
42 lines • 1.07 kB
JavaScript
import React from 'react';
/**
* Performs deep merge on two objects.
* Parameters are not mutated.
* Arrays are copied as references and are not merged.
*
* @param a
* @param b
* @returns Record<string, unknown>
*/
export function deepMerge(a, b) {
const result = Object.keys(a).length ? deepMerge({}, a) : {};
const keys = Object.keys(b);
for (const key of keys) {
const value = b[key];
if (isObject(value)) {
if (!result[key] || isObject(result[key])) {
result[key] = deepMerge(result[key] ?? {}, value);
}
else {
throw new Error('Object structures are not compatible!');
}
}
else {
result[key] = value;
}
}
return result;
}
/**
* Method checks item is object.
*
* @param item
* @returns boolean
*/
function isObject(item) {
if (!item) {
return false;
}
return typeof item === 'object' && !Array.isArray(item) && !React.isValidElement(item);
}
//# sourceMappingURL=DeepMerge.js.map