/* * * @flow */ import fs from 'fs'; import path from 'path'; import CleanCSS from 'clean-css'; import crypto from 'crypto'; const rootdir = path.resolve(__dirname, '..'); const assetdir = path.resolve(__dirname, '..', 'build', 'public', 'assets'); const builddir = path.resolve(__dirname, '..', 'build'); const FOLDER = path.resolve(__dirname, '..', 'src', 'styles'); const FILES = [ 'default.css', 'dark.css', 'light-round.css', 'dark-round.css', 'arkeros.css', ]; async function minifyCss() { console.log('Minifying css'); const assets = {}; FILES.forEach((file) => { const input = fs.readFileSync(`${FOLDER}/${file}`, 'utf8'); const options = {}; const output = new CleanCSS(options).minify(input); if (output.warnings && output.warnings.length > 0) { for (let i = 0; i < output.warnings.length; i += 1) { console.log('\x1b[33m%s\x1b[0m', output.warnings[i]); } } if (output.errors && output.errors.length > 0) { for (let i = 0; i < output.errors.length; i += 1) { console.log('\x1b[31m%s\x1b[0m', output.errors[i]); } throw new Error("Minify CSS Error Occured"); } // eslint-disable-next-line max-len console.log('\x1b[33m%s\x1b[0m', `Minified ${file} by ${Math.round(output.stats.efficiency * 100)}%`); const hash = crypto.createHash('md5').update(output.styles).digest('hex'); const key = file.substr(0, file.indexOf('.')); const filename = `${key}.${hash.substr(0, 8)}.css`; fs.writeFileSync(`${assetdir}/${filename}`, output.styles, 'utf8'); assets[key] = `/assets/${filename}`; }); const json = JSON.stringify(assets); fs.writeFileSync(`${builddir}/styleassets.json`, json); } export default minifyCss;