From 5b76385caf6ff3128824070b3f7c45d5d5d2ee3f Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 16 Apr 2024 18:14:15 +0100 Subject: [PATCH] cleanup metadata generation --- src/app/player/[id]/page.tsx | 22 +++-------- src/app/server/[platform]/[hostname]/page.tsx | 24 ++++-------- src/common/embed-fallback.ts | 23 ------------ src/common/embed.ts | 37 +++++++++++++++++++ 4 files changed, 50 insertions(+), 56 deletions(-) delete mode 100644 src/common/embed-fallback.ts create mode 100644 src/common/embed.ts diff --git a/src/app/player/[id]/page.tsx b/src/app/player/[id]/page.tsx index 73e9e53..e698202 100644 --- a/src/app/player/[id]/page.tsx +++ b/src/app/player/[id]/page.tsx @@ -1,4 +1,4 @@ -import { embedFallback } from "@/common/embed-fallback"; +import { generateEmbed } from "@/common/embed"; import { NotFound } from "@/components/not-found"; import { Card } from "@/components/ui/card"; import { getPlayer } from "mcutils-library"; @@ -14,7 +14,7 @@ type Params = { export async function generateMetadata({ params: { id } }: Params): Promise { const player = await getData(id); if (!player) { - return embedFallback({ title: "Unknown Player", description: "Player not found" }); + return generateEmbed({ title: "Unknown Player", description: "Player not found" }); } const { username, uniqueId, skin } = player; @@ -24,21 +24,11 @@ export async function generateMetadata({ params: { id } }: Params): Promise { diff --git a/src/app/server/[platform]/[hostname]/page.tsx b/src/app/server/[platform]/[hostname]/page.tsx index b20fce2..1665a49 100644 --- a/src/app/server/[platform]/[hostname]/page.tsx +++ b/src/app/server/[platform]/[hostname]/page.tsx @@ -1,4 +1,4 @@ -import { embedFallback } from "@/common/embed-fallback"; +import { generateEmbed } from "@/common/embed"; import { capitalizeFirstLetter } from "@/common/string-utils"; import { LookupServer } from "@/components/lookup-server"; import { NotFound } from "@/components/not-found"; @@ -19,7 +19,7 @@ type Params = { export async function generateMetadata({ params: { platform, hostname } }: Params): Promise { const server = await getData(platform, hostname); if (!server) { - return embedFallback({ title: "Unknown Server", description: "Server not found" }); + return generateEmbed({ title: "Unknown Server", description: "Server not found" }); } const { hostname: serverHostname, players } = server; @@ -37,21 +37,11 @@ export async function generateMetadata({ params: { platform, hostname } }: Param Hostname: ${serverHostname} ${players.online}/${players.max} players online`; - return { - title: `${hostname}`, - openGraph: { - title: `${hostname}`, - description: description, - images: [ - { - url: favicon || "", - }, - ], - }, - twitter: { - card: "summary", - }, - }; + return generateEmbed({ + title: `${serverHostname}`, + description: description, + image: favicon, + }); } async function getData(platform: ServerPlatform, id: string): Promise { diff --git a/src/common/embed-fallback.ts b/src/common/embed-fallback.ts deleted file mode 100644 index 9944447..0000000 --- a/src/common/embed-fallback.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Metadata } from "next"; - -type Fallback = { - title: string; - description: string; -}; - -/** - * Generates metadata for a fallback embed. - * - * @param title the title of the embed - * @param description the description of the embed - * @returns the metadata for the embed - */ -export function embedFallback({ title, description }: Fallback): Metadata { - return { - title: `${title}`, - openGraph: { - title: `${title}`, - description: description, - }, - }; -} diff --git a/src/common/embed.ts b/src/common/embed.ts new file mode 100644 index 0000000..b366105 --- /dev/null +++ b/src/common/embed.ts @@ -0,0 +1,37 @@ +import { Metadata } from "next"; + +type Embed = { + title: string; + description: string; + image?: string | null; +}; + +/** + * Generates metadata for a embed. + * + * @param title the title of the embed + * @param description the description of the embed + * @returns the metadata for the embed + */ +export function generateEmbed({ title, description, image }: Embed): Metadata { + const metadata: Metadata = { + title: `${title}`, + openGraph: { + title: `${title}`, + description: description, + }, + twitter: { + card: "summary", + }, + }; + + if (image) { + metadata.openGraph!.images = [ + { + url: image || "", + }, + ]; + } + + return metadata; +}