1
1
import postcss from 'postcss' ;
2
2
import { extractICSS , replaceValueSymbols , replaceSymbols } from 'icss-utils' ;
3
+ import { urlToRequest } from 'loader-utils' ;
3
4
4
5
const pluginName = 'postcss-icss-parser' ;
5
6
@@ -10,13 +11,34 @@ export default postcss.plugin(
10
11
const importReplacements = Object . create ( null ) ;
11
12
const { icssImports, icssExports } = extractICSS ( css ) ;
12
13
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 ) ;
15
18
16
- if ( tokens . length === 0 ) {
17
- return ;
18
- }
19
+ if ( tokens . length === 0 ) {
20
+ return accumulator ;
21
+ }
19
22
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 ) => {
20
42
const importName = `___CSS_LOADER_ICSS_IMPORT_${ importIndex } ___` ;
21
43
22
44
result . messages . push ( {
@@ -25,9 +47,12 @@ export default postcss.plugin(
25
47
value : { type : 'icss-import' , name : importName , url } ,
26
48
} ) ;
27
49
50
+ const tokenMap = normalizedIcssImports [ url ] ;
51
+ const tokens = Object . keys ( tokenMap ) ;
52
+
28
53
tokens . forEach ( ( token , replacementIndex ) => {
29
54
const name = `___CSS_LOADER_ICSS_IMPORT_${ importIndex } _REPLACEMENT_${ replacementIndex } ___` ;
30
- const localName = icssImports [ url ] [ token ] ;
55
+ const localName = tokenMap [ token ] ;
31
56
32
57
importReplacements [ token ] = name ;
33
58
0 commit comments