First version
This commit is contained in:
434
CTOAsYouGo/node_modules/tailwindcss/lib/util/resolveConfig.js
generated
vendored
434
CTOAsYouGo/node_modules/tailwindcss/lib/util/resolveConfig.js
generated
vendored
@@ -1,256 +1,222 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
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;
|
||||
}
|
||||
exports.default = resolveConfig;
|
||||
|
||||
var _some = _interopRequireDefault(require("lodash/some"));
|
||||
|
||||
var _mergeWith = _interopRequireDefault(require("lodash/mergeWith"));
|
||||
|
||||
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
|
||||
|
||||
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
||||
|
||||
var _defaults = _interopRequireDefault(require("lodash/defaults"));
|
||||
|
||||
var _map = _interopRequireDefault(require("lodash/map"));
|
||||
|
||||
var _get = _interopRequireDefault(require("lodash/get"));
|
||||
|
||||
var _toPath = _interopRequireDefault(require("lodash/toPath"));
|
||||
|
||||
var _negateValue = _interopRequireDefault(require("./negateValue"));
|
||||
|
||||
var _corePluginList = require("../corePluginList");
|
||||
|
||||
var _configurePlugins = _interopRequireDefault(require("./configurePlugins"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
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]
|
||||
}), {});
|
||||
}
|
||||
negative(scale) {
|
||||
return Object.keys(scale).filter(key => scale[key] !== '0').reduce((negativeScale, key) => ({ ...negativeScale,
|
||||
[`-${key}`]: (0, _negateValue.default)(scale[key])
|
||||
}), {});
|
||||
},
|
||||
|
||||
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
|
||||
];
|
||||
});
|
||||
}, {});
|
||||
return (0, _isFunction.default)(valueToResolve) ? valueToResolve(...args) : valueToResolve;
|
||||
}
|
||||
|
||||
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);
|
||||
const theme = (({
|
||||
extend: _,
|
||||
...t
|
||||
}) => t)(themes.reduce((merged, t) => {
|
||||
return (0, _defaults.default)(merged, t);
|
||||
}, {}));
|
||||
|
||||
return { ...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: themes.reduce((merged, {
|
||||
extend
|
||||
}) => {
|
||||
return (0, _mergeWith.default)(merged, extend, (mergedValue, extendValue) => {
|
||||
if ((0, _isUndefined.default)(mergedValue)) {
|
||||
return [extendValue];
|
||||
}
|
||||
return (resolveThemePath, utils)=>mergeWith({}, ...[
|
||||
themeValue,
|
||||
...extensions
|
||||
].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer);
|
||||
|
||||
if (Array.isArray(mergedValue)) {
|
||||
return [extendValue, ...mergedValue];
|
||||
}
|
||||
|
||||
return [extendValue, mergedValue];
|
||||
});
|
||||
}, {})
|
||||
};
|
||||
}
|
||||
|
||||
function mergeExtensions({
|
||||
extend,
|
||||
...theme
|
||||
}) {
|
||||
return (0, _mergeWith.default)(theme, extend, (themeValue, extensions) => {
|
||||
// The `extend` property is an array, so we need to check if it contains any functions
|
||||
if (!(0, _isFunction.default)(themeValue) && !(0, _some.default)(extensions, _isFunction.default)) {
|
||||
return { ...themeValue,
|
||||
...Object.assign({}, ...extensions)
|
||||
};
|
||||
}
|
||||
|
||||
return (resolveThemePath, utils) => ({ ...value(themeValue, resolveThemePath, utils),
|
||||
...Object.assign({}, ...extensions.map(e => value(e, resolveThemePath, utils)))
|
||||
});
|
||||
});
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @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;
|
||||
const resolvePath = (key, defaultValue) => {
|
||||
const path = (0, _toPath.default)(key);
|
||||
let index = 0;
|
||||
let val = object;
|
||||
|
||||
while (val !== undefined && val !== null && index < path.length) {
|
||||
val = val[path[index++]];
|
||||
val = (0, _isFunction.default)(val) ? val(resolvePath, configUtils) : val;
|
||||
}
|
||||
|
||||
return val === undefined ? defaultValue : val;
|
||||
};
|
||||
|
||||
return Object.keys(object).reduce((resolved, key) => {
|
||||
return { ...resolved,
|
||||
[key]: (0, _isFunction.default)(object[key]) ? object[key](resolvePath, configUtils) : object[key]
|
||||
};
|
||||
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 : {}
|
||||
])
|
||||
];
|
||||
});
|
||||
let allConfigs = [];
|
||||
configs.forEach(config => {
|
||||
allConfigs = [...allConfigs, config];
|
||||
const plugins = (0, _get.default)(config, 'plugins', []);
|
||||
|
||||
if (plugins.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
plugins.forEach(plugin => {
|
||||
if (plugin.__isOptionsFunction) {
|
||||
plugin = plugin();
|
||||
}
|
||||
|
||||
allConfigs = [...allConfigs, ...extractPluginConfigs([(0, _get.default)(plugin, 'config', {})])];
|
||||
});
|
||||
return allConfigs;
|
||||
});
|
||||
return allConfigs;
|
||||
}
|
||||
|
||||
function resolveVariants([firstConfig, ...variantConfigs]) {
|
||||
if (Array.isArray(firstConfig)) {
|
||||
return firstConfig;
|
||||
}
|
||||
|
||||
return [firstConfig, ...variantConfigs].reverse().reduce((resolved, variants) => {
|
||||
Object.entries(variants || {}).forEach(([plugin, pluginVariants]) => {
|
||||
if ((0, _isFunction.default)(pluginVariants)) {
|
||||
resolved[plugin] = pluginVariants({
|
||||
variants(path) {
|
||||
return (0, _get.default)(resolved, path, []);
|
||||
},
|
||||
|
||||
before(toInsert, variant, existingPluginVariants = (0, _get.default)(resolved, plugin, [])) {
|
||||
if (variant === undefined) {
|
||||
return [...toInsert, ...existingPluginVariants];
|
||||
}
|
||||
|
||||
const index = existingPluginVariants.indexOf(variant);
|
||||
|
||||
if (index === -1) {
|
||||
return [...existingPluginVariants, ...toInsert];
|
||||
}
|
||||
|
||||
return [...existingPluginVariants.slice(0, index), ...toInsert, ...existingPluginVariants.slice(index)];
|
||||
},
|
||||
|
||||
after(toInsert, variant, existingPluginVariants = (0, _get.default)(resolved, plugin, [])) {
|
||||
if (variant === undefined) {
|
||||
return [...existingPluginVariants, ...toInsert];
|
||||
}
|
||||
|
||||
const index = existingPluginVariants.indexOf(variant);
|
||||
|
||||
if (index === -1) {
|
||||
return [...toInsert, ...existingPluginVariants];
|
||||
}
|
||||
|
||||
return [...existingPluginVariants.slice(0, index + 1), ...toInsert, ...existingPluginVariants.slice(index + 1)];
|
||||
},
|
||||
|
||||
without(toRemove, existingPluginVariants = (0, _get.default)(resolved, plugin, [])) {
|
||||
return existingPluginVariants.filter(v => !toRemove.includes(v));
|
||||
}
|
||||
|
||||
});
|
||||
} else {
|
||||
resolved[plugin] = pluginVariants;
|
||||
}
|
||||
});
|
||||
return resolved;
|
||||
}, {});
|
||||
}
|
||||
|
||||
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;
|
||||
const result = [...corePluginConfigs].reverse().reduce((resolved, corePluginConfig) => {
|
||||
if ((0, _isFunction.default)(corePluginConfig)) {
|
||||
return corePluginConfig({
|
||||
corePlugins: resolved
|
||||
});
|
||||
}
|
||||
|
||||
return (0, _configurePlugins.default)(corePluginConfig, resolved);
|
||||
}, _corePluginList.corePluginList);
|
||||
return result;
|
||||
}
|
||||
|
||||
function resolvePluginLists(pluginLists) {
|
||||
const result = [
|
||||
...pluginLists
|
||||
].reduceRight((resolved, pluginList)=>{
|
||||
return [
|
||||
...resolved,
|
||||
...pluginList
|
||||
];
|
||||
}, []);
|
||||
return result;
|
||||
const result = [...pluginLists].reverse().reduce((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));
|
||||
}
|
||||
const allConfigs = extractPluginConfigs(configs);
|
||||
return (0, _defaults.default)({
|
||||
theme: resolveFunctionKeys(mergeExtensions(mergeThemes((0, _map.default)(allConfigs, t => (0, _get.default)(t, 'theme', {}))))),
|
||||
variants: resolveVariants(allConfigs.map(c => c.variants)),
|
||||
corePlugins: resolveCorePlugins(allConfigs.map(c => c.corePlugins)),
|
||||
plugins: resolvePluginLists(configs.map(c => (0, _get.default)(c, 'plugins', [])))
|
||||
}, ...allConfigs);
|
||||
}
|
||||
Reference in New Issue
Block a user