summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Florian Lefebvre <contact@florian-lefebvre.dev> 2025-04-17 12:53:39 +0200
committerGravatar GitHub <noreply@github.com> 2025-04-17 12:53:39 +0200
commit23410c644f5fc528ef630f2bcbe58c68dfe0c719 (patch)
tree0942d5f2d190984cdac4395b2b54ae7bc02a0090
parent38b5673783c4dd5995120c9c6b834b6611acd8b7 (diff)
downloadastro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.tar.gz
astro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.tar.zst
astro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.zip
fix(fonts): providers deduplication logic (#13639)
-rw-r--r--.changeset/rich-dancers-sniff.md5
-rw-r--r--packages/astro/src/assets/fonts/utils.ts10
-rw-r--r--packages/astro/test/units/assets/fonts/utils.test.js6
3 files changed, 13 insertions, 8 deletions
diff --git a/.changeset/rich-dancers-sniff.md b/.changeset/rich-dancers-sniff.md
new file mode 100644
index 000000000..fadb9bb55
--- /dev/null
+++ b/.changeset/rich-dancers-sniff.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fixes a case where some font families would not be downloaded when using the same font provider several times, using the experimental fonts API
diff --git a/packages/astro/src/assets/fonts/utils.ts b/packages/astro/src/assets/fonts/utils.ts
index 6c76406c7..8768c41ae 100644
--- a/packages/astro/src/assets/fonts/utils.ts
+++ b/packages/astro/src/assets/fonts/utils.ts
@@ -333,9 +333,6 @@ export function familiesToUnifontProviders({
}),
),
);
- if (hashes.has(hash)) {
- continue;
- }
// Makes sure every font uses the right instance of a given provider
// if this provider is provided several times with different options
// We have to mutate the unifont provider name because unifont deduplicates
@@ -344,8 +341,11 @@ export function familiesToUnifontProviders({
// We set the provider name so we can tell unifont what provider to use when
// resolving font faces
provider.name = unifontProvider._name;
- hashes.add(hash);
- providers.push(unifontProvider);
+
+ if (!hashes.has(hash)) {
+ hashes.add(hash);
+ providers.push(unifontProvider);
+ }
}
return { families, providers };
diff --git a/packages/astro/test/units/assets/fonts/utils.test.js b/packages/astro/test/units/assets/fonts/utils.test.js
index d41d80ba4..5ed710e98 100644
--- a/packages/astro/test/units/assets/fonts/utils.test.js
+++ b/packages/astro/test/units/assets/fonts/utils.test.js
@@ -411,7 +411,7 @@ describe('fonts utils', () => {
assert.equal(result.providers.length, length);
},
/**
- * @param {Array<string | undefined>} names
+ * @param {Array<string>} names
*/
assertProvidersNames: (names) => {
assert.deepStrictEqual(
@@ -479,7 +479,7 @@ describe('fonts utils', () => {
},
]);
fixture.assertProvidersLength(1);
- fixture.assertProvidersNames(['test-{"name":"test"}', undefined]);
+ fixture.assertProvidersNames(['test-{"name":"test"}', 'test-{"name":"test"}']);
});
it('deduplicates providers with the same config', () => {
@@ -504,7 +504,7 @@ describe('fonts utils', () => {
},
]);
fixture.assertProvidersLength(1);
- fixture.assertProvidersNames(['test-{"name":"test","x":"y"}', undefined]);
+ fixture.assertProvidersNames(['test-{"name":"test","x":"y"}', 'test-{"name":"test","x":"y"}']);
});
it('does not deduplicate providers with different configs', () => {