27 lines
1011 B
JavaScript
27 lines
1011 B
JavaScript
import sharp from 'sharp'
|
||
import { readFileSync } from 'fs'
|
||
import { join, dirname } from 'path'
|
||
import { fileURLToPath } from 'url'
|
||
|
||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||
const root = join(__dirname, '..')
|
||
|
||
const icon = readFileSync(join(root, 'public/icons/icon.svg'))
|
||
const maskable = readFileSync(join(root, 'public/icons/icon-maskable.svg'))
|
||
|
||
await sharp(icon) .resize(192, 192).png().toFile(join(root, 'public/icons/icon-192.png'))
|
||
await sharp(icon) .resize(512, 512).png().toFile(join(root, 'public/icons/icon-512.png'))
|
||
await sharp(maskable) .resize(512, 512).png().toFile(join(root, 'public/icons/icon-512-maskable.png'))
|
||
|
||
// Apple touch icon (180×180, no transparency — white bg for iOS)
|
||
await sharp(icon)
|
||
.resize(180, 180)
|
||
.flatten({ background: '#ffffff' })
|
||
.png()
|
||
.toFile(join(root, 'public/icons/apple-touch-icon.png'))
|
||
|
||
// Favicon (32×32)
|
||
await sharp(icon).resize(32, 32).png().toFile(join(root, 'public/favicon.png'))
|
||
|
||
console.log('Icons generated.')
|