diff options
-rw-r--r-- | .changeset/bright-jokes-grab.md | 5 | ||||
-rw-r--r-- | package.json | 5 | ||||
-rw-r--r-- | packages/astro/package.json | 2 | ||||
-rw-r--r-- | packages/astro/src/assets/fonts/load.ts | 44 | ||||
-rw-r--r-- | packages/astro/src/config/entrypoint.ts | 2 | ||||
-rw-r--r-- | patches/unifont@0.1.7.patch | 22 | ||||
-rw-r--r-- | pnpm-lock.yaml | 30 |
7 files changed, 45 insertions, 65 deletions
diff --git a/.changeset/bright-jokes-grab.md b/.changeset/bright-jokes-grab.md new file mode 100644 index 000000000..46956569d --- /dev/null +++ b/.changeset/bright-jokes-grab.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Reduces the number of font files downloaded diff --git a/package.json b/package.json index 11bf44115..bf86b365d 100644 --- a/package.json +++ b/package.json @@ -83,9 +83,6 @@ "workerd", "@biomejs/biome", "sharp" - ], - "patchedDependencies": { - "unifont@0.1.7": "patches/unifont@0.1.7.patch" - } + ] } } diff --git a/packages/astro/package.json b/packages/astro/package.json index ce1b273d5..454f06563 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -166,7 +166,7 @@ "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", "ultrahtml": "^1.6.0", - "unifont": "^0.1.7", + "unifont": "~0.2.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.15.0", "vfile": "^6.0.3", diff --git a/packages/astro/src/assets/fonts/load.ts b/packages/astro/src/assets/fonts/load.ts index 6855c9c0b..3992ccf39 100644 --- a/packages/astro/src/assets/fonts/load.ts +++ b/packages/astro/src/assets/fonts/load.ts @@ -111,23 +111,33 @@ export async function loadFonts({ [family.provider.name!], ); - fonts = result.fonts.map((font) => ({ - ...font, - src: font.src.map((source) => - 'name' in source - ? source - : { - ...source, - originalURL: source.url, - url: proxyURL({ - value: source.url, - // We only use the url for hashing since the service returns urls with a hash already - hashString, - collect, - }), - }, - ), - })); + fonts = result.fonts + // Avoid getting too much font files + .filter((font) => + typeof font.meta?.priority === 'number' ? font.meta.priority === 0 : true, + ) + // Collect URLs + .map((font) => ({ + ...font, + src: font.src + // Limit src to 1 file (eg. if woff2 and woff are present, will only take woff2) to avoid + // downloading too many files + .slice(0, 1) + .map((source) => + 'name' in source + ? source + : { + ...source, + originalURL: source.url, + url: proxyURL({ + value: source.url, + // We only use the url for hashing since the service returns urls with a hash already + hashString, + collect, + }), + }, + ), + })); } for (const data of fonts) { diff --git a/packages/astro/src/config/entrypoint.ts b/packages/astro/src/config/entrypoint.ts index a1301662e..dc2f47242 100644 --- a/packages/astro/src/config/entrypoint.ts +++ b/packages/astro/src/config/entrypoint.ts @@ -8,7 +8,7 @@ export { envField } from '../env/config.js'; export { mergeConfig } from '../core/config/merge.js'; export { validateConfig } from '../core/config/validate.js'; export { fontProviders, defineAstroFontProvider } from '../assets/fonts/providers/index.js'; -export type { AstroFontProvider as FontProvider } from '../assets/fonts/types.js'; +export type { AstroFontProvider } from '../assets/fonts/types.js'; /** * Return the configuration needed to use the Sharp-based image service diff --git a/patches/unifont@0.1.7.patch b/patches/unifont@0.1.7.patch deleted file mode 100644 index 625a623d9..000000000 --- a/patches/unifont@0.1.7.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/index.js b/dist/index.js -index a8d7acc843a641e4797d69b897fc66fbddbd31a9..93c3e63a1a238505ccf8f6b12767a2acdcb0d183 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -383,7 +383,7 @@ const fontsource = defineFontProvider("fontsource", async (_options, ctx) => { - const fontFaceData = []; - for (const subset of subsets) { - for (const style of styles) { -- if (font.variable) { -+ if (options.weights.some(weight => weight.includes(" ")) && font.variable) { - try { - const variableAxes = await ctx.storage.getItem(`fontsource:${font.family}-axes.json`, () => fontAPI(`/variable/${font.id}`, { responseType: "json" })); - if (variableAxes && variableAxes.axes.wght) { -@@ -441,7 +441,7 @@ const google = defineFontProvider("google", async (_options = {}, ctx) => { - async function getFontDetails(family, options) { - const font = googleFonts.find((font2) => font2.family === family); - const styles = [...new Set(options.styles.map((i) => styleMap[i]))].sort(); -- const variableWeight = font.axes.find((a) => a.tag === "wght"); -+ const variableWeight = options.weights.some(weight => weight.includes(" ")) && font.axes.find((a) => a.tag === "wght"); - const weights = variableWeight ? [`${variableWeight.min}..${variableWeight.max}`] : options.weights.filter((weight) => weight in font.fonts); - if (weights.length === 0 || styles.length === 0) - return []; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57d2bc636..60e4f5512 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -patchedDependencies: - unifont@0.1.7: - hash: 8015962152377f03e7f61d7d6a3511d95131453e45fd8afb4c4e10c337306488 - path: patches/unifont@0.1.7.patch - importers: .: @@ -607,8 +602,8 @@ importers: specifier: ^1.6.0 version: 1.6.0 unifont: - specifier: ^0.1.7 - version: 0.1.7(patch_hash=8015962152377f03e7f61d7d6a3511d95131453e45fd8afb4c4e10c337306488) + specifier: ~0.2.0 + version: 0.2.0 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 @@ -7925,8 +7920,8 @@ packages: svelte: ^5.0.0 vite: ^6.0.0 - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} '@tailwindcss/node@4.1.3': resolution: {integrity: sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==} @@ -10595,9 +10590,6 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ohash@1.1.6: - resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} - ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -11841,8 +11833,8 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unifont@0.1.7: - resolution: {integrity: sha512-UyN6r/TUyl69iW/jhXaCtuwA6bP9ZSLhVViwgP8LH9EHRGk5FyIMDxvClqD5z2BV6MI9GMATzd0dyLqFxKkUmQ==} + unifont@0.2.0: + resolution: {integrity: sha512-RoF14/tOhLvDa7R5K6A3PjsfJVFKvadvRpWjfV1ttabUe9704P1ie9z1ABLWEts/8SxrBVePav/XhgeFNltpsw==} unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} @@ -14069,7 +14061,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@swc/helpers@0.5.15': + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -15756,7 +15748,7 @@ snapshots: fontkit@2.0.4: dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 brotli: 1.3.3 clone: 2.1.2 dfa: 1.2.0 @@ -17166,8 +17158,6 @@ snapshots: node-fetch-native: 1.6.6 ufo: 1.5.4 - ohash@1.1.6: {} - ohash@2.0.11: {} on-finished@2.4.1: @@ -18608,10 +18598,10 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unifont@0.1.7(patch_hash=8015962152377f03e7f61d7d6a3511d95131453e45fd8afb4c4e10c337306488): + unifont@0.2.0: dependencies: css-tree: 3.1.0 - ohash: 1.1.6 + ohash: 2.0.11 unist-util-find-after@5.0.0: dependencies: |