const fs = require('fs'); const path = require('path'); const uglifyjs = require('uglify-js'); const webpack = require('webpack'); module.exports = async ({ dir, options }) => { let prefix_text = ''; prefix_text += `window.gui_env="${options.env}";\n`; // ----------------------------------------------- // Combine all images into a single js file // ----------------------------------------------- { let icons = 'window.icons = [];\n'; fs.readdirSync(dir).forEach(file => { // skip dotfiles if (file.startsWith('.')) return; // load image let buff = new Buffer.from(fs.readFileSync(dir + '/' + file)); // convert to base64 let base64data = buff.toString('base64'); // add to `window.icons` if (file.endsWith('.png')) icons += `window.icons['${file}'] = "data:image/png;base64,${base64data}";\n`; else if (file.endsWith('.svg')) icons += `window.icons['${file}'] = "data:image/svg+xml;base64,${base64data}";\n`; }); prefix_text += icons + '\n'; } // ----------------------------------------------- // Concat/merge the JS libraries and save them to ./dist/libs.js // ----------------------------------------------- { const lib_paths = require('./libPaths.cjs'); let js = ''; for(let i = 0; i < lib_paths.length; i++){ const file = path.join(__dirname, '../src/lib/', lib_paths[i]); // js if(file.endsWith('.js') && !file.endsWith('.min.js')){ let minified_code = await uglifyjs.minify(fs.readFileSync(file).toString(), {mangle: false}); if(minified_code && minified_code.code){ js += minified_code.code; if(options?.verbose) console.log('minified: ', file); } }else{ js += fs.readFileSync(file); if(options?.verbose) console.log('skipped minification: ', file); } js += '\n\n\n'; } prefix_text += js; } return new webpack.BannerPlugin({ banner: prefix_text, raw: true, }); };