@@ -11,20 +11,20 @@ import {
1111 isUrlRequest ,
1212 getRemainingRequest ,
1313 getCurrentRequest ,
14- stringifyRequest ,
1514} from 'loader-utils' ;
1615
1716import schema from './options.json' ;
1817import { importParser , icssParser , urlParser } from './plugins' ;
1918import {
2019 normalizeSourceMap ,
2120 getModulesPlugins ,
22- placholderRegExps ,
2321 getImportPrefix ,
24- getImportItemReplacer ,
22+ getIcssItemReplacer ,
2523 getFilter ,
26- getExports ,
27- getImports ,
24+ getRuntimeCode ,
25+ getImportCode ,
26+ getModuleCode ,
27+ getExportCode ,
2828} from './utils' ;
2929import Warning from './Warning' ;
3030import CssSyntaxError from './CssSyntaxError' ;
@@ -103,71 +103,37 @@ export default function loader(content, map, meta) {
103103 . warnings ( )
104104 . forEach ( ( warning ) => this . emitWarning ( new Warning ( warning ) ) ) ;
105105
106- const messages = result . messages || [ ] ;
107- const { exportOnlyLocals, importLoaders, exportLocalsStyle } = options ;
106+ if ( ! result . messages ) {
107+ // eslint-disable-next-line no-param-reassign
108+ result . messages = [ ] ;
109+ }
108110
111+ const {
112+ exportOnlyLocals : onlyLocals ,
113+ exportLocalsStyle : localsStyle ,
114+ } = options ;
109115 // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
110- const importPrefix = getImportPrefix ( this , importLoaders ) ;
111-
116+ const importPrefix = getImportPrefix ( this , options . importLoaders ) ;
112117 // Prepare replacer to change from `___CSS_LOADER_IMPORT___INDEX___` to `require('./file.css').locals`
113- const importItemReplacer = getImportItemReplacer (
114- messages ,
118+ const replacer = getIcssItemReplacer (
119+ result ,
115120 this ,
116121 importPrefix ,
117- exportOnlyLocals
118- ) ;
119-
120- const exportItems = getExports (
121- messages ,
122- exportLocalsStyle ,
123- importItemReplacer
124- ) ;
125-
126- const exportsCode =
127- exportItems . length > 0
128- ? exportOnlyLocals
129- ? `module.exports = {\n${ exportItems . join ( ',\n' ) } \n};`
130- : `// Exports\nexports.locals = {\n${ exportItems . join ( ',\n' ) } \n};`
131- : '' ;
132-
133- if ( exportOnlyLocals ) {
134- return callback ( null , exportsCode ) ;
135- }
136-
137- let cssAsString = JSON . stringify ( result . css ) . replace (
138- placholderRegExps . importItemG ,
139- importItemReplacer
122+ onlyLocals
140123 ) ;
141124
142- const importItems = getImports (
143- messages ,
125+ // eslint-disable-next-line no-param-reassign
126+ result . cssLoaderBuildInfo = {
127+ onlyLocals,
128+ localsStyle,
144129 importPrefix,
145- this ,
146- ( message ) => {
147- if ( message . type !== 'url' ) {
148- return ;
149- }
130+ replacer,
131+ } ;
150132
151- const { placeholder } = message . item ;
152-
153- cssAsString = cssAsString . replace (
154- new RegExp ( placeholder , 'g' ) ,
155- ( ) => `" + ${ placeholder } + "`
156- ) ;
157- }
158- ) ;
159-
160- const runtimeCode = `exports = module.exports = require(${ stringifyRequest (
161- this ,
162- require . resolve ( './runtime/api' )
163- ) } )(${ ! ! sourceMap } );\n`;
164- const importCode =
165- importItems . length > 0
166- ? `// Imports\n${ importItems . join ( '\n' ) } \n\n`
167- : '' ;
168- const moduleCode = `// Module\nexports.push([module.id, ${ cssAsString } , ""${
169- result . map ? `,${ result . map } ` : ''
170- } ]);\n\n`;
133+ const runtimeCode = getRuntimeCode ( result , this , sourceMap ) ;
134+ const importCode = getImportCode ( result , this ) ;
135+ const moduleCode = getModuleCode ( result ) ;
136+ const exportsCode = getExportCode ( result ) ;
171137
172138 return callback (
173139 null ,
0 commit comments