@@ -49,7 +49,6 @@ module.exports = function loader(content, map) {
4949 }
5050 /* eslint-enable no-param-reassign */
5151
52- const parserOptions = { } ;
5352 const resolveImport = options . import !== false ;
5453 const resolveUrl = options . url !== false ;
5554 const loaderContext = this ;
@@ -98,7 +97,7 @@ module.exports = function loader(content, map) {
9897 plugins . push ( urlParser ( ) ) ;
9998 }
10099
101- plugins . push ( icssParser ( parserOptions ) ) ;
100+ plugins . push ( icssParser ( ) ) ;
102101
103102 postcss ( plugins )
104103 . process ( content , {
@@ -125,34 +124,39 @@ module.exports = function loader(content, map) {
125124
126125 const messages = result . messages || [ ] ;
127126 const { camelCase, exportOnlyLocals, importLoaders } = options ;
128- const { importItems } = parserOptions ;
129127
130128 // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
131129 const importUrlPrefix = getImportPrefix ( this , importLoaders ) ;
132130
133131 // 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 ) ;
136134 const idx = Number ( match [ 1 ] ) ;
137135
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 ;
140144 }
141145
142- const importItem = importItems [ idx ] ;
143- const importUrl = importUrlPrefix + importItem . url ;
146+ const { item } = message ;
147+ const importUrl = importUrlPrefix + item . url ;
144148
145149 if ( exportOnlyLocals ) {
146150 return `" + require(${ stringifyRequest (
147151 this ,
148152 importUrl
149- ) } )[${ JSON . stringify ( importItem . export ) } ] + "`;
153+ ) } )[${ JSON . stringify ( item . export ) } ] + "`;
150154 }
151155
152156 return `" + require(${ stringifyRequest (
153157 this ,
154158 importUrl
155- ) } ).locals[${ JSON . stringify ( importItem . export ) } ] + "`;
159+ ) } ).locals[${ JSON . stringify ( item . export ) } ] + "`;
156160 } ;
157161
158162 let exportCode = compileExports ( messages , camelCase , ( valueAsString ) =>
@@ -166,22 +170,11 @@ module.exports = function loader(content, map) {
166170 ) ;
167171 }
168172
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 || '' ;
185178
186179 if ( ! isUrlRequest ( url ) ) {
187180 return `exports.push([module.id, ${ JSON . stringify (
@@ -207,7 +200,7 @@ module.exports = function loader(content, map) {
207200 let urlEscapeHelperCode = '' ;
208201
209202 messages
210- . filter ( ( message ) => message . type === 'url' && resolveUrl )
203+ . filter ( ( message ) => message . type === 'url' )
211204 . forEach ( ( message ) => {
212205 if ( ! urlEscapeHelperCode ) {
213206 urlEscapeHelperCode = `var escape = require(${ stringifyRequest (
0 commit comments