@@ -238,74 +238,73 @@ function getImportCode(buildInfo) {
238
238
return importItems . length > 0 ? `${ importItems . join ( '\n' ) } \n` : '' ;
239
239
}
240
240
241
- function getModuleCode ( buildInfo ) {
242
- const { onlyLocals } = buildInfo ;
243
-
244
- if ( onlyLocals ) {
245
- return '' ;
246
- }
241
+ function getExportType ( onlyLocals ) {
242
+ return onlyLocals ? 'module.exports' : 'exports.locals' ;
243
+ }
247
244
248
- const moduleItems = [ ] ;
245
+ function getIcssReplacer ( item , buildInfo ) {
246
+ const { importPrefix, onlyLocals, loaderContext } = buildInfo ;
247
+ const importUrl = importPrefix + urlToRequest ( item . url ) ;
249
248
250
- const { result, sourceMap } = buildInfo ;
249
+ return ( ) =>
250
+ onlyLocals
251
+ ? `" + require(${ stringifyRequest (
252
+ loaderContext ,
253
+ importUrl
254
+ ) } )[${ JSON . stringify ( item . export ) } ] + "`
255
+ : `" + require(${ stringifyRequest (
256
+ loaderContext ,
257
+ importUrl
258
+ ) } ).locals[${ JSON . stringify ( item . export ) } ] + "`;
259
+ }
251
260
252
- let cssAsString = JSON . stringify ( result . css ) ;
261
+ function prepareCode ( file , buildInfo ) {
262
+ const { apiCode, importCode } = file ;
263
+ let { moduleCode, exportCode } = file ;
264
+ const { result } = buildInfo ;
253
265
254
266
result . messages
255
267
. filter (
256
- ( message ) =>
257
- message . pluginName === 'postcss-url-parser' && message . type === 'url'
268
+ ( message ) => message . type === 'icss-import' || message . type === 'url'
258
269
)
259
270
. forEach ( ( message ) => {
260
- const { placeholder } = message . item ;
261
-
262
- cssAsString = cssAsString . replace (
263
- new RegExp ( placeholder , 'g' ) ,
264
- ( ) => `" + ${ placeholder } + "`
265
- ) ;
266
- } ) ;
267
-
268
- moduleItems . push (
269
- `exports.push([module.id, ${ cssAsString } , ""${
270
- sourceMap && result . map ? `,${ result . map } ` : ''
271
- } ]);`
272
- ) ;
271
+ // Replace all urls on `require`
272
+ if ( message . type === 'url' ) {
273
+ const { placeholder } = message . item ;
273
274
274
- return moduleItems . length > 0 ? `${ moduleItems . join ( '\n' ) } \n` : '' ;
275
- }
275
+ if ( moduleCode ) {
276
+ // eslint-disable-next-line no-param-reassign
277
+ moduleCode = moduleCode . replace (
278
+ new RegExp ( placeholder , 'g' ) ,
279
+ ( ) => `" + ${ placeholder } + "`
280
+ ) ;
281
+ }
282
+ }
276
283
277
- function getExportType ( onlyLocals ) {
278
- return onlyLocals ? 'module.exports' : 'exports.locals' ;
279
- }
284
+ // Replace external ICSS import on `require`
285
+ if ( message . type === 'icss-import' ) {
286
+ const { item } = message ;
287
+ const replacer = getIcssReplacer ( item , buildInfo ) ;
280
288
281
- function prepareCode ( buildInfo , code ) {
282
- const { result, importPrefix, onlyLocals, loaderContext } = buildInfo ;
289
+ if ( moduleCode ) {
290
+ // eslint-disable-next-line no-param-reassign
291
+ moduleCode = moduleCode . replace (
292
+ new RegExp ( `___CSS_LOADER_IMPORT___(${ item . index } )___` , 'g' ) ,
293
+ replacer
294
+ ) ;
295
+ }
283
296
284
- // replace external ICSS import on `require`
285
- result . messages
286
- . filter ( ( message ) => message . type === 'icss-import' )
287
- . forEach ( ( message ) => {
288
- const { item } = message ;
289
- const importUrl = importPrefix + urlToRequest ( item . url ) ;
290
-
291
- // eslint-disable-next-line no-param-reassign
292
- code = code . replace (
293
- new RegExp ( `___CSS_LOADER_IMPORT___(${ item . index } )___` , 'g' ) ,
294
- ( ) => {
295
- return onlyLocals
296
- ? `" + require(${ stringifyRequest (
297
- loaderContext ,
298
- importUrl
299
- ) } )[${ JSON . stringify ( item . export ) } ] + "`
300
- : `" + require(${ stringifyRequest (
301
- loaderContext ,
302
- importUrl
303
- ) } ).locals[${ JSON . stringify ( item . export ) } ] + "`;
297
+ if ( exportCode ) {
298
+ // eslint-disable-next-line no-param-reassign
299
+ exportCode = exportCode . replace (
300
+ new RegExp ( `___CSS_LOADER_IMPORT___(${ item . index } )___` , 'g' ) ,
301
+ replacer
302
+ ) ;
304
303
}
305
- ) ;
304
+ }
306
305
} ) ;
307
306
308
- return code ;
307
+ return [ apiCode , importCode , moduleCode , exportCode ] . filter ( Boolean ) . join ( '' ) ;
309
308
}
310
309
311
310
export {
@@ -315,7 +314,6 @@ export {
315
314
getModulesPlugins ,
316
315
normalizeSourceMap ,
317
316
getImportCode ,
318
- getModuleCode ,
319
317
getExportType ,
320
318
prepareCode ,
321
319
} ;
0 commit comments