25 lines
634 B
TypeScript
25 lines
634 B
TypeScript
import path from 'node:path';
|
|
import type { APIRoute } from 'astro';
|
|
import sharp from 'sharp';
|
|
import ico from 'sharp-ico';
|
|
|
|
const faviconSrc = path.resolve('src/images/favicon_icon.png');
|
|
|
|
export const GET: APIRoute = async () => {
|
|
// Resize the image to multiple sizes
|
|
const sizes = [16, 32];
|
|
|
|
const buffers = await Promise.all(
|
|
sizes.map(async (size) => {
|
|
return await sharp(faviconSrc).resize(size).toFormat('png').toBuffer();
|
|
})
|
|
);
|
|
|
|
// Convert the image to an ICO file
|
|
const icoBuffer = ico.encode(buffers);
|
|
|
|
return new Response(icoBuffer, {
|
|
headers: { 'Content-Type': 'image/x-icon' },
|
|
});
|
|
};
|