From 63522aaea970ed2214ffa2377cc2796cc7bfc40b Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Apr 2021 08:56:20 -0400 Subject: [PATCH] Combine plugin lists to one single source of truth --- src/corePluginList.js | 165 ----------------------- src/corePlugins.js | 3 +- src/jit/corePlugins.js | 7 +- src/plugins/index.js | 257 +++++++++++++++++++----------------- src/util/resolveConfig.js | 4 +- tests/resolveConfig.test.js | 4 +- 6 files changed, 147 insertions(+), 293 deletions(-) delete mode 100644 src/corePluginList.js diff --git a/src/corePluginList.js b/src/corePluginList.js deleted file mode 100644 index df9f6450da4a..000000000000 --- a/src/corePluginList.js +++ /dev/null @@ -1,165 +0,0 @@ -export const corePluginList = [ - 'preflight', - - 'container', - - 'accessibility', - 'pointerEvents', - 'visibility', - 'position', - 'inset', - 'isolation', - 'zIndex', - 'order', - 'gridColumn', - 'gridColumnStart', - 'gridColumnEnd', - 'gridRow', - 'gridRowStart', - 'gridRowEnd', - 'float', - 'clear', - 'margin', - 'boxSizing', - 'display', - 'height', - 'maxHeight', - 'minHeight', - 'width', - 'minWidth', - 'maxWidth', - 'flex', - 'flexShrink', - 'flexGrow', - 'tableLayout', - 'borderCollapse', - - 'transform', - 'transformOrigin', - 'translate', - 'rotate', - 'skew', - 'scale', - - 'animation', - - 'cursor', - 'userSelect', - 'resize', - - 'listStylePosition', - 'listStyleType', - - 'appearance', - 'gridAutoColumns', - 'gridAutoFlow', - 'gridAutoRows', - 'gridTemplateColumns', - 'gridTemplateRows', - 'flexDirection', - 'flexWrap', - 'placeContent', - 'placeItems', - 'alignContent', - 'alignItems', - 'justifyContent', - 'justifyItems', - 'gap', - 'space', - 'divideWidth', - 'divideStyle', - 'divideColor', - 'divideOpacity', - - 'placeSelf', - 'alignSelf', - 'justifySelf', - - 'overflow', - 'overscrollBehavior', - 'textOverflow', - 'whitespace', - 'wordBreak', - - 'borderRadius', - 'borderWidth', - 'borderStyle', - 'borderColor', - 'borderOpacity', - - 'backgroundColor', - 'backgroundOpacity', - 'backgroundImage', - 'gradientColorStops', - 'boxDecorationBreak', - 'backgroundSize', - 'backgroundAttachment', - 'backgroundClip', - 'backgroundPosition', - 'backgroundRepeat', - 'backgroundOrigin', - - 'fill', - 'stroke', - 'strokeWidth', - - 'objectFit', - 'objectPosition', - - 'padding', - - 'textAlign', - 'verticalAlign', - 'fontFamily', - 'fontSize', - 'fontWeight', - 'textTransform', - 'fontStyle', - 'fontVariantNumeric', - 'lineHeight', - 'letterSpacing', - 'textColor', - 'textOpacity', - 'textDecoration', - 'fontSmoothing', - 'placeholderColor', - 'placeholderOpacity', - - 'opacity', - 'backgroundBlendMode', - 'mixBlendMode', - 'boxShadow', - 'outline', - 'ringWidth', - 'ringColor', - 'ringOpacity', - 'ringOffsetWidth', - 'ringOffsetColor', - - 'filter', - 'blur', - 'brightness', - 'contrast', - 'dropShadow', - 'grayscale', - 'hueRotate', - 'invert', - 'saturate', - 'sepia', - - 'backdropFilter', - 'backdropBlur', - 'backdropBrightness', - 'backdropContrast', - 'backdropGrayscale', - 'backdropHueRotate', - 'backdropInvert', - 'backdropOpacity', - 'backdropSaturate', - 'backdropSepia', - - 'transitionProperty', - 'transitionDelay', - 'transitionDuration', - 'transitionTimingFunction', -] diff --git a/src/corePlugins.js b/src/corePlugins.js index 4cd58d5cd977..10ad57102627 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -1,10 +1,9 @@ -import { corePluginList } from './corePluginList.js' import * as plugins from './plugins/index.js' import configurePlugins from './util/configurePlugins' export default function ({ corePlugins: corePluginConfig }) { - return configurePlugins(corePluginConfig, corePluginList).map((pluginName) => { + return configurePlugins(corePluginConfig, Object.keys(plugins)).map((pluginName) => { return plugins[pluginName]() }) } diff --git a/src/jit/corePlugins.js b/src/jit/corePlugins.js index f01c84486464..11886db4fff8 100644 --- a/src/jit/corePlugins.js +++ b/src/jit/corePlugins.js @@ -1,8 +1,7 @@ import postcss from 'postcss' +import * as corePlugins from '../plugins' import buildMediaQuery from '../util/buildMediaQuery' import prefixSelector from '../util/prefixSelector' -import * as corePlugins from '../plugins' -import { corePluginList } from '../corePluginList' import { updateLastClasses, updateAllClasses, @@ -168,8 +167,8 @@ export default { }, ...Object.fromEntries( - corePluginList.map((pluginName) => { - return [pluginName, corePlugins[pluginName]()] + Object.entries(corePlugins).map(([pluginName, plugin]) => { + return [pluginName, plugin()] }) ), } diff --git a/src/plugins/index.js b/src/plugins/index.js index 60673fc3d5c1..bea0b2a08e05 100644 --- a/src/plugins/index.js +++ b/src/plugins/index.js @@ -1,144 +1,163 @@ +export { default as preflight } from './preflight' + +export { default as container } from './container' + export { default as accessibility } from './accessibility' -export { default as alignContent } from './alignContent' -export { default as alignItems } from './alignItems' -export { default as alignSelf } from './alignSelf' -export { default as animation } from './animation' -export { default as appearance } from './appearance' -export { default as backdropBlur } from './backdropBlur' -export { default as backdropBrightness } from './backdropBrightness' -export { default as backdropContrast } from './backdropContrast' -export { default as backdropFilter } from './backdropFilter' -export { default as backdropGrayscale } from './backdropGrayscale' -export { default as backdropHueRotate } from './backdropHueRotate' -export { default as backdropInvert } from './backdropInvert' -export { default as backdropOpacity } from './backdropOpacity' -export { default as backdropSaturate } from './backdropSaturate' -export { default as backdropSepia } from './backdropSepia' -export { default as backgroundAttachment } from './backgroundAttachment' -export { default as backgroundBlendMode } from './backgroundBlendMode' -export { default as backgroundClip } from './backgroundClip' -export { default as backgroundColor } from './backgroundColor' -export { default as backgroundImage } from './backgroundImage' -export { default as backgroundOpacity } from './backgroundOpacity' -export { default as backgroundPosition } from './backgroundPosition' -export { default as backgroundRepeat } from './backgroundRepeat' -export { default as backgroundSize } from './backgroundSize' -export { default as backgroundOrigin } from './backgroundOrigin' -export { default as blur } from './blur' -export { default as borderCollapse } from './borderCollapse' -export { default as borderColor } from './borderColor' -export { default as borderOpacity } from './borderOpacity' -export { default as borderRadius } from './borderRadius' -export { default as borderStyle } from './borderStyle' -export { default as borderWidth } from './borderWidth' -export { default as boxDecorationBreak } from './boxDecorationBreak' -export { default as boxShadow } from './boxShadow' -export { default as boxSizing } from './boxSizing' -export { default as brightness } from './brightness' +export { default as pointerEvents } from './pointerEvents' +export { default as visibility } from './visibility' +export { default as position } from './position' +export { default as inset } from './inset' +export { default as isolation } from './isolation' +export { default as zIndex } from './zIndex' +export { default as order } from './order' +export { default as gridColumn } from './gridColumn' +export { default as gridColumnStart } from './gridColumnStart' +export { default as gridColumnEnd } from './gridColumnEnd' +export { default as gridRow } from './gridRow' +export { default as gridRowStart } from './gridRowStart' +export { default as gridRowEnd } from './gridRowEnd' +export { default as float } from './float' export { default as clear } from './clear' -export { default as container } from './container' -export { default as contrast } from './contrast' -export { default as cursor } from './cursor' +export { default as margin } from './margin' +export { default as boxSizing } from './boxSizing' export { default as display } from './display' -export { default as divideColor } from './divideColor' -export { default as divideOpacity } from './divideOpacity' -export { default as divideStyle } from './divideStyle' -export { default as divideWidth } from './divideWidth' -export { default as dropShadow } from './dropShadow' -export { default as fill } from './fill' -export { default as filter } from './filter' +export { default as height } from './height' +export { default as maxHeight } from './maxHeight' +export { default as minHeight } from './minHeight' +export { default as width } from './width' +export { default as minWidth } from './minWidth' +export { default as maxWidth } from './maxWidth' export { default as flex } from './flex' -export { default as flexDirection } from './flexDirection' -export { default as flexGrow } from './flexGrow' export { default as flexShrink } from './flexShrink' -export { default as flexWrap } from './flexWrap' -export { default as float } from './float' -export { default as fontFamily } from './fontFamily' -export { default as fontSize } from './fontSize' -export { default as fontSmoothing } from './fontSmoothing' -export { default as fontStyle } from './fontStyle' -export { default as fontVariantNumeric } from './fontVariantNumeric' -export { default as fontWeight } from './fontWeight' -export { default as gap } from './gap' -export { default as gradientColorStops } from './gradientColorStops' -export { default as grayscale } from './grayscale' +export { default as flexGrow } from './flexGrow' +export { default as tableLayout } from './tableLayout' +export { default as borderCollapse } from './borderCollapse' + +export { default as transform } from './transform' +export { default as transformOrigin } from './transformOrigin' +export { default as translate } from './translate' +export { default as rotate } from './rotate' +export { default as skew } from './skew' +export { default as scale } from './scale' + +export { default as animation } from './animation' + +export { default as cursor } from './cursor' +export { default as userSelect } from './userSelect' +export { default as resize } from './resize' + +export { default as listStylePosition } from './listStylePosition' +export { default as listStyleType } from './listStyleType' + +export { default as appearance } from './appearance' export { default as gridAutoColumns } from './gridAutoColumns' export { default as gridAutoFlow } from './gridAutoFlow' export { default as gridAutoRows } from './gridAutoRows' -export { default as gridColumn } from './gridColumn' -export { default as gridColumnEnd } from './gridColumnEnd' -export { default as gridColumnStart } from './gridColumnStart' -export { default as gridRow } from './gridRow' -export { default as gridRowEnd } from './gridRowEnd' -export { default as gridRowStart } from './gridRowStart' export { default as gridTemplateColumns } from './gridTemplateColumns' export { default as gridTemplateRows } from './gridTemplateRows' -export { default as height } from './height' -export { default as hueRotate } from './hueRotate' -export { default as inset } from './inset' -export { default as invert } from './invert' -export { default as isolation } from './isolation' +export { default as flexDirection } from './flexDirection' +export { default as flexWrap } from './flexWrap' +export { default as placeContent } from './placeContent' +export { default as placeItems } from './placeItems' +export { default as alignContent } from './alignContent' +export { default as alignItems } from './alignItems' export { default as justifyContent } from './justifyContent' export { default as justifyItems } from './justifyItems' +export { default as gap } from './gap' +export { default as space } from './space' +export { default as divideWidth } from './divideWidth' +export { default as divideStyle } from './divideStyle' +export { default as divideColor } from './divideColor' +export { default as divideOpacity } from './divideOpacity' + +export { default as placeSelf } from './placeSelf' +export { default as alignSelf } from './alignSelf' export { default as justifySelf } from './justifySelf' -export { default as letterSpacing } from './letterSpacing' -export { default as lineHeight } from './lineHeight' -export { default as listStylePosition } from './listStylePosition' -export { default as listStyleType } from './listStyleType' -export { default as margin } from './margin' -export { default as maxHeight } from './maxHeight' -export { default as maxWidth } from './maxWidth' -export { default as minHeight } from './minHeight' -export { default as minWidth } from './minWidth' -export { default as mixBlendMode } from './mixBlendMode' -export { default as objectFit } from './objectFit' -export { default as objectPosition } from './objectPosition' -export { default as opacity } from './opacity' -export { default as order } from './order' -export { default as outline } from './outline' + export { default as overflow } from './overflow' export { default as overscrollBehavior } from './overscrollBehavior' +export { default as textOverflow } from './textOverflow' +export { default as whitespace } from './whitespace' +export { default as wordBreak } from './wordBreak' + +export { default as borderRadius } from './borderRadius' +export { default as borderWidth } from './borderWidth' +export { default as borderStyle } from './borderStyle' +export { default as borderColor } from './borderColor' +export { default as borderOpacity } from './borderOpacity' + +export { default as backgroundColor } from './backgroundColor' +export { default as backgroundOpacity } from './backgroundOpacity' +export { default as backgroundImage } from './backgroundImage' +export { default as gradientColorStops } from './gradientColorStops' +export { default as boxDecorationBreak } from './boxDecorationBreak' +export { default as backgroundSize } from './backgroundSize' +export { default as backgroundAttachment } from './backgroundAttachment' +export { default as backgroundClip } from './backgroundClip' +export { default as backgroundPosition } from './backgroundPosition' +export { default as backgroundRepeat } from './backgroundRepeat' +export { default as backgroundOrigin } from './backgroundOrigin' + +export { default as fill } from './fill' +export { default as stroke } from './stroke' +export { default as strokeWidth } from './strokeWidth' + +export { default as objectFit } from './objectFit' +export { default as objectPosition } from './objectPosition' + export { default as padding } from './padding' -export { default as placeContent } from './placeContent' + +export { default as textAlign } from './textAlign' +export { default as verticalAlign } from './verticalAlign' +export { default as fontFamily } from './fontFamily' +export { default as fontSize } from './fontSize' +export { default as fontWeight } from './fontWeight' +export { default as textTransform } from './textTransform' +export { default as fontStyle } from './fontStyle' +export { default as fontVariantNumeric } from './fontVariantNumeric' +export { default as lineHeight } from './lineHeight' +export { default as letterSpacing } from './letterSpacing' +export { default as textColor } from './textColor' +export { default as textOpacity } from './textOpacity' +export { default as textDecoration } from './textDecoration' +export { default as fontSmoothing } from './fontSmoothing' export { default as placeholderColor } from './placeholderColor' export { default as placeholderOpacity } from './placeholderOpacity' -export { default as placeItems } from './placeItems' -export { default as placeSelf } from './placeSelf' -export { default as pointerEvents } from './pointerEvents' -export { default as position } from './position' -export { default as preflight } from './preflight' -export { default as resize } from './resize' + +export { default as opacity } from './opacity' +export { default as backgroundBlendMode } from './backgroundBlendMode' +export { default as mixBlendMode } from './mixBlendMode' +export { default as boxShadow } from './boxShadow' +export { default as outline } from './outline' +export { default as ringWidth } from './ringWidth' export { default as ringColor } from './ringColor' -export { default as ringOffsetColor } from './ringOffsetColor' -export { default as ringOffsetWidth } from './ringOffsetWidth' export { default as ringOpacity } from './ringOpacity' -export { default as ringWidth } from './ringWidth' -export { default as rotate } from './rotate' +export { default as ringOffsetWidth } from './ringOffsetWidth' +export { default as ringOffsetColor } from './ringOffsetColor' + +export { default as filter } from './filter' +export { default as blur } from './blur' +export { default as brightness } from './brightness' +export { default as contrast } from './contrast' +export { default as dropShadow } from './dropShadow' +export { default as grayscale } from './grayscale' +export { default as hueRotate } from './hueRotate' +export { default as invert } from './invert' export { default as saturate } from './saturate' -export { default as scale } from './scale' export { default as sepia } from './sepia' -export { default as skew } from './skew' -export { default as space } from './space' -export { default as stroke } from './stroke' -export { default as strokeWidth } from './strokeWidth' -export { default as tableLayout } from './tableLayout' -export { default as textAlign } from './textAlign' -export { default as textColor } from './textColor' -export { default as textDecoration } from './textDecoration' -export { default as textOpacity } from './textOpacity' -export { default as textOverflow } from './textOverflow' -export { default as textTransform } from './textTransform' -export { default as transform } from './transform' -export { default as transformOrigin } from './transformOrigin' + +export { default as backdropFilter } from './backdropFilter' +export { default as backdropBlur } from './backdropBlur' +export { default as backdropBrightness } from './backdropBrightness' +export { default as backdropContrast } from './backdropContrast' +export { default as backdropGrayscale } from './backdropGrayscale' +export { default as backdropHueRotate } from './backdropHueRotate' +export { default as backdropInvert } from './backdropInvert' +export { default as backdropOpacity } from './backdropOpacity' +export { default as backdropSaturate } from './backdropSaturate' +export { default as backdropSepia } from './backdropSepia' + +export { default as transitionProperty } from './transitionProperty' export { default as transitionDelay } from './transitionDelay' export { default as transitionDuration } from './transitionDuration' -export { default as transitionProperty } from './transitionProperty' export { default as transitionTimingFunction } from './transitionTimingFunction' -export { default as translate } from './translate' -export { default as userSelect } from './userSelect' -export { default as verticalAlign } from './verticalAlign' -export { default as visibility } from './visibility' -export { default as whitespace } from './whitespace' -export { default as width } from './width' -export { default as wordBreak } from './wordBreak' -export { default as zIndex } from './zIndex' diff --git a/src/util/resolveConfig.js b/src/util/resolveConfig.js index 774512fdb448..3da92b8b63a6 100644 --- a/src/util/resolveConfig.js +++ b/src/util/resolveConfig.js @@ -10,7 +10,7 @@ import toPath from 'lodash/toPath' import head from 'lodash/head' import isPlainObject from 'lodash/isPlainObject' import negateValue from './negateValue' -import { corePluginList } from '../corePluginList' +import * as corePlugins from '../plugins' import configurePlugins from './configurePlugins' import defaultConfig from '../../stubs/defaultConfig.stub' @@ -241,7 +241,7 @@ function resolveCorePlugins(corePluginConfigs) { return corePluginConfig({ corePlugins: resolved }) } return configurePlugins(corePluginConfig, resolved) - }, corePluginList) + }, Object.keys(corePlugins)) return result } diff --git a/tests/resolveConfig.test.js b/tests/resolveConfig.test.js index b36f8c8c0149..a4dc0ef78def 100644 --- a/tests/resolveConfig.test.js +++ b/tests/resolveConfig.test.js @@ -1,6 +1,8 @@ -import { corePluginList } from '../src/corePluginList' +import * as corePlugins from '../src/plugins' import resolveConfig from '../src/util/resolveConfig' +const corePluginList = Object.keys(corePlugins) + test('prefix key overrides default prefix', () => { const userConfig = { prefix: 'tw-',