From d9159e0ac9bfc22e584c78bc8aa04ecd82c14eea Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Thu, 13 Mar 2025 17:27:46 +0000
Subject: [PATCH] feat: make og images an emitter to properly await image generation (#1826)
---
quartz/util/theme.ts | 32 +++++++++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/quartz/util/theme.ts b/quartz/util/theme.ts
index 8381cc7..56261e3 100644
--- a/quartz/util/theme.ts
+++ b/quartz/util/theme.ts
@@ -15,7 +15,7 @@
darkMode: ColorScheme
}
-type FontSpecification =
+export type FontSpecification =
| string
| {
name: string
@@ -90,6 +90,36 @@
return `https://fonts.googleapis.com/css2?family=${bodyFont}&family=${headerFont}&family=${codeFont}&display=swap`
}
+export interface GoogleFontFile {
+ url: string
+ filename: string
+ extension: string
+}
+
+export async function processGoogleFonts(
+ stylesheet: string,
+ baseUrl: string,
+): Promise<{
+ processedStylesheet: string
+ fontFiles: GoogleFontFile[]
+}> {
+ const fontSourceRegex = /url\((https:\/\/fonts.gstatic.com\/s\/[^)]+\.(woff2|ttf))\)/g
+ const fontFiles: GoogleFontFile[] = []
+ let processedStylesheet = stylesheet
+
+ let match
+ while ((match = fontSourceRegex.exec(stylesheet)) !== null) {
+ const url = match[1]
+ const [filename, extension] = url.split("/").pop()!.split(".")
+ const staticUrl = `https://${baseUrl}/static/fonts/${filename}.${extension}`
+
+ processedStylesheet = processedStylesheet.replace(url, staticUrl)
+ fontFiles.push({ url, filename, extension })
+ }
+
+ return { processedStylesheet, fontFiles }
+}
+
export function joinStyles(theme: Theme, ...stylesheet: string[]) {
return `
${stylesheet.join("\n\n")}
--
Gitblit v1.10.0