You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.4 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const merge = require('merge-source-map');
// .scss/.sass processor
const scss = {
render(source, map, options) {
const nodeSass = require('sass');
const finalOptions = Object.assign({}, options, {
data: source,
file: options.filename,
outFile: options.filename,
sourceMap: !!map
});
try {
const result = nodeSass.renderSync(finalOptions);
if (map) {
return {
code: result.css.toString(),
map: merge(map, JSON.parse(result.map.toString())),
errors: []
};
}
return { code: result.css.toString(), errors: [] };
}
catch (e) {
return { code: '', errors: [e] };
}
}
};
const sass = {
render(source, map, options) {
return scss.render(source, map, Object.assign({}, options, { indentedSyntax: true }));
}
};
// .less
const less = {
render(source, map, options) {
const nodeLess = require('less');
let result;
let error = null;
nodeLess.render(source, Object.assign({}, options, { syncImport: true }), (err, output) => {
error = err;
result = output;
});
if (error)
return { code: '', errors: [error] };
if (map) {
return {
code: result.css.toString(),
map: merge(map, result.map),
errors: []
};
}
return { code: result.css.toString(), errors: [] };
}
};
// .styl
const styl = {
render(source, map, options) {
const nodeStylus = require('stylus');
try {
const ref = nodeStylus(source);
Object.keys(options).forEach(key => ref.set(key, options[key]));
if (map)
ref.set('sourcemap', { inline: false, comment: false });
const result = ref.render();
if (map) {
return {
code: result,
map: merge(map, ref.sourcemap),
errors: []
};
}
return { code: result, errors: [] };
}
catch (e) {
return { code: '', errors: [e] };
}
}
};
exports.processors = {
less,
sass,
scss,
styl,
stylus: styl
};