@@ -122,32 +122,44 @@ const getMessages = aliases =>
122122 . map ( name => ( { plugin, type : "icss-scoped" , name, value : aliases [ name ] } ) )
123123 . reduce ( ( acc , msg ) => [ ...acc , msg ] , [ ] ) ;
124124
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+
125142module . exports = postcss . plugin ( plugin , ( options = { } ) => ( css , result ) => {
126143 const generateScopedName =
127144 options . generateScopedName ||
128145 genericNames ( "[name]__[local]---[hash:base64:5]" ) ;
129146 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" ) ;
130150 const aliases = { } ;
131151 walkRules ( css , rule => {
132152 const getAlias = name => {
133153 if ( aliases [ name ] ) {
134154 return aliases [ name ] ;
135155 }
136156 // icss-value contract
137- if (
138- result . messages . find (
139- msg => msg . type === "icss-value" && msg . value === name
140- )
141- ) {
157+ if ( icssValue [ name ] ) {
142158 return name ;
143159 }
144160 const alias = generateScopedName ( name , input . from , input . css ) ;
145161 // icss-scoped contract
146- if (
147- result . messages . find (
148- msg => msg . type === "icss-scoped" && msg . name === name
149- )
150- ) {
162+ if ( icssScoped [ name ] ) {
151163 result . warn ( `'${ name } ' already declared` , { node : rule } ) ;
152164 }
153165 aliases [ name ] = alias ;
@@ -163,14 +175,7 @@ module.exports = postcss.plugin(plugin, (options = {}) => (css, result) => {
163175 throw rule . error ( e . message ) ;
164176 }
165177 } ) ;
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- } , { } ) ;
174178 result . messages . push ( ...getMessages ( aliases ) ) ;
175- addExports ( css , composedAliases ) ;
179+ // icss-composed contract
180+ addExports ( css , composeAliases ( aliases , icssComposed ) ) ;
176181} ) ;
0 commit comments