|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
Object.defineProperty(exports, "default", { |
|
enumerable: true, |
|
get: function() { |
|
return resolveConfig; |
|
} |
|
}); |
|
const _negateValue = _interop_require_default(require("./negateValue")); |
|
const _corePluginList = _interop_require_default(require("../corePluginList")); |
|
const _configurePlugins = _interop_require_default(require("./configurePlugins")); |
|
const _colors = _interop_require_default(require("../public/colors")); |
|
const _defaults = require("./defaults"); |
|
const _toPath = require("./toPath"); |
|
const _normalizeConfig = require("./normalizeConfig"); |
|
const _isPlainObject = _interop_require_default(require("./isPlainObject")); |
|
const _cloneDeep = require("./cloneDeep"); |
|
const _pluginUtils = require("./pluginUtils"); |
|
const _withAlphaVariable = require("./withAlphaVariable"); |
|
const _toColorValue = _interop_require_default(require("./toColorValue")); |
|
function _interop_require_default(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
function isFunction(input) { |
|
return typeof input === "function"; |
|
} |
|
function mergeWith(target, ...sources) { |
|
let customizer = sources.pop(); |
|
for (let source of sources){ |
|
for(let k in source){ |
|
let merged = customizer(target[k], source[k]); |
|
if (merged === undefined) { |
|
if ((0, _isPlainObject.default)(target[k]) && (0, _isPlainObject.default)(source[k])) { |
|
target[k] = mergeWith({}, target[k], source[k], customizer); |
|
} else { |
|
target[k] = source[k]; |
|
} |
|
} else { |
|
target[k] = merged; |
|
} |
|
} |
|
} |
|
return target; |
|
} |
|
const configUtils = { |
|
colors: _colors.default, |
|
negative (scale) { |
|
|
|
return Object.keys(scale).filter((key)=>scale[key] !== "0").reduce((negativeScale, key)=>{ |
|
let negativeValue = (0, _negateValue.default)(scale[key]); |
|
if (negativeValue !== undefined) { |
|
negativeScale[`-${key}`] = negativeValue; |
|
} |
|
return negativeScale; |
|
}, {}); |
|
}, |
|
breakpoints (screens) { |
|
return Object.keys(screens).filter((key)=>typeof screens[key] === "string").reduce((breakpoints, key)=>({ |
|
...breakpoints, |
|
[`screen-${key}`]: screens[key] |
|
}), {}); |
|
} |
|
}; |
|
function value(valueToResolve, ...args) { |
|
return isFunction(valueToResolve) ? valueToResolve(...args) : valueToResolve; |
|
} |
|
function collectExtends(items) { |
|
return items.reduce((merged, { extend })=>{ |
|
return mergeWith(merged, extend, (mergedValue, extendValue)=>{ |
|
if (mergedValue === undefined) { |
|
return [ |
|
extendValue |
|
]; |
|
} |
|
if (Array.isArray(mergedValue)) { |
|
return [ |
|
extendValue, |
|
...mergedValue |
|
]; |
|
} |
|
return [ |
|
extendValue, |
|
mergedValue |
|
]; |
|
}); |
|
}, {}); |
|
} |
|
function mergeThemes(themes) { |
|
return { |
|
...themes.reduce((merged, theme)=>(0, _defaults.defaults)(merged, theme), {}), |
|
|
|
|
|
extend: collectExtends(themes) |
|
}; |
|
} |
|
function mergeExtensionCustomizer(merged, value) { |
|
|
|
if (Array.isArray(merged) && (0, _isPlainObject.default)(merged[0])) { |
|
return merged.concat(value); |
|
} |
|
|
|
if (Array.isArray(value) && (0, _isPlainObject.default)(value[0]) && (0, _isPlainObject.default)(merged)) { |
|
return [ |
|
merged, |
|
...value |
|
]; |
|
} |
|
|
|
if (Array.isArray(value)) { |
|
return value; |
|
} |
|
|
|
return undefined; |
|
} |
|
function mergeExtensions({ extend , ...theme }) { |
|
return mergeWith(theme, extend, (themeValue, extensions)=>{ |
|
|
|
if (!isFunction(themeValue) && !extensions.some(isFunction)) { |
|
return mergeWith({}, themeValue, ...extensions, mergeExtensionCustomizer); |
|
} |
|
return (resolveThemePath, utils)=>mergeWith({}, ...[ |
|
themeValue, |
|
...extensions |
|
].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer); |
|
}); |
|
} |
|
|
|
|
|
|
|
|
|
function* toPaths(key) { |
|
let path = (0, _toPath.toPath)(key); |
|
if (path.length === 0) { |
|
return; |
|
} |
|
yield path; |
|
if (Array.isArray(key)) { |
|
return; |
|
} |
|
let pattern = /^(.*?)\s*\/\s*([^/]+)$/; |
|
let matches = key.match(pattern); |
|
if (matches !== null) { |
|
let [, prefix, alpha] = matches; |
|
let newPath = (0, _toPath.toPath)(prefix); |
|
newPath.alpha = alpha; |
|
yield newPath; |
|
} |
|
} |
|
function resolveFunctionKeys(object) { |
|
|
|
const resolvePath = (key, defaultValue)=>{ |
|
for (const path of toPaths(key)){ |
|
let index = 0; |
|
let val = object; |
|
while(val !== undefined && val !== null && index < path.length){ |
|
val = val[path[index++]]; |
|
let shouldResolveAsFn = isFunction(val) && (path.alpha === undefined || index <= path.length - 1); |
|
val = shouldResolveAsFn ? val(resolvePath, configUtils) : val; |
|
} |
|
if (val !== undefined) { |
|
if (path.alpha !== undefined) { |
|
let normalized = (0, _pluginUtils.parseColorFormat)(val); |
|
return (0, _withAlphaVariable.withAlphaValue)(normalized, path.alpha, (0, _toColorValue.default)(normalized)); |
|
} |
|
if ((0, _isPlainObject.default)(val)) { |
|
return (0, _cloneDeep.cloneDeep)(val); |
|
} |
|
return val; |
|
} |
|
} |
|
return defaultValue; |
|
}; |
|
Object.assign(resolvePath, { |
|
theme: resolvePath, |
|
...configUtils |
|
}); |
|
return Object.keys(object).reduce((resolved, key)=>{ |
|
resolved[key] = isFunction(object[key]) ? object[key](resolvePath, configUtils) : object[key]; |
|
return resolved; |
|
}, {}); |
|
} |
|
function extractPluginConfigs(configs) { |
|
let allConfigs = []; |
|
configs.forEach((config)=>{ |
|
allConfigs = [ |
|
...allConfigs, |
|
config |
|
]; |
|
var _config_plugins; |
|
const plugins = (_config_plugins = config === null || config === void 0 ? void 0 : config.plugins) !== null && _config_plugins !== void 0 ? _config_plugins : []; |
|
if (plugins.length === 0) { |
|
return; |
|
} |
|
plugins.forEach((plugin)=>{ |
|
if (plugin.__isOptionsFunction) { |
|
plugin = plugin(); |
|
} |
|
var _plugin_config; |
|
allConfigs = [ |
|
...allConfigs, |
|
...extractPluginConfigs([ |
|
(_plugin_config = plugin === null || plugin === void 0 ? void 0 : plugin.config) !== null && _plugin_config !== void 0 ? _plugin_config : {} |
|
]) |
|
]; |
|
}); |
|
}); |
|
return allConfigs; |
|
} |
|
function resolveCorePlugins(corePluginConfigs) { |
|
const result = [ |
|
...corePluginConfigs |
|
].reduceRight((resolved, corePluginConfig)=>{ |
|
if (isFunction(corePluginConfig)) { |
|
return corePluginConfig({ |
|
corePlugins: resolved |
|
}); |
|
} |
|
return (0, _configurePlugins.default)(corePluginConfig, resolved); |
|
}, _corePluginList.default); |
|
return result; |
|
} |
|
function resolvePluginLists(pluginLists) { |
|
const result = [ |
|
...pluginLists |
|
].reduceRight((resolved, pluginList)=>{ |
|
return [ |
|
...resolved, |
|
...pluginList |
|
]; |
|
}, []); |
|
return result; |
|
} |
|
function resolveConfig(configs) { |
|
let allConfigs = [ |
|
...extractPluginConfigs(configs), |
|
{ |
|
prefix: "", |
|
important: false, |
|
separator: ":" |
|
} |
|
]; |
|
var _t_theme, _c_plugins; |
|
return (0, _normalizeConfig.normalizeConfig)((0, _defaults.defaults)({ |
|
theme: resolveFunctionKeys(mergeExtensions(mergeThemes(allConfigs.map((t)=>{ |
|
return (_t_theme = t === null || t === void 0 ? void 0 : t.theme) !== null && _t_theme !== void 0 ? _t_theme : {}; |
|
})))), |
|
corePlugins: resolveCorePlugins(allConfigs.map((c)=>c.corePlugins)), |
|
plugins: resolvePluginLists(configs.map((c)=>{ |
|
return (_c_plugins = c === null || c === void 0 ? void 0 : c.plugins) !== null && _c_plugins !== void 0 ? _c_plugins : []; |
|
})) |
|
}, ...allConfigs)); |
|
} |
|
|