1#!/usr/bin/env node
2
3/**
4 * Generates PNG extension icons from SVG using Puppeteer.
5 *
6 * Run: node scripts/generate-extension-icons.js
7 */
8
9import puppeteer from 'puppeteer';
10import fs from 'fs';
11import path from 'path';
12import { fileURLToPath } from 'url';
13
14const __dirname = path.dirname(fileURLToPath(import.meta.url));
15const ROOT = path.resolve(__dirname, '..');
16const ICONS_DIR = path.join(ROOT, 'extension/icons');
17
18const SIZES = [16, 32, 48, 128];
19
20const svgContent = fs.readFileSync(path.join(ICONS_DIR, 'icon.svg'), 'utf-8');
21
22const browser = await puppeteer.launch({ headless: true });
23const page = await browser.newPage();
24
25for (const size of SIZES) {
26 await page.setViewport({ width: size, height: size, deviceScaleFactor: 1 });
27 await page.setContent(`
28 <!DOCTYPE html>
29 <html>
30 <head><style>* { margin: 0; padding: 0; } body { width: ${size}px; height: ${size}px; overflow: hidden; }</style></head>
31 <body>${svgContent.replace('viewBox="0 0 128 128"', `viewBox="0 0 128 128" width="${size}" height="${size}"`)}</body>
32 </html>
33 `);
34 await page.screenshot({ path: path.join(ICONS_DIR, `icon-${size}.png`), omitBackground: true });
35 console.log(`Generated icon-${size}.png`);
36}
37
38await browser.close();