@@ -10,137 +10,141 @@ var createResolver = require("./createResolver");
10
10
11
11
12
12
module . exports = function ( content , map ) {
13
- if ( this . cacheable ) this . cacheable ( ) ;
14
- var callback = this . async ( ) ;
15
- var query = loaderUtils . getOptions ( this ) || { } ;
16
- var root = query . root ;
17
- var moduleMode = query . modules || query . module ;
18
- var camelCaseKeys = query . camelCase || query . camelcase ;
19
- var sourceMap = query . sourceMap || false ;
20
- var resolve = createResolver ( query . alias ) ;
21
-
22
- if ( sourceMap ) {
23
- if ( map ) {
24
- if ( typeof map === "string" ) {
25
- map = JSON . stringify ( map ) ;
26
- }
27
-
28
- if ( map . sources ) {
29
- map . sources = map . sources . map ( function ( source ) {
30
- return source . replace ( / \\ / g, '/' ) ;
31
- } ) ;
32
- map . sourceRoot = '' ;
33
- }
34
- }
35
- } else {
36
- // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
37
- map = null ;
38
- }
39
-
40
- processCss ( content , map , {
41
- mode : moduleMode ? "local" : "global" ,
42
- from : loaderUtils . getRemainingRequest ( this ) . split ( "!" ) . pop ( ) ,
43
- to : loaderUtils . getCurrentRequest ( this ) . split ( "!" ) . pop ( ) ,
44
- query : query ,
45
- resolve : resolve ,
46
- minimize : this . minimize ,
47
- loaderContext : this ,
48
- sourceMap : sourceMap
49
- } , function ( err , result ) {
50
- if ( err ) return callback ( err ) ;
51
-
52
- var cssAsString = JSON . stringify ( result . source ) ;
53
-
54
- // for importing CSS
55
- var importUrlPrefix = getImportPrefix ( this , query ) ;
56
-
57
- var alreadyImported = { } ;
58
- var importJs = result . importItems . filter ( function ( imp ) {
59
- if ( ! imp . mediaQuery ) {
60
- if ( alreadyImported [ imp . url ] )
61
- return false ;
62
- alreadyImported [ imp . url ] = true ;
63
- }
64
- return true ;
65
- } ) . map ( function ( imp ) {
66
- if ( ! loaderUtils . isUrlRequest ( imp . url , root ) ) {
67
- return "exports.push([module.id, " +
68
- JSON . stringify ( "@import url(" + imp . url + ");" ) + ", " +
69
- JSON . stringify ( imp . mediaQuery ) + "]);" ;
70
- } else {
71
- var importUrl = importUrlPrefix + imp . url ;
72
- return "exports.i(require(" + loaderUtils . stringifyRequest ( this , importUrl ) + "), " + JSON . stringify ( imp . mediaQuery ) + ");" ;
73
- }
74
- } , this ) . join ( "\n" ) ;
75
-
76
- function importItemMatcher ( item ) {
77
- var match = result . importItemRegExp . exec ( item ) ;
78
- var idx = + match [ 1 ] ;
79
- var importItem = result . importItems [ idx ] ;
80
- var importUrl = importUrlPrefix + importItem . url ;
81
- return "\" + require(" + loaderUtils . stringifyRequest ( this , importUrl ) + ").locals" +
82
- "[" + JSON . stringify ( importItem . export ) + "] + \"" ;
83
- }
84
-
85
- cssAsString = cssAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) ;
86
-
87
- // helper for ensuring valid CSS strings from requires
88
- var urlEscapeHelper = "" ;
89
-
90
- if ( query . url !== false && result . urlItems . length > 0 ) {
91
- urlEscapeHelper = "var escape = require(" + loaderUtils . stringifyRequest ( this , require . resolve ( "./url/escape.js" ) ) + ");\n" ;
92
-
93
- cssAsString = cssAsString . replace ( result . urlItemRegExpG , function ( item ) {
94
- var match = result . urlItemRegExp . exec ( item ) ;
95
- var idx = + match [ 1 ] ;
96
- var urlItem = result . urlItems [ idx ] ;
97
- var url = resolve ( urlItem . url ) ;
98
- idx = url . indexOf ( "?#" ) ;
99
- if ( idx < 0 ) idx = url . indexOf ( "#" ) ;
100
- var urlRequest ;
101
- if ( idx > 0 ) { // idx === 0 is catched by isUrlRequest
102
- // in cases like url('webfont.eot?#iefix')
103
- urlRequest = url . substr ( 0 , idx ) ;
104
- return "\" + escape(require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ")) + \"" +
105
- url . substr ( idx ) ;
106
- }
107
- urlRequest = url ;
108
- return "\" + escape(require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ")) + \"" ;
109
- } . bind ( this ) ) ;
110
- }
111
-
112
- var exportJs = compileExports ( result , importItemMatcher . bind ( this ) , camelCaseKeys ) ;
113
- if ( exportJs ) {
114
- exportJs = "exports.locals = " + exportJs + ";" ;
115
- }
116
-
117
- var moduleJs ;
118
- if ( sourceMap && result . map ) {
119
- // add a SourceMap
120
- map = result . map ;
121
- if ( map . sources ) {
122
- map . sources = map . sources . map ( function ( source ) {
123
- return source . split ( "!" ) . pop ( ) . replace ( / \\ / g, '/' ) ;
124
- } , this ) ;
125
- map . sourceRoot = "" ;
126
- }
127
- map . file = map . file . split ( "!" ) . pop ( ) . replace ( / \\ / g, '/' ) ;
128
- map = JSON . stringify ( map ) ;
129
- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);" ;
130
- } else {
131
- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\"]);" ;
132
- }
133
-
134
- // embed runtime
135
- callback ( null , urlEscapeHelper +
136
- "exports = module.exports = require(" +
137
- loaderUtils . stringifyRequest ( this , require . resolve ( "./css-base.js" ) ) +
138
- ")(" + sourceMap + ");\n" +
139
- "// imports\n" +
140
- importJs + "\n\n" +
141
- "// module\n" +
142
- moduleJs + "\n\n" +
143
- "// exports\n" +
144
- exportJs ) ;
145
- } . bind ( this ) ) ;
146
- } ;
13
+ if ( this . cacheable ) this . cacheable ( ) ;
14
+ var callback = this . async ( ) ;
15
+ var query = loaderUtils . getOptions ( this ) || { } ;
16
+ var root = query . root ;
17
+ var moduleMode = query . modules || query . module ;
18
+ var camelCaseKeys = query . camelCase || query . camelcase ;
19
+ var sourceMap = query . sourceMap || false ;
20
+ var resolve = createResolver ( query . alias ) ;
21
+
22
+ if ( global && global . getLocalIdent ) {
23
+ query . getLocalIdent = global . getLocalIdent
24
+ }
25
+
26
+ if ( sourceMap ) {
27
+ if ( map ) {
28
+ if ( typeof map === "string" ) {
29
+ map = JSON . stringify ( map ) ;
30
+ }
31
+
32
+ if ( map . sources ) {
33
+ map . sources = map . sources . map ( function ( source ) {
34
+ return source . replace ( / \\ / g, '/' ) ;
35
+ } ) ;
36
+ map . sourceRoot = '' ;
37
+ }
38
+ }
39
+ } else {
40
+ // Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
41
+ map = null ;
42
+ }
43
+
44
+ processCss ( content , map , {
45
+ mode : moduleMode ? "local" : "global" ,
46
+ from : loaderUtils . getRemainingRequest ( this ) . split ( "!" ) . pop ( ) ,
47
+ to : loaderUtils . getCurrentRequest ( this ) . split ( "!" ) . pop ( ) ,
48
+ query : query ,
49
+ resolve : resolve ,
50
+ minimize : this . minimize ,
51
+ loaderContext : this ,
52
+ sourceMap : sourceMap
53
+ } , function ( err , result ) {
54
+ if ( err ) return callback ( err ) ;
55
+
56
+ var cssAsString = JSON . stringify ( result . source ) ;
57
+
58
+ // for importing CSS
59
+ var importUrlPrefix = getImportPrefix ( this , query ) ;
60
+
61
+ var alreadyImported = { } ;
62
+ var importJs = result . importItems . filter ( function ( imp ) {
63
+ if ( ! imp . mediaQuery ) {
64
+ if ( alreadyImported [ imp . url ] )
65
+ return false ;
66
+ alreadyImported [ imp . url ] = true ;
67
+ }
68
+ return true ;
69
+ } ) . map ( function ( imp ) {
70
+ if ( ! loaderUtils . isUrlRequest ( imp . url , root ) ) {
71
+ return "exports.push([module.id, " +
72
+ JSON . stringify ( "@import url(" + imp . url + ");" ) + ", " +
73
+ JSON . stringify ( imp . mediaQuery ) + "]);" ;
74
+ } else {
75
+ var importUrl = importUrlPrefix + imp . url ;
76
+ return "exports.i(require(" + loaderUtils . stringifyRequest ( this , importUrl ) + "), " + JSON . stringify ( imp . mediaQuery ) + ");" ;
77
+ }
78
+ } , this ) . join ( "\n" ) ;
79
+
80
+ function importItemMatcher ( item ) {
81
+ var match = result . importItemRegExp . exec ( item ) ;
82
+ var idx = + match [ 1 ] ;
83
+ var importItem = result . importItems [ idx ] ;
84
+ var importUrl = importUrlPrefix + importItem . url ;
85
+ return "\" + require(" + loaderUtils . stringifyRequest ( this , importUrl ) + ").locals" +
86
+ "[" + JSON . stringify ( importItem . export ) + "] + \"" ;
87
+ }
88
+
89
+ cssAsString = cssAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) ;
90
+
91
+ // helper for ensuring valid CSS strings from requires
92
+ var urlEscapeHelper = "" ;
93
+
94
+ if ( query . url !== false && result . urlItems . length > 0 ) {
95
+ urlEscapeHelper = "var escape = require(" + loaderUtils . stringifyRequest ( this , require . resolve ( "./url/escape.js" ) ) + ");\n" ;
96
+
97
+ cssAsString = cssAsString . replace ( result . urlItemRegExpG , function ( item ) {
98
+ var match = result . urlItemRegExp . exec ( item ) ;
99
+ var idx = + match [ 1 ] ;
100
+ var urlItem = result . urlItems [ idx ] ;
101
+ var url = resolve ( urlItem . url ) ;
102
+ idx = url . indexOf ( "?#" ) ;
103
+ if ( idx < 0 ) idx = url . indexOf ( "#" ) ;
104
+ var urlRequest ;
105
+ if ( idx > 0 ) { // idx === 0 is catched by isUrlRequest
106
+ // in cases like url('webfont.eot?#iefix')
107
+ urlRequest = url . substr ( 0 , idx ) ;
108
+ return "\" + escape(require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ")) + \"" +
109
+ url . substr ( idx ) ;
110
+ }
111
+ urlRequest = url ;
112
+ return "\" + escape(require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ")) + \"" ;
113
+ } . bind ( this ) ) ;
114
+ }
115
+
116
+ var exportJs = compileExports ( result , importItemMatcher . bind ( this ) , camelCaseKeys ) ;
117
+ if ( exportJs ) {
118
+ exportJs = "exports.locals = " + exportJs + ";" ;
119
+ }
120
+
121
+ var moduleJs ;
122
+ if ( sourceMap && result . map ) {
123
+ // add a SourceMap
124
+ map = result . map ;
125
+ if ( map . sources ) {
126
+ map . sources = map . sources . map ( function ( source ) {
127
+ return source . split ( "!" ) . pop ( ) . replace ( / \\ / g, '/' ) ;
128
+ } , this ) ;
129
+ map . sourceRoot = "" ;
130
+ }
131
+ map . file = map . file . split ( "!" ) . pop ( ) . replace ( / \\ / g, '/' ) ;
132
+ map = JSON . stringify ( map ) ;
133
+ moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);" ;
134
+ } else {
135
+ moduleJs = "exports.push([module.id, " + cssAsString + ", \"\"]);" ;
136
+ }
137
+
138
+ // embed runtime
139
+ callback ( null , urlEscapeHelper +
140
+ "exports = module.exports = require(" +
141
+ loaderUtils . stringifyRequest ( this , require . resolve ( "./css-base.js" ) ) +
142
+ ")(" + sourceMap + ");\n" +
143
+ "// imports\n" +
144
+ importJs + "\n\n" +
145
+ "// module\n" +
146
+ moduleJs + "\n\n" +
147
+ "// exports\n" +
148
+ exportJs ) ;
149
+ } . bind ( this ) ) ;
150
+ } ;
0 commit comments