resume/src/StyleCompiler.js
2017-02-14 21:51:02 +01:00

66 lines
2.0 KiB
JavaScript
Executable File

const less = require('less');
const path = require('path');
const fs = require('fs');
const CleanCSS = require('clean-css');
const writeFile = require('write');
const Util = require('./Util');
const StyleCompiler = {
/**
* compiles less string to css string
* @param {string} lessContent
* @return {string} css
*/
compile: function(lessContent) {
let lessDir = path.join(__dirname, '../less');
return new Promise((res, rej) => {
less.render(lessContent, {
paths: [lessDir, lessDir + '/fonts'],
}, (e, output) => {
if (e) rej(e);
else res(output.css);
});
});
},
/**
* minifies css
* @param {string} css
* @return {string} minified css
*/
minify: function(css) {
return new Promise((res, rej) => {
new CleanCSS().minify(css, (err, output) => {
if (err) rej(err);
else res(output)
});
});
},
/**
* compiles less files to minified css file
* @return {Promise}
*/
run: async function() {
const directories = Util.getResumesFromDirectories();
const styleLess = await Util.readFileContent(path.join(__dirname, '../less/style.less'));
let css = await StyleCompiler.compile(styleLess);
const contents = await Promise.all(
directories
.map(resume => Util.readFileContent(
path.join(__dirname, '../resumes/' + resume.path + '/style.less')
))
);
const compiledContents = await Promise.all(
contents
.map(content => StyleCompiler.compile(content))
);
const ret = compiledContents.reduce((pre, cur) => pre += cur, css);
// minify
const minCSS = await StyleCompiler.minify(ret);
// write file
const p = path.join(__dirname, '../public/style.min.css');
await Util.writeFile(p, minCSS.styles);
}
}
module.exports = StyleCompiler;