/* eslint-disable @typescript-eslint/no-var-requires */ const { minify } = require('terser'); const { readFile, readdir, writeFile, stat, mkdir, rm } = require('fs'); const { resolve, sep, dirname } = require('path'); const walk = function(dir, done) { let results = []; readdir(dir, function(err, list) { if(err) return done(err); let pending = list.length; if(!pending) return done(null, results); list.forEach(function(file) { file = resolve(dir, file); stat(file, function(err, stat) { if(stat && stat.isDirectory()) { walk(file, function(err, res) { results = results.concat(res); if(!--pending) done(null, results); }); } else { results.push(file); if(!--pending) done(null, results); } }); }); }); }; walk('dist', (err, files) => { if(err) throw err; files.forEach((file) => { if(file.endsWith('js')) { readFile(file, async (err, fileBuf) => { if(err) throw err; const minifyCode = (await minify(fileBuf.toString('utf8'), { ecma: 5, compress: true, mangle: false })).code; writeFile(file, minifyCode, { encoding: 'utf8' }, (err) => { if(err && err.message.includes('ENOENT')) { mkdir(`dist/${dirname(file).split(sep).pop()}`, (err) => { if(err) throw err; }); writeFile(file, minifyCode, { encoding: 'utf8' }, (err) => { if(err) throw err; }); } else if(err) { throw err; } }); }); } }); });