123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- Object.defineProperty(exports, "default", {
- enumerable: true,
- get: function() {
- return resolveConfig;
- }
- });
- const _negateValue = /*#__PURE__*/ _interop_require_default(require("./negateValue"));
- const _corePluginList = /*#__PURE__*/ _interop_require_default(require("../corePluginList"));
- const _configurePlugins = /*#__PURE__*/ _interop_require_default(require("./configurePlugins"));
- const _colors = /*#__PURE__*/ _interop_require_default(require("../public/colors"));
- const _defaults = require("./defaults");
- const _toPath = require("./toPath");
- const _normalizeConfig = require("./normalizeConfig");
- const _isPlainObject = /*#__PURE__*/ _interop_require_default(require("./isPlainObject"));
- const _cloneDeep = require("./cloneDeep");
- const _pluginUtils = require("./pluginUtils");
- const _withAlphaVariable = require("./withAlphaVariable");
- const _toColorValue = /*#__PURE__*/ _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) {
- // TODO: Log that this function isn't really needed anymore?
- 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), {}),
- // In order to resolve n config objects, we combine all of their `extend` properties
- // into arrays instead of objects so they aren't overridden.
- extend: collectExtends(themes)
- };
- }
- function mergeExtensionCustomizer(merged, value) {
- // When we have an array of objects, we do want to merge it
- if (Array.isArray(merged) && (0, _isPlainObject.default)(merged[0])) {
- return merged.concat(value);
- }
- // When the incoming value is an array, and the existing config is an object, prepend the existing object
- if (Array.isArray(value) && (0, _isPlainObject.default)(value[0]) && (0, _isPlainObject.default)(merged)) {
- return [
- merged,
- ...value
- ];
- }
- // Override arrays (for example for font-families, box-shadows, ...)
- if (Array.isArray(value)) {
- return value;
- }
- // Execute default behaviour
- return undefined;
- }
- function mergeExtensions({ extend , ...theme }) {
- return mergeWith(theme, extend, (themeValue, extensions)=>{
- // The `extend` property is an array, so we need to check if it contains any functions
- if (!isFunction(themeValue) && !extensions.some(isFunction)) {
- return mergeWith({}, themeValue, ...extensions, mergeExtensionCustomizer);
- }
- return (resolveThemePath, utils)=>mergeWith({}, ...[
- themeValue,
- ...extensions
- ].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer);
- });
- }
- /**
- *
- * @param {string} key
- * @return {Iterable<string[] & {alpha: string | undefined}>}
- */ 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) {
- // theme('colors.red.500 / 0.5') -> ['colors', 'red', '500 / 0', '5]
- 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));
- }
|