Skip to content

Commit 5911bd7

Browse files
committed
Reverse extend array to guarantee correct precedence
1 parent 872fe25 commit 5911bd7

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

__tests__/resolveConfig.test.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1639,3 +1639,75 @@ test('plugin theme extensions are added even if user overrides top-level theme c
16391639
plugins: userConfig.plugins,
16401640
})
16411641
})
1642+
1643+
test('user theme extensions take precedence over plugin theme extensions with the same key', () => {
1644+
const userConfig = {
1645+
theme: {
1646+
extend: {
1647+
width: {
1648+
xl: '6rem'
1649+
},
1650+
},
1651+
},
1652+
plugins: [
1653+
{
1654+
config: {
1655+
theme: {
1656+
extend: {
1657+
width: {
1658+
xl: '4rem',
1659+
}
1660+
}
1661+
},
1662+
},
1663+
handler() {},
1664+
},
1665+
],
1666+
}
1667+
1668+
const defaultConfig = {
1669+
prefix: '',
1670+
important: false,
1671+
separator: ':',
1672+
theme: {
1673+
width: {
1674+
sm: '1rem',
1675+
md: '2rem',
1676+
lg: '3rem',
1677+
},
1678+
screens: {
1679+
mobile: '400px',
1680+
},
1681+
},
1682+
variants: {
1683+
appearance: ['responsive'],
1684+
borderCollapse: [],
1685+
borderColors: ['responsive', 'hover', 'focus'],
1686+
},
1687+
}
1688+
1689+
const result = resolveConfig([userConfig, defaultConfig])
1690+
1691+
expect(result).toEqual({
1692+
prefix: '',
1693+
important: false,
1694+
separator: ':',
1695+
theme: {
1696+
width: {
1697+
sm: '1rem',
1698+
md: '2rem',
1699+
lg: '3rem',
1700+
xl: '6rem',
1701+
},
1702+
screens: {
1703+
mobile: '400px',
1704+
},
1705+
},
1706+
variants: {
1707+
appearance: ['responsive'],
1708+
borderCollapse: [],
1709+
borderColors: ['responsive', 'hover', 'focus'],
1710+
},
1711+
plugins: userConfig.plugins,
1712+
})
1713+
})

src/util/resolveConfig.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ function mergeThemes(themes) {
4545
}
4646

4747
if (Array.isArray(mergedValue)) {
48-
return [...mergedValue, extendValue]
48+
return [extendValue, ...mergedValue]
4949
}
5050

51-
return [mergedValue, extendValue]
51+
return [extendValue, mergedValue]
5252
})
5353
}, {}),
5454
}
@@ -119,7 +119,6 @@ export default function resolveConfig(configs) {
119119

120120
return defaults(
121121
{
122-
// Need to get a default empty object if the config has no theme
123122
theme: resolveFunctionKeys(
124123
mergeExtensions(mergeThemes(map(allConfigs, t => get(t, 'theme', {}))))
125124
),

0 commit comments

Comments
 (0)