@@ -10,6 +10,7 @@ var getImportPrefix = require("./getImportPrefix");
1010
1111module . exports = function ( content , map ) {
1212 if ( this . cacheable ) this . cacheable ( ) ;
13+ var callback = this . async ( ) ;
1314 var query = loaderUtils . parseQuery ( this . query ) ;
1415 var root = query . root ;
1516 var moduleMode = query . modules || query . module ;
@@ -18,102 +19,104 @@ module.exports = function(content, map) {
1819 map = JSON . stringify ( map ) ;
1920 }
2021
21- var result = processCss ( content , map , {
22+ processCss ( content , map , {
2223 mode : moduleMode ? "local" : "global" ,
2324 from : loaderUtils . getRemainingRequest ( this ) ,
2425 to : loaderUtils . getCurrentRequest ( this ) ,
2526 query : query ,
2627 minimize : this . minimize ,
2728 loaderContext : this
28- } ) ;
29+ } , function ( err , result ) {
30+ if ( err ) return callback ( err ) ;
2931
30- var cssAsString = JSON . stringify ( result . source ) ;
32+ var cssAsString = JSON . stringify ( result . source ) ;
3133
32- // for importing CSS
33- var importUrlPrefix = getImportPrefix ( this , query ) ;
34+ // for importing CSS
35+ var importUrlPrefix = getImportPrefix ( this , query ) ;
3436
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 ) + "] + \"" ;
5163 }
52- } , this ) . join ( "\n" ) ;
5364
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 ) ) ;
6282
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};" ;
7691 }
77- urlRequest = url ;
78- return "\" + require(" + loaderUtils . stringifyRequest ( this , urlRequest ) + ") + \"" ;
79- } . bind ( this ) ) ;
8092
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- }
9093
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 + ", \"\"]);" ;
104111 }
105- map = JSON . stringify ( map ) ;
106- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);" ;
107- } else {
108- moduleJs = "exports.push([module.id, " + cssAsString + ", \"\"]);" ;
109- }
110112
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 ) ) ;
119122} ;
0 commit comments