From 3e72958d941826ff6592b55512dedaa3d6ee6818 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:01:12 +0200 Subject: [PATCH 01/10] feat: update astro and satteri --- docs/package.json | 2 +- examples/basics/package.json | 2 +- examples/markdoc/package.json | 2 +- examples/tailwind/package.json | 2 +- package.json | 2 +- .../__e2e__/fixtures/basics/package.json | 2 +- .../fixtures/custom src-dir/package.json | 2 +- .../__e2e__/fixtures/git/package.json | 2 +- .../package.json | 2 +- .../fixtures/no-mdx-optimization/package.json | 2 +- .../__e2e__/fixtures/ssr/package.json | 2 +- .../markdown-processor/asides.test.ts | 13 +- .../__tests__/markdown-processor/utils.ts | 8 +- .../integrations/markdown-plugins.ts | 8 +- packages/starlight/integrations/satteri.ts | 8 +- packages/starlight/package.json | 12 +- pnpm-lock.yaml | 474 +++++++++++++----- pnpm-workspace.yaml | 8 + 18 files changed, 391 insertions(+), 162 deletions(-) diff --git a/docs/package.json b/docs/package.json index 35e87b06d34..3b7827f1597 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,7 +21,7 @@ "@astrojs/starlight": "workspace:*", "@lunariajs/core": "^0.1.1", "@types/culori": "^4.0.1", - "astro": "^7.1.6", + "astro": "^7.2.4", "culori": "^4.0.2", "sharp": "^0.35.3" }, diff --git a/examples/basics/package.json b/examples/basics/package.json index 0000f457605..033fa395390 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@astrojs/starlight": "^0.41.7", - "astro": "^7.1.6", + "astro": "^7.2.4", "sharp": "^0.35.3" } } diff --git a/examples/markdoc/package.json b/examples/markdoc/package.json index 796ab8a6d59..58a8450f386 100644 --- a/examples/markdoc/package.json +++ b/examples/markdoc/package.json @@ -14,7 +14,7 @@ "@astrojs/markdoc": "^2.0.6", "@astrojs/starlight": "^0.41.7", "@astrojs/starlight-markdoc": "^0.7.0", - "astro": "^7.1.6", + "astro": "^7.2.4", "sharp": "^0.35.3" } } diff --git a/examples/tailwind/package.json b/examples/tailwind/package.json index 55334ede9a1..059a0aacbbe 100644 --- a/examples/tailwind/package.json +++ b/examples/tailwind/package.json @@ -14,7 +14,7 @@ "@astrojs/starlight": "^0.41.7", "@astrojs/starlight-tailwind": "^5.0.0", "@tailwindcss/vite": "^4.2.4", - "astro": "^7.1.6", + "astro": "^7.2.4", "sharp": "^0.35.3", "tailwindcss": "^4.2.4" } diff --git a/package.json b/package.json index 6e3b813a44a..56155c4829d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@changesets/cli": "^2.31.0", "@eslint/js": "^10.0.1", "@size-limit/file": "^12.1.0", - "astro": "^7.1.6", + "astro": "^7.2.4", "eslint": "^10.3.0", "eslint-config-prettier": "^10.1.8", "globals": "^17.6.0", diff --git a/packages/starlight/__e2e__/fixtures/basics/package.json b/packages/starlight/__e2e__/fixtures/basics/package.json index ca8d4bb11d1..32461b54936 100644 --- a/packages/starlight/__e2e__/fixtures/basics/package.json +++ b/packages/starlight/__e2e__/fixtures/basics/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__e2e__/fixtures/custom src-dir/package.json b/packages/starlight/__e2e__/fixtures/custom src-dir/package.json index 8a4f0e2394d..9a0586a6043 100644 --- a/packages/starlight/__e2e__/fixtures/custom src-dir/package.json +++ b/packages/starlight/__e2e__/fixtures/custom src-dir/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__e2e__/fixtures/git/package.json b/packages/starlight/__e2e__/fixtures/git/package.json index b739822e8d6..b41fd910e70 100644 --- a/packages/starlight/__e2e__/fixtures/git/package.json +++ b/packages/starlight/__e2e__/fixtures/git/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json b/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json index 65d218a901a..c9351a30629 100644 --- a/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json +++ b/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json b/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json index 27df071a410..db4e2e28320 100644 --- a/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json +++ b/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__e2e__/fixtures/ssr/package.json b/packages/starlight/__e2e__/fixtures/ssr/package.json index adc96bea694..2fc1d65c494 100644 --- a/packages/starlight/__e2e__/fixtures/ssr/package.json +++ b/packages/starlight/__e2e__/fixtures/ssr/package.json @@ -5,6 +5,6 @@ "dependencies": { "@astrojs/node": "^11.0.0", "@astrojs/starlight": "workspace:*", - "astro": "^7.1.6" + "astro": "^7.2.4" } } diff --git a/packages/starlight/__tests__/markdown-processor/asides.test.ts b/packages/starlight/__tests__/markdown-processor/asides.test.ts index 36f5814891c..8d9f3be2787 100644 --- a/packages/starlight/__tests__/markdown-processor/asides.test.ts +++ b/packages/starlight/__tests__/markdown-processor/asides.test.ts @@ -2,7 +2,8 @@ import type { Root } from 'mdast'; import { visit } from 'unist-util-visit'; import { createMarkdownProcessor } from '@astrojs/markdown-remark'; import { createSatteriMarkdownProcessor } from '@astrojs/markdown-satteri'; -import type { MdastPluginDefinition } from 'satteri'; +// TODO(HiDeoo) Cleanup import when https://github.com/withastro/astro/pull/17766 is released +import type { HastPluginDefinition, MdastPluginDefinition } from 'satteri'; import { describe, expect, test, vi } from 'vitest'; import { remarkDirectivesRestoration } from '../../integrations/remark-asides'; import { satteriDirectivesRestoration, starlightSatteriPlugins } from '../../integrations/satteri'; @@ -258,8 +259,14 @@ describe('asides directive restoration (Sätteri)', () => { await createPluginTestOptions(starlightConfig) ); return createSatteriMarkdownProcessor({ - mdastPlugins: [...mdastPlugins, ...extraMdastPlugins, satteriDirectivesRestoration()], - hastPlugins, + mdastPlugins: [ + ...mdastPlugins, + ...extraMdastPlugins, + satteriDirectivesRestoration(), + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + ] as MdastPluginDefinition[], + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + hastPlugins: hastPlugins as HastPluginDefinition[], // Starlight's asides rely on container directives, which Sätteri disables by default. features: { directive: true }, }); diff --git a/packages/starlight/__tests__/markdown-processor/utils.ts b/packages/starlight/__tests__/markdown-processor/utils.ts index 96f69ddac25..dce2584b81a 100644 --- a/packages/starlight/__tests__/markdown-processor/utils.ts +++ b/packages/starlight/__tests__/markdown-processor/utils.ts @@ -6,6 +6,8 @@ import { starlightRehypePlugins, starlightRemarkPlugins } from '../../integratio import { satteriDirectivesRestoration, starlightSatteriPlugins } from '../../integrations/satteri'; import type { StarlightUserConfig } from '../../utils/user-config'; import { createPluginTestOptions, docFileURL } from '../test-utils'; +// TODO(HiDeoo) Remove import when https://github.com/withastro/astro/pull/17766 is released +import type { HastPluginDefinition, MdastPluginDefinition } from 'satteri'; /** * The Markdown processors Starlight supports. The same Starlight transforms (asides, heading anchor @@ -24,8 +26,10 @@ export async function createStarlightMarkdownProcessor( if (name === 'satteri') { const { mdastPlugins, hastPlugins } = starlightSatteriPlugins(options); return createSatteriMarkdownProcessor({ - mdastPlugins: [...mdastPlugins, satteriDirectivesRestoration()], - hastPlugins, + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + mdastPlugins: [...mdastPlugins, satteriDirectivesRestoration()] as MdastPluginDefinition[], + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + hastPlugins: hastPlugins as HastPluginDefinition[], // Starlight's asides rely on container directives, which Sätteri disables by default. features: { directive: true }, ...(syntaxHighlight === false ? { syntaxHighlight: false } : {}), diff --git a/packages/starlight/integrations/markdown-plugins.ts b/packages/starlight/integrations/markdown-plugins.ts index 23262e59cd0..e9ee3c63dae 100644 --- a/packages/starlight/integrations/markdown-plugins.ts +++ b/packages/starlight/integrations/markdown-plugins.ts @@ -2,6 +2,8 @@ import { isSatteriProcessor } from '@astrojs/markdown-satteri'; import type { AstroConfig, AstroIntegration, AstroIntegrationLogger } from 'astro'; import type { MarkdownProcessorPluginOptions } from './markdown-processor'; import { satteriDirectivesRestoration, starlightSatteriPlugins } from './satteri'; +// TODO(HiDeoo) Remove import when https://github.com/withastro/astro/pull/17766 is released +import type { HastPluginEntry, MdastPluginEntry } from 'satteri'; // This file is imported by the Starlight integration that is used in Astro configuration files. // When using Starlight, Astro loads its configuration using a temporary Vite module runner and @@ -28,8 +30,10 @@ export function applyStarlightMarkdownPlugins( // Starlight's asides are built on container directives, which Sätteri disables by default. processor.options.features.directive = true; const { mdastPlugins, hastPlugins } = starlightSatteriPlugins(options); - processor.options.mdastPlugins.push(...mdastPlugins); - processor.options.hastPlugins.push(...hastPlugins); + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + (processor.options.mdastPlugins as MdastPluginEntry[]).push(...mdastPlugins); + // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released + (processor.options.hastPlugins as HastPluginEntry[]).push(...hastPlugins); } else if (unified?.isUnifiedProcessor(processor)) { processor.options.remarkPlugins.push(...unified.starlightRemarkPlugins(options)); processor.options.rehypePlugins.push(...unified.starlightRehypePlugins(options)); diff --git a/packages/starlight/integrations/satteri.ts b/packages/starlight/integrations/satteri.ts index d93c5f17f1d..016cdfe4a8e 100644 --- a/packages/starlight/integrations/satteri.ts +++ b/packages/starlight/integrations/satteri.ts @@ -6,10 +6,10 @@ import { directiveToMarkdown } from 'mdast-util-directive'; import { toMarkdown } from 'mdast-util-to-markdown'; import type { HastPluginDefinition, - HastPluginInput, HastVisitorContext, - MdastPluginInput, MdastPluginDefinition, + MdastPluginEntry, + HastPluginEntry, } from 'satteri'; import { headingLinkIconChildren } from './markdown-icon'; import { getAsideIcon, isAsideVariant } from './aside-utils'; @@ -20,8 +20,8 @@ import { } from './markdown-processor'; export function starlightSatteriPlugins(options: MarkdownProcessorPluginOptions): { - mdastPlugins: MdastPluginInput[]; - hastPlugins: HastPluginInput[]; + mdastPlugins: MdastPluginEntry[]; + hastPlugins: HastPluginEntry[]; } { const allowedPaths = getMarkdownProcessorPaths(options); return { diff --git a/packages/starlight/package.json b/packages/starlight/package.json index cbdb144cb6b..b1daa32d2d6 100644 --- a/packages/starlight/package.json +++ b/packages/starlight/package.json @@ -49,7 +49,7 @@ }, "peerDependencies": { "@astrojs/markdown-remark": "^7.2.0", - "astro": "^7.0.2" + "astro": "^7.2.4" }, "peerDependenciesMeta": { "@astrojs/markdown-remark": { @@ -57,20 +57,20 @@ } }, "devDependencies": { - "@astrojs/markdown-remark": "^7.2.2", + "@astrojs/markdown-remark": "^7.2.4", "@playwright/test": "^1.61.1", "@types/node": "^22.19.17", "@vitest/coverage-v8": "^4.1.5", - "astro": "^7.1.6", + "astro": "^7.2.4", "linkedom": "^0.18.12", "vitest": "^4.1.5" }, "dependencies": { - "@astrojs/markdown-satteri": "^0.3.5", + "@astrojs/markdown-satteri": "^0.3.7", "@astrojs/mdx": "^7.0.5", "@astrojs/sitemap": "^3.7.3", "@pagefind/default-ui": "^1.3.0", - "@types/hast": "^3.0.4", + "@types/hast": "^3.0.5", "@types/js-yaml": "^4.0.9", "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.44.0", @@ -90,7 +90,7 @@ "rehype": "^13.0.2", "rehype-format": "^5.0.1", "remark-directive": "^4.0.0", - "satteri": "^0.9.1", + "satteri": "^0.10.3", "ultrahtml": "^1.6.0", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 547ef4adf47..c34f3a08f6a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0(jiti@2.6.1)) astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) eslint: specifier: ^10.3.0 version: 10.3.0(jiti@2.6.1) @@ -69,8 +69,8 @@ importers: specifier: ^4.0.1 version: 4.0.1 astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) culori: specifier: ^4.0.2 version: 4.0.2 @@ -89,7 +89,7 @@ importers: version: 4.1.5 starlight-links-validator: specifier: ^0.25.2 - version: 0.25.2(@astrojs/starlight@packages+starlight)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) + version: 0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) examples/basics: dependencies: @@ -97,8 +97,8 @@ importers: specifier: ^0.41.7 version: link:../../packages/starlight astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -107,7 +107,7 @@ importers: dependencies: '@astrojs/markdoc': specifier: ^2.0.6 - version: 2.0.6(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) + version: 2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) '@astrojs/starlight': specifier: ^0.41.7 version: link:../../packages/starlight @@ -115,8 +115,8 @@ importers: specifier: ^0.7.0 version: link:../../packages/markdoc astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -133,8 +133,8 @@ importers: specifier: ^4.2.4 version: 4.2.4(vite@8.2.0(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.8.3)) astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -169,7 +169,7 @@ importers: devDependencies: '@astrojs/markdoc': specifier: ^2.0.6 - version: 2.0.6(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) + version: 2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) '@astrojs/starlight': specifier: workspace:* version: link:../starlight @@ -180,11 +180,11 @@ importers: packages/starlight: dependencies: '@astrojs/markdown-satteri': - specifier: ^0.3.5 - version: 0.3.5 + specifier: ^0.3.7 + version: 0.3.7 '@astrojs/mdx': specifier: ^7.0.5 - version: 7.0.5(@astrojs/markdown-satteri@0.3.5)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)) + version: 7.0.5(@astrojs/markdown-satteri@0.3.7)(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)) '@astrojs/sitemap': specifier: ^3.7.3 version: 3.7.3 @@ -192,8 +192,8 @@ importers: specifier: ^1.3.0 version: 1.3.0 '@types/hast': - specifier: ^3.0.4 - version: 3.0.4 + specifier: ^3.0.5 + version: 3.0.5 '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -202,7 +202,7 @@ importers: version: 4.0.4 astro-expressive-code: specifier: ^0.44.0 - version: 0.44.0(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)) + version: 0.44.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)) bcp-47: specifier: ^2.1.0 version: 2.1.0 @@ -252,8 +252,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 satteri: - specifier: ^0.9.1 - version: 0.9.3 + specifier: ^0.10.3 + version: 0.10.3 ultrahtml: specifier: ^1.6.0 version: 1.6.0 @@ -268,8 +268,8 @@ importers: version: 6.0.3 devDependencies: '@astrojs/markdown-remark': - specifier: ^7.2.2 - version: 7.2.2 + specifier: ^7.2.4 + version: 7.2.4 '@playwright/test': specifier: ^1.61.1 version: 1.61.1 @@ -280,8 +280,8 @@ importers: specifier: ^4.1.5 version: 4.1.5(vitest@4.1.5) astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) linkedom: specifier: ^0.18.12 version: 0.18.12 @@ -295,8 +295,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/starlight/__e2e__/fixtures/custom src-dir: dependencies: @@ -304,8 +304,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/starlight/__e2e__/fixtures/git: dependencies: @@ -313,8 +313,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat: dependencies: @@ -322,8 +322,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/starlight/__e2e__/fixtures/no-mdx-optimization: dependencies: @@ -331,20 +331,20 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/starlight/__e2e__/fixtures/ssr: dependencies: '@astrojs/node': specifier: ^11.0.0 - version: 11.0.0(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) + version: 11.0.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)) '@astrojs/starlight': specifier: workspace:* version: link:../../.. astro: - specifier: ^7.1.6 - version: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + specifier: ^7.2.4 + version: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) packages/tailwind: devDependencies: @@ -505,6 +505,9 @@ packages: '@astrojs/internal-helpers@0.10.2': resolution: {integrity: sha512-yt7fMgPYqSM4Tmr+taTW6Per+hjJ8Pk6lA1PAcDyqzOt8HzJ6Kje5WzCxA2Sd+9wsUW7uhkLeoTMK0cXPwH9rQ==} + '@astrojs/internal-helpers@0.10.4': + resolution: {integrity: sha512-nozZSy/mKYLqe4YrqbKtdOszedAfXYCtw3wZ0d+CAjz4GqQ4L9rl1ltIL5BlgwmYVinJg/RZ0MgGuWOdlyRZlA==} + '@astrojs/language-server@2.16.7': resolution: {integrity: sha512-b64bWT74Vq/ORcSqW7TdIjjpB6hcl+Ei/lMANIUaAGlLPiYNtPTRI/j2tzvugT+LoVwfJtE2Ukq/t2OGCyEtfQ==} hasBin: true @@ -526,9 +529,15 @@ packages: '@astrojs/markdown-remark@7.2.2': resolution: {integrity: sha512-FGfmK84zSNcrsBd0dl1gXE9JvZYElp8EXQa2jpHVAxG4deGKAp43wspxFupjADJX7MSsMRHwYCnfT6EyVmgeFQ==} + '@astrojs/markdown-remark@7.2.4': + resolution: {integrity: sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==} + '@astrojs/markdown-satteri@0.3.5': resolution: {integrity: sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==} + '@astrojs/markdown-satteri@0.3.7': + resolution: {integrity: sha512-NHcHbrKW/opbZnTZQ5nH293BdcK2VV0tjuzI88CLnvy2njiEJVwUQ5KFnYd4NoWgHJCY/I1CyjGWCR4Vv3khXQ==} + '@astrojs/mdx@7.0.5': resolution: {integrity: sha512-wEM/HH1RiEntyPVagdiF+yArzfcYLKBB0C1RZspVidKZ97rRMbaqP1Nbl/GR0sJs8zwaceqxRymw8aOKKJRdYw==} engines: {node: '>=22.12.0'} @@ -583,50 +592,99 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@bruits/satteri-darwin-arm64@0.10.3': + resolution: {integrity: sha512-RBPx54YSt6ly9ozJ4AbgY6ITep3uJAaPE0ErxhQnE9Mk5ldGeQYbq4bWiJyZOoQmqC45cMCZmFyPjQdJT4biEw==} + cpu: [arm64] + os: [darwin] + '@bruits/satteri-darwin-arm64@0.9.3': resolution: {integrity: sha512-dRUZZrdwh1asfTOyM1nDNmzolhnHtlIFpqYrl1Tdd3YVcaebKmrfJgGL7NAoGPjbEwYmZxaugrxA0uzw83c0dw==} cpu: [arm64] os: [darwin] + '@bruits/satteri-darwin-x64@0.10.3': + resolution: {integrity: sha512-l0G6eARLHwlFEc7KOzEr0Z7YVEUzAQVSDZcevGOng0ycFvY+Eg7SNpNAc5/k0XXKEM+Q62A8wUaaL+d0W63x7g==} + cpu: [x64] + os: [darwin] + '@bruits/satteri-darwin-x64@0.9.3': resolution: {integrity: sha512-wgNCTRp2hPSpNMGFv5A4+6+VXgRJIlBZ7XKb3iwjV8YjRWNIjzE5zV2fUeYynyZYVRkuJ9aYFqQmWhc1e5H+UQ==} cpu: [x64] os: [darwin] + '@bruits/satteri-linux-arm64-gnu@0.10.3': + resolution: {integrity: sha512-U6Lv74zONfwnKbzPAylqp45isfUVJNQPnROlX1mWJ7TLCkJRKeYEFyNe5auZEynVY0ZrgyFe7mKE04dmsFqEhw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@bruits/satteri-linux-arm64-gnu@0.9.3': resolution: {integrity: sha512-A/pWy8Jb/PhDYc2/JFuYh06gFJcsfBUBDl81YydGYBrL/Z4nItDfhNDNOibyeSN/lKKDRlycIHEIajjErk00sQ==} cpu: [arm64] os: [linux] libc: [glibc] + '@bruits/satteri-linux-arm64-musl@0.10.3': + resolution: {integrity: sha512-m/dsv+OsXuQMc0Mmkz1KAO0U/TbY+qe4puyhf08ce7EW5I+czxa5n5Vpy6ZTYwFvA3TtrokwiBRDApzz+oPeww==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@bruits/satteri-linux-arm64-musl@0.9.3': resolution: {integrity: sha512-L6YxmyOSickzo4pE5WmZfNTJnjX0MtgKOsuwQfNZECTx9Ir5vl2B37EIwnxe2AybuPPHl+FqVQtthNDUdH4Vgg==} cpu: [arm64] os: [linux] libc: [musl] + '@bruits/satteri-linux-x64-gnu@0.10.3': + resolution: {integrity: sha512-Y+YYrs3U+UhxRf3vn9Fgjo3NtjnqYBsAEpTrZcwfKpaiSXKpQlr4v2H9Lp4jtlC4PNjPr02wkiNtiAgNlhkB8w==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@bruits/satteri-linux-x64-gnu@0.9.3': resolution: {integrity: sha512-RgH6GPihg9Lzs2yHUsMjqiLxfLyOdmBty8sg9pBY9B4CBnvdOzvg8vklqN+C4qrEEdA9TwpbDpHr1AshLKyRpw==} cpu: [x64] os: [linux] libc: [glibc] + '@bruits/satteri-linux-x64-musl@0.10.3': + resolution: {integrity: sha512-Fqg47592hkRebzI5EMU9BYnbFz7m/Q4awJt062xr9lweaHTmlN6ij/Z9Dzyt4THsqRFm87DZFMcwrniQpeEbPA==} + cpu: [x64] + os: [linux] + libc: [musl] + '@bruits/satteri-linux-x64-musl@0.9.3': resolution: {integrity: sha512-BeWhVORjNTIomePznUKiMbHZTqC0j7sMXZFsISmbX+po5d33KLkqBqKh6K332CHJ8KUmCWx16FfPjwsoysttQg==} cpu: [x64] os: [linux] libc: [musl] + '@bruits/satteri-wasm32-wasi@0.10.3': + resolution: {integrity: sha512-OHBxAJMt97QNQJ8JbtdzdH54dWV7OT0pxl1wGZyD4vRDUeJjm5CXgeC/t1VJzD9tQiwPCVY3/Hh/88SJpVOj7g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@bruits/satteri-wasm32-wasi@0.9.3': resolution: {integrity: sha512-dFNcOHKWV2cztCPnYTn7kZ9D7kNOt8N239z5ysFkNHLxJrfK7zaKIXQbfXYN32C+JoVFqAcTIOeWH2+VnsCOHg==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@bruits/satteri-win32-arm64-msvc@0.10.3': + resolution: {integrity: sha512-4+fLJgFthvZQHdpb1nVXQXH1T6spXs5fYj71KTvTOhsSZ3jA1VkvneVtv7VinX7vgtMu6PZGm/X3P84ancCMkA==} + cpu: [arm64] + os: [win32] + '@bruits/satteri-win32-arm64-msvc@0.9.3': resolution: {integrity: sha512-VnwjBHiAra/PNNEza8eSZdQiG4A3PtTJJwUDtOPAc6iTs0BWZwZX8+OPUZE7//yQCBhgvEMcI8vpwsAwCb6qGQ==} cpu: [arm64] os: [win32] + '@bruits/satteri-win32-x64-msvc@0.10.3': + resolution: {integrity: sha512-BdbaBcnKktrNbAGibVnZFIZKtl+xl3TKvgLDNZempM0d2C+2l9OU874AqdhkOkegWk/vdCS1Z+wUD6W5KYUT9w==} + cpu: [x64] + os: [win32] + '@bruits/satteri-win32-x64-msvc@0.9.3': resolution: {integrity: sha512-Dsoe4reWe69MyILmMwU6iISIceTW7YIFqbyym7haf9DhUvqkYfMAyp7GMM21JzV0SpG9A2BwzFVP7iq9mmxrpA==} cpu: [x64] @@ -1232,6 +1290,13 @@ packages: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@nodable/entities@2.1.0': resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} @@ -1393,15 +1458,6 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@shikijs/core@4.0.2': resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} engines: {node: '>=20'} @@ -1568,8 +1624,8 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} @@ -1802,6 +1858,10 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -1846,12 +1906,12 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0 - astro@7.1.6: - resolution: {integrity: sha512-83x9rYbHazMaZkYrAFRVZXSQx2moFkz0F7cjTDUF3GWfS0a3p2vZXG1ZdhV86rStHApQCodBJW+XTD37xISIrQ==} + astro@7.2.4: + resolution: {integrity: sha512-+cuLsBns2wwUHI9a10xZMbjrF91m7+QNwqTVeljTx0B8Lf+8h0LgVGjdVIL2FALDKD2I565lczeeS3BFC+KdZg==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true peerDependencies: - '@astrojs/markdown-remark': 7.2.2 + '@astrojs/markdown-remark': 7.2.4 peerDependenciesMeta: '@astrojs/markdown-remark': optional: true @@ -1922,6 +1982,10 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1960,6 +2024,13 @@ packages: collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1967,6 +2038,10 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + common-ancestor-path@2.0.0: resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} engines: {node: '>= 18'} @@ -2258,9 +2333,6 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -2340,6 +2412,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-process@2.1.1: + resolution: {integrity: sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==} + hasBin: true + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2876,6 +2952,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3534,6 +3614,9 @@ packages: sass-formatter@0.7.6: resolution: {integrity: sha512-hXdxU6PCkiV3XAiSnX+XLqz2ohHoEnVUlrd8LEVMAI80uB1+OTScIkH9n6qQwImZpTye1r1WG1rbGUteHNhoHg==} + satteri@0.10.3: + resolution: {integrity: sha512-LBDONBUtj48XanFpLcCDvyCjBruz5aj5MGwE9gR+/RTB3monyglmh9jpGXuYUDO4rvBhvK2bpbjTKeU9kkHtfg==} + satteri@0.9.3: resolution: {integrity: sha512-2XfBh89LCnBMFkNOeVKkBLelAZcIA17VLHsgJum1tJ2fXiPZDN/TDXv4ku46rFOQXYd41LJ0kiZh5gPqExcCsg==} @@ -3820,11 +3903,15 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@8.10.0: + resolution: {integrity: sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==} + engines: {node: '>=22.19.0'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unifont@0.7.4: - resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} + unifont@0.7.5: + resolution: {integrity: sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==} unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} @@ -4368,7 +4455,7 @@ snapshots: '@astrojs/internal-helpers@0.10.0': dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 picomatch: 4.0.5 @@ -4379,7 +4466,18 @@ snapshots: '@astrojs/internal-helpers@0.10.2': dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + js-yaml: 4.3.1 + picomatch: 4.0.5 + retext-smartypants: 6.2.0 + shiki: 4.0.2 + smol-toml: 1.6.1 + unified: 11.0.5 + + '@astrojs/internal-helpers@0.10.4': + dependencies: + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 picomatch: 4.0.5 @@ -4414,12 +4512,12 @@ snapshots: transitivePeerDependencies: - typescript - '@astrojs/markdoc@2.0.6(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3))': + '@astrojs/markdoc@2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3))': dependencies: '@astrojs/internal-helpers': 0.10.2 '@astrojs/prism': 4.0.2 '@markdoc/markdoc': 0.5.4 - astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + astro: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) esbuild: 0.28.0 github-slugger: 2.0.0 htmlparser2: 12.0.0 @@ -4449,6 +4547,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@astrojs/markdown-remark@7.2.4': + dependencies: + '@astrojs/internal-helpers': 0.10.4 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + '@astrojs/markdown-satteri@0.3.5': dependencies: '@astrojs/internal-helpers': 0.10.2 @@ -4457,13 +4577,20 @@ snapshots: hast-util-from-html: 2.0.3 satteri: 0.9.3 - '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.5)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3))': + '@astrojs/markdown-satteri@0.3.7': + dependencies: + '@astrojs/internal-helpers': 0.10.4 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + satteri: 0.10.3 + + '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.7)(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3))': dependencies: '@astrojs/internal-helpers': 0.10.2 '@astrojs/markdown-remark': 7.2.2 '@mdx-js/mdx': 3.1.1 acorn: 8.16.0 - astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) + astro: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) es-module-lexer: 2.0.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4475,14 +4602,14 @@ snapshots: unist-util-visit: 5.1.0 vfile: 6.0.3 optionalDependencies: - '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/markdown-satteri': 0.3.7 transitivePeerDependencies: - supports-color - '@astrojs/node@11.0.0(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3))': + '@astrojs/node@11.0.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3))': dependencies: '@astrojs/internal-helpers': 0.10.0 - astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + astro: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) send: 1.2.1 server-destroy: 1.0.1 transitivePeerDependencies: @@ -4528,24 +4655,49 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@bruits/satteri-darwin-arm64@0.10.3': + optional: true + '@bruits/satteri-darwin-arm64@0.9.3': optional: true + '@bruits/satteri-darwin-x64@0.10.3': + optional: true + '@bruits/satteri-darwin-x64@0.9.3': optional: true + '@bruits/satteri-linux-arm64-gnu@0.10.3': + optional: true + '@bruits/satteri-linux-arm64-gnu@0.9.3': optional: true + '@bruits/satteri-linux-arm64-musl@0.10.3': + optional: true + '@bruits/satteri-linux-arm64-musl@0.9.3': optional: true + '@bruits/satteri-linux-x64-gnu@0.10.3': + optional: true + '@bruits/satteri-linux-x64-gnu@0.9.3': optional: true + '@bruits/satteri-linux-x64-musl@0.10.3': + optional: true + '@bruits/satteri-linux-x64-musl@0.9.3': optional: true + '@bruits/satteri-wasm32-wasi@0.10.3': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + '@bruits/satteri-wasm32-wasi@0.9.3': dependencies: '@emnapi/core': 1.11.1 @@ -4553,9 +4705,15 @@ snapshots: '@napi-rs/wasm-runtime': 1.2.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true + '@bruits/satteri-win32-arm64-msvc@0.10.3': + optional: true + '@bruits/satteri-win32-arm64-msvc@0.9.3': optional: true + '@bruits/satteri-win32-x64-msvc@0.10.3': + optional: true + '@bruits/satteri-win32-x64-msvc@0.9.3': optional: true @@ -5150,7 +5308,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdx': 2.0.13 acorn: 8.16.0 collapse-white-space: 2.1.0 @@ -5190,6 +5348,20 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + dependencies: + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodable/entities@2.1.0': {} '@nodelib/fs.scandir@2.1.5': @@ -5275,7 +5447,7 @@ snapshots: dependencies: '@emnapi/core': 2.0.0-alpha.3 '@emnapi/runtime': 2.0.0-alpha.3 - '@napi-rs/wasm-runtime': 1.2.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) optional: true '@rolldown/binding-win32-arm64-msvc@1.2.1': @@ -5286,18 +5458,12 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.3.0': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.5 - '@shikijs/core@4.0.2': dependencies: '@shikijs/primitive': 4.0.2 '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 '@shikijs/engine-javascript@4.0.2': @@ -5319,7 +5485,7 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/themes@4.0.2': dependencies: @@ -5328,7 +5494,7 @@ snapshots: '@shikijs/types@4.0.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/vscode-textmate@10.0.2': {} @@ -5438,7 +5604,7 @@ snapshots: '@types/estree@1.0.8': {} - '@types/hast@3.0.4': + '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -5757,6 +5923,10 @@ snapshots: ansi-regex@6.2.2: {} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@6.2.3: {} anymatch@3.1.3: @@ -5788,22 +5958,21 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.44.0(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)): + astro-expressive-code@0.44.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3)): dependencies: - astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) + astro: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3) rehype-expressive-code: 0.44.0 url-extras: 0.1.0 - astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3): + astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.8.3): dependencies: '@astrojs/compiler-rs': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) - '@astrojs/internal-helpers': 0.10.2 - '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/internal-helpers': 0.10.4 + '@astrojs/markdown-satteri': 0.3.7 '@astrojs/telemetry': 3.3.3 '@capsizecss/unpack': 4.0.0 '@clack/prompts': 1.4.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.3.0 am-i-vibing: 0.4.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -5816,6 +5985,7 @@ snapshots: dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.28.0 + find-process: 2.1.1 flattie: 1.1.1 fontace: 0.4.1 get-tsconfig: 5.0.0-beta.4 @@ -5842,7 +6012,7 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.17 ultrahtml: 1.6.0 - unifont: 0.7.4 + unifont: 0.7.5 unstorage: 1.17.5 vite: 8.2.0(@types/node@22.19.17)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.8.3) vitefu: 1.1.3(vite@8.2.0(@types/node@22.19.17)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.8.3)) @@ -5850,7 +6020,7 @@ snapshots: yargs-parser: 22.0.0 zod: 4.4.3 optionalDependencies: - '@astrojs/markdown-remark': 7.2.2 + '@astrojs/markdown-remark': 7.2.4 sharp: 0.35.3(@types/node@22.19.17) transitivePeerDependencies: - '@azure/app-configuration' @@ -5877,7 +6047,6 @@ snapshots: - ioredis - jiti - less - - rollup - sass - sass-embedded - stylus @@ -5887,16 +6056,15 @@ snapshots: - uploadthing - yaml - astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3): + astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3): dependencies: '@astrojs/compiler-rs': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) - '@astrojs/internal-helpers': 0.10.2 - '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/internal-helpers': 0.10.4 + '@astrojs/markdown-satteri': 0.3.7 '@astrojs/telemetry': 3.3.3 '@capsizecss/unpack': 4.0.0 '@clack/prompts': 1.4.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.3.0 am-i-vibing: 0.4.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -5909,6 +6077,7 @@ snapshots: dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.28.0 + find-process: 2.1.1 flattie: 1.1.1 fontace: 0.4.1 get-tsconfig: 5.0.0-beta.4 @@ -5935,7 +6104,7 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.17 ultrahtml: 1.6.0 - unifont: 0.7.4 + unifont: 0.7.5 unstorage: 1.17.5 vite: 8.2.0(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.8.3) vitefu: 1.1.3(vite@8.2.0(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.8.3)) @@ -5943,7 +6112,7 @@ snapshots: yargs-parser: 22.0.0 zod: 4.4.3 optionalDependencies: - '@astrojs/markdown-remark': 7.2.2 + '@astrojs/markdown-remark': 7.2.4 sharp: 0.35.3(@types/node@24.12.4) transitivePeerDependencies: - '@azure/app-configuration' @@ -5970,7 +6139,6 @@ snapshots: - ioredis - jiti - less - - rollup - sass - sass-embedded - stylus @@ -6042,6 +6210,11 @@ snapshots: chai@6.2.2: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -6072,10 +6245,18 @@ snapshots: collapse-white-space@2.1.0: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + comma-separated-tokens@2.0.3: {} commander@11.1.0: {} + commander@14.0.3: {} + common-ancestor-path@2.0.0: {} convert-source-map@2.0.0: {} @@ -6391,8 +6572,6 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -6469,6 +6648,12 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-process@2.1.1: + dependencies: + chalk: 4.1.2 + commander: 14.0.3 + loglevel: 1.9.2 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -6585,12 +6770,12 @@ snapshots: hast-util-embedded@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-is-element: 3.0.0 hast-util-format@1.1.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-minify-whitespace: 1.0.1 hast-util-phrasing: 3.0.1 @@ -6600,7 +6785,7 @@ snapshots: hast-util-from-html@2.0.3: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 @@ -6609,7 +6794,7 @@ snapshots: hast-util-from-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 @@ -6620,19 +6805,19 @@ snapshots: hast-util-has-property@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-is-body-ok-link@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-is-element@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-minify-whitespace@1.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-is-element: 3.0.0 hast-util-whitespace: 3.0.0 @@ -6640,11 +6825,11 @@ snapshots: hast-util-parse-selector@4.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-phrasing@3.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-has-property: 3.0.0 hast-util-is-body-ok-link: 3.0.0 @@ -6652,7 +6837,7 @@ snapshots: hast-util-raw@9.1.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 @@ -6668,7 +6853,7 @@ snapshots: hast-util-select@6.0.4: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 bcp-47-match: 2.0.3 comma-separated-tokens: 2.0.3 @@ -6688,7 +6873,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-attach-comments: 3.0.0 @@ -6707,7 +6892,7 @@ snapshots: hast-util-to-html@9.0.5: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 @@ -6722,7 +6907,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.8 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 @@ -6741,7 +6926,7 @@ snapshots: hast-util-to-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 property-information: 7.0.0 @@ -6751,22 +6936,22 @@ snapshots: hast-util-to-string@3.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-text@4.0.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hastscript@8.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.2.0 @@ -6774,7 +6959,7 @@ snapshots: hastscript@9.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 7.0.0 @@ -7057,6 +7242,8 @@ snapshots: lodash@4.17.21: {} + loglevel@1.9.2: {} + longest-streak@3.1.0: {} lowercase-keys@3.0.0: {} @@ -7193,7 +7380,7 @@ snapshots: mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 @@ -7204,7 +7391,7 @@ snapshots: mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 @@ -7231,7 +7418,7 @@ snapshots: mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 mdast-util-from-markdown: 2.0.0 @@ -7246,7 +7433,7 @@ snapshots: mdast-util-to-hast@13.2.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 @@ -7870,38 +8057,38 @@ snapshots: rehype-format@5.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-format: 1.1.0 rehype-parse@9.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-from-html: 2.0.3 unified: 11.0.5 rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.8 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color rehype-stringify@10.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 unified: 11.0.5 rehype@13.0.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 rehype-parse: 9.0.0 rehype-stringify: 10.0.1 unified: 11.0.5 @@ -7944,7 +8131,7 @@ snapshots: remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 @@ -8039,10 +8226,27 @@ snapshots: dependencies: suf-log: 2.5.3 + satteri@0.10.3: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + optionalDependencies: + '@bruits/satteri-darwin-arm64': 0.10.3 + '@bruits/satteri-darwin-x64': 0.10.3 + '@bruits/satteri-linux-arm64-gnu': 0.10.3 + '@bruits/satteri-linux-arm64-musl': 0.10.3 + '@bruits/satteri-linux-x64-gnu': 0.10.3 + '@bruits/satteri-linux-x64-musl': 0.10.3 + '@bruits/satteri-wasm32-wasi': 0.10.3 + '@bruits/satteri-win32-arm64-msvc': 0.10.3 + '@bruits/satteri-win32-x64-msvc': 0.10.3 + satteri@0.9.3: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 optionalDependencies: @@ -8164,7 +8368,7 @@ snapshots: '@shikijs/themes': 4.0.2 '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 siginfo@2.0.0: {} @@ -8222,12 +8426,12 @@ snapshots: stackback@0.0.2: {} - starlight-links-validator@0.25.2(@astrojs/starlight@packages+starlight)(astro@7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)): + starlight-links-validator@0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3)): dependencies: '@astrojs/markdown-satteri': 0.3.5 '@astrojs/starlight': link:packages/starlight '@types/picomatch': 4.0.2 - astro: 7.1.6(@astrojs/markdown-remark@7.2.2)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) + astro: 7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.8.3) github-slugger: 2.0.0 hast-util-from-html: 2.0.3 is-absolute-url: 5.0.0 @@ -8392,6 +8596,8 @@ snapshots: undici-types@7.16.0: {} + undici@8.10.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -8402,11 +8608,11 @@ snapshots: trough: 2.1.0 vfile: 6.0.3 - unifont@0.7.4: + unifont@0.7.5: dependencies: css-tree: 3.2.1 - ofetch: 1.5.1 ohash: 2.0.11 + undici: 8.10.0 unist-util-find-after@5.0.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 37f574c545d..97fcdbd2f3a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,3 +25,11 @@ peerDependencyRules: # Prevent installing packages published in the last 3 days minimumReleaseAge: 4320 +# TODO(HiDeoo) Remove +minimumReleaseAgeExclude: + - '@astrojs/internal-helpers@0.10.4' + - '@astrojs/markdown-remark@7.2.4' + - '@astrojs/markdown-satteri@0.3.7' + - '@bruits/*' + - 'astro@7.2.4' + - 'satteri@0.10.3' From 0197ddfd5cfcb07ca2a6961755dff5e87716dcec Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:37:01 +0200 Subject: [PATCH 02/10] refactor: use satteri plugin bundles --- .../code-rtl-support.test.ts | 10 +- packages/starlight/integrations/satteri.ts | 99 ++++++++----------- 2 files changed, 44 insertions(+), 65 deletions(-) diff --git a/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts b/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts index 36988474cc8..aa5e3e0faff 100644 --- a/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts +++ b/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts @@ -34,16 +34,10 @@ describeEachProcessor('code RTL support', (ctx, name) => { expect(res.code).not.includes('dir="auto"'); }); - test('handles `dir="ltr"` on raw `
` HTML per processor', async () => {
+	test('does nto apply `dir="ltr"` on raw `
` HTML', async () => {
 		const res = await ctx().render('
manual
', { processor: plain }); - // Since Astro's Sätteri implementation for Shiki returns raw nodes, it, by accident, applies - // `dir="ltr"` to raw `
` blocks even if they're not coming from a plugin generating HAST.
-		if (name === 'satteri') {
-			expect(res.code).includes('
manual
'); - } else { - expect(res.code).includes('
manual
'); - } + expect(res.code).includes('
manual
'); }); test('does not override an existing `dir` on inline code', async () => { diff --git a/packages/starlight/integrations/satteri.ts b/packages/starlight/integrations/satteri.ts index 016cdfe4a8e..07a2d702b2e 100644 --- a/packages/starlight/integrations/satteri.ts +++ b/packages/starlight/integrations/satteri.ts @@ -10,6 +10,7 @@ import type { MdastPluginDefinition, MdastPluginEntry, HastPluginEntry, + SourceFormat, } from 'satteri'; import { headingLinkIconChildren } from './markdown-icon'; import { getAsideIcon, isAsideVariant } from './aside-utils'; @@ -24,13 +25,35 @@ export function starlightSatteriPlugins(options: MarkdownProcessorPluginOptions) hastPlugins: HastPluginEntry[]; } { const allowedPaths = getMarkdownProcessorPaths(options); + return { - mdastPlugins: [satteriAsidesPlugin(options, allowedPaths)], + mdastPlugins: [ + ({ fileURL, sourceFormat }) => { + if (!shouldTransformPath(fileURL, allowedPaths)) return; + + // `shouldTransformPath` above already returned for a missing `fileURL`. + const lang = options.absolutePathToLang(fileURLToPath(fileURL!)); + const t = options.useTranslations(lang); + + return satteriAsidesPlugin(t, sourceFormat); + }, + ], hastPlugins: [ - satteriRtlCodeSupportPlugin(allowedPaths), - ...(options.starlightConfig.markdown.headingLinks - ? [() => satteriHeadingIdsPlugin(), satteriAutolinkHeadingsPlugin(options, allowedPaths)] - : []), + ({ fileURL }) => { + if (!shouldTransformPath(fileURL, allowedPaths)) return; + + const plugins = [satteriRtlCodeSupportPlugin()]; + + if (options.starlightConfig.markdown.headingLinks) { + // `shouldTransformPath` above already returned for a missing `fileURL`. + const lang = options.absolutePathToLang(fileURLToPath(fileURL!)); + const t = options.useTranslations(lang); + + plugins.push(satteriHeadingIdsPlugin(), satteriAutolinkHeadingsPlugin(t)); + } + + return plugins; + }, ], }; } @@ -73,20 +96,13 @@ function paragraphElement( } /** Convert `:::variant` directive blocks into styled asides. */ -function satteriAsidesPlugin( - options: MarkdownProcessorPluginOptions, - allowedPaths: string[] -): MdastPluginDefinition { +function satteriAsidesPlugin(t: I18nT, sourceFormat: SourceFormat): MdastPluginDefinition { return { name: 'starlight-asides', containerDirective(node, ctx) { - if (!shouldTransformPath(ctx.fileURL, allowedPaths)) return; if (!isAsideVariant(node.name)) return; const variant = node.name; - // `shouldTransformPath` above already returned for a missing `fileURL`. - const filename = fileURLToPath(ctx.fileURL!); - const t = options.useTranslations(options.absolutePathToLang(filename)); let title = t(`aside.${variant}`); let titleNode: unknown[] = [{ type: 'text', value: title }]; @@ -105,14 +121,14 @@ function satteriAsidesPlugin( const icon = getAsideIcon(variant, node.attributes?.['icon']); const iconSvg = `${icon}`; // Markdown and MDX require different AST shapes for raw HTML content. - // TODO: replace endsWith check with an official Sätteri API once available. - const iconNode = ctx.fileURL?.pathname.endsWith('.mdx') - ? { - type: 'mdxJsxTextElement', - name: 'Fragment', - attributes: [{ type: 'mdxJsxAttribute', name: 'set:html', value: iconSvg }], - } - : { type: 'html', value: iconSvg }; + const iconNode = + sourceFormat === 'mdx' + ? { + type: 'mdxJsxTextElement', + name: 'Fragment', + attributes: [{ type: 'mdxJsxAttribute', name: 'set:html', value: iconSvg }], + } + : { type: 'html', value: iconSvg }; return paragraphElement( 'aside', @@ -137,14 +153,13 @@ function serializeDirective(node: Parameters[0]): string { return md.at(-1) === '\n' ? md.slice(0, -1) : md; } -function satteriRtlCodeSupportPlugin(allowedPaths: string[]): HastPluginDefinition { +function satteriRtlCodeSupportPlugin(): HastPluginDefinition { return { name: 'starlight-rtl-code-support', element: [ { filter: ['pre'], visit(node, ctx) { - if (!shouldTransformPath(ctx.fileURL, allowedPaths)) return; if (node.properties && 'dir' in node.properties) return; ctx.setProperty(node, 'dir', 'ltr'); }, @@ -152,24 +167,12 @@ function satteriRtlCodeSupportPlugin(allowedPaths: string[]): HastPluginDefiniti { filter: ['code'], visit(node, ctx) { - if ( - shouldTransformPath(ctx.fileURL, allowedPaths) && - !(node.properties && 'dir' in node.properties) && - !hasPreParent(node, ctx) - ) { + if (!(node.properties && 'dir' in node.properties) && !hasPreParent(node, ctx)) { ctx.setProperty(node, 'dir', 'auto'); } }, }, ], - // Shiki runs ahead of us and replaces the highlighted `
` element with a raw HTML
-		// node, so the `pre` element visitor above never sees it. Patch the raw markup instead.
-		raw(node, ctx) {
-			if (!shouldTransformPath(ctx.fileURL, allowedPaths)) return undefined;
-			const value = ltrRawPre(node.value);
-			if (value === null) return undefined;
-			return { type: 'raw', value };
-		},
 	};
 }
 
@@ -185,36 +188,16 @@ function hasPreParent(child: Readonly | undefined, ctx: HastVisitorCont
 	return false;
 }
 
-const rawPreOpenTag = /])[^>]*>/;
-
-/**
- * Add `dir="ltr"` to the opening tag of a raw `
` HTML string, unless it already declares a
- * `dir`. Returns `null` when the value isn’t a `
`, leaving unrelated raw HTML untouched.
- */
-function ltrRawPre(value: string): string | null {
-	const openTag = value.match(rawPreOpenTag)?.[0];
-	if (!openTag || /\sdir\s*=/.test(openTag)) return null;
-	return value.replace(openTag, () => `
;

