UNPKG

material-ui

Version:

Material Design UI components built with React

51 lines (36 loc) 1.35 kB
function isObject(obj) { return typeof(obj) === 'object' && obj !== null; } /** * A recursive merge between two objects. * * @param base - the object whose properties are to be overwritten. It * should be either the root level or some nested level. * @param override - an object containing properties to be overwritten. It * should have the same structure as the object object. */ let extend = (base, override) => { let mergedObject = {}; //Loop through each key in the base object Object.keys(base).forEach((key) => { let baseProp = base[key]; let overrideProp; if (isObject(override)) overrideProp = override[key]; //Recursive call extend if the prop is another object, else just copy it over mergedObject[key] = isObject(baseProp) && !Array.isArray(baseProp) ? extend(baseProp, overrideProp) : baseProp; }); //Loop through each override key and override the props in the //base object if (isObject(override)) { Object.keys(override).forEach((overrideKey) => { let overrideProp = override[overrideKey]; //Only copy over props that are not objects if (!isObject(overrideProp) || Array.isArray(overrideProp)) { mergedObject[overrideKey] = overrideProp; } }); } return mergedObject; }; module.exports = extend;