3
3
4
4
const requireOrNull = require ( './require-or-null' ) ;
5
5
const Plugin = require ( 'broccoli-caching-writer' ) ;
6
+ const fs = require ( 'fs' ) ;
6
7
const fse = require ( 'fs-extra' ) ;
7
- const path = require ( 'path' ) ;
8
8
const Funnel = require ( 'broccoli-funnel' ) ;
9
9
10
10
let sass = requireOrNull ( 'node-sass' ) ;
@@ -24,26 +24,32 @@ class SASSPlugin extends Plugin {
24
24
}
25
25
26
26
build ( ) {
27
- this . listEntries ( ) . forEach ( e => {
28
- let fileName = path . resolve ( e . basePath , e . relativePath ) ;
27
+ this . listFiles ( ) . forEach ( fileName => {
29
28
this . compile ( fileName , this . inputPaths [ 0 ] , this . outputPath ) ;
30
29
} ) ;
31
30
}
32
31
33
32
compile ( fileName , inputPath , outputPath ) {
34
- let sassOptions = {
35
- file : path . normalize ( fileName ) ,
36
- includePaths : this . inputPaths
37
- } ;
33
+ const outSourceName = fileName . replace ( inputPath , outputPath ) ;
34
+ const outFileName = outSourceName . replace ( / \. s [ a c ] s s $ / , '.css' ) ;
38
35
39
- let result = sass . renderSync ( sassOptions ) ;
40
- let filePath = fileName . replace ( inputPath , outputPath ) . replace ( / \. s [ a c ] s s $ / , '.css' ) ;
36
+ // We overwrite file, outFile and include the file path for the includePath.
37
+ // We also make sure the options don't include a data field.
38
+ const sassOptions = Object . assign ( this . options , {
39
+ data : null ,
40
+ file : fileName ,
41
+ outFile : outFileName ,
42
+ includePaths : [ inputPath ] . concat ( this . options . includePaths || [ ] )
43
+ } ) ;
41
44
42
- fse . outputFileSync ( filePath , result . css , 'utf8' ) ;
45
+ const result = sass . renderSync ( sassOptions ) ;
46
+ fse . outputFileSync ( outFileName , result . css , 'utf-8' ) ;
43
47
}
44
48
}
45
49
46
- exports . makeBroccoliTree = ( sourceDir ) => {
50
+ exports . makeBroccoliTree = ( sourceDir , options ) => {
51
+ options = options || { } ;
52
+
47
53
// include sass support only if compass-importer is not installed
48
54
let compass = requireOrNull ( 'compass-importer' ) ;
49
55
if ( ! compass ) {
@@ -56,6 +62,6 @@ exports.makeBroccoliTree = (sourceDir) => {
56
62
allowEmpty : true
57
63
} ) ;
58
64
59
- return new SASSPlugin ( [ sassSrcTree ] ) ;
65
+ return new SASSPlugin ( [ sassSrcTree ] , options ) ;
60
66
}
61
67
} ;
0 commit comments