@geolid/ui-kit
Version:
Geolid UI Kit
115 lines (92 loc) • 3.22 kB
JavaScript
const fs = require('fs');
const path = require('path');
const zlib = require('zlib');
const sass = require('node-sass');
const CleanCSS = require('clean-css');
const filesize = require('filesize');
const crypto = require('crypto');
const rollup = require('rollup');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
const uglify = require('uglify-js');
const version = require('../package.json').version;
exports.banner = `/*! Geolid UIkit ${version} */\n`;
exports.files = {
sass: {src: __dirname + '/../src/scss/ui-kit.scss', dist: __dirname + '/../dist/css/ui-kit.css'},
js: {src: __dirname + '/../src/js/ui-kit.js', dist: __dirname + '/../dist/js/ui-kit.js'}
};
exports.md5 = function (data) {
return crypto.createHash('md5').update(data).digest('hex');
};
exports.fileSize = function (file) {
const {size} = fs.statSync(file);
const gzippedSize = exports.gzipFileSize(file);
const ratio = (size - gzippedSize) * 100 / size;
return {
raw: filesize(size),
gzipped: filesize(gzippedSize),
ratio: `${Math.round(ratio*100)/100}%`
}
};
exports.write = function (dest, data) {
fs.writeFileSync(dest, data);
};
exports.gzipFileSize = function (file) {
const tmpFile = file + '.tmpgz';
fs.writeFileSync(tmpFile, zlib.gzipSync(fs.readFileSync(file), {level: 5}));
const {size} = fs.statSync(tmpFile);
fs.unlinkSync(tmpFile);
return size;
};
exports.renderSass = function (file) {
const {css} = sass.renderSync({
file: file,
importer( url /*, prev */ ) {
// E.g. @import '~ckeditor5-theme-lark/theme/theme.scss';
// See https://github.com/jtangelder/sass-loader#imports
if ( url.startsWith( '~' ) ) {
const path = process.cwd() + '/node_modules/' + url.slice( 1 );
return {
file: path
};
}
}
});
return css;
};
exports.minify = function (css) {
const {styles} = new CleanCSS({
advanced: false,
specialComments: 0,
rebase: false
}).minify(css);
return styles;
};
exports.uglify = function (data) {
return uglify.minify(
data,
{output: {preamble: exports.banner}}
).code
};
exports.compile = async function (file, {minify = true}) {
const external = ['uikit'];
const globals = {uikit: 'UIkit'};
const bundle = await rollup.rollup({
input: file,
plugins: [
resolve(),
commonjs(),
]
});
let {code, map} = await bundle.generate({
globals,
format: 'umd',
banner: exports.banner,
amd: {id: 'uikit'},
name: 'uikit',
sourcemap: !minify ? 'inline' : false
});
// code = code.replace(/(>)\\n\s+|\\n\s+(<)/g, '$1 $2');
code = code + (!minify ? '\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,' + new Buffer(map.toString()).toString('base64') : '');
return !minify ? code : exports.uglify(code);
};