@@ -19,12 +19,12 @@ import {
1919 normalizeSourceMap ,
2020 getModulesPlugins ,
2121 getImportPrefix ,
22- getIcssItemReplacer ,
2322 getFilter ,
24- getRuntimeCode ,
23+ getApiCode ,
2524 getImportCode ,
2625 getModuleCode ,
2726 getExportCode ,
27+ prepareCode ,
2828} from './utils' ;
2929import Warning from './Warning' ;
3030import CssSyntaxError from './CssSyntaxError' ;
@@ -37,14 +37,9 @@ export default function loader(content, map, meta) {
3737 const callback = this . async ( ) ;
3838 const sourceMap = options . sourceMap || false ;
3939
40- if ( sourceMap && map ) {
41- // eslint-disable-next-line no-param-reassign
42- map = normalizeSourceMap ( map ) ;
43- } else {
44- // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
45- // eslint-disable-next-line no-param-reassign
46- map = null ;
47- }
40+ // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
41+ // eslint-disable-next-line no-param-reassign
42+ map = sourceMap && map ? normalizeSourceMap ( map ) : null ;
4843
4944 // Reuse CSS AST (PostCSS AST e.g 'postcss-loader') to avoid reparsing
5045 if ( meta ) {
@@ -62,11 +57,22 @@ export default function loader(content, map, meta) {
6257 plugins . push ( ...getModulesPlugins ( options , this ) ) ;
6358 }
6459
65- plugins . push ( icssParser ( ) ) ;
60+ // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
61+ const importPrefix = getImportPrefix ( this , options . importLoaders ) ;
62+
63+ plugins . push (
64+ icssParser ( {
65+ loaderContext : this ,
66+ importPrefix,
67+ exportLocalsStyle : options . exportLocalsStyle ,
68+ } )
69+ ) ;
6670
6771 if ( options . import !== false ) {
6872 plugins . push (
6973 importParser ( {
74+ loaderContext : this ,
75+ importPrefix,
7076 filter : getFilter ( options . import , this . resourcePath ) ,
7177 } )
7278 ) ;
@@ -75,6 +81,7 @@ export default function loader(content, map, meta) {
7581 if ( options . url !== false ) {
7682 plugins . push (
7783 urlParser ( {
84+ loaderContext : this ,
7885 filter : getFilter ( options . url , this . resourcePath , ( value ) =>
7986 isUrlRequest ( value )
8087 ) ,
@@ -108,36 +115,37 @@ export default function loader(content, map, meta) {
108115 result . messages = [ ] ;
109116 }
110117
111- const {
112- exportOnlyLocals : onlyLocals ,
113- exportLocalsStyle : localsStyle ,
114- } = options ;
115- // Run other loader (`postcss-loader`, `sass-loader` and etc) for importing CSS
116- const importPrefix = getImportPrefix ( this , options . importLoaders ) ;
117- // Prepare replacer to change from `___CSS_LOADER_IMPORT___INDEX___` to `require('./file.css').locals`
118- const replacer = getIcssItemReplacer (
119- result ,
120- this ,
121- importPrefix ,
122- onlyLocals
123- ) ;
118+ const { exportOnlyLocals : onlyLocals } = options ;
124119
125- // eslint-disable-next-line no-param-reassign
126- result . cssLoaderBuildInfo = {
127- onlyLocals,
128- localsStyle,
129- importPrefix,
130- replacer,
131- } ;
120+ const importItems = result . messages
121+ . filter ( ( message ) => ( message . type === 'import' ? message : false ) )
122+ . reduce ( ( accumulator , currentValue ) => {
123+ accumulator . push ( currentValue . import ) ;
124+
125+ return accumulator ;
126+ } , [ ] ) ;
127+ const exportItems = result . messages
128+ . filter ( ( message ) => ( message . type === 'export' ? message : false ) )
129+ . reduce ( ( accumulator , currentValue ) => {
130+ accumulator . push ( currentValue . export ) ;
131+
132+ return accumulator ;
133+ } , [ ] ) ;
132134
133- const runtimeCode = getRuntimeCode ( result , this , sourceMap ) ;
134- const importCode = getImportCode ( result , this ) ;
135- const moduleCode = getModuleCode ( result ) ;
136- const exportsCode = getExportCode ( result ) ;
135+ const importCode = getImportCode ( importItems , onlyLocals ) ;
136+ const moduleCode = getModuleCode ( result , sourceMap , onlyLocals ) ;
137+ const exportCode = getExportCode ( exportItems , onlyLocals ) ;
138+ const apiCode = getApiCode ( this , sourceMap , onlyLocals ) ;
137139
138140 return callback (
139141 null ,
140- runtimeCode + importCode + moduleCode + exportsCode
142+ prepareCode (
143+ { apiCode, importCode, moduleCode, exportCode } ,
144+ result . messages ,
145+ this ,
146+ importPrefix ,
147+ onlyLocals
148+ )
141149 ) ;
142150 } )
143151 . catch ( ( error ) => {
0 commit comments