pp-parachute
Version:
Airdrop JS Applications
48 lines (45 loc) • 1.79 kB
JavaScript
var Promise = require('bluebird');
var sass = require('node-sass');
var fs = require('fs');
var path = require('path');
var createEntryFile = function (filePaths) {
var entryFile = filePaths[0];
if(typeof entryFile !== 'string') return null;
var imports = fs.readFileSync(entryFile).toString();
for (var i = 0; i < filePaths.length; i++) {
//todo handle an entry file, otherwise take them in the order they come in
if (filePaths[i] === entryFile) continue;
imports += '\n@import "' + filePaths[i] + '";';
}
//generate a temporary file that is the entry file + all the import directives.
//given a random name in case two instances are running and happen to collide.
var tempEntryFile = path.dirname(entryFile) + '/sass_tmp_' + new Date().getTime() + '_.scss';
fs.writeFileSync(tempEntryFile, imports);
return tempEntryFile;
};
var compile = function (filePaths) {
var entryFile = createEntryFile(filePaths);
if(!entryFile) return Promise.resolve('');
return new Promise(function (resolve, reject) {
sass.render({
file: entryFile,
success: function (result) {
resolve(result.css);
//destroy temp file if it is there
fs.existsSync(entryFile) && fs.unlinkSync(entryFile);
},
error: function (result) {
//destroy temp file if it is there
fs.existsSync(entryFile) && fs.unlinkSync(entryFile);
reject({
path: result.file,
error: result.message,
line: 'Line: ' + result.line + ', Column: ' + result.column
});
}
});
});
};
module.exports = {
compile: compile
};