Skip to content

Commit 509b698

Browse files
committed
Simplify resolveConfig slightly, try to catch more in tests
1 parent a4e896e commit 509b698

File tree

2 files changed

+41
-27
lines changed

2 files changed

+41
-27
lines changed

__tests__/resolveConfig.test.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,12 @@ test('theme values in the extend section are lazily evaluated', () => {
767767
blue: 'blue',
768768
},
769769
extend: {
770+
colors: {
771+
orange: 'orange',
772+
},
770773
borderColor: theme => ({
771-
default: theme('colors.red'),
774+
foo: theme('colors.orange'),
775+
bar: theme('colors.red'),
772776
}),
773777
},
774778
},
@@ -802,12 +806,16 @@ test('theme values in the extend section are lazily evaluated', () => {
802806
separator: ':',
803807
theme: {
804808
colors: {
809+
orange: 'orange',
805810
red: 'red',
806811
green: 'green',
807812
blue: 'blue',
808813
},
809814
borderColor: {
810-
default: 'red',
815+
default: 'currentColor',
816+
foo: 'orange',
817+
bar: 'red',
818+
orange: 'orange',
811819
red: 'red',
812820
green: 'green',
813821
blue: 'blue',

src/util/resolveConfig.js

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,45 @@ import defaults from 'lodash/defaults'
44
import map from 'lodash/map'
55
import get from 'lodash/get'
66

7-
function resolveFunctionKeys(object) {
8-
const getKey = (key, defaultValue) => get(object, key, defaultValue)
9-
10-
return Object.keys(object).reduce((resolved, key) => {
11-
return {
12-
...resolved,
13-
[key]: isFunction(object[key]) ? object[key](getKey) : object[key],
14-
}
15-
}, {})
7+
function resolveConfig(configs) {
8+
return defaults(
9+
{
10+
theme: resolveFunctionKeys(mergeExtensions(defaults(...map(configs, 'theme')))),
11+
variants: defaults(...map(configs, 'variants')),
12+
},
13+
...configs
14+
)
1615
}
1716

1817
function mergeExtensions({ extend, ...theme }) {
19-
return mergeWith({}, theme, extend, (_, extensions, key) => {
20-
if (isFunction(theme[key]) || (extend && isFunction(extend[key]))) {
21-
return mergedTheme => ({
22-
...(isFunction(theme[key]) ? theme[key](mergedTheme) : theme[key]),
23-
...(extend && isFunction(extend[key]) ? extend[key](mergedTheme) : extensions),
24-
})
25-
} else {
18+
return mergeWith(theme, extend, (themeValue, extensions, key) => {
19+
if (!isFunction(themeValue) && !(isFunction(extensions))) {
2620
return {
27-
...theme[key],
21+
...themeValue,
2822
...extensions,
2923
}
3024
}
25+
26+
return resolveThemePath => ({
27+
...value(themeValue, resolveThemePath),
28+
...value(extensions, resolveThemePath),
29+
})
3130
})
3231
}
3332

34-
export default function(configs) {
35-
return defaults(
36-
{
37-
theme: resolveFunctionKeys(mergeExtensions(defaults(...map(configs, 'theme')))),
38-
variants: defaults(...map(configs, 'variants')),
39-
},
40-
...configs
41-
)
33+
function resolveFunctionKeys(object) {
34+
const resolveObjectPath = (key, defaultValue) => get(object, key, defaultValue)
35+
36+
return Object.keys(object).reduce((resolved, key) => {
37+
return {
38+
...resolved,
39+
[key]: isFunction(object[key]) ? object[key](resolveObjectPath) : object[key],
40+
}
41+
}, {})
42+
}
43+
44+
function value(valueToResolve, ...args) {
45+
return isFunction(valueToResolve) ? valueToResolve(...args) : valueToResolve
4246
}
47+
48+
export default resolveConfig

0 commit comments

Comments
 (0)