@@ -49,7 +49,6 @@ module.exports = function loader(content, map) {
49
49
}
50
50
/* eslint-enable no-param-reassign */
51
51
52
- const parserOptions = { } ;
53
52
const resolveImport = options . import !== false ;
54
53
const resolveUrl = options . url !== false ;
55
54
const loaderContext = this ;
@@ -98,7 +97,7 @@ module.exports = function loader(content, map) {
98
97
plugins . push ( urlParser ( ) ) ;
99
98
}
100
99
101
- plugins . push ( icssParser ( parserOptions ) ) ;
100
+ plugins . push ( icssParser ( ) ) ;
102
101
103
102
postcss ( plugins )
104
103
. process ( content , {
@@ -125,34 +124,39 @@ module.exports = function loader(content, map) {
125
124
126
125
const messages = result . messages || [ ] ;
127
126
const { camelCase, exportOnlyLocals, importLoaders } = options ;
128
- const { importItems } = parserOptions ;
129
127
130
128
// Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
131
129
const importUrlPrefix = getImportPrefix ( this , importLoaders ) ;
132
130
133
131
// Prepare replacer to change from `___CSS_LOADER_IMPORT___INDEX___` to `require('./file.css').locals`
134
- const importItemReplacer = ( item ) => {
135
- const match = placholderRegExps . importItem . exec ( item ) ;
132
+ const importItemReplacer = ( placeholder ) => {
133
+ const match = placholderRegExps . importItem . exec ( placeholder ) ;
136
134
const idx = Number ( match [ 1 ] ) ;
137
135
138
- if ( ! importItems [ idx ] ) {
139
- return item ;
136
+ const message = messages . find (
137
+ // eslint-disable-next-line no-shadow
138
+ ( message ) =>
139
+ message . type === 'icss-import' && message . item . index === idx
140
+ ) ;
141
+
142
+ if ( ! message ) {
143
+ return placeholder ;
140
144
}
141
145
142
- const importItem = importItems [ idx ] ;
143
- const importUrl = importUrlPrefix + importItem . url ;
146
+ const { item } = message ;
147
+ const importUrl = importUrlPrefix + item . url ;
144
148
145
149
if ( exportOnlyLocals ) {
146
150
return `" + require(${ stringifyRequest (
147
151
this ,
148
152
importUrl
149
- ) } )[${ JSON . stringify ( importItem . export ) } ] + "`;
153
+ ) } )[${ JSON . stringify ( item . export ) } ] + "`;
150
154
}
151
155
152
156
return `" + require(${ stringifyRequest (
153
157
this ,
154
158
importUrl
155
- ) } ).locals[${ JSON . stringify ( importItem . export ) } ] + "`;
159
+ ) } ).locals[${ JSON . stringify ( item . export ) } ] + "`;
156
160
} ;
157
161
158
162
let exportCode = compileExports ( messages , camelCase , ( valueAsString ) =>
@@ -166,22 +170,11 @@ module.exports = function loader(content, map) {
166
170
) ;
167
171
}
168
172
169
- const alreadyImported = { } ;
170
- const importCode = importItems
171
- . filter ( ( imp ) => {
172
- if ( ! imp . media ) {
173
- if ( alreadyImported [ imp . url ] ) {
174
- return false ;
175
- }
176
-
177
- alreadyImported [ imp . url ] = true ;
178
- }
179
-
180
- return true ;
181
- } )
182
- . map ( ( imp ) => {
183
- const { url } = imp ;
184
- const media = imp . media || '' ;
173
+ const importCode = messages
174
+ . filter ( ( message ) => message . type === 'import' )
175
+ . map ( ( message ) => {
176
+ const { url } = message . item ;
177
+ const media = message . item . media || '' ;
185
178
186
179
if ( ! isUrlRequest ( url ) ) {
187
180
return `exports.push([module.id, ${ JSON . stringify (
@@ -207,7 +200,7 @@ module.exports = function loader(content, map) {
207
200
let urlEscapeHelperCode = '' ;
208
201
209
202
messages
210
- . filter ( ( message ) => message . type === 'url' && resolveUrl )
203
+ . filter ( ( message ) => message . type === 'url' )
211
204
. forEach ( ( message ) => {
212
205
if ( ! urlEscapeHelperCode ) {
213
206
urlEscapeHelperCode = `var escape = require(${ stringifyRequest (
0 commit comments