diff options
author | 2025-04-17 12:53:39 +0200 | |
---|---|---|
committer | 2025-04-17 12:53:39 +0200 | |
commit | 23410c644f5fc528ef630f2bcbe58c68dfe0c719 (patch) | |
tree | 0942d5f2d190984cdac4395b2b54ae7bc02a0090 | |
parent | 38b5673783c4dd5995120c9c6b834b6611acd8b7 (diff) | |
download | astro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.tar.gz astro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.tar.zst astro-23410c644f5fc528ef630f2bcbe58c68dfe0c719.zip |
fix(fonts): providers deduplication logic (#13639)
-rw-r--r-- | .changeset/rich-dancers-sniff.md | 5 | ||||
-rw-r--r-- | packages/astro/src/assets/fonts/utils.ts | 10 | ||||
-rw-r--r-- | packages/astro/test/units/assets/fonts/utils.test.js | 6 |
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', () => { |