Home / File/ collect-component-data.ts — astro Source File

collect-component-data.ts — astro Source File

Architecture documentation for collect-component-data.ts, a typescript file in the astro codebase. 4 imports, 0 dependents.

File typescript CoreAstro RenderingEngine 4 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  428cf807_7a18_1827_fa6f_96a3b782d4b1["collect-component-data.ts"]
  e92fda44_4a5d_b83b_1a45_958cdae6c91b["./definitions.js"]
  428cf807_7a18_1827_fa6f_96a3b782d4b1 --> e92fda44_4a5d_b83b_1a45_958cdae6c91b
  ea387312_d0a2_bb52_dafc_3872f7307f95["../../src/assets/fonts/types.js"]
  428cf807_7a18_1827_fa6f_96a3b782d4b1 --> ea387312_d0a2_bb52_dafc_3872f7307f95
  aca757ac_dcac_a793_a9c5_394cd0d7d313["../utils.js"]
  428cf807_7a18_1827_fa6f_96a3b782d4b1 --> aca757ac_dcac_a793_a9c5_394cd0d7d313
  2f3de45d_9993_acba_acd0_40014d5fbc2e["./core/optimize-fallbacks.js"]
  428cf807_7a18_1827_fa6f_96a3b782d4b1 --> 2f3de45d_9993_acba_acd0_40014d5fbc2e
  style 428cf807_7a18_1827_fa6f_96a3b782d4b1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { CssRenderer } from '../definitions.js';
import type {
	Collaborator,
	ComponentDataByCssVariable,
	Defaults,
	FontFamilyAssets,
} from '../types.js';
import { unifontFontFaceDataToProperties } from '../utils.js';
import type { optimizeFallbacks as _optimizeFallbacks } from './optimize-fallbacks.js';

export async function collectComponentData({
	fontFamilyAssets,
	cssRenderer,
	defaults,
	optimizeFallbacks,
}: {
	fontFamilyAssets: Array<FontFamilyAssets>;
	cssRenderer: CssRenderer;
	defaults: Pick<Defaults, 'fallbacks' | 'optimizedFallbacks'>;
	optimizeFallbacks: Collaborator<
		typeof _optimizeFallbacks,
		'family' | 'fallbacks' | 'collectedFonts'
	>;
}) {
	const componentDataByCssVariable: ComponentDataByCssVariable = new Map();

	for (const { family, fonts, collectedFontsForMetricsByUniqueKey, preloads } of fontFamilyAssets) {
		let css = '';

		for (const data of fonts) {
			css += cssRenderer.generateFontFace(
				family.uniqueName,
				unifontFontFaceDataToProperties({
					src: data.src,
					weight: data.weight,
					style: data.style,
					// User settings override the generated font settings
					display: data.display ?? family.display,
					unicodeRange: data.unicodeRange ?? family.unicodeRange,
					stretch: data.stretch ?? family.stretch,
					featureSettings: data.featureSettings ?? family.featureSettings,
					variationSettings: data.variationSettings ?? family.variationSettings,
				}),
			);
		}

		const fallbacks = family.fallbacks ?? defaults.fallbacks;
		const cssVarValues = [family.uniqueName];
		const optimizeFallbacksResult =
			(family.optimizedFallbacks ?? defaults.optimizedFallbacks)
				? await optimizeFallbacks({
						family,
						fallbacks,
						collectedFonts: Array.from(collectedFontsForMetricsByUniqueKey.values()),
					})
				: null;

		if (optimizeFallbacksResult) {
			css += optimizeFallbacksResult.css;
			cssVarValues.push(...optimizeFallbacksResult.fallbacks);
		} else {
			// If there are no optimized fallbacks, we pass the provided fallbacks as is.
			cssVarValues.push(...fallbacks);
		}

		css += cssRenderer.generateCssVariable(family.cssVariable, cssVarValues);

		componentDataByCssVariable.set(family.cssVariable, { preloads, css });
	}

	return componentDataByCssVariable;
}

Domain

Subdomains

Dependencies

  • ../../src/assets/fonts/types.js
  • ../utils.js
  • ./core/optimize-fallbacks.js
  • ./definitions.js

Frequently Asked Questions

What does collect-component-data.ts do?
collect-component-data.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in collect-component-data.ts?
collect-component-data.ts defines 1 function(s): collectComponentData.
What does collect-component-data.ts depend on?
collect-component-data.ts imports 4 module(s): ../../src/assets/fonts/types.js, ../utils.js, ./core/optimize-fallbacks.js, ./definitions.js.
Where is collect-component-data.ts in the architecture?
collect-component-data.ts is located at packages/astro/src/assets/fonts/core/collect-component-data.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/assets/fonts/core).

Analyze Your Own Codebase

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

Try Supermodel Free