@@ -11,20 +11,20 @@ import {
11
11
isUrlRequest ,
12
12
getRemainingRequest ,
13
13
getCurrentRequest ,
14
- stringifyRequest ,
15
14
} from 'loader-utils' ;
16
15
17
16
import schema from './options.json' ;
18
17
import { importParser , icssParser , urlParser } from './plugins' ;
19
18
import {
20
19
normalizeSourceMap ,
21
20
getModulesPlugins ,
22
- placholderRegExps ,
23
21
getImportPrefix ,
24
- getImportItemReplacer ,
22
+ getIcssItemReplacer ,
25
23
getFilter ,
26
- getExports ,
27
- getImports ,
24
+ getRuntimeCode ,
25
+ getImportCode ,
26
+ getModuleCode ,
27
+ getExportCode ,
28
28
} from './utils' ;
29
29
import Warning from './Warning' ;
30
30
import CssSyntaxError from './CssSyntaxError' ;
@@ -103,71 +103,37 @@ export default function loader(content, map, meta) {
103
103
. warnings ( )
104
104
. forEach ( ( warning ) => this . emitWarning ( new Warning ( warning ) ) ) ;
105
105
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
+ }
108
110
111
+ const {
112
+ exportOnlyLocals : onlyLocals ,
113
+ exportLocalsStyle : localsStyle ,
114
+ } = options ;
109
115
// 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 ) ;
112
117
// 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 ,
115
120
this ,
116
121
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
140
123
) ;
141
124
142
- const importItems = getImports (
143
- messages ,
125
+ // eslint-disable-next-line no-param-reassign
126
+ result . cssLoaderBuildInfo = {
127
+ onlyLocals,
128
+ localsStyle,
144
129
importPrefix,
145
- this ,
146
- ( message ) => {
147
- if ( message . type !== 'url' ) {
148
- return ;
149
- }
130
+ replacer,
131
+ } ;
150
132
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 ) ;
171
137
172
138
return callback (
173
139
null ,
0 commit comments