Home / Function/ computeFontFamiliesAssets() — astro Function Reference

computeFontFamiliesAssets() — astro Function Reference

Architecture documentation for the computeFontFamiliesAssets() function in compute-font-families-assets.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  b443012f_2b06_9e0d_79c4_b47e3b752870["computeFontFamiliesAssets()"]
  cdee4da8_e0b1_abf7_3abf_ee643402e96d["compute-font-families-assets.ts"]
  b443012f_2b06_9e0d_79c4_b47e3b752870 -->|defined in| cdee4da8_e0b1_abf7_3abf_ee643402e96d
  style b443012f_2b06_9e0d_79c4_b47e3b752870 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro/src/assets/fonts/core/compute-font-families-assets.ts lines 14–116

export async function computeFontFamiliesAssets({
	resolvedFamilies,
	fontResolver,
	logger,
	bold,
	defaults,
	stringMatcher,
	getOrCreateFontFamilyAssets,
	collectFontAssetsFromFaces,
	filterAndTransformFontFaces,
}: {
	resolvedFamilies: Array<ResolvedFontFamily>;
	fontResolver: FontResolver;
	logger: Logger;
	bold: (input: string) => string;
	defaults: Defaults;
	stringMatcher: StringMatcher;
	getOrCreateFontFamilyAssets: Collaborator<
		typeof _getOrCreateFontFamilyAssets,
		'family' | 'fontFamilyAssetsByUniqueKey'
	>;
	filterAndTransformFontFaces: Collaborator<
		typeof _filterAndTransformFontFaces,
		'family' | 'fonts'
	>;
	collectFontAssetsFromFaces: Collaborator<
		typeof _collectFontAssetsFromFaces,
		'family' | 'fonts' | 'collectedFontsIds' | 'fontFilesIds'
	>;
}) {
	/**
	 * Holds family data by a key, to allow merging families
	 */
	const fontFamilyAssetsByUniqueKey: FontFamilyAssetsByUniqueKey = new Map();

	/**
	 * Holds associations of id and original font file URLs, so they can be
	 * downloaded whenever the id is requested.
	 */
	const fontFileById: FontFileById = new Map();

	// First loop: we try to merge families. This is useful for advanced cases, where eg. you want
	// 500, 600, 700 as normal but also 500 as italic. That requires 2 families
	for (const family of resolvedFamilies) {
		const fontAssets = getOrCreateFontFamilyAssets({
			fontFamilyAssetsByUniqueKey,
			family,
		});

		const _fonts = await fontResolver.resolveFont({
			familyName: family.name,
			provider: family.provider,
			// We do not merge the defaults, we only provide defaults as a fallback
			weights: family.weights ?? defaults.weights,
			styles: family.styles ?? defaults.styles,
			subsets: family.subsets ?? defaults.subsets,
			formats: family.formats ?? defaults.formats,
			options: family.options,
		});
		if (_fonts.length === 0) {
			logger.warn(
				'assets',
				`No data found for font family ${bold(family.name)}. Review your configuration`,
			);
			const availableFamilies = await fontResolver.listFonts({ provider: family.provider });
			if (
				availableFamilies &&
				availableFamilies.length > 0 &&
				!availableFamilies.includes(family.name)
			) {
				logger.warn(
					'assets',
					`${bold(family.name)} font family cannot be retrieved by the provider. Did you mean ${bold(stringMatcher.getClosestMatch(family.name, availableFamilies))}?`,
				);
			}
			continue;
		}
		// The data returned by the provider contains original URLs. We proxy them.
		// TODO: dedupe?
		fontAssets.fonts.push(
			...filterAndTransformFontFaces({

Domain

Subdomains

Frequently Asked Questions

What does computeFontFamiliesAssets() do?
computeFontFamiliesAssets() is a function in the astro codebase, defined in packages/astro/src/assets/fonts/core/compute-font-families-assets.ts.
Where is computeFontFamiliesAssets() defined?
computeFontFamiliesAssets() is defined in packages/astro/src/assets/fonts/core/compute-font-families-assets.ts at line 14.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free