From 65fde59f6af6649d2a6d3b5ee4bd78bb2f0738eb Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Thu, 3 Jun 2021 09:27:22 -0400 Subject: [PATCH] Make it possible to enable caretColor and content core plugins in AOT mode (#4548) * Fix issue where disabled corePlugins can't be re-enabled * Disable caretColor and content core plugins by default, enable in JIT * Don't disable caretColor/content in default config stub, hard-code for AOT instead But with ability to still opt-in through your own config. Somewhat messy, but goal is to keep the messes in the AOT path and keep the JIT path pure. * Fix style * Revert unnecessary changes * Fix style --- src/corePlugins.js | 4 ---- src/index.js | 10 ++++++++-- src/util/configurePlugins.js | 16 +++++++++++++--- tests/resolveConfig.test.js | 19 +++++++++++++++++++ 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/corePlugins.js b/src/corePlugins.js index ce06e3133..84f95f230 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -1,11 +1,7 @@ import * as plugins from './plugins/index.js' import configurePlugins from './util/configurePlugins' -const jitOnlyPlugins = ['caretColor', 'content'] - export default function ({ corePlugins: corePluginConfig }) { - corePluginConfig = corePluginConfig.filter((pluginName) => !jitOnlyPlugins.includes(pluginName)) - return configurePlugins(corePluginConfig, Object.keys(plugins)).map((pluginName) => { return plugins[pluginName]() }) diff --git a/src/index.js b/src/index.js index df34da4d6..f6bd9b073 100644 --- a/src/index.js +++ b/src/index.js @@ -50,7 +50,10 @@ function resolveConfigPath(filePath) { const getConfigFunction = (config) => () => { if (_.isUndefined(config)) { - return resolveConfig([...getAllConfigs(defaultConfig)]) + return resolveConfig([ + ...getAllConfigs(defaultConfig), + { corePlugins: { caretColor: false, content: false } }, + ]) } // Skip this if Jest is running: https://github.com/facebook/jest/pull/9841#issuecomment-621417584 @@ -64,7 +67,10 @@ const getConfigFunction = (config) => () => { const configObject = _.isObject(config) ? _.get(config, 'config', config) : require(config) - return resolveConfig([...getAllConfigs(configObject)]) + return resolveConfig([ + ...getAllConfigs(configObject), + { corePlugins: { caretColor: false, content: false } }, + ]) } let warned = false diff --git a/src/util/configurePlugins.js b/src/util/configurePlugins.js index 3b2603910..4220eae10 100644 --- a/src/util/configurePlugins.js +++ b/src/util/configurePlugins.js @@ -5,9 +5,19 @@ export default function (pluginConfig, plugins) { const pluginNames = Array.isArray(pluginConfig) ? pluginConfig - : plugins.filter((pluginName) => { - return pluginConfig !== false && pluginConfig[pluginName] !== false - }) + : [ + ...new Set( + plugins + .filter((pluginName) => { + return pluginConfig !== false && pluginConfig[pluginName] !== false + }) + .concat( + Object.keys(pluginConfig).filter((pluginName) => { + return pluginConfig[pluginName] !== false + }) + ) + ), + ] return pluginNames } diff --git a/tests/resolveConfig.test.js b/tests/resolveConfig.test.js index a4dc0ef78..915613580 100644 --- a/tests/resolveConfig.test.js +++ b/tests/resolveConfig.test.js @@ -2137,6 +2137,25 @@ test('core plugin configuration builds on the default list when starting with an }) }) +test('core plugins that are disabled by default can be enabled', () => { + const userConfig = { + corePlugins: { display: true }, + } + + const defaultConfig = { + presets: [], + prefix: '', + important: false, + separator: ':', + theme: {}, + variants: {}, + corePlugins: { display: false }, + } + + const result = resolveConfig([userConfig, defaultConfig]) + expect(result.corePlugins).toContain('display') +}) + test('core plugin configurations stack', () => { const userConfig = { corePlugins: { display: false },