seitime-frappe/rollup/less-loader.js
2020-04-22 11:29:38 +05:30

54 lines
No EOL
1 KiB
JavaScript

const pify = require('pify');
const importCwd = require('import-cwd');
const path = require('path');
const getFileName = filepath => path.basename(filepath);
function loadModule(moduleId) {
// Trying to load module normally (relative to plugin directory)
try {
return require(moduleId);
} catch (_) {
// Ignore error
}
// Then, trying to load it relative to CWD
return importCwd.silent(moduleId);
}
module.exports = {
name: 'less',
test: /\.less$/,
async process({
code
}) {
const less = loadModule('less');
if (!less) {
throw new Error('You need to install "less" packages in order to process Less files');
}
let {
css,
map,
imports
} = await pify(less.render.bind(less))(code, {
...this.options,
sourceMap: this.sourceMap && { outputSourceFiles: true },
filename: this.id
});
for (const dep of imports) {
this.dependencies.add(dep);
}
if (map) {
map = JSON.parse(map);
map.sources = map.sources.map(source => getFileName(source));
}
return {
code: css,
map
};
}
};