astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
30 lines (29 loc) • 747 B
JavaScript
export class DevFontFileIdGenerator {
#hasher;
#contentResolver;
constructor({ hasher, contentResolver }) {
this.#hasher = hasher;
this.#contentResolver = contentResolver;
}
#formatWeight(weight) {
if (Array.isArray(weight)) {
return weight.join("-");
}
if (typeof weight === "number") {
return weight.toString();
}
return weight?.replace(/\s+/g, "-");
}
#formatStyle(style) {
return style?.replace(/\s+/g, "-");
}
generate({ cssVariable, originalUrl, type, font }) {
return [
cssVariable.slice(2),
this.#formatWeight(font.weight),
this.#formatStyle(font.style),
font.meta?.subset,
`${this.#hasher.hashString(this.#contentResolver.resolve(originalUrl))}.${type}`
].filter(Boolean).join("-");
}
}