11import some from 'lodash/some'
22import mergeWith from 'lodash/mergeWith'
3- import assignWith from 'lodash/assignWith'
43import isFunction from 'lodash/isFunction'
54import isUndefined from 'lodash/isUndefined'
65import defaults from 'lodash/defaults'
76import map from 'lodash/map'
8- import reduce from 'lodash/reduce '
7+ import get from 'lodash/get '
98import toPath from 'lodash/toPath'
109import negateValue from './negateValue'
1110
@@ -28,29 +27,30 @@ function value(valueToResolve, ...args) {
2827}
2928
3029function mergeThemes ( themes ) {
31- const theme = ( ( { extend, ...t } ) => t ) ( themes . reduce ( ( merged , t ) => {
32- return defaults ( merged , t )
33- } , { } ) )
30+ const theme = ( ( { extend : _ , ...t } ) => t ) (
31+ themes . reduce ( ( merged , t ) => {
32+ return defaults ( merged , t )
33+ } , { } )
34+ )
3435
35- // In order to resolve n config objects, we combine all of their `extend` properties
36- // into arrays instead of objects so they aren't overridden.
37- const extend = themes . reduce ( ( merged , { extend } ) => {
38- return mergeWith ( merged , extend , ( mergedValue , extendValue ) => {
39- if ( isUndefined ( mergedValue ) ) {
40- return [ extendValue ]
41- }
36+ return {
37+ ...theme ,
4238
43- if ( Array . isArray ( mergedValue ) ) {
44- return [ ...mergedValue , extendValue ]
45- }
39+ // In order to resolve n config objects, we combine all of their `extend` properties
40+ // into arrays instead of objects so they aren't overridden.
41+ extend : themes . reduce ( ( merged , { extend } ) => {
42+ return mergeWith ( merged , extend , ( mergedValue , extendValue ) => {
43+ if ( isUndefined ( mergedValue ) ) {
44+ return [ extendValue ]
45+ }
4646
47- return [ mergedValue , extendValue ]
48- } )
49- } , { } )
47+ if ( Array . isArray ( mergedValue ) ) {
48+ return [ ... mergedValue , extendValue ]
49+ }
5050
51- return {
52- ... theme ,
53- extend ,
51+ return [ mergedValue , extendValue ]
52+ } )
53+ } , { } ) ,
5454 }
5555}
5656
@@ -97,7 +97,10 @@ function resolveFunctionKeys(object) {
9797export default function resolveConfig ( configs ) {
9898 return defaults (
9999 {
100- theme : resolveFunctionKeys ( mergeExtensions ( mergeThemes ( map ( configs , 'theme' ) ) ) ) ,
100+ // Need to get a default empty object if the config has no theme
101+ theme : resolveFunctionKeys (
102+ mergeExtensions ( mergeThemes ( map ( configs , t => get ( t , 'theme' , { } ) ) ) )
103+ ) ,
101104 variants : ( firstVariants => {
102105 return Array . isArray ( firstVariants )
103106 ? firstVariants
0 commit comments