@@ -122,32 +122,44 @@ const getMessages = aliases =>
122
122
. map ( name => ( { plugin, type : "icss-scoped" , name, value : aliases [ name ] } ) )
123
123
. reduce ( ( acc , msg ) => [ ...acc , msg ] , [ ] ) ;
124
124
125
+ const getContract = ( result , type , prop , value ) =>
126
+ result . messages
127
+ . filter ( msg => msg . type === type )
128
+ . reduce (
129
+ ( acc , msg ) => Object . assign ( { } , acc , { [ msg [ prop ] ] : msg [ value ] } ) ,
130
+ { }
131
+ ) ;
132
+
133
+ const composeAliases = ( aliases , composed ) =>
134
+ Object . keys ( aliases ) . reduce (
135
+ ( acc , name ) =>
136
+ Object . assign ( { } , acc , {
137
+ [ name ] : aliases [ name ] + ( composed [ name ] ? ` ${ composed [ name ] } ` : "" )
138
+ } ) ,
139
+ { }
140
+ ) ;
141
+
125
142
module . exports = postcss . plugin ( plugin , ( options = { } ) => ( css , result ) => {
126
143
const generateScopedName =
127
144
options . generateScopedName ||
128
145
genericNames ( "[name]__[local]---[hash:base64:5]" ) ;
129
146
const input = ( css && css . source && css . source . input ) || { } ;
147
+ const icssScoped = getContract ( result , "icss-scoped" , "name" , "value" ) ;
148
+ const icssComposed = getContract ( result , "icss-composed" , "name" , "value" ) ;
149
+ const icssValue = getContract ( result , "icss-value" , "value" , "name" ) ;
130
150
const aliases = { } ;
131
151
walkRules ( css , rule => {
132
152
const getAlias = name => {
133
153
if ( aliases [ name ] ) {
134
154
return aliases [ name ] ;
135
155
}
136
156
// icss-value contract
137
- if (
138
- result . messages . find (
139
- msg => msg . type === "icss-value" && msg . value === name
140
- )
141
- ) {
157
+ if ( icssValue [ name ] ) {
142
158
return name ;
143
159
}
144
160
const alias = generateScopedName ( name , input . from , input . css ) ;
145
161
// icss-scoped contract
146
- if (
147
- result . messages . find (
148
- msg => msg . type === "icss-scoped" && msg . name === name
149
- )
150
- ) {
162
+ if ( icssScoped [ name ] ) {
151
163
result . warn ( `'${ name } ' already declared` , { node : rule } ) ;
152
164
}
153
165
aliases [ name ] = alias ;
@@ -163,14 +175,7 @@ module.exports = postcss.plugin(plugin, (options = {}) => (css, result) => {
163
175
throw rule . error ( e . message ) ;
164
176
}
165
177
} ) ;
166
- // icss-composed contract
167
- const composedAliases = Object . keys ( aliases ) . reduce ( ( acc , name ) => {
168
- const composedMsg = result . messages . find (
169
- msg => msg . type === "icss-composed" && msg . name === name
170
- ) ;
171
- acc [ name ] = aliases [ name ] + ( composedMsg ? ` ${ composedMsg . value } ` : "" ) ;
172
- return acc ;
173
- } , { } ) ;
174
178
result . messages . push ( ...getMessages ( aliases ) ) ;
175
- addExports ( css , composedAliases ) ;
179
+ // icss-composed contract
180
+ addExports ( css , composeAliases ( aliases , icssComposed ) ) ;
176
181
} ) ;
0 commit comments