Import source: cshare-app/scripts/precompress.mjs
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,54 @@
|
|||||||
|
import fs from 'node:fs/promises';
|
||||||
|
import path from 'node:path';
|
||||||
|
import { brotliCompress, constants, gzip } from 'node:zlib';
|
||||||
|
import { promisify } from 'node:util';
|
||||||
|
|
||||||
|
const gzipAsync = promisify(gzip);
|
||||||
|
const brotliAsync = promisify(brotliCompress);
|
||||||
|
const distDir = path.resolve('dist');
|
||||||
|
const extensions = new Set([
|
||||||
|
'.css',
|
||||||
|
'.html',
|
||||||
|
'.js',
|
||||||
|
'.json',
|
||||||
|
'.svg',
|
||||||
|
'.txt',
|
||||||
|
'.ttf',
|
||||||
|
]);
|
||||||
|
|
||||||
|
async function walk(dir) {
|
||||||
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||||
|
const files = await Promise.all(entries.map(async (entry) => {
|
||||||
|
const fullPath = path.join(dir, entry.name);
|
||||||
|
if (entry.isDirectory()) return walk(fullPath);
|
||||||
|
return fullPath;
|
||||||
|
}));
|
||||||
|
return files.flat();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function compressFile(filePath) {
|
||||||
|
if (!extensions.has(path.extname(filePath))) return;
|
||||||
|
|
||||||
|
const input = await fs.readFile(filePath);
|
||||||
|
if (input.length < 1024) return;
|
||||||
|
|
||||||
|
const [gz, br] = await Promise.all([
|
||||||
|
gzipAsync(input, { level: 9 }),
|
||||||
|
brotliAsync(input, {
|
||||||
|
params: {
|
||||||
|
[constants.BROTLI_PARAM_QUALITY]: 11,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
await Promise.all([
|
||||||
|
fs.writeFile(`${filePath}.gz`, gz),
|
||||||
|
fs.writeFile(`${filePath}.br`, br),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const files = await walk(distDir);
|
||||||
|
await Promise.all(files.map(compressFile));
|
||||||
|
|
||||||
|
console.log(`Precompressed ${files.length} dist files with gzip and Brotli where beneficial.`);
|
||||||
|
|
||||||
Reference in New Issue
Block a user