diff --git a/apps/blog/package.json b/apps/blog/package.json index 7e4aee2d8a..dad6bb49e2 100644 --- a/apps/blog/package.json +++ b/apps/blog/package.json @@ -18,6 +18,7 @@ "@fumadocs/cli": "catalog:", "@prisma/eclipse": "workspace:^", "@prisma-docs/ui": "workspace:*", + "cors": "^2.8.6", "fumadocs-core": "catalog:", "fumadocs-mdx": "catalog:", "fumadocs-openapi": "catalog:", diff --git a/apps/blog/src/app/(blog)/[slug]/page.tsx b/apps/blog/src/app/(blog)/[slug]/page.tsx index 497e47906f..553d88646b 100644 --- a/apps/blog/src/app/(blog)/[slug]/page.tsx +++ b/apps/blog/src/app/(blog)/[slug]/page.tsx @@ -1,11 +1,23 @@ -import { notFound } from 'next/navigation'; -import Link from 'next/link'; -import { InlineTOC } from 'fumadocs-ui/components/inline-toc'; -import { getMDXComponents } from '@/mdx-components'; -import { createRelativeLink } from 'fumadocs-ui/mdx'; -import { blog } from '@/lib/source'; -import Image from 'next/image'; -import { withBlogBasePathForImageSrc } from '@/lib/url'; +import { formatTag, formatDate } from "@/lib/format"; +import { notFound } from "next/navigation"; +import Link from "next/link"; +import { getMDXComponents } from "@/mdx-components"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import { blog } from "@/lib/source"; +import { + Action, + Avatar, + Badge, + Button, + cn, + InlineTOC, + Input, + Label, + Separator, +} from "@prisma-docs/eclipse"; +import { FooterNewsletterForm } from "@prisma-docs/ui/components/newsletter"; +import { BlogShare } from "@/components/BlogShare"; + export default async function Page(props: { params: Promise<{ slug: string }>; }) { @@ -14,106 +26,89 @@ export default async function Page(props: { if (!page) notFound(); const MDX = page.data.body; - const formatDate = (value: unknown) => { - const date = - value instanceof Date ? value : new Date((value as string) ?? ''); - if (Number.isNaN(date.getTime())) return ''; - return date.toLocaleDateString('en-US', { - year: 'numeric', - month: 'long', - day: 'numeric', - }); - }; - const getHeroImageSrc = () => { - const data = page.data as any; - const rel = - (data.heroImagePath as string | undefined) ?? - (data.metaImagePath as string | undefined); - if (rel) { - if (rel.startsWith('/')) return rel; - const base = page.url.startsWith('/') ? page.url : `/${page.url}`; - const baseClean = base.endsWith('/') ? base.slice(0, -1) : base; - const relClean = rel.replace(/^\.\//, '').replace(/^\/+/, ''); - return `${baseClean}/${relClean}`; - } - const absolute = - (data.heroImageUrl as string | undefined) ?? - (data.metaImageUrl as string | undefined); - return absolute ?? null; - }; - const heroSrc = getHeroImageSrc(); return ( - <> - {/* Hero image */} - {heroSrc ? ( -
{page.data.description}
- ) : null} -- {page.data.authors?.length ? page.data.authors.join(', ') : null} - {page.data.date ? ( - <> - {' • '} - {formatDate(page.data.date)} - > - ) : null} -
-- Sign up for the Prisma Newsletter to stay up to date with the latest - releases and posts. -
- - Sign up - +