'use server'; import { Image } from '@bentwnghk/ui/mdx'; import Img from 'next/image'; import { getPlaiceholder } from 'plaiceholder'; import { FC } from 'react'; const DEFAULT_WIDTH = 800; const fetchImage = async (url: string) => { const buffer = await fetch(url, { cache: 'force-cache' }).then(async (res) => Buffer.from(await res.arrayBuffer()), ); const { base64, metadata: { height, width }, } = await getPlaiceholder(buffer, { format: ['webp'] }); return { base64, height: (DEFAULT_WIDTH / width) * height, }; }; const ImageWrapper: FC<{ alt: string; src: string }> = async ({ alt, src, ...rest }) => { try { const { base64, height } = await fetchImage(src); return ( {alt} } src={src} width={DEFAULT_WIDTH} /> ); } catch { return {alt}; } }; export default ImageWrapper;