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.
89 lines
2.5 KiB
89 lines
2.5 KiB
4 years ago
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.processors = void 0;
|
||
|
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
|
||
|
};
|