120 lines
2.9 KiB
JavaScript
120 lines
2.9 KiB
JavaScript
/*!
|
|
* node-sass: lib/render.js
|
|
*/
|
|
|
|
var chalk = require('chalk'),
|
|
fs = require('fs'),
|
|
path = require('path'),
|
|
sass = require('./');
|
|
|
|
/**
|
|
* Render
|
|
*
|
|
* @param {Object} options
|
|
* @param {Object} emitter
|
|
* @api public
|
|
*/
|
|
|
|
module.exports = function(options, emitter) {
|
|
var renderOptions = {
|
|
includePaths: options.includePath,
|
|
omitSourceMapUrl: options.omitSourceMapUrl,
|
|
indentedSyntax: options.indentedSyntax,
|
|
outFile: options.dest,
|
|
outputStyle: options.outputStyle,
|
|
precision: options.precision,
|
|
sourceComments: options.sourceComments,
|
|
sourceMapEmbed: options.sourceMapEmbed,
|
|
sourceMapContents: options.sourceMapContents,
|
|
sourceMap: options.sourceMap,
|
|
sourceMapRoot: options.sourceMapRoot,
|
|
importer: options.importer,
|
|
functions: options.functions,
|
|
indentWidth: options.indentWidth,
|
|
indentType: options.indentType,
|
|
linefeed: options.linefeed
|
|
};
|
|
|
|
if (options.data) {
|
|
renderOptions.data = options.data;
|
|
} else if (options.src) {
|
|
renderOptions.file = options.src;
|
|
}
|
|
|
|
var sourceMap = options.sourceMap;
|
|
var destination = options.dest;
|
|
var stdin = options.stdin;
|
|
|
|
var success = function(result) {
|
|
var todo = 1;
|
|
var done = function() {
|
|
if (--todo <= 0) {
|
|
emitter.emit('done');
|
|
}
|
|
};
|
|
|
|
if (!destination || stdin) {
|
|
emitter.emit('log', result.css.toString());
|
|
|
|
if (sourceMap && !options.sourceMapEmbed) {
|
|
emitter.emit('log', result.map.toString());
|
|
}
|
|
|
|
return done();
|
|
}
|
|
|
|
emitter.emit('info', chalk.green('Rendering Complete, saving .css file...'));
|
|
|
|
fs.mkdir(path.dirname(destination), {recursive: true}, function(err) {
|
|
if (err) {
|
|
return emitter.emit('error', chalk.red(err));
|
|
}
|
|
|
|
fs.writeFile(destination, result.css.toString(), function(err) {
|
|
if (err) {
|
|
return emitter.emit('error', chalk.red(err));
|
|
}
|
|
|
|
emitter.emit('info', chalk.green('Wrote CSS to ' + destination));
|
|
emitter.emit('write', err, destination, result.css.toString());
|
|
done();
|
|
});
|
|
});
|
|
|
|
if (sourceMap) {
|
|
todo++;
|
|
|
|
fs.mkdir(path.dirname(sourceMap), {recursive: true}, function(err) {
|
|
if (err) {
|
|
return emitter.emit('error', chalk.red(err));
|
|
}
|
|
fs.writeFile(sourceMap, result.map, function(err) {
|
|
if (err) {
|
|
return emitter.emit('error', chalk.red('Error' + err));
|
|
}
|
|
|
|
emitter.emit('info', chalk.green('Wrote Source Map to ' + sourceMap));
|
|
emitter.emit('write-source-map', err, sourceMap, result.map);
|
|
done();
|
|
});
|
|
});
|
|
}
|
|
|
|
emitter.emit('render', result.css.toString());
|
|
};
|
|
|
|
var error = function(error) {
|
|
emitter.emit('error', chalk.red(JSON.stringify(error, null, 2)));
|
|
};
|
|
|
|
var renderCallback = function(err, result) {
|
|
if (err) {
|
|
error(err);
|
|
}
|
|
else {
|
|
success(result);
|
|
}
|
|
};
|
|
|
|
sass.render(renderOptions, renderCallback);
|
|
};
|