UNPKG

@geolid/ui-kit

Version:
115 lines (92 loc) 3.22 kB
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); };