From 0e5af239b034a73b1ffc7380b26b13e16d358464 Mon Sep 17 00:00:00 2001
From: HiDeoo <494699+HiDeoo@users.noreply.github.com>
Date: Thu, 20 Aug 2026 17:50:25 +0200
Subject: [PATCH 03/10] feat: use satteri to process component html

---
 .../markdown-processor/rehype-tabs.test.ts    |  10 +-
 .../starlight/integrations/markdown-icon.ts   |   9 +-
 packages/starlight/package.json               |   5 +-
 .../user-components/rehype-file-tree.ts       | 219 ++++++++----------
 .../starlight/user-components/rehype-steps.ts | 129 +++++------
 .../starlight/user-components/rehype-tabs.ts  | 110 ++++-----
 pnpm-lock.yaml                                |  90 +++----
 7 files changed, 249 insertions(+), 323 deletions(-)

diff --git a/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts b/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts
index 5280febd311..f1300a627bb 100644
--- a/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts
+++ b/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts
@@ -1,11 +1,9 @@
 import { expect, test } from 'vitest';
-import { fromHtml } from 'hast-util-from-html';
+import { toHtml } from 'hast-util-to-html';
 import { selectAll } from 'hast-util-select';
-import { rehype } from 'rehype';
+import { htmlToHast } from 'satteri';
 import { processPanels, TabItemTagname } from '../../user-components/rehype-tabs';
 
