import { Metadata } from "next" import { Code } from "bright" import { getPostSlugs, loadPageMetada, loadSinglePage } from "~/utils/post" import MarkdownToJSX from 'markdown-to-jsx' import styles from "~/styles/post.module.css" import { ReactElement } from "react" import ScriptLoaderServer from "~/components/ScriptLoaderServer" export async function generateMetadata({ params: { slug } }: { params: { slug: string } }): Promise { const post = await loadPageMetada(slug) return { title: post?.title } } export async function generateStaticParams(): Promise<{ slug: string }[]> { const slugs = await getPostSlugs() return slugs.map(slug => ({ slug })) } export default async function Post({ params: { slug } }: { params: { slug: string } }) { const post = await loadSinglePage(slug) if (!post) return null return ( <>
{post.date.toLocaleDateString('en-US', { timeZone: 'UTC' })}

{post.title}

{post.subtitle}

{post.body} {post.resources?.length && ( <>

Post Resources:

)}
); } function Markdown({ children }: { children: string }) { const options = { overrides: { pre: { component: CodeBlock, props: {} }, ScriptLoader: { component: ScriptLoaderServer } } } {/* @ts-expect-error Async Server Component */ } return } Code.theme = { dark: "github-dark", light: "github-light", lightSelector: ':root.light' } function CodeBlock({ children }: { children: ReactElement }) { // extract props normally passed to pre element const { className: langKey, children: sourceText, ...rest } = children?.props ?? {} const language = langKey?.replace(/^lang-/i, '') {/* @ts-expect-error Async Server Component */ } return }