You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 lines
2.4 KiB

#!/usr/bin/env node
/**
* Bundle Size Check Script
*
* Checks if the plugin bundle size is within the 50KB gzip budget
* and blocks release if exceeded.
*
* @author Matthew Raymer
* @version 1.0.0
*/
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const BUNDLE_SIZE_BUDGET_KB = 50; // 50KB gzip budget (increased for TimeSafari integration)
const DIST_DIR = path.join(__dirname, '..', 'dist');
/**
* Get gzipped size of a file in KB
* @param {string} filePath - Path to the file
* @returns {number} Size in KB
*/
function getGzippedSize(filePath) {
try {
const gzipOutput = execSync(`gzip -c "${filePath}" | wc -c`, { encoding: 'utf8' });
const sizeBytes = parseInt(gzipOutput.trim(), 10);
return Math.round(sizeBytes / 1024 * 100) / 100; // Round to 2 decimal places
} catch (error) {
console.error(`Error getting gzipped size for ${filePath}:`, error.message);
return 0;
}
}
/**
* Check bundle sizes and enforce budget
*/
function checkBundleSizes() {
console.log('🔍 Checking bundle sizes...');
if (!fs.existsSync(DIST_DIR)) {
console.error('❌ Dist directory not found. Run "npm run build" first.');
process.exit(1);
}
const filesToCheck = [
'dist/plugin.js',
'dist/esm/index.js',
'dist/web/index.js'
];
let totalSize = 0;
let budgetExceeded = false;
for (const file of filesToCheck) {
const filePath = path.join(__dirname, '..', file);
if (fs.existsSync(filePath)) {
const size = getGzippedSize(filePath);
totalSize += size;
console.log(`📦 ${file}: ${size}KB gzipped`);
if (size > BUNDLE_SIZE_BUDGET_KB) {
console.error(`${file} exceeds budget: ${size}KB > ${BUNDLE_SIZE_BUDGET_KB}KB`);
budgetExceeded = true;
}
} else {
console.warn(`⚠️ ${file} not found`);
}
}
console.log(`\n📊 Total bundle size: ${totalSize}KB gzipped`);
console.log(`🎯 Budget: ${BUNDLE_SIZE_BUDGET_KB}KB gzipped`);
if (budgetExceeded || totalSize > BUNDLE_SIZE_BUDGET_KB) {
console.error(`\n❌ Bundle size budget exceeded! Total: ${totalSize}KB > ${BUNDLE_SIZE_BUDGET_KB}KB`);
console.error('🚫 Release blocked. Please optimize bundle size before releasing.');
process.exit(1);
}
console.log('✅ Bundle size within budget!');
}
// Run the check
checkBundleSizes();