Skip to content

Commit 23410c6

Browse files
fix(fonts): providers deduplication logic (#13639)
1 parent 38b5673 commit 23410c6

3 files changed

Lines changed: 13 additions & 8 deletions

File tree

.changeset/rich-dancers-sniff.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'astro': patch
3+
---
4+
5+
Fixes a case where some font families would not be downloaded when using the same font provider several times, using the experimental fonts API

packages/astro/src/assets/fonts/utils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,6 @@ export function familiesToUnifontProviders({
333333
}),
334334
),
335335
);
336-
if (hashes.has(hash)) {
337-
continue;
338-
}
339336
// Makes sure every font uses the right instance of a given provider
340337
// if this provider is provided several times with different options
341338
// We have to mutate the unifont provider name because unifont deduplicates
@@ -344,8 +341,11 @@ export function familiesToUnifontProviders({
344341
// We set the provider name so we can tell unifont what provider to use when
345342
// resolving font faces
346343
provider.name = unifontProvider._name;
347-
hashes.add(hash);
348-
providers.push(unifontProvider);
344+
345+
if (!hashes.has(hash)) {
346+
hashes.add(hash);
347+
providers.push(unifontProvider);
348+
}
349349
}
350350

351351
return { families, providers };

packages/astro/test/units/assets/fonts/utils.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ describe('fonts utils', () => {
411411
assert.equal(result.providers.length, length);
412412
},
413413
/**
414-
* @param {Array<string | undefined>} names
414+
* @param {Array<string>} names
415415
*/
416416
assertProvidersNames: (names) => {
417417
assert.deepStrictEqual(
@@ -479,7 +479,7 @@ describe('fonts utils', () => {
479479
},
480480
]);
481481
fixture.assertProvidersLength(1);
482-
fixture.assertProvidersNames(['test-{"name":"test"}', undefined]);
482+
fixture.assertProvidersNames(['test-{"name":"test"}', 'test-{"name":"test"}']);
483483
});
484484

485485
it('deduplicates providers with the same config', () => {
@@ -504,7 +504,7 @@ describe('fonts utils', () => {
504504
},
505505
]);
506506
fixture.assertProvidersLength(1);
507-
fixture.assertProvidersNames(['test-{"name":"test","x":"y"}', undefined]);
507+
fixture.assertProvidersNames(['test-{"name":"test","x":"y"}', 'test-{"name":"test","x":"y"}']);
508508
});
509509

510510
it('does not deduplicate providers with different configs', () => {

0 commit comments

Comments
 (0)