From c1f754985d6fb66758b039191ade6c52ed1d4fdd Mon Sep 17 00:00:00 2001 From: Moonlitgrace Date: Wed, 18 Sep 2024 12:21:27 +0530 Subject: [PATCH] feat: dynamic `og:image` generation (#85) --- __tests__/lib/cn.test.ts | 18 ++--- __tests__/lib/escape-text.test.ts | 12 ++-- __tests__/lib/extract-pagragraphs.test.ts | 10 +-- __tests__/lib/format-date.test.ts | 8 +-- __tests__/lib/strip-html-tags.test.ts | 14 ++-- __tests__/lib/truncate.test.ts | 14 ++-- __tests__/lib/validate-file.test.ts | 16 ++--- app/(routes)/(main)/blog/[slug]/page.tsx | 28 +++++--- app/(routes)/(main)/blog/page.tsx | 2 +- app/_components/_main/table-of-contents.tsx | 2 +- app/api/og/route.tsx | 76 ++++++++++++++++++++ assets/fonts/dm-sans/dm-sans-400-normal.ttf | Bin 0 -> 33600 bytes assets/fonts/dm-sans/dm-sans-700-normal.ttf | Bin 0 -> 33420 bytes assets/fonts/dm-sans/dm-sans-900-normal.ttf | Bin 0 -> 33408 bytes assets/images/icon.png | Bin 0 -> 3855 bytes jest.config.ts | 12 ++-- lib/utils.ts | 13 +++- next.config.mjs | 10 +-- 18 files changed, 164 insertions(+), 71 deletions(-) create mode 100644 app/api/og/route.tsx create mode 100644 assets/fonts/dm-sans/dm-sans-400-normal.ttf create mode 100644 assets/fonts/dm-sans/dm-sans-700-normal.ttf create mode 100644 assets/fonts/dm-sans/dm-sans-900-normal.ttf create mode 100644 assets/images/icon.png diff --git a/__tests__/lib/cn.test.ts b/__tests__/lib/cn.test.ts index 5c91387..5c704b0 100644 --- a/__tests__/lib/cn.test.ts +++ b/__tests__/lib/cn.test.ts @@ -1,16 +1,16 @@ -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils'; describe('check classnames (twMerge)', () => { it('normal checks', () => { - expect(cn("w-full", "h-full")).toBe("w-full h-full"); - expect(cn("md:max-h-[1vw]", "md:hover:max-h-[10vw]")).toBe( - "md:max-h-[1vw] md:hover:max-h-[10vw]" + expect(cn('w-full', 'h-full')).toBe('w-full h-full'); + expect(cn('md:max-h-[1vw]', 'md:hover:max-h-[10vw]')).toBe( + 'md:max-h-[1vw] md:hover:max-h-[10vw]', ); - }) + }); it('whitespace check', () => { - expect(cn(" w-full", "h-full ")).toBe( - "w-full h-full" + expect(cn(' w-full', 'h-full ')).toBe( + 'w-full h-full', ); - }) -}) + }); +}); diff --git a/__tests__/lib/escape-text.test.ts b/__tests__/lib/escape-text.test.ts index 3ddad3f..9209c2c 100644 --- a/__tests__/lib/escape-text.test.ts +++ b/__tests__/lib/escape-text.test.ts @@ -1,17 +1,17 @@ -import { escapeText } from "@/lib/utils" +import { escapeText } from '@/lib/utils'; describe('escape text', () => { it('should return lower case of plainText', () => { expect(escapeText('plainText')).toBe('plaintext'); - }) + }); it('should return sluggified version of text', () => { expect(escapeText('Hello World')).toBe('hello-world'); expect(escapeText('Moonlit@grace')).toBe('moonlit-grace'); - }) + }); it('should handle multiplte special characters', () => { expect(escapeText('hello-----world')).toBe('hello-world'); - expect(escapeText('moon&&&lit***grace')).toBe('moon-lit-grace') - }) -}) + expect(escapeText('moon&&&lit***grace')).toBe('moon-lit-grace'); + }); +}); diff --git a/__tests__/lib/extract-pagragraphs.test.ts b/__tests__/lib/extract-pagragraphs.test.ts index 92d1691..fa147b0 100644 --- a/__tests__/lib/extract-pagragraphs.test.ts +++ b/__tests__/lib/extract-pagragraphs.test.ts @@ -1,4 +1,4 @@ -import { extractParagraphs } from "@/lib/utils" +import { extractParagraphs } from '@/lib/utils'; describe('extract paragraphs only from markdown', () => { it('should return paragraph', () => { @@ -7,7 +7,7 @@ describe('extract paragraphs only from markdown', () => { > WHOAMI -Moonlitgrace is a good bwoy!.` - expect(extractParagraphs(mockMarkdown)).toBe('Moonlitgrace is a good bwoy!.') - }) -}) +Moonlitgrace is a good bwoy!.`; + expect(extractParagraphs(mockMarkdown)).toBe('Moonlitgrace is a good bwoy!.'); + }); +}); diff --git a/__tests__/lib/format-date.test.ts b/__tests__/lib/format-date.test.ts index 1240688..05fe67f 100644 --- a/__tests__/lib/format-date.test.ts +++ b/__tests__/lib/format-date.test.ts @@ -1,6 +1,6 @@ -import { formatDate } from "@/lib/utils"; +import { formatDate } from '@/lib/utils'; test('check formated date', () => { - const date = new Date("2023-03-11T02:37:40.790Z"); - expect(formatDate(date)).toBe("Mar 11, 2023"); -}) + const date = new Date('2023-03-11T02:37:40.790Z'); + expect(formatDate(date)).toBe('Mar 11, 2023'); +}); diff --git a/__tests__/lib/strip-html-tags.test.ts b/__tests__/lib/strip-html-tags.test.ts index 2d607ce..0922d98 100644 --- a/__tests__/lib/strip-html-tags.test.ts +++ b/__tests__/lib/strip-html-tags.test.ts @@ -1,12 +1,12 @@ -import { stripHtmlTags } from "@/lib/utils" +import { stripHtmlTags } from '@/lib/utils'; describe('stripe html tags', () => { it('should return plaintext itself', () => { - expect(stripHtmlTags('plain-text')).toBe('plain-text') - }) + expect(stripHtmlTags('plain-text')).toBe('plain-text'); + }); it('should return content inside', () => { - expect(stripHtmlTags('Moonlitgrace')).toBe('Moonlitgrace') - expect(stripHtmlTags('

Hello World

')).toBe('Hello World') - }) -}) + expect(stripHtmlTags('Moonlitgrace')).toBe('Moonlitgrace'); + expect(stripHtmlTags('

Hello World

')).toBe('Hello World'); + }); +}); diff --git a/__tests__/lib/truncate.test.ts b/__tests__/lib/truncate.test.ts index 358c9e3..de832d0 100644 --- a/__tests__/lib/truncate.test.ts +++ b/__tests__/lib/truncate.test.ts @@ -1,13 +1,13 @@ -import { truncate } from "@/lib/utils" +import { truncate } from '@/lib/utils'; describe('truncate char', () => { - const exampleStr = 'Step into Moonlitgrace' + const exampleStr = 'Step into Moonlitgrace'; it('shouldn"t truncate char shorter than n', () => { - expect(truncate(exampleStr, 25)).toBe(exampleStr) - }) + expect(truncate(exampleStr, 25)).toBe(exampleStr); + }); it('shouldn truncate char larger than n', () => { - expect(truncate(exampleStr, 20)).toBe('Step into Moonlit...') - }) -}) + expect(truncate(exampleStr, 20)).toBe('Step into Moonlit...'); + }); +}); diff --git a/__tests__/lib/validate-file.test.ts b/__tests__/lib/validate-file.test.ts index 0153eb7..827749c 100644 --- a/__tests__/lib/validate-file.test.ts +++ b/__tests__/lib/validate-file.test.ts @@ -1,27 +1,27 @@ -import { validateFile } from "@/lib/utils"; +import { validateFile } from '@/lib/utils'; describe('check File validation', () => { it('should return true if File is valid', () => { const file = new File(['content'], 'test.txt', { type: 'text/plain' }); expect(validateFile(file)).toBeTruthy(); - }) + }); it('should return false if File is invalid', () => { const file = {} as File; expect(validateFile(file)).toBeFalsy(); - }) + }); it('should return false if File name is invalid', () => { const file = new File(['content'], '', { type: 'text/plain' }); expect(validateFile(file)).toBeFalsy(); - }) + }); it('should return false if File size is invalid', () => { const file = new File(['content'], 'test.txt', { type: 'text/plain' }); // force set size property Object.defineProperty(file, 'size', { - value: 0 - }) + value: 0, + }); expect(validateFile(file)).toBeFalsy(); - }) -}) + }); +}); diff --git a/app/(routes)/(main)/blog/[slug]/page.tsx b/app/(routes)/(main)/blog/[slug]/page.tsx index 6baa7f9..9e87bb4 100644 --- a/app/(routes)/(main)/blog/[slug]/page.tsx +++ b/app/(routes)/(main)/blog/[slug]/page.tsx @@ -14,30 +14,36 @@ export async function generateMetadata({ }: { params: { slug: string }; }): Promise { - const { title, content, cover, slug } = ( - await db - .select({ title: posts.title, content: posts.content, cover: posts.cover, slug: posts.slug }) - .from(posts) - .where(eq(posts.slug, params.slug)) + const { title, content, cover, slug, tag, createdAt } = ( + await db.select().from(posts).where(eq(posts.slug, params.slug)) )[0]; const description = truncate(extractParagraphs(content), 160); + // og: dynamic image + const ogImgUrl = new URL(process.env.NEXT_PUBLIC_APP_URL + '/api/og'); + ogImgUrl.searchParams.set('title', title); + ogImgUrl.searchParams.set('description', description); + ogImgUrl.searchParams.set('tag', tag); + ogImgUrl.searchParams.set('createdAt', formatDate(createdAt)); + if (cover) ogImgUrl.searchParams.set('cover', cover); + return { title, description, openGraph: { title, description, - ...(cover && { - images: { - url: cover, - }, - }), + images: { + url: ogImgUrl.toString(), + width: 1200, + height: 630, + alt: title, + }, url: process.env.NEXT_PUBLIC_APP_URL + '/blog/' + slug, siteName: 'Moonlitgrace', locale: 'en_US', type: 'article', - } + }, }; } diff --git a/app/(routes)/(main)/blog/page.tsx b/app/(routes)/(main)/blog/page.tsx index bfd2e5e..9423cbe 100644 --- a/app/(routes)/(main)/blog/page.tsx +++ b/app/(routes)/(main)/blog/page.tsx @@ -19,7 +19,7 @@ export const metadata: Metadata = { siteName: 'Moonlitgrace', locale: 'en_US', type: 'website', - } + }, }; export default async function BlogPage() { diff --git a/app/_components/_main/table-of-contents.tsx b/app/_components/_main/table-of-contents.tsx index 3ae992d..d2d8a75 100644 --- a/app/_components/_main/table-of-contents.tsx +++ b/app/_components/_main/table-of-contents.tsx @@ -28,7 +28,7 @@ const TableOfContents = ({ headings }: { headings: string[] }) => {

Table of Contents

diff --git a/app/api/og/route.tsx b/app/api/og/route.tsx new file mode 100644 index 0000000..477ea11 --- /dev/null +++ b/app/api/og/route.tsx @@ -0,0 +1,76 @@ +/* eslint-disable @next/next/no-img-element */ +/* eslint-disable jsx-a11y/alt-text */ +import { arrayBufferToBase64 } from '@/lib/utils'; +import { ImageResponse } from 'next/og'; + +export const runtime = 'edge'; + +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + + const title = searchParams.get('title'); + const description = searchParams.get('description'); + const tag = searchParams.get('tag'); + const createdAt = searchParams.get('createdAt'); + const cover = searchParams.get('cover'); + + const DM_sans_Black_fontdata = await fetch( + new URL('../../../assets/fonts/dm-sans/dm-sans-900-normal.ttf', import.meta.url), + ).then((res) => res.arrayBuffer()); + const DM_sans_Regular_fontdata = await fetch( + new URL('../../../assets/fonts/dm-sans/dm-sans-400-normal.ttf', import.meta.url), + ).then((res) => res.arrayBuffer()); + + const altCoverData = await fetch(new URL('../../../assets/images/icon.png', import.meta.url)) + .then((res) => res.arrayBuffer()) + .then((buffer) => `data:image/png;base64,${arrayBufferToBase64(buffer)}`); + + return new ImageResponse( + ( +
+
+
+ + {tag} + + + {createdAt} + +
+

+ {title} +

+

+ {description} +

{' '} +
+ +
+ ), + { + fonts: [ + { + name: 'DM_sans_Black', + data: DM_sans_Black_fontdata, + style: 'normal', + }, + { + name: 'DM_sans_Regular', + data: DM_sans_Regular_fontdata, + style: 'normal', + }, + ], + }, + ); + } catch (err) { + return new Response('Failed to generate OG image' + err, { status: 500 }); + } +} diff --git a/assets/fonts/dm-sans/dm-sans-400-normal.ttf b/assets/fonts/dm-sans/dm-sans-400-normal.ttf new file mode 100644 index 0000000000000000000000000000000000000000..28af06c386cd07e7ba4e7d0d413c5a5a9fc4b555 GIT binary patch literal 33600 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 literal 0 HcmV?d00001 diff --git a/assets/images/icon.png b/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..600485978a96ef3e657a85d211869701e3f883c4 GIT binary patch literal 3855 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/$1', - } -} + }, +}; // createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async -export default createJestConfig(config) +export default createJestConfig(config); diff --git a/lib/utils.ts b/lib/utils.ts index d310d1b..e75296c 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -39,5 +39,16 @@ export function extractParagraphs(markdown: string) { } export function truncate(str: string, n: number) { - return (str.length > n) ? str.slice(0, n - 3) + '...' : str; + return str.length > n ? str.slice(0, n - 3) + '...' : str; +} + +// TODO: add test for this function +export function arrayBufferToBase64(buffer: ArrayBuffer): string { + let binary = ''; + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); } diff --git a/next.config.mjs b/next.config.mjs index 7a6a638..9bdc3dd 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -12,11 +12,11 @@ const nextConfig = { rules: { '*.svg': { loaders: ['@svgr/webpack'], - as: '*.js' - } - } - } - } + as: '*.js', + }, + }, + }, + }, }; export default withSentryConfig(nextConfig, {