@@ -10,6 +10,7 @@ var getImportPrefix = require("./getImportPrefix");
10
10
11
11
module . exports = function ( content , map ) {
12
12
if ( this . cacheable ) this . cacheable ( ) ;
13
+ var callback = this . async ( ) ;
13
14
var query = loaderUtils . parseQuery ( this . query ) ;
14
15
var root = query . root ;
15
16
var moduleMode = query . modules || query . module ;
@@ -18,102 +19,104 @@ module.exports = function(content, map) {
18
19
map = JSON . stringify ( map ) ;
19
20
}
20
21
21
- var result = processCss ( content , map , {
22
+ processCss ( content , map , {
22
23
mode : moduleMode ? "local" : "global" ,
23
24
from : loaderUtils . getRemainingRequest ( this ) ,
24
25
to : loaderUtils . getCurrentRequest ( this ) ,
25
26
query : query ,
26
27
minimize : this . minimize ,
27
28
loaderContext : this
28
- } ) ;
29
+ } , function ( err , result ) {
30
+ if ( err ) return callback ( err ) ;
29
31
30
- var cssAsString = JSON . stringify ( result . source ) ;
32
+ var cssAsString = JSON . stringify ( result . source ) ;
31
33
32
- // for importing CSS
33
- var importUrlPrefix = getImportPrefix ( this , query ) ;
34
+ // for importing CSS
35
+ var importUrlPrefix = getImportPrefix ( this , query ) ;
34
36
35
- var alreadyImported = { } ;
36
- var importJs = result . importItems . filter ( function ( imp ) {
37
- if ( ! imp . mediaQuery ) {
38
- if ( alreadyImported [ imp . url ] )
39
- return false ;
40
- alreadyImported [ imp . url ] = true ;
41
- }
42
- return true ;
43
- } ) . map ( function ( imp ) {
44
- if ( ! loaderUtils . isUrlRequest ( imp . url , root ) ) {
45
- return "exports.push([module.id, " +
46
- JSON . stringify ( "@import url(" + imp . url + ");" ) + ", " +
47
- JSON . stringify ( imp . mediaQuery ) + "]);" ;
48
- } else {
49
- var importUrl = importUrlPrefix + imp . url ;
50
- return "exports.i(require(" + loaderUtils . stringifyRequest ( this , importUrl ) + "), " + JSON . stringify ( imp . mediaQuery ) + ");" ;
37
+ var alreadyImported = { } ;
38
+ var importJs = result . importItems . filter ( function ( imp ) {
39
+ if ( ! imp . mediaQuery ) {
40
+ if ( alreadyImported [ imp . url ] )
41
+ return false ;
42
+ alreadyImported [ imp . url ] = true ;
43
+ }
44
+ return true ;
45
+ } ) . map ( function ( imp ) {
46
+ if ( ! loaderUtils . isUrlRequest ( imp . url , root ) ) {
47
+ return "exports.push([module.id, " +
48
+ JSON . stringify ( "@import url(" + imp . url + ");" ) + ", " +
49
+ JSON . stringify ( imp . mediaQuery ) + "]);" ;
50
+ } else {
51
+ var importUrl = importUrlPrefix + imp . url ;
52
+ return "exports.i(require(" + loaderUtils . stringifyRequest ( this , importUrl ) + "), " + JSON . stringify ( imp . mediaQuery ) + ");" ;
53
+ }
54
+ } , this ) . join ( "\n" ) ;
55
+
56
+ function importItemMatcher ( item ) {
57
+ var match = result . importItemRegExp . exec ( item ) ;
58
+ var idx = + match [ 1 ] ;
59
+ var importItem = result . importItems [ idx ] ;
60
+ var importUrl = importUrlPrefix + importItem . url ;
61
+ return "\" + require(" + loaderUtils . stringifyRequest ( this , importUrl ) + ").locals" +
62
+ "[" + JSON . stringify ( importItem . export ) + "] + \"" ;
51
63
}
52
- } , this ) . join ( "\n" ) ;
53
64
54
- function importItemMatcher ( item ) {
55
- var match = result . importItemRegExp . exec ( item ) ;
56
- var idx = + match [ 1 ] ;
57
- var importItem = result . importItems [ idx ] ;
58
- var importUrl = importUrlPrefix + importItem . url ;
59
- return "\" + require(" + loaderUtils . stringifyRequest ( this , importUrl ) + ").locals" +
60
- "[" + JSON . stringify ( importItem . export ) + "] + \"" ;
61
- }
65
+ cssAsString = cssAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) . replace ( result . urlItemRegExpG , function ( item ) {
66
+ var match = result . urlItemRegExp . exec ( item ) ;
67
+ var idx = + match [ 1 ] ;
68
+ var urlItem = result . urlItems [ idx ] ;
69
+ var url = urlItem . url ;
70
+ idx = url . indexOf ( "?#" ) ;
71
+ if ( idx < 0 ) idx = url . indexOf ( "#" ) ;
72
+ var urlRequest ;
73
+ if ( idx > 0 ) { // idx === 0 is catched by isUrlRequest
74
+ // in cases like url('webfont.eot?#iefix')
75
+ urlRequest = url . substr ( 0 , idx ) ;
76
+ return "\" + require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ") + \"" +
77
+ url . substr ( idx ) ;
78
+ }
79
+ urlRequest = url ;
80
+ return "\" + require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ") + \"" ;
81
+ } . bind ( this ) ) ;
62
82
63
- cssAsString = cssAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) . replace ( result . urlItemRegExpG , function ( item ) {
64
- var match = result . urlItemRegExp . exec ( item ) ;
65
- var idx = + match [ 1 ] ;
66
- var urlItem = result . urlItems [ idx ] ;
67
- var url = urlItem . url ;
68
- idx = url . indexOf ( "?#" ) ;
69
- if ( idx < 0 ) idx = url . indexOf ( "#" ) ;
70
- var urlRequest ;
71
- if ( idx > 0 ) { // idx === 0 is catched by isUrlRequest
72
- // in cases like url('webfont.eot?#iefix')
73
- urlRequest = url . substr ( 0 , idx ) ;
74
- return "\" + require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ") + \"" +
75
- url . substr ( idx ) ;
83
+ var exportJs = "" ;
84
+ if ( Object . keys ( result . exports ) . length > 0 ) {
85
+ exportJs = Object . keys ( result . exports ) . map ( function ( key ) {
86
+ var valueAsString = JSON . stringify ( result . exports [ key ] ) ;
87
+ valueAsString = valueAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) ;
88
+ return "\t" + JSON . stringify ( key ) + ": " + valueAsString ;
89
+ } . bind ( this ) ) . join ( ",\n" ) ;
90
+ exportJs = "exports.locals = {\n" + exportJs + "\n};" ;
76
91
}
77
- urlRequest = url ;
78
- return "\" + require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ") + \"" ;
79
- } . bind ( this ) ) ;
80
92
81
- var exportJs = "" ;
82
- if ( Object . keys ( result . exports ) . length > 0 ) {
83
- exportJs = Object . keys ( result . exports ) . map ( function ( key ) {
84
- var valueAsString = JSON . stringify ( result . exports [ key ] ) ;
85
- valueAsString = valueAsString . replace ( result . importItemRegExpG , importItemMatcher . bind ( this ) ) ;
86
- return "\t" + JSON . stringify ( key ) + ": " + valueAsString ;
87
- } . bind ( this ) ) . join ( ",\n" ) ;
88
- exportJs = "exports.locals = {\n" + exportJs + "\n};" ;
89
- }
90
93
91
-
92
- var moduleJs ;
93
- if ( query . sourceMap && result . map ) {
94
- // add a SourceMap
95
- map = result . map ;
96
- if ( map . sources ) {
97
- map . sources = map . sources . map ( function ( source ) {
98
- var p = path . relative ( query . context || this . options . context , source ) . replace ( / \\ / g, "/" ) ;
99
- if ( p . indexOf ( "../" ) !== 0 )
100
- p = "./" + p ;
101
- return "/" + p ;
102
- } , this ) ;
103
- map . sourceRoot = "webpack://" ;
94
+ var moduleJs ;
95
+ if ( query . sourceMap && result . map ) {
96
+ // add a SourceMap
97
+ map = result . map ;
98
+ if ( map . sources ) {
99
+ map . sources = map . sources . map ( function ( source ) {
100
+ var p = path . relative ( query . context || this . options . context , source ) . replace ( / \\ / g, "/" ) ;
101
+ if ( p . indexOf ( "../" ) !== 0 )
102
+ p = "./" + p ;
103
+ return "/" + p ;
104
+ } , this ) ;
105
+ map . sourceRoot = "webpack://" ;
106
+ }
107
+ map = JSON . stringify ( map ) ;
108
+ moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);" ;
109
+ } else {
110
+ moduleJs = "exports.push([module.id, " + cssAsString + ", \"\"]);" ;
104
111
}
105
- map = JSON . stringify ( map ) ;
106
- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);" ;
107
- } else {
108
- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\"]);" ;
109
- }
110
112
111
- // embed runtime
112
- return "exports = module.exports = require(" + loaderUtils . stringifyRequest ( this , require . resolve ( "./css-base.js" ) ) + ")();\n" +
113
- "// imports\n" +
114
- importJs + "\n\n" +
115
- "// module\n" +
116
- moduleJs + "\n\n" +
117
- "// exports\n" +
118
- exportJs ;
113
+ // embed runtime
114
+ callback ( null , "exports = module.exports = require(" + loaderUtils . stringifyRequest ( this , require . resolve ( "./css-base.js" ) ) + ")();\n" +
115
+ "// imports\n" +
116
+ importJs + "\n\n" +
117
+ "// module\n" +
118
+ moduleJs + "\n\n" +
119
+ "// exports\n" +
120
+ exportJs ) ;
121
+ } . bind ( this ) ) ;
119
122
} ;
0 commit comments