From c162c85fb19b2936496c9a39db876c5ae9380cf5 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:27:05 +0330 Subject: [PATCH] Import source: global/scripts/compress-dist.mjs Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- global/scripts/compress-dist.mjs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 global/scripts/compress-dist.mjs diff --git a/global/scripts/compress-dist.mjs b/global/scripts/compress-dist.mjs new file mode 100644 index 0000000..a427497 --- /dev/null +++ b/global/scripts/compress-dist.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node +import { readdirSync, statSync, createReadStream, createWriteStream } from 'fs'; +import { join } from 'path'; +import { createGzip, createBrotliCompress, constants } from 'zlib'; +import { pipeline } from 'stream/promises'; + +const COMPRESS_EXT = ['.html', '.js', '.css', '.xml', '.json', '.svg']; + +function walk(dir) { + const results = []; + for (const f of readdirSync(dir)) { + const p = join(dir, f); + if (statSync(p).isDirectory()) results.push(...walk(p)); + else if (COMPRESS_EXT.some(e => f.endsWith(e))) results.push(p); + } + return results; +} + +let gz = 0, br = 0; +for (const file of walk('dist')) { + await pipeline(createReadStream(file), createGzip({ level: 9 }), createWriteStream(`${file}.gz`)); + gz++; + await pipeline( + createReadStream(file), + createBrotliCompress({ params: { [constants.BROTLI_PARAM_QUALITY]: 11 } }), + createWriteStream(`${file}.br`) + ); + br++; +} +console.log(`[compress] gzip: ${gz} files, brotli: ${br} files`);