import type { FontLoadRequestConfig, UnifiedFont, } from '../../model'; import { getFontUrl } from '../getFontUrl/getFontUrl'; /** * Build the font-lifecycle load request for a single font at a given weight. * * Returns a 0-or-1 element array rather than `FontLoadRequestConfig | undefined` * so call sites can `flatMap` over a font list — resolve the URL and drop fonts * that have none in a single pass, with no separate filter step. An empty array * means the font has no loadable asset for this weight (or its fallbacks) and is * silently skipped. * * `isVariable` is forwarded from the font's features so the lifecycle manager can * dedupe variable fonts per ID (they load once regardless of weight) while still * loading static fonts per weight. * * @param font - Unified font to load * @param weight - Numeric weight (100-900) * @returns Single-element config array, or `[]` when no URL resolves * @throws Error when weight is outside the valid 100-900 range (propagated from `getFontUrl`) */ export function createFontLoadRequestContfig(font: UnifiedFont, weight: number): FontLoadRequestConfig[] { const url = getFontUrl(font, weight); if (!url) { return []; } return [{ id: font.id, name: font.name, weight, url, isVariable: font.features?.isVariable }]; }