compute-font-families-assets.ts — astro Source File
Architecture documentation for compute-font-families-assets.ts, a typescript file in the astro codebase. 6 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR cdee4da8_e0b1_abf7_3abf_ee643402e96d["compute-font-families-assets.ts"] d3861967_b647_84d2_ff48_15013353bd56["../core/logger/core.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> d3861967_b647_84d2_ff48_15013353bd56 e92fda44_4a5d_b83b_1a45_958cdae6c91b["./definitions.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> e92fda44_4a5d_b83b_1a45_958cdae6c91b ea387312_d0a2_bb52_dafc_3872f7307f95["../../src/assets/fonts/types.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> ea387312_d0a2_bb52_dafc_3872f7307f95 28685c73_a9d0_3d9e_e6a1_3d0209745c56["./core/collect-font-assets-from-faces.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> 28685c73_a9d0_3d9e_e6a1_3d0209745c56 206cdf73_1d30_d44a_eb5b_ba57eadaccd2["./core/filter-and-transform-font-faces.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> 206cdf73_1d30_d44a_eb5b_ba57eadaccd2 944bc514_ae36_655b_b208_3e4e35faac0b["./core/get-or-create-font-family-assets.js"] cdee4da8_e0b1_abf7_3abf_ee643402e96d --> 944bc514_ae36_655b_b208_3e4e35faac0b style cdee4da8_e0b1_abf7_3abf_ee643402e96d fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import type { Logger } from '../../../core/logger/core.js';
import type { FontResolver, StringMatcher } from '../definitions.js';
import type {
Collaborator,
Defaults,
FontFamilyAssetsByUniqueKey,
FontFileById,
ResolvedFontFamily,
} from '../types.js';
import type { collectFontAssetsFromFaces as _collectFontAssetsFromFaces } from './collect-font-assets-from-faces.js';
import type { filterAndTransformFontFaces as _filterAndTransformFontFaces } from './filter-and-transform-font-faces.js';
import type { getOrCreateFontFamilyAssets as _getOrCreateFontFamilyAssets } from './get-or-create-font-family-assets.js';
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({
fonts: _fonts,
family,
}),
);
const result = collectFontAssetsFromFaces({
fonts: fontAssets.fonts,
family,
fontFilesIds: new Set(fontFileById.keys()),
collectedFontsIds: new Set(fontAssets.collectedFontsForMetricsByUniqueKey.keys()),
});
for (const [key, value] of result.fontFileById.entries()) {
fontFileById.set(key, value);
}
for (const [key, value] of result.collectedFontsForMetricsByUniqueKey.entries()) {
fontAssets.collectedFontsForMetricsByUniqueKey.set(key, value);
}
fontAssets.preloads.push(...result.preloads);
}
return { fontFamilyAssets: Array.from(fontFamilyAssetsByUniqueKey.values()), fontFileById };
}
Domain
Subdomains
Functions
Dependencies
- ../../src/assets/fonts/types.js
- ../core/logger/core.js
- ./core/collect-font-assets-from-faces.js
- ./core/filter-and-transform-font-faces.js
- ./core/get-or-create-font-family-assets.js
- ./definitions.js
Source
Frequently Asked Questions
What does compute-font-families-assets.ts do?
compute-font-families-assets.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 compute-font-families-assets.ts?
compute-font-families-assets.ts defines 1 function(s): computeFontFamiliesAssets.
What does compute-font-families-assets.ts depend on?
compute-font-families-assets.ts imports 6 module(s): ../../src/assets/fonts/types.js, ../core/logger/core.js, ./core/collect-font-assets-from-faces.js, ./core/filter-and-transform-font-faces.js, ./core/get-or-create-font-family-assets.js, ./definitions.js.
Where is compute-font-families-assets.ts in the architecture?
compute-font-families-assets.ts is located at packages/astro/src/assets/fonts/core/compute-font-families-assets.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