Repository navigation
Expand file tree
/
Copy pathangular-broccoli-compass.js
More file actions
59 lines (49 loc) · 1.74 KB
/
Copy pathangular-broccoli-compass.js
File metadata and controls
59 lines (49 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* jshint node: true, esversion: 6 */
'use strict';
const requireOrNull = require('./require-or-null');
const Plugin = require('broccoli-caching-writer');
const fse = require('fs-extra');
const path = require('path');
const Funnel = require('broccoli-funnel');
let sass = requireOrNull('node-sass');
let compass = requireOrNull('compass');
if (!sass || !compass) {
sass = requireOrNull(`${process.env.PROJECT_ROOT}/node_modules/node-sass`);
compass = requireOrNull(`${process.env.PROJECT_ROOT}/node_modules/compass-importer`);
}
class CompassPlugin extends Plugin {
constructor(inputNodes, options) {
super(inputNodes, {});
options = options || {};
Plugin.call(this, inputNodes, {
cacheInclude: [/\.scss$/, /\.sass$/]
});
this.options = options;
}
build() {
this.listEntries().forEach(e => {
let fileName = path.resolve(e.basePath, e.relativePath);
this.compile(fileName, this.inputPaths[0], this.outputPath);
});
}
compile(fileName, inputPath, outputPath) {
let sassOptions = Object.assign(this.options, {
data: '@import "compass"; .transition { @include transition(all); }',
file: fileName,
includePaths: [inputPath].concat(this.options.inputPaths || []),
importer: compass
});
let result = sass.renderSync(sassOptions);
let filePath = fileName.replace(inputPath, outputPath).replace(/\.s[ac]ss$/, '.css');
fse.outputFileSync(filePath, result.css, 'utf8');
}
}
exports.makeBroccoliTree = (sourceDir, options) => {
if (sass && compass) {
let compassSrcTree = new Funnel(sourceDir, {
include: ['**/*.scss', '**/*.sass'],
allowEmpty: true
});
return new CompassPlugin([compassSrcTree], options);
}
};