1
+ var fs = require ( 'fs' ) ;
1
2
var path = require ( 'path' ) ;
2
- var accord = require ( 'accord ' ) ;
3
+ var less = require ( 'less ' ) ;
3
4
var through2 = require ( 'through2' ) ;
4
5
var replaceExt = require ( 'replace-ext' ) ;
5
6
var assign = require ( 'object-assign' ) ;
6
7
var applySourceMap = require ( 'vinyl-sourcemaps-apply' ) ;
7
8
var PluginError = require ( 'plugin-error' ) ;
8
9
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
+ }
10
61
11
62
module . exports = function ( options ) {
12
63
// Mixes in default options.
@@ -15,7 +66,7 @@ module.exports = function (options) {
15
66
paths : [ ]
16
67
} , options ) ;
17
68
18
- return through2 . obj ( function ( file , enc , cb ) {
69
+ return through2 . obj ( function ( file , enc , cb ) {
19
70
if ( file . isNull ( ) ) {
20
71
return cb ( null , file ) ;
21
72
}
@@ -30,11 +81,11 @@ module.exports = function (options) {
30
81
opts . filename = file . path ;
31
82
32
83
// Bootstrap source maps
33
- if ( file . sourceMap ) {
34
- opts . sourcemap = true ;
84
+ if ( file . sourceMap || opts . sourcemap ) {
85
+ opts . sourceMap = true ;
35
86
}
36
87
37
- less . render ( str , opts ) . then ( function ( res ) {
88
+ renderLess ( str , opts ) . then ( function ( res ) {
38
89
file . contents = new Buffer ( res . result ) ;
39
90
file . path = replaceExt ( file . path , '.css' ) ;
40
91
if ( res . sourcemap ) {
0 commit comments