UNPKG

material-ui

Version:

Material Design UI components built with React

55 lines (41 loc) 1.79 kB
'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; Object.defineProperty(exports, "__esModule", { value: true }); function isObject(obj) { return (typeof obj === 'undefined' ? 'undefined' : _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. */ var extend = function extend(base, override) { var mergedObject = {}; //Loop through each key in the base object Object.keys(base).forEach(function (key) { var baseProp = base[key]; var overrideProp = undefined; 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(function (overrideKey) { var overrideProp = override[overrideKey]; //Only copy over props that are not objects if (!isObject(overrideProp) || Array.isArray(overrideProp)) { mergedObject[overrideKey] = overrideProp; } }); } return mergedObject; }; exports.default = extend; module.exports = exports['default'];