1+ var fs = require ( 'fs' ) ;
12var path = require ( 'path' ) ;
2- var accord = require ( 'accord ' ) ;
3+ var less = require ( 'less ' ) ;
34var through2 = require ( 'through2' ) ;
45var replaceExt = require ( 'replace-ext' ) ;
56var assign = require ( 'object-assign' ) ;
67var applySourceMap = require ( 'vinyl-sourcemaps-apply' ) ;
78var PluginError = require ( 'plugin-error' ) ;
89
9- var less = accord . load ( 'less' ) ;
10+ function inlineSources ( map ) {
11+ if ( map . sourcesContent ) {
12+ return Promise . resolve ( map ) ;
13+ }
14+
15+ return Promise . all (
16+ map . sources . map ( function ( source ) {
17+ return new Promise ( function ( resolve , reject ) {
18+ fs . readFile ( source , 'utf8' , function ( err , data ) {
19+ if ( err ) {
20+ reject ( err ) ;
21+ } else {
22+ resolve ( data ) ;
23+ }
24+ } ) ;
25+ } ) ;
26+ } )
27+ ) . then (
28+ function ( contents ) {
29+ map . sourcesContent = contents ;
30+ return map ;
31+ } ,
32+ function ( ) {
33+ return map ;
34+ }
35+ ) ;
36+ }
37+
38+ function renderLess ( str , opts ) {
39+ return new Promise ( function ( resolve , reject ) {
40+ less . render ( str , opts , function ( err , res ) {
41+ if ( err ) {
42+ reject ( err ) ;
43+ } else {
44+ var obj = {
45+ result : res . css ,
46+ imports : res . imports ,
47+ } ;
48+ if ( opts . sourceMap && res . map ) {
49+ obj . sourcemap = JSON . parse ( res . map ) ;
50+ inlineSources ( obj . sourcemap ) . then ( function ( map ) {
51+ obj . sourcemap = map ;
52+ resolve ( obj ) ;
53+ } ) ;
54+ } else {
55+ resolve ( obj ) ;
56+ }
57+ }
58+ } ) ;
59+ } ) ;
60+ }
1061
1162module . exports = function ( options ) {
1263 // Mixes in default options.
@@ -15,7 +66,7 @@ module.exports = function (options) {
1566 paths : [ ]
1667 } , options ) ;
1768
18- return through2 . obj ( function ( file , enc , cb ) {
69+ return through2 . obj ( function ( file , enc , cb ) {
1970 if ( file . isNull ( ) ) {
2071 return cb ( null , file ) ;
2172 }
@@ -30,11 +81,11 @@ module.exports = function (options) {
3081 opts . filename = file . path ;
3182
3283 // Bootstrap source maps
33- if ( file . sourceMap ) {
34- opts . sourcemap = true ;
84+ if ( file . sourceMap || opts . sourcemap ) {
85+ opts . sourceMap = true ;
3586 }
3687
37- less . render ( str , opts ) . then ( function ( res ) {
88+ renderLess ( str , opts ) . then ( function ( res ) {
3889 file . contents = new Buffer ( res . result ) ;
3990 file . path = replaceExt ( file . path , '.css' ) ;
4091 if ( res . sourcemap ) {
0 commit comments