66 lines
2.0 KiB
JavaScript
Executable File
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;
|