Repository Public
1#!/usr/bin/env node2/**3 * Renders the PWA icons of Agent OS from the hand-written SVG sources in public/icons/ with sharp4 * (resolved through next's dependency tree). Usage: node dev/gen-icons.mjs5 */6import { createRequire } from 'node:module';7import path from 'node:path';8import { fileURLToPath } from 'node:url';910const here = path.dirname(fileURLToPath(import.meta.url));11const require = createRequire(import.meta.url);12const sharp = createRequire(require.resolve('next/package.json'))('sharp');13const dir = path.join(here, '../public/icons');14const jobs = [15 ['icon.svg', 'icon-192.png', 192],16 ['icon.svg', 'icon-512.png', 512],17 ['icon-maskable.svg', 'icon-maskable-192.png', 192],18 ['icon-maskable.svg', 'icon-maskable-512.png', 512],19 ['icon-maskable.svg', 'apple-touch-icon.png', 180], // iOS applies its own mask: full-bleed source20];21for (const [src, out, size] of jobs) {22 await sharp(path.join(dir, src), { density: 300 }).resize(size, size).png({ compressionLevel: 9 }).toFile(path.join(dir, out));23 console.log(`${out} ${size}x${size}`);24}25