(family: string, data: FontFaceData, fallbacks?: Array<{ name: string, font: string }>)
| 21 | } |
| 22 | |
| 23 | export async function generateFontFallbacks(family: string, data: FontFaceData, fallbacks?: Array<{ name: string, font: string }>): Promise<string[]> { |
| 24 | if (!fallbacks?.length) |
| 25 | return [] |
| 26 | |
| 27 | const fontURL = data.src!.find(s => 'url' in s) as RemoteFontSource | undefined |
| 28 | const metrics = await getMetricsForFamily(family) || (fontURL && await readMetrics(fontURL.originalURL || fontURL.url)) |
| 29 | |
| 30 | if (!metrics) |
| 31 | return [] |
| 32 | |
| 33 | const css: string[] = [] |
| 34 | for (const fallback of fallbacks) { |
| 35 | css.push(generateFallbackFontFace(metrics, { |
| 36 | ...fallback, |
| 37 | metrics: await getMetricsForFamily(fallback.font) || undefined, |
| 38 | })) |
| 39 | } |
| 40 | return css |
| 41 | } |
| 42 | |
| 43 | const formatMap: Record<string, string> = { |
| 44 | woff2: 'woff2', |
no test coverage detected