metaserve-css-postcss
Version:
metaserve plugin for rendering CSS from .sass files with PostCSS
108 lines (92 loc) • 2.8 kB
JavaScript
// Generated by CoffeeScript 2.3.1
var VERBOSE, autoprefixer, fs, mapFilteredNodes, mapObj, path, postcss, postcss_advanced_variables, postcss_color_function, postcss_easy_import, postcss_extend, precss, sugarss, util;
fs = require('fs');
util = require('util');
path = require('path');
postcss = require('postcss');
precss = require('precss');
sugarss = require('sugarss');
postcss_advanced_variables = require('postcss-advanced-variables');
postcss_color_function = require('postcss-color-function');
postcss_extend = require('postcss-extend');
postcss_easy_import = require('postcss-easy-import');
autoprefixer = require('autoprefixer');
VERBOSE = process.env.METASERVE_VERBOSE != null;
// ------------------------------------------------------------------------------
mapObj = function(o, f) {
var mapped;
mapped = {};
Object.keys(o).forEach(function(k) {
var v;
v = o[k];
if (typeof v === 'object') {
return mapped[k] = mapObj(v, f);
} else {
return mapped[k] = f(v);
}
});
return mapped;
};
mapFilteredNodes = function(root, filter, fn) {
return root.nodes.map(function(node) {
if (filter(node)) {
fn(node);
}
if (node.nodes != null) {
return node = mapFilteredNodes(node, filter, fn);
}
});
};
// ------------------------------------------------------------------------------
module.exports = {
ext: 'sass',
default_config: {
content_type: 'text/css'
},
compile: function(filename, config, context, cb) {
var i, len, plugin, plugins, ref, ref1, source;
if (VERBOSE) {
console.log('[PostCSSCompiler.compile]', filename, config);
}
// Read raw file
source = fs.readFileSync(filename).toString();
// Build plugins list
plugins = [
postcss_easy_import({
extensions: ['.sass'],
path: ['css']
}),
precss,
postcss_advanced_variables,
postcss_color_function,
postcss_extend
];
// Add extra plugins from config
if (config.plugins != null) {
ref = config.plugins;
for (i = 0, len = ref.length; i < len; i++) {
plugin = ref[i];
if ((ref1 = plugin[0]) !== '.' && ref1 !== '/') {
plugin = './node_modules/' + plugin;
}
plugins.push(require(path.resolve(process.cwd(), plugin)));
}
}
// Autoprefixer should run last
plugins.push(autoprefixer);
return postcss(plugins).process(source, {
parser: sugarss,
from: filename
}).then(function(compiled) {
compiled = compiled.content;
return cb(null, {
content_type: config.content_type,
source,
compiled
});
}).catch(function(err) {
console.error('[PostCSSCompiler.compile Error]', err);
return cb(err);
});
}
};