Archived
0
0
Fork 0
This repository has been archived on 2024-02-06. You can view files and clone it, but cannot push or open issues or pull requests.
library/terser.js

55 lines
1.4 KiB
JavaScript

/* 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;
}
});
});
}
});
});