11import postcss from 'postcss' ;
22import { extractICSS , replaceValueSymbols , replaceSymbols } from 'icss-utils' ;
3+ import { urlToRequest } from 'loader-utils' ;
34
45const pluginName = 'postcss-icss-parser' ;
56
@@ -10,13 +11,34 @@ export default postcss.plugin(
1011 const importReplacements = Object . create ( null ) ;
1112 const { icssImports, icssExports } = extractICSS ( css ) ;
1213
13- Object . keys ( icssImports ) . forEach ( ( url , importIndex ) => {
14- const tokens = Object . keys ( icssImports [ url ] ) ;
14+ const normalizedIcssImports = Object . keys ( icssImports ) . reduce (
15+ ( accumulator , url ) => {
16+ const tokensMap = icssImports [ url ] ;
17+ const tokens = Object . keys ( tokensMap ) ;
1518
16- if ( tokens . length === 0 ) {
17- return ;
18- }
19+ if ( tokens . length === 0 ) {
20+ return accumulator ;
21+ }
1922
23+ const normalizedUrl = urlToRequest ( url ) ;
24+
25+ if ( ! accumulator [ normalizedUrl ] ) {
26+ // eslint-disable-next-line no-param-reassign
27+ accumulator [ normalizedUrl ] = tokensMap ;
28+ } else {
29+ // eslint-disable-next-line no-param-reassign
30+ accumulator [ normalizedUrl ] = {
31+ ...accumulator [ normalizedUrl ] ,
32+ ...tokensMap ,
33+ } ;
34+ }
35+
36+ return accumulator ;
37+ } ,
38+ { }
39+ ) ;
40+
41+ Object . keys ( normalizedIcssImports ) . forEach ( ( url , importIndex ) => {
2042 const importName = `___CSS_LOADER_ICSS_IMPORT_${ importIndex } ___` ;
2143
2244 result . messages . push ( {
@@ -25,9 +47,12 @@ export default postcss.plugin(
2547 value : { type : 'icss-import' , name : importName , url } ,
2648 } ) ;
2749
50+ const tokenMap = normalizedIcssImports [ url ] ;
51+ const tokens = Object . keys ( tokenMap ) ;
52+
2853 tokens . forEach ( ( token , replacementIndex ) => {
2954 const name = `___CSS_LOADER_ICSS_IMPORT_${ importIndex } _REPLACEMENT_${ replacementIndex } ___` ;
30- const localName = icssImports [ url ] [ token ] ;
55+ const localName = tokenMap [ token ] ;
3156
3257 importReplacements [ token ] = name ;
3358
0 commit comments