import { changelogs } from "@/lib/source"; import { notFound } from "next/navigation"; import { absoluteUrl, formatDate } from "@/lib/utils"; import DatabaseTable from "@/components/mdx/database-tables"; import { cn } from "@/lib/utils"; import { Step, Steps } from "fumadocs-ui/components/steps"; import { Tab, Tabs } from "fumadocs-ui/components/tabs"; import { GenerateSecret } from "@/components/generate-secret"; import { AnimatePresence } from "@/components/ui/fade-in"; import { TypeTable } from "fumadocs-ui/components/type-table"; import { Features } from "@/components/blocks/features"; import { ForkButton } from "@/components/fork-button"; import Link from "next/link"; import defaultMdxComponents from "fumadocs-ui/mdx"; import { File, Folder, Files } from "fumadocs-ui/components/files"; import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; import { Pre } from "fumadocs-ui/components/codeblock"; import { DocsBody } from "fumadocs-ui/page"; import ChangelogPage, { Glow } from "../_components/default-changelog"; import { IconLink } from "../_components/changelog-layout"; import { BookIcon, GitHubIcon, XIcon } from "../_components/icons"; import { DiscordLogoIcon } from "@radix-ui/react-icons"; import { StarField } from "../_components/stat-field"; import { CalendarClockIcon } from "lucide-react"; const metaTitle = "Changelogs"; const metaDescription = "Latest changes , fixes and updates."; const ogImage = "https://better-auth.com/release-og/changelog-og.png"; export default async function Page({ params, }: { params: Promise<{ slug?: string[] }>; }) { const { slug } = await params; const page = changelogs.getPage(slug); if (!slug) { //@ts-ignore return ; } if (!page) { notFound(); } const MDX = page.data?.body; const toc = page.data?.toc; const { title, description, date } = page.data; return (

{title}{" "}

{description}

{formatDate(date)}


Documentation GitHub Community

BETTER-AUTH.

) => ( ), Step, Steps, File, Folder, Files, Tab, Tabs, Pre: Pre, GenerateSecret, AnimatePresence, TypeTable, Features, ForkButton, DatabaseTable, Accordion, Accordions, }} />
); } export async function generateMetadata({ params, }: { params: Promise<{ slug?: string[] }>; }) { const { slug } = await params; if (!slug) { return { metadataBase: new URL("https://better-auth.com/changelogs"), title: metaTitle, description: metaDescription, openGraph: { title: metaTitle, description: metaDescription, images: [ { url: ogImage, }, ], url: "https://better-auth.com/changelogs", }, twitter: { card: "summary_large_image", title: metaTitle, description: metaDescription, images: [ogImage], }, }; } const page = changelogs.getPage(slug); if (page == null) notFound(); const baseUrl = process.env.NEXT_PUBLIC_URL || process.env.VERCEL_URL; const url = new URL(`${baseUrl}/release-og/${slug.join("")}.png`); const { title, description } = page.data; return { title, description, openGraph: { title, description, type: "website", url: absoluteUrl(`changelogs/${slug.join("")}`), images: [ { url: url.toString(), width: 1200, height: 630, alt: title, }, ], }, twitter: { card: "summary_large_image", title, description, images: [url.toString()], }, }; } export function generateStaticParams() { return changelogs.generateParams(); }