import { getAllIcons } from "@/lib/api" import { ImageResponse } from "next/og" import { readFile } from "node:fs/promises" import { join } from "node:path" export const dynamic = "force-static" export async function generateStaticParams() { const iconsData = await getAllIcons() return Object.keys(iconsData).map((icon) => ({ icon, })) } export const size = { width: 1200, height: 630, } export default async function Image({ params }: { params: { icon: string } }) { const { icon } = params const iconsData = await getAllIcons() const totalIcons = Object.keys(iconsData).length const index = Object.keys(iconsData).indexOf(icon) // Format the icon name for display const formattedIconName = icon .split("-") .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(" ") // Read the icon file from local filesystem let iconData: Buffer | null = null try { const iconPath = join(process.cwd(), `../png/${icon}.png`) console.log(`Generating opengraph image for ${icon} (${index + 1} / ${totalIcons}) from path ${iconPath}`) iconData = await readFile(iconPath) } catch (error) { console.error(`Icon ${icon} was not found locally`) } // Convert the image data to a data URL or use placeholder const iconUrl = iconData ? `data:image/png;base64,${iconData.toString("base64")}` : `https://placehold.co/600x400?text=${formattedIconName}` return new ImageResponse(