-const processor = rehype().data('settings', { fragment: true });
-
 const TabItem = ({ label, slot, icon }: { label: string; slot: string; icon?: string }) => {
 	const iconAttr = icon ? ` data-icon="${icon}"` : '';
 	return `<${TabItemTagname} data-label="${label}"${iconAttr}>${slot}`;
@@ -13,9 +11,9 @@ const TabItem = ({ label, slot, icon }: { label: string; slot: string; icon?: st
 
 /** Get an array of HTML strings, one for each `
` created by rehype-tabs for each tab item. */ const extractTabPanels = (html: string) => { - const tree = fromHtml(html, { fragment: true }); + const tree = htmlToHast(html, { fragment: true }); const tabPanels = selectAll('div[role="tabpanel"]', tree); - return tabPanels.map((tabPanel) => processor.stringify({ type: 'root', children: [tabPanel] })); + return tabPanels.map((tabPanel) => toHtml(tabPanel)); }; test('empty component returns no html or panels', () => { diff --git a/packages/starlight/integrations/markdown-icon.ts b/packages/starlight/integrations/markdown-icon.ts index 9bcf8eb075c..11bfd6c12c8 100644 --- a/packages/starlight/integrations/markdown-icon.ts +++ b/packages/starlight/integrations/markdown-icon.ts @@ -1,5 +1,5 @@ -import type { Element, ElementContent } from 'hast'; -import { fromHtml } from 'hast-util-from-html'; +import type { ElementContent, Root } from 'hast'; +import { htmlToHast } from 'satteri'; import { Icons } from '../components-internals/Icons'; export const headingLinkIconSvgChildrenHtml = Icons['link-alt']; @@ -7,7 +7,6 @@ export const headingLinkIconChildren = parseIconChildren(headingLinkIconSvgChild /** Parse a Starlight icon SVG fragment as children of an `` element. */ export function parseIconChildren(icon: string): ElementContent[] { - const svg = fromHtml(`${icon}`, { fragment: true, space: 'svg' }) - .children[0] as Element; - return svg.children; + const tree = htmlToHast(icon, { fragment: true, space: 'svg' }) as Root; + return tree.children as ElementContent[]; } diff --git a/packages/starlight/package.json b/packages/starlight/package.json index b1daa32d2d6..58762ec7362 100644 --- a/packages/starlight/package.json +++ b/packages/starlight/package.json @@ -75,8 +75,9 @@ "@types/mdast": "^4.0.4", "astro-expressive-code": "^0.44.0", "bcp-47": "^2.1.0", - "hast-util-from-html": "^2.0.3", + "hast-util-format": "^1.1.0", "hast-util-select": "^6.0.4", + "hast-util-to-html": "^9.0.5", "hast-util-to-string": "^3.0.1", "hastscript": "^9.0.1", "i18next": "^26.0.7", @@ -87,8 +88,6 @@ "mdast-util-to-markdown": "^2.1.2", "mdast-util-to-string": "^4.0.0", "pagefind": "^1.5.2", - "rehype": "^13.0.2", - "rehype-format": "^5.0.1", "remark-directive": "^4.0.0", "satteri": "^0.10.3", "ultrahtml": "^1.6.0", diff --git a/packages/starlight/user-components/rehype-file-tree.ts b/packages/starlight/user-components/rehype-file-tree.ts index cc8ba431df6..065aed8924f 100644 --- a/packages/starlight/user-components/rehype-file-tree.ts +++ b/packages/starlight/user-components/rehype-file-tree.ts @@ -1,20 +1,14 @@ import { AstroError } from 'astro/errors'; -import type { Element, ElementContent, Text } from 'hast'; +import type { Element, Root, RootContent, Text } from 'hast'; import { type Child, h, s } from 'hastscript'; import { select } from 'hast-util-select'; -import { fromHtml } from 'hast-util-from-html'; +import { toHtml } from 'hast-util-to-html'; import { toString } from 'hast-util-to-string'; -import { rehype } from 'rehype'; +import { htmlToHast } from 'satteri'; import { CONTINUE, SKIP, visit } from 'unist-util-visit'; import { Icons, type StarlightIcon } from '../components-internals/Icons'; import { definitions } from './file-tree-icons'; -declare module 'vfile' { - interface DataMap { - directoryLabel: string; - } -} - const folderIcon = makeSVGIcon(Icons['seti:folder']); const defaultFileIcon = makeSVGIcon(Icons['seti:default']); @@ -26,115 +20,106 @@ const defaultFileIcon = makeSVGIcon(Icons['seti:default']); * @returns The processed HTML for the file tree. */ export function processFileTree(html: string, directoryLabel: string) { - const file = fileTreeProcessor.processSync({ data: { directoryLabel }, value: html }); + const tree = htmlToHast(html, { fragment: true }) as Root; - return file.toString(); -} + validateFileTree(tree); -/** Rehype processor to extract file tree data and turn each entry into its associated markup. */ -const fileTreeProcessor = rehype() - .data('settings', { fragment: true }) - .use(function fileTree() { - return (tree: Element, file) => { - const { directoryLabel } = file.data; - - validateFileTree(tree); - - visit(tree, 'element', (node) => { - // Strip nodes that only contain newlines. - node.children = node.children.filter( - (child) => child.type === 'comment' || child.type !== 'text' || !/^\n+$/.test(child.value) - ); - - // Skip over non-list items. - if (node.tagName !== 'li') return CONTINUE; - - const [firstChild, ...otherChildren] = node.children; - - // Keep track of comments associated with the current file or directory. - const comment: Child[] = []; - - // Extract text comment that follows the file name, e.g. `README.md This is a comment` - if (firstChild?.type === 'text') { - const [filename, ...fragments] = firstChild.value.split(' '); - firstChild.value = filename || ''; - const textComment = fragments.join(' ').trim(); - if (textComment.length > 0) { - comment.push(fragments.join(' ')); - } - } - - // Comments may not always be entirely part of the first child text node, - // e.g. `README.md This is an __important__ comment` where the `__important__` and `comment` - // nodes would also be children of the list item node. - const subTreeIndex = otherChildren.findIndex( - (child) => child.type === 'element' && child.tagName === 'ul' - ); - const commentNodes = - subTreeIndex > -1 ? otherChildren.slice(0, subTreeIndex) : [...otherChildren]; - otherChildren.splice(0, subTreeIndex > -1 ? subTreeIndex : otherChildren.length); - comment.push(...commentNodes); - - const firstChildTextContent = firstChild ? toString(firstChild) : ''; - - // Decide a node is a directory if it ends in a `/` or contains another list. - const isDirectory = - /\/\s*$/.test(firstChildTextContent) || - otherChildren.some((child) => child.type === 'element' && child.tagName === 'ul'); - // A placeholder is a node that only contains 3 dots or an ellipsis. - const isPlaceholder = /^\s*(\.{3}|…)\s*$/.test(firstChildTextContent); - // A node is highlighted if its first child is bold text, e.g. `**README.md**`. - const isHighlighted = firstChild?.type === 'element' && firstChild.tagName === 'strong'; - - // Create an icon for the file or directory (placeholder do not have icons). - const icon = h('span', isDirectory ? folderIcon : getFileIcon(firstChildTextContent)); - if (isDirectory) { - // Add a screen reader only label for directories before the icon so that it is announced - // as such before reading the directory name. - icon.children.unshift(h('span', { class: 'sr-only' }, directoryLabel)); - } - - // Add classes and data attributes to the list item node. - node.properties.class = isDirectory ? 'directory' : 'file'; - if (isPlaceholder) node.properties.class += ' empty'; - - // Create the tree entry node that contains the icon, file name and comment which will end up - // as the list item’s children. - const treeEntryChildren: Child[] = [ - h('span', { class: isHighlighted ? 'highlight' : '' }, [ - isPlaceholder ? null : icon, - firstChild, - ]), - ]; - - if (comment.length > 0) { - treeEntryChildren.push(makeText(' '), h('span', { class: 'comment' }, ...comment)); - } - - const treeEntry = h('span', { class: 'tree-entry' }, ...treeEntryChildren); - - if (isDirectory) { - const hasContents = otherChildren.length > 0; - - node.children = [ - h('details', { open: hasContents }, [ - h('summary', treeEntry), - ...(hasContents ? otherChildren : [h('ul', h('li', '…'))]), - ]), - ]; - - // Continue down the tree. - return CONTINUE; - } - - node.children = [treeEntry, ...otherChildren]; - - // Files can’t contain further files or directories, so skip iterating children. - return SKIP; - }); - }; + visit(tree, 'element', (node) => { + // Strip nodes that only contain newlines. + node.children = node.children.filter( + (child) => child.type === 'comment' || child.type !== 'text' || !/^\n+$/.test(child.value) + ); + + // Skip over non-list items. + if (node.tagName !== 'li') return CONTINUE; + + const [firstChild, ...otherChildren] = node.children; + + // Keep track of comments associated with the current file or directory. + const comment: Child[] = []; + + // Extract text comment that follows the file name, e.g. `README.md This is a comment` + if (firstChild?.type === 'text') { + const [filename, ...fragments] = firstChild.value.split(' '); + firstChild.value = filename || ''; + const textComment = fragments.join(' ').trim(); + if (textComment.length > 0) { + comment.push(fragments.join(' ')); + } + } + + // Comments may not always be entirely part of the first child text node, + // e.g. `README.md This is an __important__ comment` where the `__important__` and `comment` + // nodes would also be children of the list item node. + const subTreeIndex = otherChildren.findIndex( + (child) => child.type === 'element' && child.tagName === 'ul' + ); + const commentNodes = + subTreeIndex > -1 ? otherChildren.slice(0, subTreeIndex) : [...otherChildren]; + otherChildren.splice(0, subTreeIndex > -1 ? subTreeIndex : otherChildren.length); + comment.push(...commentNodes); + + const firstChildTextContent = firstChild ? toString(firstChild) : ''; + + // Decide a node is a directory if it ends in a `/` or contains another list. + const isDirectory = + /\/\s*$/.test(firstChildTextContent) || + otherChildren.some((child) => child.type === 'element' && child.tagName === 'ul'); + // A placeholder is a node that only contains 3 dots or an ellipsis. + const isPlaceholder = /^\s*(\.{3}|…)\s*$/.test(firstChildTextContent); + // A node is highlighted if its first child is bold text, e.g. `**README.md**`. + const isHighlighted = firstChild?.type === 'element' && firstChild.tagName === 'strong'; + + // Create an icon for the file or directory (placeholder do not have icons). + const icon = h('span', isDirectory ? folderIcon : getFileIcon(firstChildTextContent)); + if (isDirectory) { + // Add a screen reader only label for directories before the icon so that it is announced + // as such before reading the directory name. + icon.children.unshift(h('span', { class: 'sr-only' }, directoryLabel)); + } + + // Add classes and data attributes to the list item node. + node.properties.class = isDirectory ? 'directory' : 'file'; + if (isPlaceholder) node.properties.class += ' empty'; + + // Create the tree entry node that contains the icon, file name and comment which will end up + // as the list item’s children. + const treeEntryChildren: Child[] = [ + h('span', { class: isHighlighted ? 'highlight' : '' }, [ + isPlaceholder ? null : icon, + firstChild, + ]), + ]; + + if (comment.length > 0) { + treeEntryChildren.push(makeText(' '), h('span', { class: 'comment' }, ...comment)); + } + + const treeEntry = h('span', { class: 'tree-entry' }, ...treeEntryChildren); + + if (isDirectory) { + const hasContents = otherChildren.length > 0; + + node.children = [ + h('details', { open: hasContents }, [ + h('summary', treeEntry), + ...(hasContents ? otherChildren : [h('ul', h('li', '…'))]), + ]), + ]; + + // Continue down the tree. + return CONTINUE; + } + + node.children = [treeEntry, ...otherChildren]; + + // Files can’t contain further files or directories, so skip iterating children. + return SKIP; }); + return toHtml(tree); +} + /** Make a text node with the pass string as its contents. */ function makeText(value = ''): Text { return { type: 'text', value }; @@ -151,7 +136,7 @@ function makeSVGIcon(svgString: string) { 'aria-hidden': 'true', viewBox: '0 0 24 24', }, - fromHtml(svgString, { fragment: true }) + (htmlToHast(svgString, { fragment: true, space: 'svg' }) as Root).children ); } @@ -199,7 +184,7 @@ function getFileIconTypeFromExtension(fileName: string) { } /** Validate that the user provided HTML for a file tree is valid. */ -function validateFileTree(tree: Element) { +function validateFileTree(tree: Root) { const rootElements = tree.children.filter(isElementNode); const [rootElement] = rootElements; @@ -232,7 +217,7 @@ function validateFileTree(tree: Element) { } } -function isElementNode(node: ElementContent): node is Element { +function isElementNode(node: RootContent): node is Element { return node.type === 'element'; } diff --git a/packages/starlight/user-components/rehype-steps.ts b/packages/starlight/user-components/rehype-steps.ts index 0c6030704b7..e24366053d3 100644 --- a/packages/starlight/user-components/rehype-steps.ts +++ b/packages/starlight/user-components/rehype-steps.ts @@ -1,84 +1,79 @@ import { AstroError } from 'astro/errors'; import type { Element, Root } from 'hast'; -import { rehype } from 'rehype'; -import rehypeFormat from 'rehype-format'; -import type { VFile } from 'vfile'; +import { format } from 'hast-util-format'; +import { toHtml } from 'hast-util-to-html'; +import { htmlToHast } from 'satteri'; -const prettyPrintProcessor = rehype().data('settings', { fragment: true }).use(rehypeFormat); -const prettyPrintHtml = (html: string) => - prettyPrintProcessor.processSync({ value: html }).toString(); - -const stepsProcessor = rehype() - .data('settings', { fragment: true }) - .use(function steps() { - return (tree: Root, vfile: VFile) => { - const rootElements = tree.children.filter( - (item): item is Element => - item.type === 'element' && - // Since Astro 5.16.9, `
    `) but found no child elements.' - ); - } else if (rootElements.length > 1) { - throw new StepsError( - 'The `` component expects its content to be a single ordered list (`
      `) but found multiple child elements: ' + - rootElements.map((element: Element) => `\`<${element.tagName}>\``).join(', ') + - '.', - vfile.value.toString() - ); - } else if (rootElement.tagName !== 'ol') { - throw new StepsError( - 'The `` component expects its content to be a single ordered list (`
        `) but found the following element: ' + - `\`<${rootElement.tagName}>\`.`, - vfile.value.toString() - ); - } - - // Ensure `role="list"` is set on the ordered list. - // We use `list-style: none` in the styles for this component and need to ensure the list - // retains its semantics in Safari, which will remove them otherwise. - rootElement.properties.role = 'list'; - // Add the required CSS class name, preserving existing classes if present. - if (!Array.isArray(rootElement.properties.className)) { - rootElement.properties.className = ['sl-steps']; - } else { - rootElement.properties.className.push('sl-steps'); - } - - // Add the `start` attribute as a CSS custom property so we can use it as the starting index - // of the steps custom counter. - if (typeof rootElement.properties.start === 'number') { - const styles = [`--sl-steps-start: ${rootElement.properties.start - 1}`]; - if (rootElement.properties.style) styles.push(String(rootElement.properties.style)); - rootElement.properties.style = styles.join(';'); - } - }; - }); +const prettyPrintHtml = (tree: Root) => { + format(tree); + return toHtml(tree); +}; /** * Process steps children: validates the HTML and adds `role="list"` to the ordered list. * @param html Inner HTML passed to the `` component. */ export const processSteps = (html: string | undefined) => { - const file = stepsProcessor.processSync({ value: html }); - return { html: file.toString() }; + const tree = htmlToHast(html ?? '', { fragment: true }) as Root; + const rootElements = tree.children.filter( + (item): item is Element => + item.type === 'element' && + // Since Astro 5.16.9, `
        1. List item
        ' diff --git a/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts b/packages/starlight/__tests__/markdown-processor/tabs-processor.test.ts similarity index 98% rename from packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts rename to packages/starlight/__tests__/markdown-processor/tabs-processor.test.ts index f1300a627bb..856268969f6 100644 --- a/packages/starlight/__tests__/markdown-processor/rehype-tabs.test.ts +++ b/packages/starlight/__tests__/markdown-processor/tabs-processor.test.ts @@ -2,14 +2,14 @@ import { expect, test } from 'vitest'; import { toHtml } from 'hast-util-to-html'; import { selectAll } from 'hast-util-select'; import { htmlToHast } from 'satteri'; -import { processPanels, TabItemTagname } from '../../user-components/rehype-tabs'; +import { processPanels, TabItemTagname } from '../../user-components/tabs-processor'; const TabItem = ({ label, slot, icon }: { label: string; slot: string; icon?: string }) => { const iconAttr = icon ? ` data-icon="${icon}"` : ''; return `<${TabItemTagname} data-label="${label}"${iconAttr}>${slot}`; }; -/** Get an array of HTML strings, one for each `
        ` created by rehype-tabs for each tab item. */ +/** Get an array of HTML strings, one for each `
        ` created by tabs-processor for each tab item. */ const extractTabPanels = (html: string) => { const tree = htmlToHast(html, { fragment: true }); const tabPanels = selectAll('div[role="tabpanel"]', tree); diff --git a/packages/starlight/user-components/FileTree.astro b/packages/starlight/user-components/FileTree.astro index 2bd532d66da..5d1aee416b6 100644 --- a/packages/starlight/user-components/FileTree.astro +++ b/packages/starlight/user-components/FileTree.astro @@ -1,5 +1,5 @@ --- -import { processFileTree } from './rehype-file-tree'; +import { processFileTree } from './file-tree-processor'; const fileTreeHtml = await Astro.slots.render('default'); const html = processFileTree(fileTreeHtml, Astro.locals.t('fileTree.directory')); diff --git a/packages/starlight/user-components/Steps.astro b/packages/starlight/user-components/Steps.astro index bd193e73d5f..43fbc56856a 100644 --- a/packages/starlight/user-components/Steps.astro +++ b/packages/starlight/user-components/Steps.astro @@ -1,5 +1,5 @@ --- -import { processSteps } from './rehype-steps'; +import { processSteps } from './steps-processor'; const content = await Astro.slots.render('default'); const { html } = processSteps(content); diff --git a/packages/starlight/user-components/TabItem.astro b/packages/starlight/user-components/TabItem.astro index 0fa53d37e1b..c1723744520 100644 --- a/packages/starlight/user-components/TabItem.astro +++ b/packages/starlight/user-components/TabItem.astro @@ -1,5 +1,5 @@ --- -import { TabItemTagname } from './rehype-tabs'; +import { TabItemTagname } from './tabs-processor'; import type { StarlightIcon } from '../components-internals/Icons'; interface Props { diff --git a/packages/starlight/user-components/Tabs.astro b/packages/starlight/user-components/Tabs.astro index 66f1b2e9e8d..9a8103ffa63 100644 --- a/packages/starlight/user-components/Tabs.astro +++ b/packages/starlight/user-components/Tabs.astro @@ -1,6 +1,6 @@ --- import Icon from './Icon.astro'; -import { processPanels } from './rehype-tabs'; +import { processPanels } from './tabs-processor'; interface Props { syncKey?: string; diff --git a/packages/starlight/user-components/file-tree-icons.ts b/packages/starlight/user-components/file-tree-icons.ts index 2afc8b6cb7d..d643b9c76d3 100644 --- a/packages/starlight/user-components/file-tree-icons.ts +++ b/packages/starlight/user-components/file-tree-icons.ts @@ -3,7 +3,7 @@ * Do not edit this file directly as it will be overwritten. */ -import type { Definitions } from './rehype-file-tree.ts'; +import type { Definitions } from './file-tree-processor.ts'; /** * Based on https://github.com/elviswolcott/seti-icons which diff --git a/packages/starlight/user-components/rehype-file-tree.ts b/packages/starlight/user-components/file-tree-processor.ts similarity index 100% rename from packages/starlight/user-components/rehype-file-tree.ts rename to packages/starlight/user-components/file-tree-processor.ts diff --git a/packages/starlight/user-components/rehype-steps.ts b/packages/starlight/user-components/steps-processor.ts similarity index 100% rename from packages/starlight/user-components/rehype-steps.ts rename to packages/starlight/user-components/steps-processor.ts diff --git a/packages/starlight/user-components/rehype-tabs.ts b/packages/starlight/user-components/tabs-processor.ts similarity index 100% rename from packages/starlight/user-components/rehype-tabs.ts rename to packages/starlight/user-components/tabs-processor.ts From 4e414a33f60a5e2773a61f35e9f9752599551071 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Thu, 20 Aug 2026 18:11:24 +0200 Subject: [PATCH 05/10] chore: add changeset placeholder --- .changeset/humble-friends-clean.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .changeset/humble-friends-clean.md diff --git a/.changeset/humble-friends-clean.md b/.changeset/humble-friends-clean.md new file mode 100644 index 00000000000..a84b08f83fe --- /dev/null +++ b/.changeset/humble-friends-clean.md @@ -0,0 +1,13 @@ +--- +'@astrojs/starlight': minor +--- + +TODO(HiDeoo) + +⚠️ **BREAKING CHANGE:** The minimum supported version of Astro is now TODO(HiDeoo). + +Please update Starlight and Astro together: + +```sh +npx @astrojs/upgrade +``` From 6dd6b7af4a87c7d3eb6492bf3ae0b896bf498153 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:23:30 +0200 Subject: [PATCH 06/10] chore: update deps --- docs/package.json | 2 +- examples/basics/package.json | 2 +- examples/markdoc/package.json | 2 +- examples/tailwind/package.json | 2 +- package.json | 2 +- .../__e2e__/fixtures/basics/package.json | 2 +- .../fixtures/custom src-dir/package.json | 2 +- .../__e2e__/fixtures/git/package.json | 2 +- .../package.json | 2 +- .../fixtures/no-mdx-optimization/package.json | 2 +- .../__e2e__/fixtures/ssr/package.json | 2 +- packages/starlight/package.json | 8 +- pnpm-lock.yaml | 287 ++++++++---------- pnpm-workspace.yaml | 9 +- 14 files changed, 149 insertions(+), 177 deletions(-) diff --git a/docs/package.json b/docs/package.json index 3b7827f1597..3d548cacd20 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,7 +21,7 @@ "@astrojs/starlight": "workspace:*", "@lunariajs/core": "^0.1.1", "@types/culori": "^4.0.1", - "astro": "^7.2.4", + "astro": "^7.2.5", "culori": "^4.0.2", "sharp": "^0.35.3" }, diff --git a/examples/basics/package.json b/examples/basics/package.json index 77990d2615a..fb13cb2bcf1 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@astrojs/starlight": "^0.41.8", - "astro": "^7.2.4", + "astro": "^7.2.5", "sharp": "^0.35.3" } } diff --git a/examples/markdoc/package.json b/examples/markdoc/package.json index 06615146f95..2c3215f9bfd 100644 --- a/examples/markdoc/package.json +++ b/examples/markdoc/package.json @@ -14,7 +14,7 @@ "@astrojs/markdoc": "^2.0.6", "@astrojs/starlight": "^0.41.8", "@astrojs/starlight-markdoc": "^0.7.0", - "astro": "^7.2.4", + "astro": "^7.2.5", "sharp": "^0.35.3" } } diff --git a/examples/tailwind/package.json b/examples/tailwind/package.json index a22e2e6128f..6a0b68877f5 100644 --- a/examples/tailwind/package.json +++ b/examples/tailwind/package.json @@ -14,7 +14,7 @@ "@astrojs/starlight": "^0.41.8", "@astrojs/starlight-tailwind": "^5.0.0", "@tailwindcss/vite": "^4.2.4", - "astro": "^7.2.4", + "astro": "^7.2.5", "sharp": "^0.35.3", "tailwindcss": "^4.2.4" } diff --git a/package.json b/package.json index 5f9e0767ce0..5dcd30b05d8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@changesets/cli": "^3.0.1", "@eslint/js": "^10.0.1", "@size-limit/file": "^12.1.0", - "astro": "^7.2.4", + "astro": "^7.2.5", "eslint": "^10.3.0", "eslint-config-prettier": "^10.1.8", "globals": "^17.6.0", diff --git a/packages/starlight/__e2e__/fixtures/basics/package.json b/packages/starlight/__e2e__/fixtures/basics/package.json index 32461b54936..c12304e3606 100644 --- a/packages/starlight/__e2e__/fixtures/basics/package.json +++ b/packages/starlight/__e2e__/fixtures/basics/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/__e2e__/fixtures/custom src-dir/package.json b/packages/starlight/__e2e__/fixtures/custom src-dir/package.json index 9a0586a6043..62e30de3f79 100644 --- a/packages/starlight/__e2e__/fixtures/custom src-dir/package.json +++ b/packages/starlight/__e2e__/fixtures/custom src-dir/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/__e2e__/fixtures/git/package.json b/packages/starlight/__e2e__/fixtures/git/package.json index b41fd910e70..bc616e88a6e 100644 --- a/packages/starlight/__e2e__/fixtures/git/package.json +++ b/packages/starlight/__e2e__/fixtures/git/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json b/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json index c9351a30629..9b97592c1a4 100644 --- a/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json +++ b/packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json b/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json index db4e2e28320..94140f936d0 100644 --- a/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json +++ b/packages/starlight/__e2e__/fixtures/no-mdx-optimization/package.json @@ -4,6 +4,6 @@ "private": true, "dependencies": { "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/__e2e__/fixtures/ssr/package.json b/packages/starlight/__e2e__/fixtures/ssr/package.json index 2fc1d65c494..e509598039f 100644 --- a/packages/starlight/__e2e__/fixtures/ssr/package.json +++ b/packages/starlight/__e2e__/fixtures/ssr/package.json @@ -5,6 +5,6 @@ "dependencies": { "@astrojs/node": "^11.0.0", "@astrojs/starlight": "workspace:*", - "astro": "^7.2.4" + "astro": "^7.2.5" } } diff --git a/packages/starlight/package.json b/packages/starlight/package.json index 28a2393f249..b6e2ff8ce1a 100644 --- a/packages/starlight/package.json +++ b/packages/starlight/package.json @@ -49,7 +49,7 @@ }, "peerDependencies": { "@astrojs/markdown-remark": "^7.2.0", - "astro": "^7.2.4" + "astro": "^7.2.5" }, "peerDependenciesMeta": { "@astrojs/markdown-remark": { @@ -61,13 +61,13 @@ "@playwright/test": "^1.61.1", "@types/node": "^22.19.17", "@vitest/coverage-v8": "^4.1.5", - "astro": "^7.2.4", + "astro": "^7.2.5", "linkedom": "^0.18.12", "vitest": "^4.1.5" }, "dependencies": { - "@astrojs/markdown-satteri": "^0.3.7", - "@astrojs/mdx": "^7.0.5", + "@astrojs/markdown-satteri": "^0.3.8", + "@astrojs/mdx": "^7.0.8", "@astrojs/sitemap": "^3.7.3", "@pagefind/default-ui": "^1.3.0", "@types/hast": "^3.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index adf6dc3d986..b698fe34650 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0(jiti@2.6.1)) astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) eslint: specifier: ^10.3.0 version: 10.3.0(jiti@2.6.1)(supports-color@10.2.2) @@ -69,8 +69,8 @@ importers: specifier: ^4.0.1 version: 4.0.1 astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) culori: specifier: ^4.0.2 version: 4.0.2 @@ -89,7 +89,7 @@ importers: version: 4.1.5 starlight-links-validator: specifier: ^0.25.2 - version: 0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) + version: 0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) examples/basics: dependencies: @@ -97,8 +97,8 @@ importers: specifier: ^0.41.8 version: link:../../packages/starlight astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -107,7 +107,7 @@ importers: dependencies: '@astrojs/markdoc': specifier: ^2.0.6 - version: 2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0)) + version: 2.0.6(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0)) '@astrojs/starlight': specifier: ^0.41.8 version: link:../../packages/starlight @@ -115,8 +115,8 @@ importers: specifier: ^0.7.0 version: link:../../packages/markdoc astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -133,8 +133,8 @@ importers: specifier: ^4.2.4 version: 4.2.4(vite@8.2.0(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.9.0)) astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@24.12.4) @@ -169,7 +169,7 @@ importers: devDependencies: '@astrojs/markdoc': specifier: ^2.0.6 - version: 2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0)) + version: 2.0.6(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0)) '@astrojs/starlight': specifier: workspace:* version: link:../starlight @@ -180,11 +180,11 @@ importers: packages/starlight: dependencies: '@astrojs/markdown-satteri': - specifier: ^0.3.7 - version: 0.3.7 + specifier: ^0.3.8 + version: 0.3.8 '@astrojs/mdx': - specifier: ^7.0.5 - version: 7.0.5(@astrojs/markdown-satteri@0.3.7)(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) + specifier: ^7.0.8 + version: 7.0.8(@astrojs/markdown-satteri@0.3.8)(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) '@astrojs/sitemap': specifier: ^3.7.3 version: 3.7.3 @@ -202,7 +202,7 @@ importers: version: 4.0.4 astro-expressive-code: specifier: ^0.44.0 - version: 0.44.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0)) + version: 0.44.0(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0)) bcp-47: specifier: ^2.1.0 version: 2.1.0 @@ -277,8 +277,8 @@ importers: specifier: ^4.1.5 version: 4.1.5(vitest@4.1.5) astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) linkedom: specifier: ^0.18.12 version: 0.18.12 @@ -292,8 +292,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/starlight/__e2e__/fixtures/custom src-dir: dependencies: @@ -301,8 +301,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/starlight/__e2e__/fixtures/git: dependencies: @@ -310,8 +310,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/starlight/__e2e__/fixtures/legacy-collections-backwards-compat: dependencies: @@ -319,8 +319,8 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/starlight/__e2e__/fixtures/no-mdx-optimization: dependencies: @@ -328,20 +328,20 @@ importers: specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/starlight/__e2e__/fixtures/ssr: dependencies: '@astrojs/node': specifier: ^11.0.0 - version: 11.0.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) + version: 11.0.0(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2) '@astrojs/starlight': specifier: workspace:* version: link:../../.. astro: - specifier: ^7.2.4 - version: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + specifier: ^7.2.5 + version: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) packages/tailwind: devDependencies: @@ -428,69 +428,69 @@ packages: peerDependencies: typescript: ^5.0.0 || ^6.0.0 - '@astrojs/compiler-binding-darwin-arm64@0.3.2': - resolution: {integrity: sha512-MM8tn8CSimcfytaOla4b6acN8mKWiL/rlAA1fpT3/Wl7dNGSE4y8FjTN/zJVNnb63CsLWG5zZwCt01TXtDKh9g==} + '@astrojs/compiler-binding-darwin-arm64@0.4.0': + resolution: {integrity: sha512-ZVUwHundaQyFNjE6uoa0usaC0WOCitDCLS/4mdb4rOiJXwVUuKJBMxI5WMzXLWmamsXtK/Z//ifLXvV5Yeh4Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@astrojs/compiler-binding-darwin-x64@0.3.2': - resolution: {integrity: sha512-2lXOlzf8xb7jLomRsf/aswh61/NnGusynB2OwFkK6k4pmOtpfXMYnG0PLfXrEvxXYj69NdCnmUYXtHDd+JOOag==} + '@astrojs/compiler-binding-darwin-x64@0.4.0': + resolution: {integrity: sha512-FI6G8AY8u6fR1SI/QRR5yGMwtvZwP34CDmZpZ5HwJGa50UM1VISTLhqkhV4a476pmgd25X1Aur2dqw6hUnrlKA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': - resolution: {integrity: sha512-BmU3kWj7qnLrd4vzm49zFEPJ5oFnn1tCT4Vt9hZbqdU5Cmb8GZl7fn6VFsnNfe7B18a2gIFtVzbLINtYl5kBjQ==} + '@astrojs/compiler-binding-linux-arm64-gnu@0.4.0': + resolution: {integrity: sha512-lB9gLFJK7m82EnjaU8nlRBEfcwGNeHidW3sSjODTUjMNaoewVuUz9fwwdY5M4jiSXIqWLH3yl6TX8FTDKA74Sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': - resolution: {integrity: sha512-f0heT9ZZEseSu5bHCeb80eL2DH07ArE6U9xi1WT/PEusNjzPmEr3GJsjG1tRLo5VYUUYX7h3ScaqGmGrMOVGmw==} + '@astrojs/compiler-binding-linux-arm64-musl@0.4.0': + resolution: {integrity: sha512-HPbvWqbxFxyaoQJhLxCaSjtYBx9KBo7JGVzEFZCmMl968a2PsSH0UfiODYgYPXofTOIsIH2aoCcrHXML0IA3ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': - resolution: {integrity: sha512-M8fOUt0itRpqiGyoEA/ij184s8O+hqbCz3+YozRusOOM3osgGljpDThhbKAJjqh82wOo6FioQ4w8PBvU1XMD5Q==} + '@astrojs/compiler-binding-linux-x64-gnu@0.4.0': + resolution: {integrity: sha512-tQKolMxoJ/+0AmLWm1PmJ/i+z3i10ZU1bNuVjEDulCf48azEMtUNjTZgHJ5MPtpYRNc7dlETr8QujUfduzoC7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@astrojs/compiler-binding-linux-x64-musl@0.3.2': - resolution: {integrity: sha512-/Kebk8sO6HnLeSd691JkaAPfN7CqR9/KEXmWvyNPkaKNGmj8rTZ/lf2uXtnPu92Lan84UrKdIKVPy1fSo2encQ==} + '@astrojs/compiler-binding-linux-x64-musl@0.4.0': + resolution: {integrity: sha512-5v5YymudsxMHp3NBLCS8BUlu5CRqeLtWD9cKS/4nIhIEHCbpz9okmVV6I0HWqmBAPhWYcDa3vw/vltYPrOQCTA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@astrojs/compiler-binding-wasm32-wasi@0.3.2': - resolution: {integrity: sha512-pUA6xbcOSB7DhfzIArB8BCAkFfAIqriiR7zl5zOStd6oU2G0kIKj+GUdGnyXyhfiv881Hffyk5tC0mR18sDjDw==} + '@astrojs/compiler-binding-wasm32-wasi@0.4.0': + resolution: {integrity: sha512-m/phuH3x3PREvv1OnkM44NoPh4MatUadix1fB1u5SvMLCyDTUZykDJbKnWf1cjnYmHdlB8HcjTjl6JrCqAIXcw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': - resolution: {integrity: sha512-ESruf+6Qkl1trHUFxI6GSf6t52j8yN2kCNSzMWdzt7V/T09tFHrYzrVaJQohb2C9bJUH76pNvX6Zb51+xCQc9Q==} + '@astrojs/compiler-binding-win32-arm64-msvc@0.4.0': + resolution: {integrity: sha512-B9zYf3okEY83kM8gydlpH2BHP00w4ifxPqlYlWrgTwuD6wnkrJDCwBlgy1q31cERjCJRXN1lrE2VmkLvFjv/6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': - resolution: {integrity: sha512-wzzVrEbOwbsLWOdEbocskjMRx2aZPxJ7ZbmL+jnpBamFwmigm+2M/wzuM6JWncocgYwLic1csSpalBh96kQKXA==} + '@astrojs/compiler-binding-win32-x64-msvc@0.4.0': + resolution: {integrity: sha512-zB0Nrv0dGc0zZWPGDRmmETTPhDRqyZjAjk+gWMlVrJX5U89obpB3VUUE1ZiHxOCN5LQojeLK6O8L/dnoHolvNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@astrojs/compiler-binding@0.3.2': - resolution: {integrity: sha512-8w/9CWmYrAJJ8N0SY3O43ws2BgxoW6u3QsD8u2mE140lMYAlwh+tlNoUeSBq22wVheFuiBbR212l6ixZ2IIgCQ==} + '@astrojs/compiler-binding@0.4.0': + resolution: {integrity: sha512-x2RjDUuWfwLNtc3mjAdSRInwqh/rqbLar9cm/5FOMbHvmYZB7yfKewzSclAxWjIZsypJDXv1lhaP2WG+P8TK3g==} engines: {node: ^20.19.0 || >=22.12.0} - '@astrojs/compiler-rs@0.3.2': - resolution: {integrity: sha512-xlx/T7JovIKduu4ucbTQUxQ5+Q8wxkHxhLjnZk3VlJbhbQ9RLvvuDk1p2YYFYFQ5y14dVm3FGGO4isQXa4F+Tg==} + '@astrojs/compiler-rs@0.4.0': + resolution: {integrity: sha512-koVikeon1kreEy+/JzLQRy3vzHHQVOjycs4degg4vFufKApZOwMZvSSAEztYNhmcQVfNVsVZZI4cEge3cexAbQ==} engines: {node: '>=22.12.0'} '@astrojs/compiler@2.13.1': @@ -523,20 +523,17 @@ packages: peerDependencies: astro: ^7.0.0 - '@astrojs/markdown-remark@7.2.2': - resolution: {integrity: sha512-FGfmK84zSNcrsBd0dl1gXE9JvZYElp8EXQa2jpHVAxG4deGKAp43wspxFupjADJX7MSsMRHwYCnfT6EyVmgeFQ==} - '@astrojs/markdown-remark@7.2.4': resolution: {integrity: sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==} '@astrojs/markdown-satteri@0.3.5': resolution: {integrity: sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==} - '@astrojs/markdown-satteri@0.3.7': - resolution: {integrity: sha512-NHcHbrKW/opbZnTZQ5nH293BdcK2VV0tjuzI88CLnvy2njiEJVwUQ5KFnYd4NoWgHJCY/I1CyjGWCR4Vv3khXQ==} + '@astrojs/markdown-satteri@0.3.8': + resolution: {integrity: sha512-n8ItpFTCmlDsVR5+rwDmehSf+jFCYLWmZiisZNGuF7xILqYhsVeBfcha4qgS2Seq3fAc9Tm58ZVrvqFQ6RQgRQ==} - '@astrojs/mdx@7.0.5': - resolution: {integrity: sha512-wEM/HH1RiEntyPVagdiF+yArzfcYLKBB0C1RZspVidKZ97rRMbaqP1Nbl/GR0sJs8zwaceqxRymw8aOKKJRdYw==} + '@astrojs/mdx@7.0.8': + resolution: {integrity: sha512-RNuwq2ccTSi7NX9YqlR0noaWoVdOrZuJvdfWXotAzdhMVB0b0zEMLnNU+xar7le0GwTMlTObD/QAu8jeHA/3nA==} engines: {node: '>=22.12.0'} peerDependencies: '@astrojs/markdown-satteri': ^0.3.1 @@ -1908,8 +1905,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0 - astro@7.2.4: - resolution: {integrity: sha512-+cuLsBns2wwUHI9a10xZMbjrF91m7+QNwqTVeljTx0B8Lf+8h0LgVGjdVIL2FALDKD2I565lczeeS3BFC+KdZg==} + astro@7.2.5: + resolution: {integrity: sha512-E92+I7yiqB2GA7u87JFpVG+glyGAYsGbiWPoZhH7mEja5SXyZniMoDd4UUuySpzM0tU4OlVWvYCcithkd/Hkig==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true peerDependencies: @@ -2146,8 +2143,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff@8.0.4: - resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + diff@9.0.0: + resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} engines: {node: '>=0.3.1'} direction@2.0.1: @@ -4244,56 +4241,56 @@ snapshots: - prettier - prettier-plugin-astro - '@astrojs/compiler-binding-darwin-arm64@0.3.2': + '@astrojs/compiler-binding-darwin-arm64@0.4.0': optional: true - '@astrojs/compiler-binding-darwin-x64@0.3.2': + '@astrojs/compiler-binding-darwin-x64@0.4.0': optional: true - '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': + '@astrojs/compiler-binding-linux-arm64-gnu@0.4.0': optional: true - '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': + '@astrojs/compiler-binding-linux-arm64-musl@0.4.0': optional: true - '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': + '@astrojs/compiler-binding-linux-x64-gnu@0.4.0': optional: true - '@astrojs/compiler-binding-linux-x64-musl@0.3.2': + '@astrojs/compiler-binding-linux-x64-musl@0.4.0': optional: true - '@astrojs/compiler-binding-wasm32-wasi@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + '@astrojs/compiler-binding-wasm32-wasi@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.2.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' optional: true - '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': + '@astrojs/compiler-binding-win32-arm64-msvc@0.4.0': optional: true - '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': + '@astrojs/compiler-binding-win32-x64-msvc@0.4.0': optional: true - '@astrojs/compiler-binding@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + '@astrojs/compiler-binding@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': optionalDependencies: - '@astrojs/compiler-binding-darwin-arm64': 0.3.2 - '@astrojs/compiler-binding-darwin-x64': 0.3.2 - '@astrojs/compiler-binding-linux-arm64-gnu': 0.3.2 - '@astrojs/compiler-binding-linux-arm64-musl': 0.3.2 - '@astrojs/compiler-binding-linux-x64-gnu': 0.3.2 - '@astrojs/compiler-binding-linux-x64-musl': 0.3.2 - '@astrojs/compiler-binding-wasm32-wasi': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) - '@astrojs/compiler-binding-win32-arm64-msvc': 0.3.2 - '@astrojs/compiler-binding-win32-x64-msvc': 0.3.2 + '@astrojs/compiler-binding-darwin-arm64': 0.4.0 + '@astrojs/compiler-binding-darwin-x64': 0.4.0 + '@astrojs/compiler-binding-linux-arm64-gnu': 0.4.0 + '@astrojs/compiler-binding-linux-arm64-musl': 0.4.0 + '@astrojs/compiler-binding-linux-x64-gnu': 0.4.0 + '@astrojs/compiler-binding-linux-x64-musl': 0.4.0 + '@astrojs/compiler-binding-wasm32-wasi': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@astrojs/compiler-binding-win32-arm64-msvc': 0.4.0 + '@astrojs/compiler-binding-win32-x64-msvc': 0.4.0 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - '@astrojs/compiler-rs@0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + '@astrojs/compiler-rs@0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@astrojs/compiler-binding': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@astrojs/compiler-binding': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -4324,7 +4321,7 @@ snapshots: '@astrojs/internal-helpers@0.10.4': dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 picomatch: 4.0.5 @@ -4359,12 +4356,12 @@ snapshots: transitivePeerDependencies: - typescript - '@astrojs/markdoc@2.0.6(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))': + '@astrojs/markdoc@2.0.6(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))': dependencies: '@astrojs/internal-helpers': 0.10.2 '@astrojs/prism': 4.0.2 '@markdoc/markdoc': 0.5.4 - astro: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) esbuild: 0.28.0 github-slugger: 2.0.0 htmlparser2: 12.0.0 @@ -4372,28 +4369,6 @@ snapshots: - '@types/react' - react - '@astrojs/markdown-remark@7.2.2(supports-color@10.2.2)': - dependencies: - '@astrojs/internal-helpers': 0.10.2 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - hast-util-to-text: 4.0.2 - mdast-util-definitions: 6.0.0 - rehype-raw: 7.0.0 - rehype-stringify: 10.0.1 - remark-gfm: 4.0.1(supports-color@10.2.2) - remark-parse: 11.0.0(supports-color@10.2.2) - remark-rehype: 11.1.2 - remark-smartypants: 3.0.2 - unified: 11.0.5 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.1.0 - unist-util-visit-parents: 6.0.2 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - '@astrojs/markdown-remark@7.2.4(supports-color@10.2.2)': dependencies: '@astrojs/internal-helpers': 0.10.4 @@ -4424,20 +4399,20 @@ snapshots: hast-util-from-html: 2.0.3 satteri: 0.9.3 - '@astrojs/markdown-satteri@0.3.7': + '@astrojs/markdown-satteri@0.3.8': dependencies: '@astrojs/internal-helpers': 0.10.4 '@astrojs/prism': 4.0.2 github-slugger: 2.0.0 satteri: 0.10.5 - '@astrojs/mdx@7.0.5(@astrojs/markdown-satteri@0.3.7)(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2)': + '@astrojs/mdx@7.0.8(@astrojs/markdown-satteri@0.3.8)(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2)': dependencies: - '@astrojs/internal-helpers': 0.10.2 - '@astrojs/markdown-remark': 7.2.2(supports-color@10.2.2) + '@astrojs/internal-helpers': 0.10.4 + '@astrojs/markdown-remark': 7.2.4(supports-color@10.2.2) '@mdx-js/mdx': 3.1.1(supports-color@10.2.2) acorn: 8.16.0 - astro: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) + astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) es-module-lexer: 2.0.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4449,14 +4424,14 @@ snapshots: unist-util-visit: 5.1.0 vfile: 6.0.3 optionalDependencies: - '@astrojs/markdown-satteri': 0.3.7 + '@astrojs/markdown-satteri': 0.3.8 transitivePeerDependencies: - supports-color - '@astrojs/node@11.0.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2)': + '@astrojs/node@11.0.0(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2)': dependencies: '@astrojs/internal-helpers': 0.10.0 - astro: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) send: 1.2.1(supports-color@10.2.2) server-destroy: 1.0.1 transitivePeerDependencies: @@ -5131,17 +5106,17 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.2.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 2.0.0-alpha.3 - '@emnapi/runtime': 2.0.0-alpha.3 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)': dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 + '@emnapi/core': 2.0.0-alpha.3 + '@emnapi/runtime': 2.0.0-alpha.3 '@tybys/wasm-util': 0.10.3 optional: true @@ -5232,7 +5207,7 @@ snapshots: dependencies: '@emnapi/core': 2.0.0-alpha.3 '@emnapi/runtime': 2.0.0-alpha.3 - '@napi-rs/wasm-runtime': 1.2.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) optional: true '@rolldown/binding-win32-arm64-msvc@1.2.1': @@ -5248,7 +5223,7 @@ snapshots: '@shikijs/primitive': 4.0.2 '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 '@shikijs/engine-javascript@4.0.2': @@ -5270,7 +5245,7 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/themes@4.0.2': dependencies: @@ -5279,7 +5254,7 @@ snapshots: '@shikijs/types@4.0.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@shikijs/vscode-textmate@10.0.2': {} @@ -5741,17 +5716,17 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.44.0(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0)): + astro-expressive-code@0.44.0(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0)): dependencies: - astro: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) + astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0) rehype-expressive-code: 0.44.0 url-extras: 0.1.0 - astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0): + astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@22.19.17)(jiti@2.6.1)(yaml@2.9.0): dependencies: - '@astrojs/compiler-rs': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@astrojs/compiler-rs': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@astrojs/internal-helpers': 0.10.4 - '@astrojs/markdown-satteri': 0.3.7 + '@astrojs/markdown-satteri': 0.3.8 '@astrojs/telemetry': 3.3.3 '@capsizecss/unpack': 4.0.0 '@clack/prompts': 1.7.0 @@ -5764,7 +5739,7 @@ snapshots: common-ancestor-path: 2.0.0 cookie: 2.0.1 devalue: 5.8.1 - diff: 8.0.4 + diff: 9.0.0 dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.28.0 @@ -5839,11 +5814,11 @@ snapshots: - uploadthing - yaml - astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0): + astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0): dependencies: - '@astrojs/compiler-rs': 0.3.2(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3) + '@astrojs/compiler-rs': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@astrojs/internal-helpers': 0.10.4 - '@astrojs/markdown-satteri': 0.3.7 + '@astrojs/markdown-satteri': 0.3.8 '@astrojs/telemetry': 3.3.3 '@capsizecss/unpack': 4.0.0 '@clack/prompts': 1.7.0 @@ -5856,7 +5831,7 @@ snapshots: common-ancestor-path: 2.0.0 cookie: 2.0.1 devalue: 5.8.1 - diff: 8.0.4 + diff: 9.0.0 dset: 3.1.4 es-module-lexer: 2.0.0 esbuild: 0.28.0 @@ -6122,7 +6097,7 @@ snapshots: dependencies: dequal: 2.0.3 - diff@8.0.4: {} + diff@9.0.0: {} direction@2.0.1: {} @@ -6523,7 +6498,7 @@ snapshots: hast-util-from-html@2.0.3: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 @@ -6532,7 +6507,7 @@ snapshots: hast-util-from-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 @@ -6547,11 +6522,11 @@ snapshots: hast-util-is-body-ok-link@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-is-element@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-minify-whitespace@1.0.1: dependencies: @@ -6575,7 +6550,7 @@ snapshots: hast-util-raw@9.1.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 @@ -6664,7 +6639,7 @@ snapshots: hast-util-to-parse5@8.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 devlop: 1.1.0 property-information: 7.0.0 @@ -6678,7 +6653,7 @@ snapshots: hast-util-to-text@4.0.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 @@ -6689,7 +6664,7 @@ snapshots: hastscript@8.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 property-information: 6.2.0 @@ -7738,7 +7713,7 @@ snapshots: rehype-raw@7.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 @@ -7752,7 +7727,7 @@ snapshots: rehype-stringify@10.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-to-html: 9.0.5 unified: 11.0.5 @@ -7794,7 +7769,7 @@ snapshots: remark-rehype@11.1.2: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.1 unified: 11.0.5 @@ -8029,7 +8004,7 @@ snapshots: '@shikijs/themes': 4.0.2 '@shikijs/types': 4.0.2 '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 siginfo@2.0.0: {} @@ -8076,12 +8051,12 @@ snapshots: stackback@0.0.2: {} - starlight-links-validator@0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2): + starlight-links-validator@0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2): dependencies: '@astrojs/markdown-satteri': 0.3.5 '@astrojs/starlight': link:packages/starlight '@types/picomatch': 4.0.2 - astro: 7.2.4(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) + astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) github-slugger: 2.0.0 hast-util-from-html: 2.0.3 is-absolute-url: 5.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 97fcdbd2f3a..c11d4e9a4f6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -27,9 +27,6 @@ peerDependencyRules: minimumReleaseAge: 4320 # TODO(HiDeoo) Remove minimumReleaseAgeExclude: - - '@astrojs/internal-helpers@0.10.4' - - '@astrojs/markdown-remark@7.2.4' - - '@astrojs/markdown-satteri@0.3.7' - - '@bruits/*' - - 'astro@7.2.4' - - 'satteri@0.10.3' + - '@astrojs/markdown-satteri@0.3.8' + - '@astrojs/mdx@7.0.8' + - 'astro@7.2.5' From b69813229a5b927bb60b6b60e2853ea911fd45cd Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:36:28 +0200 Subject: [PATCH 07/10] fix: remove type workaround --- .../markdown-processor/asides.test.ts | 13 +-- .../plugin-registration.test.ts | 4 +- .../__tests__/markdown-processor/utils.ts | 8 +- packages/starlight/__tests__/test-utils.ts | 1 + .../integrations/markdown-plugins.ts | 8 +- pnpm-lock.yaml | 79 ++++--------------- 6 files changed, 27 insertions(+), 86 deletions(-) diff --git a/packages/starlight/__tests__/markdown-processor/asides.test.ts b/packages/starlight/__tests__/markdown-processor/asides.test.ts index 8d9f3be2787..36f5814891c 100644 --- a/packages/starlight/__tests__/markdown-processor/asides.test.ts +++ b/packages/starlight/__tests__/markdown-processor/asides.test.ts @@ -2,8 +2,7 @@ import type { Root } from 'mdast'; import { visit } from 'unist-util-visit'; import { createMarkdownProcessor } from '@astrojs/markdown-remark'; import { createSatteriMarkdownProcessor } from '@astrojs/markdown-satteri'; -// TODO(HiDeoo) Cleanup import when https://github.com/withastro/astro/pull/17766 is released -import type { HastPluginDefinition, MdastPluginDefinition } from 'satteri'; +import type { MdastPluginDefinition } from 'satteri'; import { describe, expect, test, vi } from 'vitest'; import { remarkDirectivesRestoration } from '../../integrations/remark-asides'; import { satteriDirectivesRestoration, starlightSatteriPlugins } from '../../integrations/satteri'; @@ -259,14 +258,8 @@ describe('asides directive restoration (Sätteri)', () => { await createPluginTestOptions(starlightConfig) ); return createSatteriMarkdownProcessor({ - mdastPlugins: [ - ...mdastPlugins, - ...extraMdastPlugins, - satteriDirectivesRestoration(), - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - ] as MdastPluginDefinition[], - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - hastPlugins: hastPlugins as HastPluginDefinition[], + mdastPlugins: [...mdastPlugins, ...extraMdastPlugins, satteriDirectivesRestoration()], + hastPlugins, // Starlight's asides rely on container directives, which Sätteri disables by default. features: { directive: true }, }); diff --git a/packages/starlight/__tests__/markdown-processor/plugin-registration.test.ts b/packages/starlight/__tests__/markdown-processor/plugin-registration.test.ts index 867aafa7da0..8395166c24b 100644 --- a/packages/starlight/__tests__/markdown-processor/plugin-registration.test.ts +++ b/packages/starlight/__tests__/markdown-processor/plugin-registration.test.ts @@ -66,8 +66,8 @@ describe('registerDirectivesRestoration', () => { test('registers the mdast restoration plugin on a Sätteri processor', () => { const processor = satteri(); registerDirectivesRestoration(processor, unifiedIntegration); - expect(processor.options.mdastPlugins.map((plugin) => plugin.name)).toContain( - 'starlight-directives-restoration' + expect(processor.options.mdastPlugins).toContainEqual( + expect.objectContaining({ name: 'starlight-directives-restoration' }) ); }); diff --git a/packages/starlight/__tests__/markdown-processor/utils.ts b/packages/starlight/__tests__/markdown-processor/utils.ts index dce2584b81a..96f69ddac25 100644 --- a/packages/starlight/__tests__/markdown-processor/utils.ts +++ b/packages/starlight/__tests__/markdown-processor/utils.ts @@ -6,8 +6,6 @@ import { starlightRehypePlugins, starlightRemarkPlugins } from '../../integratio import { satteriDirectivesRestoration, starlightSatteriPlugins } from '../../integrations/satteri'; import type { StarlightUserConfig } from '../../utils/user-config'; import { createPluginTestOptions, docFileURL } from '../test-utils'; -// TODO(HiDeoo) Remove import when https://github.com/withastro/astro/pull/17766 is released -import type { HastPluginDefinition, MdastPluginDefinition } from 'satteri'; /** * The Markdown processors Starlight supports. The same Starlight transforms (asides, heading anchor @@ -26,10 +24,8 @@ export async function createStarlightMarkdownProcessor( if (name === 'satteri') { const { mdastPlugins, hastPlugins } = starlightSatteriPlugins(options); return createSatteriMarkdownProcessor({ - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - mdastPlugins: [...mdastPlugins, satteriDirectivesRestoration()] as MdastPluginDefinition[], - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - hastPlugins: hastPlugins as HastPluginDefinition[], + mdastPlugins: [...mdastPlugins, satteriDirectivesRestoration()], + hastPlugins, // Starlight's asides rely on container directives, which Sätteri disables by default. features: { directive: true }, ...(syntaxHighlight === false ? { syntaxHighlight: false } : {}), diff --git a/packages/starlight/__tests__/test-utils.ts b/packages/starlight/__tests__/test-utils.ts index 9813c908759..e120c2bc468 100644 --- a/packages/starlight/__tests__/test-utils.ts +++ b/packages/starlight/__tests__/test-utils.ts @@ -62,6 +62,7 @@ const frontmatterSchema = docsSchema()({ z.literal('gif'), z.literal('svg'), z.literal('avif'), + z.literal('apng'), ]), }), }); diff --git a/packages/starlight/integrations/markdown-plugins.ts b/packages/starlight/integrations/markdown-plugins.ts index e9ee3c63dae..23262e59cd0 100644 --- a/packages/starlight/integrations/markdown-plugins.ts +++ b/packages/starlight/integrations/markdown-plugins.ts @@ -2,8 +2,6 @@ import { isSatteriProcessor } from '@astrojs/markdown-satteri'; import type { AstroConfig, AstroIntegration, AstroIntegrationLogger } from 'astro'; import type { MarkdownProcessorPluginOptions } from './markdown-processor'; import { satteriDirectivesRestoration, starlightSatteriPlugins } from './satteri'; -// TODO(HiDeoo) Remove import when https://github.com/withastro/astro/pull/17766 is released -import type { HastPluginEntry, MdastPluginEntry } from 'satteri'; // This file is imported by the Starlight integration that is used in Astro configuration files. // When using Starlight, Astro loads its configuration using a temporary Vite module runner and @@ -30,10 +28,8 @@ export function applyStarlightMarkdownPlugins( // Starlight's asides are built on container directives, which Sätteri disables by default. processor.options.features.directive = true; const { mdastPlugins, hastPlugins } = starlightSatteriPlugins(options); - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - (processor.options.mdastPlugins as MdastPluginEntry[]).push(...mdastPlugins); - // TODO(HiDeoo) Remove cast when https://github.com/withastro/astro/pull/17766 is released - (processor.options.hastPlugins as HastPluginEntry[]).push(...hastPlugins); + processor.options.mdastPlugins.push(...mdastPlugins); + processor.options.hastPlugins.push(...hastPlugins); } else if (unified?.isUnifiedProcessor(processor)) { processor.options.remarkPlugins.push(...unified.starlightRemarkPlugins(options)); processor.options.rehypePlugins.push(...unified.starlightRehypePlugins(options)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b698fe34650..9942ddeb194 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -526,9 +526,6 @@ packages: '@astrojs/markdown-remark@7.2.4': resolution: {integrity: sha512-MvspGMynWKAjTe4/lTUdmBPHIFKNVLTCF6UlyWGogTGzNrTvjD+D4n48k7h8swxsEPKHK2TwxkZO7uoaCv1Pow==} - '@astrojs/markdown-satteri@0.3.5': - resolution: {integrity: sha512-CvWVEFAbay7YO+i9SaqDJubipA5ckiVB89QWoMJ5XC0m5CtFg8JwZ7Kau6X9sYY7FZURH0w2l03ISH2jOS/RDQ==} - '@astrojs/markdown-satteri@0.3.8': resolution: {integrity: sha512-n8ItpFTCmlDsVR5+rwDmehSf+jFCYLWmZiisZNGuF7xILqYhsVeBfcha4qgS2Seq3fAc9Tm58ZVrvqFQ6RQgRQ==} @@ -1278,13 +1275,6 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@napi-rs/wasm-runtime@1.2.1': - resolution: {integrity: sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} - peerDependencies: - '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 - '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 - '@napi-rs/wasm-runtime@1.2.3': resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} @@ -1623,9 +1613,6 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/hast@3.0.5': resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} @@ -3664,10 +3651,6 @@ packages: resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} engines: {node: ^16.14.0 || >= 17.3.0} - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} - engines: {node: '>=18'} - tinyexec@1.3.0: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} @@ -4100,11 +4083,6 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -4299,7 +4277,7 @@ snapshots: '@astrojs/internal-helpers@0.10.0': dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 picomatch: 4.0.5 @@ -4310,7 +4288,7 @@ snapshots: '@astrojs/internal-helpers@0.10.2': dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 js-yaml: 4.3.1 picomatch: 4.0.5 @@ -4391,14 +4369,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/markdown-satteri@0.3.5': - dependencies: - '@astrojs/internal-helpers': 0.10.2 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - satteri: 0.9.3 - '@astrojs/markdown-satteri@0.3.8': dependencies: '@astrojs/internal-helpers': 0.10.4 @@ -4456,7 +4426,7 @@ snapshots: '@astrojs/yaml2ts@0.2.3': dependencies: - yaml: 2.8.3 + yaml: 2.9.0 '@babel/helper-string-parser@7.27.1': {} @@ -4520,7 +4490,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.2.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true '@bruits/satteri-win32-arm64-msvc@0.10.5': @@ -5099,13 +5069,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@napi-rs/wasm-runtime@1.2.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 - optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 @@ -5364,10 +5327,6 @@ snapshots: '@types/estree@1.0.8': {} - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 @@ -6483,12 +6442,12 @@ snapshots: hast-util-embedded@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-is-element: 3.0.0 hast-util-format@1.1.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-minify-whitespace: 1.0.1 hast-util-phrasing: 3.0.1 @@ -6530,7 +6489,7 @@ snapshots: hast-util-minify-whitespace@1.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-is-element: 3.0.0 hast-util-whitespace: 3.0.0 @@ -6542,7 +6501,7 @@ snapshots: hast-util-phrasing@3.0.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hast-util-embedded: 3.0.0 hast-util-has-property: 3.0.0 hast-util-is-body-ok-link: 3.0.0 @@ -6605,7 +6564,7 @@ snapshots: hast-util-to-html@9.0.5: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 @@ -6660,7 +6619,7 @@ snapshots: hast-util-whitespace@3.0.0: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 hastscript@8.0.0: dependencies: @@ -7088,7 +7047,7 @@ snapshots: mdast-util-mdx-jsx@3.2.0(supports-color@10.2.2): dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 @@ -7130,7 +7089,7 @@ snapshots: mdast-util-to-hast@13.2.1: dependencies: - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 @@ -7880,7 +7839,7 @@ snapshots: satteri@0.9.3: dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 + '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/unist': 3.0.3 optionalDependencies: @@ -8053,7 +8012,7 @@ snapshots: starlight-links-validator@0.25.2(@astrojs/starlight@packages+starlight)(astro@7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0))(supports-color@10.2.2): dependencies: - '@astrojs/markdown-satteri': 0.3.5 + '@astrojs/markdown-satteri': 0.3.8 '@astrojs/starlight': link:packages/starlight '@types/picomatch': 4.0.2 astro: 7.2.5(@astrojs/markdown-remark@7.2.4(supports-color@10.2.2))(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.12.4)(jiti@2.6.1)(yaml@2.9.0) @@ -8066,7 +8025,7 @@ snapshots: satteri: 0.9.3 terminal-link: 5.0.0 unist-util-visit: 5.1.0 - yaml: 2.8.3 + yaml: 2.9.0 transitivePeerDependencies: - supports-color @@ -8148,8 +8107,6 @@ snapshots: tinyclip@0.1.12: {} - tinyexec@1.1.1: {} - tinyexec@1.3.0: {} tinyglobby@0.2.17: @@ -8364,7 +8321,7 @@ snapshots: picomatch: 4.0.5 std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.1.1 + tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 vite: 8.2.0(@types/node@22.19.17)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.9.0) @@ -8403,7 +8360,7 @@ snapshots: picomatch: 4.0.5 std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.1.1 + tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 vite: 8.2.0(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.6.1)(yaml@2.9.0) @@ -8567,8 +8524,6 @@ snapshots: yaml@2.7.1: {} - yaml@2.8.3: {} - yaml@2.9.0: {} yargs-parser@22.0.0: {} From 451425f52c2eed4b84269cba8f717007ba8bd8c0 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:52:13 +0200 Subject: [PATCH 08/10] chore: update changeset --- .changeset/humble-friends-clean.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/humble-friends-clean.md b/.changeset/humble-friends-clean.md index a84b08f83fe..d863d03c17e 100644 --- a/.changeset/humble-friends-clean.md +++ b/.changeset/humble-friends-clean.md @@ -2,9 +2,9 @@ '@astrojs/starlight': minor --- -TODO(HiDeoo) +Updates internal `@astrojs/mdx`, `@astrojs/markdown-satteri`, and `satteri` dependencies. -⚠️ **BREAKING CHANGE:** The minimum supported version of Astro is now TODO(HiDeoo). +⚠️ **BREAKING CHANGE:** The minimum supported version of Astro is now v7.2.5. Please update Starlight and Astro together: From e79a179b73b3f3cdce3e108379e8eeb0eed12073 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Tue, 25 Aug 2026 20:02:25 +0200 Subject: [PATCH 09/10] chore: fix typo Co-authored-by: Chris Swithinbank --- .../__tests__/markdown-processor/code-rtl-support.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts b/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts index aa5e3e0faff..697e02d9932 100644 --- a/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts +++ b/packages/starlight/__tests__/markdown-processor/code-rtl-support.test.ts @@ -34,7 +34,7 @@ describeEachProcessor('code RTL support', (ctx, name) => { expect(res.code).not.includes('dir="auto"'); }); - test('does nto apply `dir="ltr"` on raw `
        ` HTML', async () => {
        +	test('does not apply `dir="ltr"` on raw `
        ` HTML', async () => {
         		const res = await ctx().render('
        manual
        ', { processor: plain }); expect(res.code).includes('
        manual
        '); From 3b982f416dbcc5467aff233e09bfbb057edf586a Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Tue, 1 Sep 2026 11:48:36 +0200 Subject: [PATCH 10/10] chore: remove `minimumReleaseAgeExclude` packages --- pnpm-workspace.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c11d4e9a4f6..37f574c545d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,8 +25,3 @@ peerDependencyRules: # Prevent installing packages published in the last 3 days minimumReleaseAge: 4320 -# TODO(HiDeoo) Remove -minimumReleaseAgeExclude: - - '@astrojs/markdown-satteri@0.3.8' - - '@astrojs/mdx@7.0.8' - - 'astro@7.2.5'