fix(fonts): Fixed page title fonts not downloadable to local (#1898)
* Fixed url parser regex not working for Google Fonts subset API
* Prettier no
| | |
| | | extension: string |
| | | } |
| | | |
| | | const fontMimeMap: Record<string, string> = { |
| | | truetype: "ttf", |
| | | woff: "woff", |
| | | woff2: "woff2", |
| | | opentype: "otf", |
| | | } |
| | | |
| | | export async function processGoogleFonts( |
| | | stylesheet: string, |
| | | baseUrl: string, |
| | |
| | | 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) |