From 7a37f27c0040ea32cd79068bbd07e95ad866285c Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Wed, 16 Apr 2025 10:30:27 +0200 Subject: [PATCH] fix(fonts): tech(undefined) for local provider --- .changeset/few-flowers-notice.md | 5 +++++ packages/astro/src/assets/fonts/utils.ts | 7 ++++--- packages/astro/test/units/assets/fonts/utils.test.js | 10 ++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 .changeset/few-flowers-notice.md diff --git a/.changeset/few-flowers-notice.md b/.changeset/few-flowers-notice.md new file mode 100644 index 000000000000..f6221bb00587 --- /dev/null +++ b/.changeset/few-flowers-notice.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a case where fonts using a local provider would not work because of an invalid generated `src` diff --git a/packages/astro/src/assets/fonts/utils.ts b/packages/astro/src/assets/fonts/utils.ts index 2d8c8ef2225c..5101d6661093 100644 --- a/packages/astro/src/assets/fonts/utils.ts +++ b/packages/astro/src/assets/fonts/utils.ts @@ -36,14 +36,15 @@ export function generateFontFace(family: string, font: unifont.FontFaceData) { } // Source: https://github.com/nuxt/fonts/blob/main/src/css/render.ts#L68-L81 -function renderFontSrc(sources: Exclude[]) { +export function renderFontSrc(sources: Exclude[]) { return sources .map((src) => { if ('url' in src) { let rendered = `url("${src.url}")`; for (const key of ['format', 'tech'] as const) { - if (key in src) { - rendered += ` ${key}(${src[key]})`; + const value = src[key] + if (value) { + rendered += ` ${key}(${value})`; } } return rendered; diff --git a/packages/astro/test/units/assets/fonts/utils.test.js b/packages/astro/test/units/assets/fonts/utils.test.js index 68dc95e2954f..ef106499ea41 100644 --- a/packages/astro/test/units/assets/fonts/utils.test.js +++ b/packages/astro/test/units/assets/fonts/utils.test.js @@ -10,6 +10,7 @@ import { isFontType, isGenericFontFamily, proxyURL, + renderFontSrc, resolveFontFamily, } from '../../../../dist/assets/fonts/utils.js'; @@ -537,4 +538,13 @@ describe('fonts utils', () => { ]); }); }); + + describe('renderFontSrc()', () => { + it('does not output tech(undefined) if key is present without value', () => { + assert.equal( + renderFontSrc([{ url: 'test', tech: undefined }]).includes('tech(undefined)'), + false, + ); + }); + }); });