fix(fonts): Fixed page title fonts not downloadable to local (#1898)

* Fixed url parser regex not working for Google Fonts subset API

* Prettier no
This commit is contained in:
Stephen Tse 2025-04-28 14:58:06 -07:00 committed by GitHub
parent 4d07ac93b4
commit 8d5b13ee03
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -107,6 +107,13 @@ export interface GoogleFontFile {
extension: string
}
const fontMimeMap: Record<string, string> = {
truetype: "ttf",
woff: "woff",
woff2: "woff2",
opentype: "otf",
}
export async function processGoogleFonts(
stylesheet: string,
baseUrl: string,
@ -114,14 +121,16 @@ export async function processGoogleFonts(
processedStylesheet: string
fontFiles: GoogleFontFile[]
}> {
const fontSourceRegex = /url\((https:\/\/fonts.gstatic.com\/s\/[^)]+\.(woff2|ttf))\)/g
const fontSourceRegex =
/url\((https:\/\/fonts.gstatic.com\/.+(?:\/|(?:kit=))(.+?)[.&].+?)\)\sformat\('(\w+?)'\);/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 filename = match[2]
const extension = fontMimeMap[match[3].toLowerCase()]
const staticUrl = `https://${baseUrl}/static/fonts/${filename}.${extension}`
processedStylesheet = processedStylesheet.replace(url, staticUrl)