astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
74 lines (73 loc) • 2.63 kB
TypeScript
import type * as unifont from 'unifont';
import type { CollectedFontForMetrics } from './logic/optimize-fallbacks.js';
import type { AstroFontProvider, FontFileData, FontType, PreloadData, ResolvedFontProvider } from './types.js';
import type { FontFaceMetrics, GenericFallbackName } from './types.js';
export interface Hasher {
hashString: (input: string) => string;
hashObject: (input: Record<string, any>) => string;
}
export interface RemoteFontProviderModResolver {
resolve: (id: string) => Promise<any>;
}
export interface RemoteFontProviderResolver {
resolve: (provider: AstroFontProvider) => Promise<ResolvedFontProvider>;
}
export interface LocalProviderUrlResolver {
resolve: (input: string) => string;
}
type SingleErrorInput<TType extends string, TData extends Record<string, any>> = {
type: TType;
data: TData;
cause: unknown;
};
export type ErrorHandlerInput = SingleErrorInput<'cannot-load-font-provider', {
entrypoint: string;
}> | SingleErrorInput<'unknown-fs-error', {}> | SingleErrorInput<'cannot-fetch-font-file', {
url: string;
}> | SingleErrorInput<'cannot-extract-font-type', {
url: string;
}>;
export interface ErrorHandler {
handle: (input: ErrorHandlerInput) => Error;
}
export interface UrlProxy {
proxy: (input: Pick<FontFileData, 'url' | 'init'> & {
collectPreload: boolean;
data: Partial<unifont.FontFaceData>;
}) => string;
}
export interface UrlProxyContentResolver {
resolve: (url: string) => string;
}
export interface DataCollector {
collect: (input: FontFileData & {
data: Partial<unifont.FontFaceData>;
preload: PreloadData | null;
}) => void;
}
export type CssProperties = Record<string, string | undefined>;
export interface CssRenderer {
generateFontFace: (family: string, properties: CssProperties) => string;
generateCssVariable: (key: string, values: Array<string>) => string;
}
export interface FontMetricsResolver {
getMetrics: (name: string, font: CollectedFontForMetrics) => Promise<FontFaceMetrics>;
generateFontFace: (input: {
metrics: FontFaceMetrics;
fallbackMetrics: FontFaceMetrics;
name: string;
font: string;
properties: CssProperties;
}) => string;
}
export interface SystemFallbacksProvider {
getLocalFonts: (fallback: GenericFallbackName) => Array<string> | null;
getMetricsForLocalFont: (family: string) => FontFaceMetrics;
}
export interface FontFetcher {
fetch: (input: FontFileData) => Promise<Buffer>;
}
export interface FontTypeExtractor {
extract: (url: string) => FontType;
}
export {};