From da169d4a09fa9efc2233658cb059a12b280b4da9 Mon Sep 17 00:00:00 2001 From: Nancy Date: Fri, 26 Jun 2026 00:51:24 +1000 Subject: [PATCH] refactor: dedupe og font loading --- server/og/ogAssets.ts | 89 ++++++++++++------------------------------- 1 file changed, 25 insertions(+), 64 deletions(-) diff --git a/server/og/ogAssets.ts b/server/og/ogAssets.ts index 0513ff7b..f67b9a9d 100644 --- a/server/og/ogAssets.ts +++ b/server/og/ogAssets.ts @@ -17,6 +17,23 @@ let fontBuffersPromise: Promise | null = null; let publisherFontBuffersPromise: Promise | null = null; let resvgInitPromise: Promise | null = null; +const SHARED_FONT_PATHS = [ + "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-500-normal.woff2", + "node_modules/@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-500-normal.woff2", + "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-800-normal.woff2", + "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-500-normal.woff2", +]; +const DEFAULT_FONT_PATHS = [ + "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-800-normal.woff2", + "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-700-normal.woff2", + ...SHARED_FONT_PATHS, +]; +const PUBLISHER_FONT_PATHS = [ + "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-700-normal.woff2", + "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-800-normal.woff2", + ...SHARED_FONT_PATHS, +]; + function getServerRootUrl() { const nitroMain = (globalThis as unknown as GlobalNitroMain).__nitro_main__; if (typeof nitroMain === "string") { @@ -94,78 +111,22 @@ export async function ensureResvgWasm() { await resvgInitPromise; } +function readFontBuffers(paths: string[]) { + return Promise.all(paths.map((pathname) => readFile(getServerUrl(pathname)))).then((buffers) => + buffers.map((buffer) => new Uint8Array(buffer)), + ); +} + export async function getFontBuffers() { if (!fontBuffersPromise) { - fontBuffersPromise = Promise.all([ - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-800-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-700-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-500-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-500-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-800-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-500-normal.woff2", - ), - ), - ]).then((buffers) => buffers.map((buffer) => new Uint8Array(buffer))); + fontBuffersPromise = readFontBuffers(DEFAULT_FONT_PATHS); } return fontBuffersPromise; } export async function getPublisherFontBuffers() { if (!publisherFontBuffersPromise) { - publisherFontBuffersPromise = Promise.all([ - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-700-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-800-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/bricolage-grotesque/files/bricolage-grotesque-latin-500-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-500-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-800-normal.woff2", - ), - ), - readFile( - getServerUrl( - "node_modules/@fontsource/noto-sans-sc/files/noto-sans-sc-chinese-simplified-500-normal.woff2", - ), - ), - ]).then((buffers) => buffers.map((buffer) => new Uint8Array(buffer))); + publisherFontBuffersPromise = readFontBuffers(PUBLISHER_FONT_PATHS); } return publisherFontBuffersPromise; }