const fs = require('fs'); const path = require('path'); // Simple CSS minification function function minifyCSS(css) { return css // Remove comments .replace(/\/\*[\s\S]*?\*\//g, '') // Remove unnecessary whitespace .replace(/\s+/g, ' ') // Remove whitespace around selectors .replace(/\s*([{}:;,])\s*/g, '$1') // Remove trailing semicolons before closing braces .replace(/;}/g, '}') // Remove quotes from url() .replace(/url\(["']?([^"')]+)["']?\)/g, 'url($1)') .trim(); } // Simple JS minification function function minifyJS(js) { // Skip minification if already minified (contains .min in content) if (js.includes('.min')) return js; return js // Remove single-line comments (but preserve URLs) .replace(/([^:])\/\/[^\n]*/g, '$1') // Remove multi-line comments .replace(/\/\*[\s\S]*?\*\//g, '') // Remove unnecessary whitespace .replace(/\s+/g, ' ') // Remove whitespace around operators .replace(/\s*([{}:;,=+\-*/<>!&|])\s*/g, '$1') .trim(); } // Process CSS files console.log('Minifying CSS files...'); const cssDir = path.join(__dirname, 'css'); const cssFiles = fs.readdirSync(cssDir).filter(f => f.endsWith('.css') && !f.includes('.min.')); cssFiles.forEach(file => { const filePath = path.join(cssDir, file); const content = fs.readFileSync(filePath, 'utf8'); const minified = minifyCSS(content); const minPath = path.join(cssDir, file.replace('.css', '.min.css')); fs.writeFileSync(minPath, minified); const originalSize = Buffer.byteLength(content, 'utf8'); const minifiedSize = Buffer.byteLength(minified, 'utf8'); const saved = originalSize - minifiedSize; const percent = ((saved / originalSize) * 100).toFixed(1); console.log(`✓ ${file}: ${originalSize} → ${minifiedSize} bytes (saved ${saved} bytes, ${percent}%)`); }); // Process JS files in components directory console.log('\nMinifying JavaScript files...'); const jsDirectories = ['components', 'js']; jsDirectories.forEach(dir => { const jsDir = path.join(__dirname, dir); if (!fs.existsSync(jsDir)) return; const jsFiles = fs.readdirSync(jsDir).filter(f => f.endsWith('.js') && !f.includes('.min.')); jsFiles.forEach(file => { const filePath = path.join(jsDir, file); const content = fs.readFileSync(filePath, 'utf8'); const minified = minifyJS(content); const minPath = path.join(jsDir, file.replace('.js', '.min.js')); fs.writeFileSync(minPath, minified); const originalSize = Buffer.byteLength(content, 'utf8'); const minifiedSize = Buffer.byteLength(minified, 'utf8'); const saved = originalSize - minifiedSize; const percent = ((saved / originalSize) * 100).toFixed(1); console.log(`✓ ${dir}/${file}: ${originalSize} → ${minifiedSize} bytes (saved ${saved} bytes, ${percent}%)`); }); }); console.log('\nMinification complete!'); console.log('Update your HTML files to use the .min versions for production.');