UNPKG

@retailmenot/anchor

Version:

A React UI Library by RetailMeNot

77 lines (63 loc) 2.56 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var __chunk_1 = require('./anchor-chunk-24f232e7.js'); var theme = require('./theme.js'); require('./anchor-chunk-925bd1f9.js'); require('./skeleton.js'); require('./anchor-chunk-9d9a5df6.js'); require('react'); require('classnames'); require('@xstyled/styled-components'); require('@xstyled/system'); require('polished'); require('./anchor-chunk-eb382a51.js'); require('./anchor-chunk-1efd6395.js'); require('./anchor-chunk-598e53e1.js'); function deepClone(data) { if (typeof data === null || __chunk_1._typeof(data) !== 'object' || Array.isArray(data)) { return data; } // Using constructor(), creates a new instance of the object in memory rather than a reference var tmpObj = data.constructor(); for (var key in data) { if (data.hasOwnProperty(key)) { tmpObj[key] = deepClone(data[key]); } } return tmpObj; } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type function recursiveUpdate(settingStep, newThemeStep) { for (var key in settingStep) { // If the user has passed undefined as a value, delete the associated property if (settingStep.hasOwnProperty(key) && settingStep[key] === undefined) { delete newThemeStep[key]; } // Else if the value isn't an object literal then update the theme with that value else if (settingStep.hasOwnProperty(key) && (__chunk_1._typeof(settingStep[key]) !== 'object' || Array.isArray(settingStep[key]))) { newThemeStep[key] = settingStep[key]; } // Else if the key doesn't already exist in the new theme, add it, and continue recursion else if (settingStep.hasOwnProperty(key) && !newThemeStep[key]) { newThemeStep[key] = {}; recursiveUpdate(settingStep[key], newThemeStep[key]); } // Else continue recursion else { recursiveUpdate(settingStep[key], newThemeStep[key]); } } } function themeMerge(settings) { var baseTheme = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : theme.RootTheme; var newTheme = deepClone(baseTheme); for (var key in settings) { if (settings[key]) { if (!newTheme.hasOwnProperty(key)) { // Adds new keys to the root of the object newTheme[key] = settings[key]; } else { // Updates baseTheme defaults with new values recursiveUpdate(settings[key], newTheme[key]); } } } return newTheme; } exports.themeMerge = themeMerge; //# sourceMappingURL=thememerge.js.map