import sharp from 'sharp' import { fileURLToPath } from 'node:url' import { dirname, join } from 'node:path' import { mkdir } from 'node:fs/promises' const here = dirname(fileURLToPath(import.meta.url)) const source = join(here, '..', 'public', 'icons', 'icon.svg') const output = join(here, '..', 'public', 'icons') const appOutput = join(here, '..', 'public', 'app-icons') const appIcons = [ ['loutre-os','dashboard','#0a84ff','#0056b8'],['network-guardian','network','#34c759','#087d34'], ['reverse-proxy-manager','proxy','#64d2ff','#0079a8'],['codex-commander','terminal','#bf5af2','#6b25a2'], ['autonomous-dev-studio','studio','#5e5ce6','#2f2e9f'],['loutre-brain','brain','#ff2d55','#a90e30'], ['loutre-finance','finance','#30d158','#058632'],['print-pilot','printer','#ff9f0a','#c45f00'], ['loutre-home','home','#ffd60a','#d58a00'],['auto-care','car','#8e8e93','#3a3a3c'], ['smart-inventory','inventory','#0a84ff','#144ab8'],['knowledge-graph','graph','#ac8e68','#6d5035'], ['trip-organizer','trip','#5ac8fa','#0578af'],['pwa-factory','phone','#ff375f','#a80f38'], ['nasflix-media-health','media-health','#ff453a','#a91e18'],['nasflix-ai-media-curator','media-ai','#af52de','#592488'], ['pi-doctor','doctor','#32d74b','#087923'],['loutre-app-store','store','#007aff','#123fba'], ] const symbols = { dashboard: '', network: '', proxy: '', terminal: '', studio: '', brain: '', finance: '', printer: '', home: '', car: '', inventory: '', graph: '', trip: '', phone: '', 'media-health': '', 'media-ai': '', doctor: '', store: '', } function appSvg(symbol,top,bottom){return Buffer.from(`${symbols[symbol]}`)} await mkdir(appOutput,{recursive:true}) await Promise.all([ sharp(source).resize(192, 192).png().toFile(join(output, 'icon-192.png')), sharp(source).resize(512, 512).png().toFile(join(output, 'icon-512.png')), sharp(source).resize(512, 512).extend({ top: 51, bottom: 51, left: 51, right: 51, background: '#111316' }).resize(512, 512).png().toFile(join(output, 'icon-maskable-512.png')), sharp(source).resize(180, 180).png().toFile(join(output, 'apple-touch-icon.png')), ...appIcons.flatMap(([slug,symbol,top,bottom])=>[ sharp(appSvg(symbol,top,bottom)).resize(192,192).png().toFile(join(appOutput,`${slug}-192.png`)), sharp(appSvg(symbol,top,bottom)).resize(512,512).png().toFile(join(appOutput,`${slug}-512.png`)), sharp(appSvg(symbol,top,bottom)).resize(180,180).png().toFile(join(appOutput,`${slug}-apple.png`)), ]), ])