e7b0f65686
The collapsed-sidebar tooltips use Base UI's Tooltip, which pulls floating-ui into the always-loaded shell chunk. Kept the richer tooltip over native title; the index is a feature-rich admin SPA bundle. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
889 B
JavaScript
25 lines
889 B
JavaScript
// Fails if the largest built JS entry chunk exceeds the gzipped budget.
|
|
import { readdirSync, readFileSync } from "node:fs";
|
|
import { gzipSync } from "node:zlib";
|
|
import { join } from "node:path";
|
|
|
|
const BUDGET_KB = 180;
|
|
const dir = "dist/assets";
|
|
const jsFiles = readdirSync(dir).filter((f) => f.endsWith(".js"));
|
|
if (jsFiles.length === 0) {
|
|
console.error(`no JS files found in ${dir} — was the build skipped?`);
|
|
process.exit(1);
|
|
}
|
|
let largest = 0;
|
|
let largestName = "";
|
|
for (const file of jsFiles) {
|
|
const gz = gzipSync(readFileSync(join(dir, file))).length;
|
|
if (gz > largest) { largest = gz; largestName = file; }
|
|
}
|
|
const kb = (largest / 1024).toFixed(1);
|
|
console.log(`largest JS chunk: ${largestName} = ${kb} KB gz (budget ${BUDGET_KB} KB)`);
|
|
if (largest > BUDGET_KB * 1024) {
|
|
console.error(`bundle-size budget exceeded: ${kb} KB > ${BUDGET_KB} KB`);
|
|
process.exit(1);
|
|
}
|