@@ -9,6 +9,8 @@ var collect = require("collect-stream");
99var hh = require ( "http-https" ) ;
1010var minimatch = require ( "minimatch" ) ;
1111var phpfn = require ( "phpfn" ) ;
12+ var applySourceMap = require ( "vinyl-sourcemaps-apply" ) ;
13+ var MagicString = require ( "magic-string" ) ;
1214
1315var PLUGIN_NAME = "gulp-cssimport" ;
1416var readFile = pify ( fs . readFile ) ;
@@ -39,7 +41,6 @@ module.exports = function cssImport(options) {
3941 var cssCount = 0 ;
4042
4143 function fileContents ( vinyl , encoding , callback ) {
42- // console.log('fileContents ' , vinyl.path);
4344
4445 if ( ! stream ) {
4546 stream = this ;
@@ -69,18 +70,21 @@ module.exports = function cssImport(options) {
6970 }
7071
7172 ( function ( index ) {
73+ var result = { index : index , importPath : importPath } ;
7274 if ( ! isUrl ( importPath ) ) {
7375 var importFile = path . resolve ( path . dirname ( vinyl . path ) , importPath ) ;
74- // console.log('importFile %s from %s' , importFile, vinyl.path);
75- promises . push ( readFile ( importFile , "utf8" ) . then ( function ( data ) {
76- return { index : index , importFile : importFile , data : data } ;
76+ promises . push ( readFile ( importFile , "utf8" ) . then ( function ( contents ) {
77+ result . importFile = importFile ;
78+ result . contents = contents ;
79+ return result ;
7780 } ) ) ;
7881 } else {
7982 promises [ promises . length ] = new Promise ( function ( resolve , reject ) {
8083 var req = hh . request ( importPath , function ( res ) {
8184 collect ( res , function ( err , data ) {
8285 if ( err ) return reject ( err ) ;
83- resolve ( { index : index , data : data . toString ( ) } ) ;
86+ result . contents = data . toString ( ) ;
87+ resolve ( result ) ;
8488 } ) ;
8589 } ) ;
8690 req . on ( "error" , reject ) ;
@@ -99,29 +103,53 @@ module.exports = function cssImport(options) {
99103 // Waiting promises.
100104 Promise . all ( promises ) . then ( function ( results ) {
101105 for ( var i = 0 ; i < results . length ; i ++ ) {
102- var item = results [ i ] ;
103- // file[item.index] = item.data;
106+ var result = results [ i ] ;
104107 var vfile = new gutil . File ( {
105- path : item . importFile ,
106- contents : new Buffer ( item . data )
108+ path : result . importFile ,
109+ contents : new Buffer ( result . contents )
107110 } ) ;
108- ( function ( item ) {
111+ ( function ( result ) {
109112 results [ i ] = pify ( fileContents ) ( vfile , null ) . then ( function ( vfile ) {
110- return { index : item . index , data : vfile . contents . toString ( ) } ;
113+ result . contents = vfile . contents . toString ( ) ;
114+ return result ;
111115 } ) ;
112- } ) ( item ) ;
116+ } ) ( result ) ;
113117 }
114118 return Promise . all ( results ) ;
115119 } )
116120 . then ( function ( results ) {
121+ var iterator = function ( ) { } ;
122+ if ( vinyl . sourceMap ) {
123+ var bundle = new MagicString . Bundle ( ) ;
124+ iterator = function ( file , result ) {
125+ bundle . addSource ( {
126+ filename : result . importPath ,
127+ content : new MagicString ( result . contents )
128+ } ) ;
129+ } ;
130+ }
117131 for ( var i = 0 ; i < results . length ; i ++ ) {
118- var index = results [ i ] . index ;
119- file [ index ] = results [ i ] . data ;
132+ var result = results [ i ] ;
133+ var index = result . index ;
134+ var contents = result . contents ;
135+ file [ index ] = contents ;
136+ iterator ( file , result ) ;
120137 }
121138 vinyl . contents = new Buffer ( file . join ( "" ) ) ;
139+ if ( vinyl . sourceMap ) {
140+ var map = bundle . generateMap ( {
141+ file : vinyl . relative ,
142+ includeContent : true ,
143+ hires : true
144+ } ) ;
145+ applySourceMap ( vinyl , map ) ;
146+ }
122147 callback ( null , vinyl ) ;
123148 } )
124- . catch ( callback ) ;
149+ . catch ( function ( err ) {
150+ console . log ( 'err ' , err ) ;
151+ callback ( new gutil . PluginError ( PLUGIN_NAME , err ) ) ;
152+ } ) ;
125153 }
126154
127155 return through . obj ( fileContents ) ;
0 commit comments