@retailmenot/anchor
Version:
A React UI Library by RetailMeNot
77 lines (63 loc) • 2.56 kB
JavaScript
;
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