/** * Generates PNG icons for PWA from the master SVG icon. * Run: node scripts/generate-icons.mjs * Called automatically via the "prebuild" npm script. */ import { readFileSync } from 'fs'; import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; import sharp from 'sharp'; const __dirname = dirname(fileURLToPath(import.meta.url)); const iconsDir = join(__dirname, '..', 'public', 'icons'); const svgBuffer = readFileSync(join(iconsDir, 'icon.svg')); const sizes = [ { name: 'apple-touch-icon-180x180.png', size: 180 }, { name: 'icon-192x192.png', size: 192 }, { name: 'icon-512x512.png', size: 512 }, ]; for (const { name, size } of sizes) { await sharp(svgBuffer, { density: 300 }) .resize(size, size) .png({ compressionLevel: 9 }) .toFile(join(iconsDir, name)); console.log(` \u2713 ${name} (${size}x${size})`); } console.log('PWA icons generated.');