From ed20e59ba16071fd1498728eac01bbbdd889b865 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 10:32:04 -0500 Subject: [PATCH 1/7] Test that setting a plugin to false in corePlugins disables it --- __tests__/configurePlugins.test.js | 35 ++++++++++++++++++++++++++++++ src/util/configurePlugins.js | 7 ++++++ 2 files changed, 42 insertions(+) create mode 100644 __tests__/configurePlugins.test.js create mode 100644 src/util/configurePlugins.js diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js new file mode 100644 index 000000000..89896f8a8 --- /dev/null +++ b/__tests__/configurePlugins.test.js @@ -0,0 +1,35 @@ +import configurePlugins from '../src/util/configurePlugins' + +test('setting a plugin to false removes it', () => { + const plugins = { + fontSize: (options) => { + return { + plugin: 'fontSize', + options, + } + }, + display: (options) => { + return { + plugin: 'display', + options, + } + }, + backgroundPosition: (options) => { + return { + plugin: 'backgroundPosition', + options, + } + }, + } + + const configuredPlugins = configurePlugins(plugins, { + fontSize: {}, + display: false, + backgroundPosition: {}, + }) + + expect(configuredPlugins).toEqual([ + { plugin: 'fontSize', options: {} }, + { plugin: 'backgroundPosition', options: {} }, + ]) +}) diff --git a/src/util/configurePlugins.js b/src/util/configurePlugins.js new file mode 100644 index 000000000..0874d93a5 --- /dev/null +++ b/src/util/configurePlugins.js @@ -0,0 +1,7 @@ +export default function(plugins, pluginConfig) { + return Object.keys(plugins).filter(pluginName => { + return pluginConfig[pluginName] !== false + }).map(pluginName => { + return plugins[pluginName](pluginConfig[pluginName]) + }) +} From b5806c8437c001f1464424a9c91645776c45ea7c Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 10:54:06 -0500 Subject: [PATCH 2/7] Test overriding a core plugin's config --- __tests__/configurePlugins.test.js | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js index 89896f8a8..9d9d70f21 100644 --- a/__tests__/configurePlugins.test.js +++ b/__tests__/configurePlugins.test.js @@ -33,3 +33,38 @@ test('setting a plugin to false removes it', () => { { plugin: 'backgroundPosition', options: {} }, ]) }) + +test('setting a plugin to an object configures that plugin', () => { + const plugins = { + fontSize: (options) => { + return { + plugin: 'fontSize', + options, + } + }, + display: (options) => { + return { + plugin: 'display', + options, + } + }, + backgroundPosition: (options) => { + return { + plugin: 'backgroundPosition', + options, + } + }, + } + + const configuredPlugins = configurePlugins(plugins, { + fontSize: { variants: ['responsive', 'hover'], values: { '12': '12px', '14': '14px', '16': '16px', } }, + display: { variants: ['responsive'] }, + backgroundPosition: {}, + }) + + expect(configuredPlugins).toEqual([ + { plugin: 'fontSize', options: { variants: ['responsive', 'hover'], values: { '12': '12px', '14': '14px', '16': '16px', } } }, + { plugin: 'display', options: { variants: ['responsive'] } }, + { plugin: 'backgroundPosition', options: {} }, + ]) +}) From c84b188626e611234d2219bdab36661ed511486b Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 10:54:35 -0500 Subject: [PATCH 3/7] Fix code style --- __tests__/configurePlugins.test.js | 25 +++++++++++++++++-------- src/util/configurePlugins.js | 12 +++++++----- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js index 9d9d70f21..3fedf26a9 100644 --- a/__tests__/configurePlugins.test.js +++ b/__tests__/configurePlugins.test.js @@ -2,19 +2,19 @@ import configurePlugins from '../src/util/configurePlugins' test('setting a plugin to false removes it', () => { const plugins = { - fontSize: (options) => { + fontSize: options => { return { plugin: 'fontSize', options, } }, - display: (options) => { + display: options => { return { plugin: 'display', options, } }, - backgroundPosition: (options) => { + backgroundPosition: options => { return { plugin: 'backgroundPosition', options, @@ -36,19 +36,19 @@ test('setting a plugin to false removes it', () => { test('setting a plugin to an object configures that plugin', () => { const plugins = { - fontSize: (options) => { + fontSize: options => { return { plugin: 'fontSize', options, } }, - display: (options) => { + display: options => { return { plugin: 'display', options, } }, - backgroundPosition: (options) => { + backgroundPosition: options => { return { plugin: 'backgroundPosition', options, @@ -57,13 +57,22 @@ test('setting a plugin to an object configures that plugin', () => { } const configuredPlugins = configurePlugins(plugins, { - fontSize: { variants: ['responsive', 'hover'], values: { '12': '12px', '14': '14px', '16': '16px', } }, + fontSize: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, display: { variants: ['responsive'] }, backgroundPosition: {}, }) expect(configuredPlugins).toEqual([ - { plugin: 'fontSize', options: { variants: ['responsive', 'hover'], values: { '12': '12px', '14': '14px', '16': '16px', } } }, + { + plugin: 'fontSize', + options: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + }, { plugin: 'display', options: { variants: ['responsive'] } }, { plugin: 'backgroundPosition', options: {} }, ]) diff --git a/src/util/configurePlugins.js b/src/util/configurePlugins.js index 0874d93a5..27b51ecb7 100644 --- a/src/util/configurePlugins.js +++ b/src/util/configurePlugins.js @@ -1,7 +1,9 @@ export default function(plugins, pluginConfig) { - return Object.keys(plugins).filter(pluginName => { - return pluginConfig[pluginName] !== false - }).map(pluginName => { - return plugins[pluginName](pluginConfig[pluginName]) - }) + return Object.keys(plugins) + .filter(pluginName => { + return pluginConfig[pluginName] !== false + }) + .map(pluginName => { + return plugins[pluginName](pluginConfig[pluginName]) + }) } From 4afb9e45e6570a42995f4b43946fe06ac68d5dbf Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 10:58:56 -0500 Subject: [PATCH 4/7] Test core plugins fall back to a default config --- __tests__/configurePlugins.test.js | 45 ++++++++++++++++++++++++++++++ src/util/configurePlugins.js | 6 ++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js index 3fedf26a9..fc7ebf066 100644 --- a/__tests__/configurePlugins.test.js +++ b/__tests__/configurePlugins.test.js @@ -77,3 +77,48 @@ test('setting a plugin to an object configures that plugin', () => { { plugin: 'backgroundPosition', options: {} }, ]) }) + +test('plugins are configured with their default configuration if no custom config is provided', () => { + const plugins = { + fontSize: options => { + return { + plugin: 'fontSize', + options, + } + }, + display: options => { + return { + plugin: 'display', + options, + } + }, + backgroundPosition: options => { + return { + plugin: 'backgroundPosition', + options, + } + }, + } + + const configuredPlugins = configurePlugins(plugins, { + fontSize: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + backgroundPosition: {}, + }, { + display: { variants: ['responsive'] }, + }) + + expect(configuredPlugins).toEqual([ + { + plugin: 'fontSize', + options: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + }, + { plugin: 'display', options: { variants: ['responsive'] } }, + { plugin: 'backgroundPosition', options: {} }, + ]) +}) diff --git a/src/util/configurePlugins.js b/src/util/configurePlugins.js index 27b51ecb7..0d9e1d225 100644 --- a/src/util/configurePlugins.js +++ b/src/util/configurePlugins.js @@ -1,9 +1,11 @@ -export default function(plugins, pluginConfig) { +import _ from 'lodash' + +export default function(plugins, pluginConfig, defaultPluginConfig = {}) { return Object.keys(plugins) .filter(pluginName => { return pluginConfig[pluginName] !== false }) .map(pluginName => { - return plugins[pluginName](pluginConfig[pluginName]) + return plugins[pluginName](_.get(pluginConfig, pluginName, defaultPluginConfig[pluginName])) }) } From 4c2be2ac2c20687f74b229381d54e63bb3834650 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 11:00:43 -0500 Subject: [PATCH 5/7] Test custom core plugin config overrides default core plugin config --- __tests__/configurePlugins.test.js | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js index fc7ebf066..89530b2ef 100644 --- a/__tests__/configurePlugins.test.js +++ b/__tests__/configurePlugins.test.js @@ -122,3 +122,52 @@ test('plugins are configured with their default configuration if no custom confi { plugin: 'backgroundPosition', options: {} }, ]) }) + +test('custom plugin configuration overrides default plugin configuration', () => { + const plugins = { + fontSize: options => { + return { + plugin: 'fontSize', + options, + } + }, + display: options => { + return { + plugin: 'display', + options, + } + }, + backgroundPosition: options => { + return { + plugin: 'backgroundPosition', + options, + } + }, + } + + const configuredPlugins = configurePlugins(plugins, { + fontSize: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + display: { variants: ['responsive'] }, + backgroundPosition: {}, + }, { + fontSize: { + variants: ['focus', 'active'], + values: { 'sm': '.75rem', 'md': '1rem', 'lg': '1.5rem' }, + }, + }) + + expect(configuredPlugins).toEqual([ + { + plugin: 'fontSize', + options: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + }, + { plugin: 'display', options: { variants: ['responsive'] } }, + { plugin: 'backgroundPosition', options: {} }, + ]) +}) From ef833125e6c3891ae4cc45be085bef7301e1a483 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 13:36:41 -0500 Subject: [PATCH 6/7] Use configurePlugins when loading core plugins --- src/corePlugins.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/corePlugins.js b/src/corePlugins.js index 777ba80cf..66782520b 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -49,15 +49,20 @@ import whitespace from './plugins/whitespace' import width from './plugins/width' import zIndex from './plugins/zIndex' +import _ from 'lodash' +import configurePlugins from './util/configurePlugins' + function loadPlugins({ theme, variants, corePlugins }, plugins) { - return Object.keys(plugins) - .filter(plugin => corePlugins[plugin] !== false) - .map(plugin => - plugins[plugin]({ + const defaultCorePluginConfig = _.fromPairs(Object.keys(plugins) + .map(plugin => [ + plugin, + { values: theme[plugin], variants: variants[plugin], - }) - ) + } + ])) + + return configurePlugins(plugins, corePlugins, defaultCorePluginConfig) } export default function(config) { From 44bccca3d045668bcb785ce386766ecc1a16a0bb Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 5 Feb 2019 13:37:05 -0500 Subject: [PATCH 7/7] Fix code style --- __tests__/configurePlugins.test.js | 48 +++++++++++++++++------------- src/corePlugins.js | 9 +++--- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/__tests__/configurePlugins.test.js b/__tests__/configurePlugins.test.js index 89530b2ef..a06ea79d6 100644 --- a/__tests__/configurePlugins.test.js +++ b/__tests__/configurePlugins.test.js @@ -100,15 +100,19 @@ test('plugins are configured with their default configuration if no custom confi }, } - const configuredPlugins = configurePlugins(plugins, { - fontSize: { - variants: ['responsive', 'hover'], - values: { '12': '12px', '14': '14px', '16': '16px' }, + const configuredPlugins = configurePlugins( + plugins, + { + fontSize: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + backgroundPosition: {}, }, - backgroundPosition: {}, - }, { - display: { variants: ['responsive'] }, - }) + { + display: { variants: ['responsive'] }, + } + ) expect(configuredPlugins).toEqual([ { @@ -145,19 +149,23 @@ test('custom plugin configuration overrides default plugin configuration', () => }, } - const configuredPlugins = configurePlugins(plugins, { - fontSize: { - variants: ['responsive', 'hover'], - values: { '12': '12px', '14': '14px', '16': '16px' }, + const configuredPlugins = configurePlugins( + plugins, + { + fontSize: { + variants: ['responsive', 'hover'], + values: { '12': '12px', '14': '14px', '16': '16px' }, + }, + display: { variants: ['responsive'] }, + backgroundPosition: {}, }, - display: { variants: ['responsive'] }, - backgroundPosition: {}, - }, { - fontSize: { - variants: ['focus', 'active'], - values: { 'sm': '.75rem', 'md': '1rem', 'lg': '1.5rem' }, - }, - }) + { + fontSize: { + variants: ['focus', 'active'], + values: { sm: '.75rem', md: '1rem', lg: '1.5rem' }, + }, + } + ) expect(configuredPlugins).toEqual([ { diff --git a/src/corePlugins.js b/src/corePlugins.js index 66782520b..a27a56998 100644 --- a/src/corePlugins.js +++ b/src/corePlugins.js @@ -53,14 +53,15 @@ import _ from 'lodash' import configurePlugins from './util/configurePlugins' function loadPlugins({ theme, variants, corePlugins }, plugins) { - const defaultCorePluginConfig = _.fromPairs(Object.keys(plugins) - .map(plugin => [ + const defaultCorePluginConfig = _.fromPairs( + Object.keys(plugins).map(plugin => [ plugin, { values: theme[plugin], variants: variants[plugin], - } - ])) + }, + ]) + ) return configurePlugins(plugins, corePlugins, defaultCorePluginConfig) }