CapsizeFontMetricsResolver Class — astro Architecture
Architecture documentation for the CapsizeFontMetricsResolver class in capsize-font-metrics-resolver.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD 830447a8_2868_0945_29b2_fb4acb94f9e8["CapsizeFontMetricsResolver"] a11892f3_9dab_e16c_8507_d795d6c082f5["capsize-font-metrics-resolver.ts"] 830447a8_2868_0945_29b2_fb4acb94f9e8 -->|defined in| a11892f3_9dab_e16c_8507_d795d6c082f5 bd331974_7a4d_79f8_9680_17587e5fd273["constructor()"] 830447a8_2868_0945_29b2_fb4acb94f9e8 -->|method| bd331974_7a4d_79f8_9680_17587e5fd273 d7596678_393c_9c8e_7110_446593c70b65["getMetrics()"] 830447a8_2868_0945_29b2_fb4acb94f9e8 -->|method| d7596678_393c_9c8e_7110_446593c70b65 3173d990_3668_518a_8ebe_a502a9890f7d["generateFontFace()"] 830447a8_2868_0945_29b2_fb4acb94f9e8 -->|method| 3173d990_3668_518a_8ebe_a502a9890f7d
Relationship Graph
Source Code
packages/astro/src/assets/fonts/infra/capsize-font-metrics-resolver.ts lines 34–108
export class CapsizeFontMetricsResolver implements FontMetricsResolver {
readonly #cache: Record<string, FontFaceMetrics | null> = {};
readonly #fontFetcher: FontFetcher;
readonly #cssRenderer: CssRenderer;
constructor({
fontFetcher,
cssRenderer,
}: {
fontFetcher: FontFetcher;
cssRenderer: CssRenderer;
}) {
this.#fontFetcher = fontFetcher;
this.#cssRenderer = cssRenderer;
}
async getMetrics(name: string, font: CollectedFontForMetrics): Promise<FontFaceMetrics> {
return (this.#cache[name] ??= filterRequiredMetrics(
await fromBuffer(await this.#fontFetcher.fetch(font)),
));
}
// Adapted from Capsize
// Source: https://github.com/seek-oss/capsize/blob/b752693428b45994442433f7e3476ca4e3e3c507/packages/core/src/createFontStack.ts
generateFontFace({
metrics,
fallbackMetrics,
name: fallbackName,
font: fallbackFontName,
properties,
}: {
metrics: FontFaceMetrics;
fallbackMetrics: FontFaceMetrics;
name: string;
font: string;
properties: CssProperties;
}): string {
// Calculate size adjust
const preferredFontXAvgRatio = metrics.xWidthAvg / metrics.unitsPerEm;
const fallbackFontXAvgRatio = fallbackMetrics.xWidthAvg / fallbackMetrics.unitsPerEm;
const sizeAdjust =
preferredFontXAvgRatio && fallbackFontXAvgRatio
? preferredFontXAvgRatio / fallbackFontXAvgRatio
: 1;
const adjustedEmSquare = metrics.unitsPerEm * sizeAdjust;
// Calculate metric overrides for preferred font
const ascentOverride = metrics.ascent / adjustedEmSquare;
const descentOverride = Math.abs(metrics.descent) / adjustedEmSquare;
const lineGapOverride = metrics.lineGap / adjustedEmSquare;
// Calculate metric overrides for fallback font
const fallbackAscentOverride = fallbackMetrics.ascent / adjustedEmSquare;
const fallbackDescentOverride = Math.abs(fallbackMetrics.descent) / adjustedEmSquare;
const fallbackLineGapOverride = fallbackMetrics.lineGap / adjustedEmSquare;
return this.#cssRenderer.generateFontFace(fallbackName, {
...properties,
src: renderFontSrc([{ name: fallbackFontName }]),
'size-adjust': sizeAdjust && sizeAdjust !== 1 ? toPercentString(sizeAdjust) : undefined,
'ascent-override':
ascentOverride && ascentOverride !== fallbackAscentOverride
? toPercentString(ascentOverride)
: undefined,
'descent-override':
descentOverride && descentOverride !== fallbackDescentOverride
? toPercentString(descentOverride)
: undefined,
'line-gap-override':
lineGapOverride !== fallbackLineGapOverride ? toPercentString(lineGapOverride) : undefined,
});
}
}
Domain
Source
Frequently Asked Questions
What is the CapsizeFontMetricsResolver class?
CapsizeFontMetricsResolver is a class in the astro codebase, defined in packages/astro/src/assets/fonts/infra/capsize-font-metrics-resolver.ts.
Where is CapsizeFontMetricsResolver defined?
CapsizeFontMetricsResolver is defined in packages/astro/src/assets/fonts/infra/capsize-font-metrics-resolver.ts at line 34.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free