From f949aa87a40ced70b7533a0aaa0b6bbf29a8dbe6 Mon Sep 17 00:00:00 2001 From: Erika <3019731+Princesseuh@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:47:04 +0100 Subject: [PATCH 01/18] fix(ci): Reinstall deps after having published VS Code (#14996) --- .github/workflows/release.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b627261d565b..be02d2622d97 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,7 +76,7 @@ jobs: npm run build:grammar rm -rf node_modules # Also delete root package.json and node_modules to avoid vsce picking up any monorepo info - rm ../../../package.json + mv ../../../package.json ../../../package.temp.json rm -rf ../../../node_modules sleep 60s # wait for npm registry to update npm i --workspaces=false # vsce does not support pnpm, so we need to pretend this is not a monorepo and use npm @@ -92,7 +92,13 @@ jobs: working-directory: ./packages/language-tools/vscode run: | npx ovsx publish -p ${{ secrets.OVSX_TOKEN }} --target win32-x64 win32-arm64 linux-x64 linux-arm64 linux-armhf darwin-x64 darwin-arm64 alpine-x64 alpine-arm64 - + + - name: Restore root package.json and node_modules + if: steps.vscode-published.outputs.published == 'true' + run: | + mv ./package.temp.json ./package.json + pnpm install + - name: Generate Announcement id: message if: steps.changesets.outputs.published == 'true' From 16f3994fdb83d1b3421491c00bfd5ac9f7e37a5c Mon Sep 17 00:00:00 2001 From: Antony Faris Date: Fri, 12 Dec 2025 07:25:10 -0500 Subject: [PATCH 02/18] fix(svelte): allow client directives (#15004) --- .changeset/wicked-parts-mix.md | 5 ++++ packages/integrations/svelte/src/editor.cts | 4 +-- .../integrations/svelte/svelte-shims.d.ts | 27 +++++++++++++++++++ .../integrations/svelte/test/check.test.js | 22 +++++++++++++-- .../prop-types/tsconfig.directive.json | 4 +++ .../fixtures/prop-types/tsconfig.props.json | 4 +++ .../types/directive/Arbitrary.svelte | 1 + .../prop-types/types/directive/Strict.svelte | 5 ++++ .../prop-types/types/directive/index.astro | 7 +++++ .../types/{ => props}/PropTypes.svelte | 0 .../prop-types/types/{ => props}/index.astro | 0 11 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 .changeset/wicked-parts-mix.md create mode 100644 packages/integrations/svelte/test/fixtures/prop-types/tsconfig.directive.json create mode 100644 packages/integrations/svelte/test/fixtures/prop-types/tsconfig.props.json create mode 100644 packages/integrations/svelte/test/fixtures/prop-types/types/directive/Arbitrary.svelte create mode 100644 packages/integrations/svelte/test/fixtures/prop-types/types/directive/Strict.svelte create mode 100644 packages/integrations/svelte/test/fixtures/prop-types/types/directive/index.astro rename packages/integrations/svelte/test/fixtures/prop-types/types/{ => props}/PropTypes.svelte (100%) rename packages/integrations/svelte/test/fixtures/prop-types/types/{ => props}/index.astro (100%) diff --git a/.changeset/wicked-parts-mix.md b/.changeset/wicked-parts-mix.md new file mode 100644 index 000000000000..4ec69cbd95dd --- /dev/null +++ b/.changeset/wicked-parts-mix.md @@ -0,0 +1,5 @@ +--- +'@astrojs/svelte': patch +--- + +Fixes an issue where Svelte components used in Astro files would incorrectly report type errors when using `client:*` directives. diff --git a/packages/integrations/svelte/src/editor.cts b/packages/integrations/svelte/src/editor.cts index eff44c54117a..6d7fcf3390bd 100644 --- a/packages/integrations/svelte/src/editor.cts +++ b/packages/integrations/svelte/src/editor.cts @@ -14,13 +14,13 @@ export function toTSX(code: string, className: string): string { if (tsx.includes('export default $$Component;')) { result = tsx.replace( 'export default $$Component;', - `export default function ${className}__AstroComponent_(_props: import('svelte').ComponentProps): any {}`, + `export default function ${className}__AstroComponent_(_props: import('@astrojs/svelte/svelte-shims.d.ts').PropsWithClientDirectives>): any {}`, ); } else { // Old svelte2tsx output result = tsx.replace( 'export default class extends __sveltets_2_createSvelte2TsxComponent(', - `export default function ${className}__AstroComponent_(_props: typeof Component.props): any {}\nlet Component = `, + `export default function ${className}__AstroComponent_(_props: import('@astrojs/svelte/svelte-shims.d.ts').PropsWithClientDirectives): any {}\nlet Component = `, ); } } catch { diff --git a/packages/integrations/svelte/svelte-shims.d.ts b/packages/integrations/svelte/svelte-shims.d.ts index 34136e827cd5..0fca2d77f724 100644 --- a/packages/integrations/svelte/svelte-shims.d.ts +++ b/packages/integrations/svelte/svelte-shims.d.ts @@ -1 +1,28 @@ import 'svelte2tsx/svelte-shims-v4'; + +import type { JSX } from 'astro/jsx-runtime'; + +export type AstroClientDirectives = JSX.AstroComponentDirectives; + +/** + * Helper to detect index-signature-like keys (string or number). + */ +type IsIndexSignatureKey = string extends K ? true : number extends K ? true : false; + +/** + * Removes index signatures whose value type is `never`. + * (Keeps normal, explicitly-declared keys unchanged.) + */ +export type StripNeverIndexSignatures = { + [K in keyof T as IsIndexSignatureKey extends true + ? T[K] extends never + ? never + : K + : K]: T[K]; +}; + +/** + * Svelte component props plus Astro's client directives, + * with `never` index signatures stripped out. + */ +export type PropsWithClientDirectives = StripNeverIndexSignatures & AstroClientDirectives; diff --git a/packages/integrations/svelte/test/check.test.js b/packages/integrations/svelte/test/check.test.js index b389f1f99b11..c80aa5abf7db 100644 --- a/packages/integrations/svelte/test/check.test.js +++ b/packages/integrations/svelte/test/check.test.js @@ -5,8 +5,11 @@ import { cli } from '../../../astro/test/test-utils.js'; describe('Svelte Check', () => { it('should fail check on type error', async () => { - const root = fileURLToPath(new URL('./fixtures/prop-types/', import.meta.url)); - const { getResult } = cli('check', '--root', root); + const root = fileURLToPath(new URL('./fixtures/prop-types/types/props', import.meta.url)); + const tsConfigPath = fileURLToPath( + new URL('./fixtures/prop-types/tsconfig.props.json', import.meta.url), + ); + const { getResult } = cli('check', '--tsconfig', tsConfigPath, '--root', root); const { exitCode, stdout } = await getResult(); assert.equal(exitCode, 1, 'Expected check to fail (exit code 1)'); @@ -15,4 +18,19 @@ describe('Svelte Check', () => { 'Expected specific type error message', ); }); + + it('should pass check for client directives on strict and arbitrary components', async () => { + const root = fileURLToPath(new URL('./fixtures/prop-types/types/directive', import.meta.url)); + const tsConfigPath = fileURLToPath( + new URL('./fixtures/prop-types/tsconfig.directive.json', import.meta.url), + ); + const { getResult } = cli('check', '--tsconfig', tsConfigPath, '--root', root); + const { exitCode, stdout, stderr } = await getResult(); + + if (exitCode !== 0) { + console.error(stdout); + console.error(stderr); + } + assert.equal(exitCode, 0, 'Expected check to pass (exit code 0)'); + }); }); diff --git a/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.directive.json b/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.directive.json new file mode 100644 index 000000000000..56e35fd2c624 --- /dev/null +++ b/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.directive.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["types/directive"] +} \ No newline at end of file diff --git a/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.props.json b/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.props.json new file mode 100644 index 000000000000..d1d0700df440 --- /dev/null +++ b/packages/integrations/svelte/test/fixtures/prop-types/tsconfig.props.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["types/props"] +} \ No newline at end of file diff --git a/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Arbitrary.svelte b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Arbitrary.svelte new file mode 100644 index 000000000000..68f273cfed97 --- /dev/null +++ b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Arbitrary.svelte @@ -0,0 +1 @@ +
Arbitrary
diff --git a/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Strict.svelte b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Strict.svelte new file mode 100644 index 000000000000..cde50ac786b3 --- /dev/null +++ b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/Strict.svelte @@ -0,0 +1,5 @@ + diff --git a/packages/integrations/svelte/test/fixtures/prop-types/types/directive/index.astro b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/index.astro new file mode 100644 index 000000000000..884d4274c7af --- /dev/null +++ b/packages/integrations/svelte/test/fixtures/prop-types/types/directive/index.astro @@ -0,0 +1,7 @@ +--- +import Strict from './Strict.svelte'; +import Arbitrary from './Arbitrary.svelte'; +--- + + + diff --git a/packages/integrations/svelte/test/fixtures/prop-types/types/PropTypes.svelte b/packages/integrations/svelte/test/fixtures/prop-types/types/props/PropTypes.svelte similarity index 100% rename from packages/integrations/svelte/test/fixtures/prop-types/types/PropTypes.svelte rename to packages/integrations/svelte/test/fixtures/prop-types/types/props/PropTypes.svelte diff --git a/packages/integrations/svelte/test/fixtures/prop-types/types/index.astro b/packages/integrations/svelte/test/fixtures/prop-types/types/props/index.astro similarity index 100% rename from packages/integrations/svelte/test/fixtures/prop-types/types/index.astro rename to packages/integrations/svelte/test/fixtures/prop-types/types/props/index.astro From 9dd9fca81e5ed3d0d55e0b1624c6515706963b1f Mon Sep 17 00:00:00 2001 From: Erika <3019731+Princesseuh@users.noreply.github.com> Date: Fri, 12 Dec 2025 16:02:54 +0100 Subject: [PATCH 03/18] fix(assets): Fixes missing format option for svgs in the passthrough service (#14987) * fix(assets): Fixes missing format option for svgs in the passthrough service * fix: wtf is going on * chore: changeset --- .changeset/odd-windows-serve.md | 5 + packages/astro/src/assets/services/noop.ts | 18 ++- packages/astro/src/assets/services/service.ts | 142 +++++++++--------- .../src/assets/astro.svg | 9 ++ .../src/pages/index.astro | 4 + .../test/passthrough-image-service.test.js | 56 ++++++- 6 files changed, 151 insertions(+), 83 deletions(-) create mode 100644 .changeset/odd-windows-serve.md create mode 100644 packages/astro/test/fixtures/passthrough-image-service/src/assets/astro.svg diff --git a/.changeset/odd-windows-serve.md b/.changeset/odd-windows-serve.md new file mode 100644 index 000000000000..afc4a0ff7403 --- /dev/null +++ b/.changeset/odd-windows-serve.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes SVGs not working in dev mode when using the passthrough image service diff --git a/packages/astro/src/assets/services/noop.ts b/packages/astro/src/assets/services/noop.ts index b8ebad9aa32e..7626f2b53a57 100644 --- a/packages/astro/src/assets/services/noop.ts +++ b/packages/astro/src/assets/services/noop.ts @@ -1,14 +1,20 @@ -import { baseService, type LocalImageService } from './service.js'; +import { baseService, verifyOptions, type LocalImageService } from './service.js'; +import { isESMImportedImage } from '../utils/imageKind.js'; // Empty service used for platforms that don't support Sharp / users who don't want transformations. const noopService: LocalImageService = { ...baseService, propertiesToHash: ['src'], - async validateOptions(options, imageConfig) { - const newOptions = await (baseService.validateOptions?.(options, imageConfig) ?? options); - delete newOptions.format; - - return newOptions; + async validateOptions(options) { + if (isESMImportedImage(options.src) && options.src.format === 'svg') { + options.format = 'svg'; + } else { + delete options.format; + } + + verifyOptions(options); + + return options; }, async transform(inputBuffer, transformOptions) { return { diff --git a/packages/astro/src/assets/services/service.ts b/packages/astro/src/assets/services/service.ts index 57f4ffd2e620..37904770780b 100644 --- a/packages/astro/src/assets/services/service.ts +++ b/packages/astro/src/assets/services/service.ts @@ -128,6 +128,69 @@ export type BaseServiceTransform = { const sortNumeric = (a: number, b: number) => a - b; +export function verifyOptions(options: ImageTransform): void { + // `src` is missing or is `undefined`. + if (!options.src || (!isRemoteImage(options.src) && !isESMImportedImage(options.src))) { + throw new AstroError({ + ...AstroErrorData.ExpectedImage, + message: AstroErrorData.ExpectedImage.message( + JSON.stringify(options.src), + typeof options.src, + JSON.stringify(options, (_, v) => (v === undefined ? null : v)), + ), + }); + } + + if (!isESMImportedImage(options.src)) { + // User passed an `/@fs/` path or a filesystem path instead of the full image. + if (options.src.startsWith('/@fs/') || (!isRemotePath(options.src) && !options.src.startsWith('/'))) { + throw new AstroError({ + ...AstroErrorData.LocalImageUsedWrongly, + message: AstroErrorData.LocalImageUsedWrongly.message(options.src), + }); + } + + // For remote images, width and height are explicitly required as we can't infer them from the file + let missingDimension: 'width' | 'height' | 'both' | undefined; + if (!options.width && !options.height) { + missingDimension = 'both'; + } else if (!options.width && options.height) { + missingDimension = 'width'; + } else if (options.width && !options.height) { + missingDimension = 'height'; + } + + if (missingDimension) { + throw new AstroError({ + ...AstroErrorData.MissingImageDimension, + message: AstroErrorData.MissingImageDimension.message(missingDimension, options.src), + }); + } + } else { + if (!VALID_SUPPORTED_FORMATS.includes(options.src.format as any)) { + throw new AstroError({ + ...AstroErrorData.UnsupportedImageFormat, + message: AstroErrorData.UnsupportedImageFormat.message( + options.src.format, + options.src.src, + VALID_SUPPORTED_FORMATS, + ), + }); + } + + if (options.widths && options.densities) { + throw new AstroError(AstroErrorData.IncompatibleDescriptorOptions); + } + + if ( + (options.src.format === 'svg' && options.format !== 'svg') || + (options.src.format !== 'svg' && options.format === 'svg') + ) { + throw new AstroError(AstroErrorData.UnsupportedImageConversion); + } + } +} + /** * Basic local service using the included `_image` endpoint. * This service intentionally does not implement `transform`. @@ -143,7 +206,6 @@ const sortNumeric = (a: number, b: number) => a - b; * ``` * * This service adhere to the included services limitations: - * - Remote images are passed as is. * - Only a limited amount of formats are supported. * - For remote images, `width` and `height` are always required. * @@ -151,82 +213,18 @@ const sortNumeric = (a: number, b: number) => a - b; export const baseService: Omit = { propertiesToHash: DEFAULT_HASH_PROPS, validateOptions(options) { - // `src` is missing or is `undefined`. - if (!options.src || (!isRemoteImage(options.src) && !isESMImportedImage(options.src))) { - throw new AstroError({ - ...AstroErrorData.ExpectedImage, - message: AstroErrorData.ExpectedImage.message( - JSON.stringify(options.src), - typeof options.src, - JSON.stringify(options, (_, v) => (v === undefined ? null : v)), - ), - }); + // We currently do not support processing SVGs, so whenever the input format is a SVG, force the output to also be one + if (isESMImportedImage(options.src) && options.src.format === 'svg') { + options.format = 'svg'; } + + // Run verification-only checks + verifyOptions(options); - if (!isESMImportedImage(options.src)) { - // User passed an `/@fs/` path or a filesystem path instead of the full image. - if ( - options.src.startsWith('/@fs/') || - (!isRemotePath(options.src) && !options.src.startsWith('/')) - ) { - throw new AstroError({ - ...AstroErrorData.LocalImageUsedWrongly, - message: AstroErrorData.LocalImageUsedWrongly.message(options.src), - }); - } - - // For remote images, width and height are explicitly required as we can't infer them from the file - let missingDimension: 'width' | 'height' | 'both' | undefined; - if (!options.width && !options.height) { - missingDimension = 'both'; - } else if (!options.width && options.height) { - missingDimension = 'width'; - } else if (options.width && !options.height) { - missingDimension = 'height'; - } - - if (missingDimension) { - throw new AstroError({ - ...AstroErrorData.MissingImageDimension, - message: AstroErrorData.MissingImageDimension.message(missingDimension, options.src), - }); - } - } else { - if (!VALID_SUPPORTED_FORMATS.includes(options.src.format as any)) { - throw new AstroError({ - ...AstroErrorData.UnsupportedImageFormat, - message: AstroErrorData.UnsupportedImageFormat.message( - options.src.format, - options.src.src, - VALID_SUPPORTED_FORMATS, - ), - }); - } - - if (options.widths && options.densities) { - throw new AstroError(AstroErrorData.IncompatibleDescriptorOptions); - } - - // We currently do not support processing SVGs, so whenever the input format is a SVG, force the output to also be one - if (options.src.format === 'svg') { - options.format = 'svg'; - } - - if ( - (options.src.format === 'svg' && options.format !== 'svg') || - (options.src.format !== 'svg' && options.format === 'svg') - ) { - throw new AstroError(AstroErrorData.UnsupportedImageConversion); - } - } - - // If the user didn't specify a format, we'll default to `webp`. It offers the best ratio of compatibility / quality - // In the future, hopefully we can replace this with `avif`, alas, Edge. See https://caniuse.com/avif + // Apply defaults and normalization separate from verification if (!options.format) { options.format = DEFAULT_OUTPUT_FORMAT; } - - // Sometimes users will pass number generated from division, which can result in floating point numbers if (options.width) options.width = Math.round(options.width); if (options.height) options.height = Math.round(options.height); if (options.layout && options.width && options.height) { diff --git a/packages/astro/test/fixtures/passthrough-image-service/src/assets/astro.svg b/packages/astro/test/fixtures/passthrough-image-service/src/assets/astro.svg new file mode 100644 index 000000000000..679b6ce2a7f1 --- /dev/null +++ b/packages/astro/test/fixtures/passthrough-image-service/src/assets/astro.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/astro/test/fixtures/passthrough-image-service/src/pages/index.astro b/packages/astro/test/fixtures/passthrough-image-service/src/pages/index.astro index d3603c5aec3b..1a189c98ff62 100644 --- a/packages/astro/test/fixtures/passthrough-image-service/src/pages/index.astro +++ b/packages/astro/test/fixtures/passthrough-image-service/src/pages/index.astro @@ -1,6 +1,7 @@ --- import { Image, Picture } from 'astro:assets'; import myImage from '../assets/penguin1.jpg'; +import myLogo from '../assets/astro.svg'; --- @@ -11,5 +12,8 @@ import myImage from '../assets/penguin1.jpg';
+ diff --git a/packages/astro/test/passthrough-image-service.test.js b/packages/astro/test/passthrough-image-service.test.js index 20e17f3d20c8..069ec94a8e79 100644 --- a/packages/astro/test/passthrough-image-service.test.js +++ b/packages/astro/test/passthrough-image-service.test.js @@ -1,20 +1,53 @@ import assert from 'node:assert/strict'; -import { before, describe, it } from 'node:test'; +import { after, before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; describe('passthroughImageService', () => { /** @type {import('./test-utils.js').Fixture} */ let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/passthrough-image-service/', + }); + }); + + describe('dev', () => { + let $; + let devServer; + + before(async () => { + devServer = await fixture.startDevServer(); + + const html = await fixture.fetch('/').then((res) => res.text()); + $ = cheerio.load(html); + }); + + after(async () => { + await devServer.stop(); + }); + + it('includes img element in dev', () => { + const $img = $('#image img'); + assert.equal($img.length, 1); + }); + + it('serves SVG logo with correct content type', async () => { + const $img = $('#logo img'); + const src = $img.attr('src'); + + const response = await fixture.fetch(src); + const contentType = response.headers.get('content-type'); + + assert.ok(contentType.includes('image/svg+xml'), `Expected SVG content type, got: ${contentType}`); + }); + }); describe('build', () => { let $; before(async () => { - fixture = await loadFixture({ - root: './fixtures/passthrough-image-service/', - }); - await fixture.build(); const html = await fixture.readFile('/index.html'); @@ -63,5 +96,18 @@ describe('passthroughImageService', () => { assert.ok(src.endsWith('.jpg'), `Should preserve jpg format, got: ${src}`); }); }); + + describe('SVG Logo component', () => { + it('includes img element', () => { + const $img = $('#logo img'); + assert.equal($img.length, 1); + }); + + it('preserves SVG format', () => { + const $img = $('#logo img'); + const src = $img.attr('src'); + assert.ok(src.endsWith('.svg'), `Should preserve svg format, got: ${src}`); + }); + }); }); }); From 8cdaa007e755f267c1f398336e74d33f599b5b62 Mon Sep 17 00:00:00 2001 From: Erika Date: Fri, 12 Dec 2025 15:03:48 +0000 Subject: [PATCH 04/18] [ci] format --- packages/astro/src/assets/services/noop.ts | 6 +++--- packages/astro/src/assets/services/service.ts | 7 +++++-- .../astro/test/passthrough-image-service.test.js | 15 +++++++++------ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/astro/src/assets/services/noop.ts b/packages/astro/src/assets/services/noop.ts index 7626f2b53a57..471edc652410 100644 --- a/packages/astro/src/assets/services/noop.ts +++ b/packages/astro/src/assets/services/noop.ts @@ -1,5 +1,5 @@ -import { baseService, verifyOptions, type LocalImageService } from './service.js'; import { isESMImportedImage } from '../utils/imageKind.js'; +import { baseService, type LocalImageService, verifyOptions } from './service.js'; // Empty service used for platforms that don't support Sharp / users who don't want transformations. const noopService: LocalImageService = { @@ -11,9 +11,9 @@ const noopService: LocalImageService = { } else { delete options.format; } - + verifyOptions(options); - + return options; }, async transform(inputBuffer, transformOptions) { diff --git a/packages/astro/src/assets/services/service.ts b/packages/astro/src/assets/services/service.ts index 37904770780b..0ce8fbd4c338 100644 --- a/packages/astro/src/assets/services/service.ts +++ b/packages/astro/src/assets/services/service.ts @@ -143,7 +143,10 @@ export function verifyOptions(options: ImageTransform): void { if (!isESMImportedImage(options.src)) { // User passed an `/@fs/` path or a filesystem path instead of the full image. - if (options.src.startsWith('/@fs/') || (!isRemotePath(options.src) && !options.src.startsWith('/'))) { + if ( + options.src.startsWith('/@fs/') || + (!isRemotePath(options.src) && !options.src.startsWith('/')) + ) { throw new AstroError({ ...AstroErrorData.LocalImageUsedWrongly, message: AstroErrorData.LocalImageUsedWrongly.message(options.src), @@ -217,7 +220,7 @@ export const baseService: Omit = { if (isESMImportedImage(options.src) && options.src.format === 'svg') { options.format = 'svg'; } - + // Run verification-only checks verifyOptions(options); diff --git a/packages/astro/test/passthrough-image-service.test.js b/packages/astro/test/passthrough-image-service.test.js index 069ec94a8e79..89258b53f59c 100644 --- a/packages/astro/test/passthrough-image-service.test.js +++ b/packages/astro/test/passthrough-image-service.test.js @@ -6,13 +6,13 @@ import { loadFixture } from './test-utils.js'; describe('passthroughImageService', () => { /** @type {import('./test-utils.js').Fixture} */ let fixture; - + before(async () => { fixture = await loadFixture({ root: './fixtures/passthrough-image-service/', }); }); - + describe('dev', () => { let $; let devServer; @@ -23,7 +23,7 @@ describe('passthroughImageService', () => { const html = await fixture.fetch('/').then((res) => res.text()); $ = cheerio.load(html); }); - + after(async () => { await devServer.stop(); }); @@ -36,11 +36,14 @@ describe('passthroughImageService', () => { it('serves SVG logo with correct content type', async () => { const $img = $('#logo img'); const src = $img.attr('src'); - + const response = await fixture.fetch(src); const contentType = response.headers.get('content-type'); - - assert.ok(contentType.includes('image/svg+xml'), `Expected SVG content type, got: ${contentType}`); + + assert.ok( + contentType.includes('image/svg+xml'), + `Expected SVG content type, got: ${contentType}`, + ); }); }); From 8cab2a4f7ee0cfbcf0ddaec0878da637e7854b9d Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Fri, 12 Dec 2025 17:04:15 +0100 Subject: [PATCH 05/18] chore: auto format next (#15009) --- .github/workflows/format.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 9faaa1886608..cbe690401b88 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -5,6 +5,7 @@ on: push: branches: - main + - next jobs: prettier: From 3c017906a1ab35dafd27827e06c5f8aee3d36e30 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 08:50:00 +0100 Subject: [PATCH 06/18] chore(deps): update github-actions (#15019) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check-merge.yml | 2 +- .github/workflows/issue-labeled.yml | 6 +++--- .github/workflows/issue-needs-repro.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check-merge.yml b/.github/workflows/check-merge.yml index 19cc406f2f3b..a0e1d90efe26 100644 --- a/.github/workflows/check-merge.yml +++ b/.github/workflows/check-merge.yml @@ -34,7 +34,7 @@ jobs: - name: Get changed files in the .changeset folder id: changed-files - uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0 + uses: tj-actions/changed-files@e0021407031f5be11a464abee9a0776171c79891 # v47.0.1 if: steps.blocked.outputs.result != 'true' with: files: | diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml index 8f403b194e9e..429f8a638121 100644 --- a/.github/workflows/issue-labeled.yml +++ b/.github/workflows/issue-labeled.yml @@ -11,7 +11,7 @@ jobs: steps: - name: remove triage if: contains(github.event.label.description, '(priority)') && contains(github.event.issue.labels.*.name, 'needs triage') - uses: actions-cool/issues-helper@9861779a695cf1898bd984c727f685f351cfc372 # v3.7.2 + uses: actions-cool/issues-helper@3809910bc12872edc9b8132f122069ac16cd16ee # v3.7.3 with: actions: "remove-labels" token: ${{ secrets.GITHUB_TOKEN }} @@ -20,7 +20,7 @@ jobs: - name: needs repro if: github.event.label.name == 'needs repro' - uses: actions-cool/issues-helper@9861779a695cf1898bd984c727f685f351cfc372 # v3.7.2 + uses: actions-cool/issues-helper@3809910bc12872edc9b8132f122069ac16cd16ee # v3.7.3 with: actions: "create-comment, remove-labels" token: ${{ secrets.GITHUB_TOKEN }} @@ -30,7 +30,7 @@ jobs: labels: "needs triage" - name: wontfix if: github.event.label.name == 'wontfix' - uses: actions-cool/issues-helper@9861779a695cf1898bd984c727f685f351cfc372 # v3.7.2 + uses: actions-cool/issues-helper@3809910bc12872edc9b8132f122069ac16cd16ee # v3.7.3 with: actions: "create-comment, close-issue" token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/issue-needs-repro.yml b/.github/workflows/issue-needs-repro.yml index 445acbc1f3cb..540b706381ec 100644 --- a/.github/workflows/issue-needs-repro.yml +++ b/.github/workflows/issue-needs-repro.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: needs repro - uses: actions-cool/issues-helper@9861779a695cf1898bd984c727f685f351cfc372 # v3.7.2 + uses: actions-cool/issues-helper@3809910bc12872edc9b8132f122069ac16cd16ee # v3.7.3 with: actions: "close-issues" token: ${{ secrets.GITHUB_TOKEN }} From 0d2adacf06396eb2fd56bed26f9b488f763c3097 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 08:50:44 +0100 Subject: [PATCH 07/18] fix(deps): update all non-major dependencies (#15020) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- examples/framework-multiple/package.json | 2 +- examples/framework-svelte/package.json | 2 +- examples/ssr/package.json | 2 +- examples/starlog/package.json | 2 +- examples/with-tailwindcss/package.json | 4 +- package.json | 4 +- packages/db/package.json | 2 +- packages/integrations/markdoc/package.json | 2 +- pnpm-lock.yaml | 626 ++++++++++----------- 9 files changed, 320 insertions(+), 326 deletions(-) diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index 57be44a65fbf..af1bf8b6e2b8 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -22,7 +22,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "solid-js": "^1.9.10", - "svelte": "^5.45.5", + "svelte": "^5.45.10", "vue": "^3.5.25" } } diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json index 71243ee3a5eb..be6fd04d4f56 100644 --- a/examples/framework-svelte/package.json +++ b/examples/framework-svelte/package.json @@ -12,6 +12,6 @@ "dependencies": { "@astrojs/svelte": "^7.2.3", "astro": "^5.16.5", - "svelte": "^5.45.5" + "svelte": "^5.45.10" } } diff --git a/examples/ssr/package.json b/examples/ssr/package.json index f4dcd54f722b..474d2cfc3f3b 100644 --- a/examples/ssr/package.json +++ b/examples/ssr/package.json @@ -14,6 +14,6 @@ "@astrojs/node": "^9.5.1", "@astrojs/svelte": "^7.2.3", "astro": "^5.16.5", - "svelte": "^5.45.5" + "svelte": "^5.45.10" } } diff --git a/examples/starlog/package.json b/examples/starlog/package.json index bcc6da7a7f31..ac3c47fba442 100644 --- a/examples/starlog/package.json +++ b/examples/starlog/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "astro": "^5.16.5", - "sass": "^1.94.2", + "sass": "^1.96.0", "sharp": "^0.34.3" } } diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 2021ef98b187..30c2b1407560 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -11,10 +11,10 @@ }, "dependencies": { "@astrojs/mdx": "^4.3.13", - "@tailwindcss/vite": "^4.1.17", + "@tailwindcss/vite": "^4.1.18", "@types/canvas-confetti": "^1.9.0", "astro": "^5.16.5", "canvas-confetti": "^1.9.4", - "tailwindcss": "^4.1.17" + "tailwindcss": "^4.1.18" } } diff --git a/package.json b/package.json index 54bb5e34684e..8da67c9b9958 100644 --- a/package.json +++ b/package.json @@ -72,10 +72,10 @@ "only-allow": "^1.2.2", "prettier": "^3.7.4", "prettier-plugin-astro": "^0.14.1", - "publint": "^0.3.15", + "publint": "^0.3.16", "tinyglobby": "^0.2.15", "turbo": "^2.6.3", "typescript": "~5.9.3", - "typescript-eslint": "^8.48.1" + "typescript-eslint": "^8.49.0" } } diff --git a/packages/db/package.json b/packages/db/package.json index 9bf7fd14bbf3..5524375d96b2 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -88,7 +88,7 @@ "astro": "workspace:*", "astro-scripts": "workspace:*", "cheerio": "1.1.2", - "expect-type": "^1.2.2", + "expect-type": "^1.3.0", "typescript": "^5.9.3", "vite": "^6.4.1" } diff --git a/packages/integrations/markdoc/package.json b/packages/integrations/markdoc/package.json index d0d3ed18cf03..2bcd984cb6d3 100644 --- a/packages/integrations/markdoc/package.json +++ b/packages/integrations/markdoc/package.json @@ -77,7 +77,7 @@ "@types/markdown-it": "^14.1.2", "astro": "workspace:*", "astro-scripts": "workspace:*", - "devalue": "^5.5.0", + "devalue": "^5.6.1", "linkedom": "^0.18.12", "vite": "^6.4.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78b613bcf77c..6e110562b85d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,8 +53,8 @@ importers: specifier: ^0.14.1 version: 0.14.1 publint: - specifier: ^0.3.15 - version: 0.3.15 + specifier: ^0.3.16 + version: 0.3.16 tinyglobby: specifier: ^0.2.15 version: 0.2.15 @@ -65,8 +65,8 @@ importers: specifier: ~5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.48.1 - version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.49.0 + version: 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) benchmark: dependencies: @@ -109,10 +109,10 @@ importers: devDependencies: '@codspeed/vitest-plugin': specifier: 4.0.1 - version: 4.0.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.0.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) benchmark/packages/adapter: dependencies: @@ -192,7 +192,7 @@ importers: version: 18.3.1(react@18.3.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: '@types/react': specifier: ^18.3.27 @@ -255,8 +255,8 @@ importers: specifier: ^1.9.10 version: 1.9.10 svelte: - specifier: ^5.45.5 - version: 5.45.5 + specifier: ^5.45.10 + version: 5.45.10 vue: specifier: ^3.5.25 version: 3.5.25(typescript@5.9.3) @@ -318,8 +318,8 @@ importers: specifier: ^5.16.5 version: link:../../packages/astro svelte: - specifier: ^5.45.5 - version: 5.45.5 + specifier: ^5.45.10 + version: 5.45.10 examples/framework-vue: dependencies: @@ -372,8 +372,8 @@ importers: specifier: ^5.16.5 version: link:../../packages/astro svelte: - specifier: ^5.45.5 - version: 5.45.5 + specifier: ^5.45.10 + version: 5.45.10 examples/starlog: dependencies: @@ -381,8 +381,8 @@ importers: specifier: ^5.16.5 version: link:../../packages/astro sass: - specifier: ^1.94.2 - version: 1.94.2 + specifier: ^1.96.0 + version: 1.96.0 sharp: specifier: ^0.34.3 version: 0.34.4 @@ -444,8 +444,8 @@ importers: specifier: ^4.3.13 version: link:../../packages/integrations/mdx '@tailwindcss/vite': - specifier: ^4.1.17 - version: 4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + specifier: ^4.1.18 + version: 4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/canvas-confetti': specifier: ^1.9.0 version: 1.9.0 @@ -456,8 +456,8 @@ importers: specifier: ^1.9.4 version: 1.9.4 tailwindcss: - specifier: ^4.1.17 - version: 4.1.17 + specifier: ^4.1.18 + version: 4.1.18 examples/with-vitest: dependencies: @@ -466,7 +466,7 @@ importers: version: link:../../packages/astro vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/astro: dependencies: @@ -526,7 +526,7 @@ importers: version: 2.0.2 devalue: specifier: ^5.5.0 - version: 5.5.0 + version: 5.6.1 diff: specifier: ^5.2.0 version: 5.2.0 @@ -637,10 +637,10 @@ importers: version: 6.0.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) xxhash-wasm: specifier: ^1.1.0 version: 1.1.0 @@ -719,7 +719,7 @@ importers: version: 0.10.0 expect-type: specifier: ^1.2.2 - version: 1.2.2 + version: 1.3.0 fs-fixture: specifier: ^2.11.0 version: 2.11.0 @@ -752,7 +752,7 @@ importers: version: 4.53.3 sass: specifier: ^1.94.2 - version: 1.94.2 + version: 1.96.0 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -764,7 +764,7 @@ importers: version: 11.0.5 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: sharp: specifier: ^0.34.0 @@ -936,7 +936,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1042,7 +1042,7 @@ importers: version: link:../../.. sass: specifier: ^1.94.2 - version: 1.94.2 + version: 1.96.0 packages/astro/e2e/fixtures/errors: dependencies: @@ -1075,13 +1075,13 @@ importers: version: 18.3.1(react@18.3.1) sass: specifier: ^1.94.2 - version: 1.94.2 + version: 1.96.0 solid-js: specifier: ^1.9.10 version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1093,7 +1093,7 @@ importers: version: link:../../.. sass: specifier: ^1.94.2 - version: 1.94.2 + version: 1.96.0 packages/astro/e2e/fixtures/hydration-race: dependencies: @@ -1138,7 +1138,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1194,7 +1194,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1234,7 +1234,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1274,7 +1274,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1314,7 +1314,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1354,7 +1354,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1394,7 +1394,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1590,19 +1590,19 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/e2e/fixtures/tailwindcss: dependencies: '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.1.17 - version: 4.1.17 + version: 4.1.18 packages/astro/e2e/fixtures/ts-resolution: dependencies: @@ -1650,7 +1650,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1794,7 +1794,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -1815,7 +1815,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/alias-tsconfig: dependencies: @@ -1830,7 +1830,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/alias-tsconfig-baseurl-only: dependencies: @@ -1842,7 +1842,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/alias-tsconfig-no-baseurl: dependencies: @@ -1985,7 +1985,7 @@ importers: version: 10.28.0 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -2018,7 +2018,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/astro-client-only/pkg: {} @@ -2110,7 +2110,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/astro-env: dependencies: @@ -2215,7 +2215,7 @@ importers: version: 9.4.1(astro@packages+astro) '@astrojs/react': specifier: 4.3.0 - version: 4.3.0(@types/node@22.18.12)(@types/react-dom@19.1.1(@types/react@19.1.1))(@types/react@19.1.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 4.3.0(@types/node@22.18.12)(@types/react-dom@19.1.1(@types/react@19.1.1))(@types/react@19.1.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) '@types/react': specifier: 19.1.1 version: 19.1.1 @@ -2233,7 +2233,7 @@ importers: version: 19.1.1(react@19.1.1) vite: specifier: 6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/astro/test/fixtures/astro-jsx: dependencies: @@ -2419,13 +2419,13 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.1.17 - version: 4.1.17 + version: 4.1.18 packages/astro/test/fixtures/astro-sitemap-rss: dependencies: @@ -2485,7 +2485,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -2575,7 +2575,7 @@ importers: version: 18.3.1(react@18.3.1) svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/component-library-shared: dependencies: @@ -2956,7 +2956,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/css-import-as-inline: dependencies: @@ -3244,7 +3244,7 @@ importers: version: 10.28.0 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -3493,7 +3493,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -3611,13 +3611,13 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.1.17 - version: 4.1.17 + version: 4.1.18 packages/astro/test/fixtures/middleware-virtual: dependencies: @@ -3717,7 +3717,7 @@ importers: version: 1.9.10 svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -3962,7 +3962,7 @@ importers: version: link:../../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/server-islands/ssr: dependencies: @@ -3977,7 +3977,7 @@ importers: version: link:../../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/sessions: dependencies: @@ -4052,7 +4052,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/slots-vue: dependencies: @@ -4398,7 +4398,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/astro/test/fixtures/svg-deduplication: dependencies: @@ -4413,13 +4413,13 @@ importers: version: link:../../../../integrations/mdx '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) astro: specifier: workspace:* version: link:../../.. tailwindcss: specifier: ^4.1.17 - version: 4.1.17 + version: 4.1.18 packages/astro/test/fixtures/third-party-astro: dependencies: @@ -4482,7 +4482,7 @@ importers: version: link:../../.. vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/astro/test/fixtures/vue-component: dependencies: @@ -4521,7 +4521,7 @@ importers: version: link:../../.. svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 vue: specifier: ^3.5.24 version: 3.5.25(typescript@5.9.3) @@ -4617,14 +4617,14 @@ importers: specifier: 1.1.2 version: 1.1.2 expect-type: - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^1.3.0 + version: 1.3.0 typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/db/test/fixtures/basics: dependencies: @@ -4780,7 +4780,7 @@ importers: version: link:../../../scripts vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/integrations/alpinejs/test/fixtures/basics: dependencies: @@ -4843,7 +4843,7 @@ importers: version: 0.2.15 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) wrangler: specifier: 4.14.1 version: 4.14.1(@cloudflare/workers-types@4.20251121.0) @@ -4859,7 +4859,7 @@ importers: version: 1.1.2 devalue: specifier: ^5.5.0 - version: 5.5.0 + version: 5.6.1 rollup: specifier: ^4.53.3 version: 4.53.3 @@ -4994,7 +4994,7 @@ importers: version: link:../../../../../astro svelte: specifier: ^5.43.14 - version: 5.45.5 + version: 5.45.10 packages/integrations/cloudflare/test/fixtures/with-vue: dependencies: @@ -5054,14 +5054,14 @@ importers: specifier: workspace:* version: link:../../../scripts devalue: - specifier: ^5.5.0 - version: 5.5.0 + specifier: ^5.6.1 + version: 5.6.1 linkedom: specifier: ^0.18.12 version: 0.18.12 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/integrations/markdoc/test/fixtures/content-collections: dependencies: @@ -5317,7 +5317,7 @@ importers: version: 11.0.5 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) packages/integrations/mdx/test/fixtures/css-head-mdx: dependencies: @@ -5491,7 +5491,7 @@ importers: version: 5.1.0 '@netlify/vite-plugin': specifier: ^2.7.14 - version: 2.7.14(@azure/identity@4.13.0)(@vercel/functions@2.2.13)(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.7.14(@azure/identity@4.13.0)(@vercel/functions@2.2.13)(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) '@vercel/nft': specifier: 0.30.4 version: 0.30.4(rollup@4.53.3) @@ -5503,7 +5503,7 @@ importers: version: 0.2.15 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: '@types/node': specifier: ^22.10.6 @@ -5519,7 +5519,7 @@ importers: version: 1.1.2 devalue: specifier: ^5.5.0 - version: 5.5.0 + version: 5.6.1 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -5638,7 +5638,7 @@ importers: version: 1.1.2 devalue: specifier: ^5.5.0 - version: 5.5.0 + version: 5.6.1 express: specifier: ^4.21.2 version: 4.21.2 @@ -5831,7 +5831,7 @@ importers: dependencies: '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.5)(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.5)(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) '@preact/signals': specifier: ^2.5.1 version: 2.5.1(preact@10.28.0) @@ -5840,7 +5840,7 @@ importers: version: 6.6.3(preact@10.28.0) vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: astro: specifier: workspace:* @@ -5856,13 +5856,13 @@ importers: dependencies: '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) ultrahtml: specifier: ^1.6.0 version: 1.6.0 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: '@types/react': specifier: ^18.3.27 @@ -5972,10 +5972,10 @@ importers: dependencies: vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.11.10(solid-js@1.9.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) devDependencies: astro: specifier: workspace:* @@ -5991,13 +5991,13 @@ importers: dependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.1(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) svelte2tsx: specifier: ^0.7.45 - version: 0.7.45(svelte@5.45.5)(typescript@5.9.3) + version: 0.7.45(svelte@5.45.10)(typescript@5.9.3) vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) devDependencies: astro: specifier: workspace:* @@ -6010,7 +6010,7 @@ importers: version: 1.1.2 svelte: specifier: ^5.45.5 - version: 5.45.5 + version: 5.45.10 packages/integrations/svelte/test/fixtures/async-rendering: dependencies: @@ -6034,7 +6034,7 @@ importers: version: link:../../../../../astro svelte: specifier: ^5.45.5 - version: 5.45.5 + version: 5.45.10 packages/integrations/vercel: dependencies: @@ -6043,7 +6043,7 @@ importers: version: link:../../internal-helpers '@vercel/analytics': specifier: ^1.5.0 - version: 1.5.0(react@19.2.0)(svelte@5.45.5)(vue@3.5.25(typescript@5.9.3)) + version: 1.5.0(react@19.2.0)(svelte@5.45.10)(vue@3.5.25(typescript@5.9.3)) '@vercel/functions': specifier: ^2.2.13 version: 2.2.13 @@ -6257,19 +6257,19 @@ importers: dependencies: '@vitejs/plugin-vue': specifier: 5.2.4 - version: 5.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) '@vitejs/plugin-vue-jsx': specifier: ^4.2.0 - version: 4.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + version: 4.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) '@vue/compiler-sfc': specifier: ^3.5.25 version: 3.5.25 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-vue-devtools: specifier: ^7.7.9 - version: 7.7.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + version: 7.7.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) devDependencies: astro: specifier: workspace:* @@ -9655,69 +9655,69 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@tailwindcss/node@4.1.17': - resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} - '@tailwindcss/oxide-android-arm64@4.1.17': - resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.17': - resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.17': - resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.17': - resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': - resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': - resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': - resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': - resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.1.17': - resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.1.17': - resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -9728,24 +9728,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': - resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': - resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.17': - resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} engines: {node: '>= 10'} - '@tailwindcss/vite@4.1.17': - resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} + '@tailwindcss/vite@4.1.18': + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -9988,63 +9988,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.48.1': - resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} + '@typescript-eslint/eslint-plugin@8.49.0': + resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.48.1 + '@typescript-eslint/parser': ^8.49.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.48.1': - resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} + '@typescript-eslint/parser@8.49.0': + resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.48.1': - resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} + '@typescript-eslint/project-service@8.49.0': + resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.48.1': - resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} + '@typescript-eslint/scope-manager@8.49.0': + resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.48.1': - resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} + '@typescript-eslint/tsconfig-utils@8.49.0': + resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.48.1': - resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} + '@typescript-eslint/type-utils@8.49.0': + resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.48.1': - resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} + '@typescript-eslint/types@8.49.0': + resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.48.1': - resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} + '@typescript-eslint/typescript-estree@8.49.0': + resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.48.1': - resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} + '@typescript-eslint/utils@8.49.0': + resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.48.1': - resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} + '@typescript-eslint/visitor-keys@8.49.0': + resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/twoslash@3.1.0': @@ -11309,8 +11309,8 @@ packages: dettle@1.0.5: resolution: {integrity: sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==} - devalue@5.5.0: - resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} + devalue@5.6.1: + resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -11745,8 +11745,8 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} express@4.21.2: @@ -12085,9 +12085,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - h3@1.15.4: resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} @@ -13992,8 +13989,8 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - publint@0.3.15: - resolution: {integrity: sha512-xPbRAPW+vqdiaKy5sVVY0uFAu3LaviaPO3pZ9FaRx59l9+U/RKR1OEbLhkug87cwiVKxPXyB4txsv5cad67u+A==} + publint@0.3.16: + resolution: {integrity: sha512-MFqyfRLAExPVZdTQFwkAQELzA8idyXzROVOytg6nEJ/GEypXBUmMGrVaID8cTuzRS1U5L8yTOdOJtMXgFUJAeA==} engines: {node: '>=18'} hasBin: true @@ -14337,8 +14334,8 @@ packages: sass-formatter@0.7.9: resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} - sass@1.94.2: - resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==} + sass@1.96.0: + resolution: {integrity: sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q==} engines: {node: '>=14.0.0'} hasBin: true @@ -14749,8 +14746,8 @@ packages: resolution: {integrity: sha512-pHeUrp1A5S6RGaXhJB7PtYjL1VVjbVrJ2EfuAoPu9/1LeoMaJa/pcdCsCSb0gS4eUHAHnhCbUDxORZyvGK6kOQ==} engines: {node: '>=18'} - svelte@5.45.5: - resolution: {integrity: sha512-2074U+vObO5Zs8/qhxtBwdi6ZXNIhEBTzNmUFjiZexLxTdt9vq96D/0pnQELl6YcpLMD7pZ2dhXKByfGS8SAdg==} + svelte@5.45.10: + resolution: {integrity: sha512-GiWXq6akkEN3zVDMQ1BVlRolmks5JkEdzD/67mvXOz6drRfuddT5JwsGZjMGSnsTRv/PjAXX8fqBcOr2g2qc/Q==} engines: {node: '>=18'} svgo@3.3.2: @@ -14771,8 +14768,8 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwindcss@4.1.17: - resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} @@ -14987,8 +14984,8 @@ packages: typescript-auto-import-cache@0.3.6: resolution: {integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==} - typescript-eslint@8.48.1: - resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==} + typescript-eslint@8.49.0: + resolution: {integrity: sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -15851,15 +15848,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/react@4.3.0(@types/node@22.18.12)(@types/react-dom@19.1.1(@types/react@19.1.1))(@types/react@19.1.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)': + '@astrojs/react@4.3.0(@types/node@22.18.12)(@types/react-dom@19.1.1(@types/react@19.1.1))(@types/react@19.1.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@types/react': 19.1.1 '@types/react-dom': 19.1.1(@types/react@19.1.1) - '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) ultrahtml: 1.6.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -16439,11 +16436,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@4.0.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@codspeed/vitest-plugin@4.0.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@codspeed/core': 4.0.1 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - debug @@ -17867,12 +17864,12 @@ snapshots: '@netlify/types@2.2.0': {} - '@netlify/vite-plugin@2.7.14(@azure/identity@4.13.0)(@vercel/functions@2.2.13)(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@netlify/vite-plugin@2.7.14(@azure/identity@4.13.0)(@vercel/functions@2.2.13)(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@netlify/dev': 4.8.2(@azure/identity@4.13.0)(@vercel/functions@2.2.13)(rollup@4.53.3) '@netlify/dev-utils': 4.3.2 dedent: 1.7.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -18211,18 +18208,18 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5) - '@prefresh/vite': 2.4.11(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + '@prefresh/vite': 2.4.11(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.5) debug: 4.4.3(supports-color@8.1.1) picocolors: 1.1.1 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin: 0.5.12(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vite-prerender-plugin: 0.5.12(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18242,7 +18239,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.11(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@prefresh/vite@2.4.11(preact@10.28.0)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@prefresh/babel-plugin': 0.5.2 @@ -18250,7 +18247,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -18469,25 +18466,25 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) debug: 4.4.3(supports-color@8.1.1) - svelte: 5.45.5 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + svelte: 5.45.10 + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.45.5)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)))(svelte@5.45.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) debug: 4.4.3(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 - svelte: 5.45.5 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + svelte: 5.45.10 + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - supports-color @@ -18495,7 +18492,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@tailwindcss/node@4.1.17': + '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.18.3 @@ -18503,65 +18500,65 @@ snapshots: lightningcss: 1.30.2 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.17 + tailwindcss: 4.1.18 - '@tailwindcss/oxide-android-arm64@4.1.17': + '@tailwindcss/oxide-android-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.17': + '@tailwindcss/oxide-darwin-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.17': + '@tailwindcss/oxide-darwin-x64@4.1.18': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.17': + '@tailwindcss/oxide-freebsd-x64@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.17': + '@tailwindcss/oxide-linux-x64-musl@4.1.18': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.17': + '@tailwindcss/oxide-wasm32-wasi@4.1.18': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': optional: true - '@tailwindcss/oxide@4.1.17': + '@tailwindcss/oxide@4.1.18': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-x64': 4.1.17 - '@tailwindcss/oxide-freebsd-x64': 4.1.17 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-x64-musl': 4.1.17 - '@tailwindcss/oxide-wasm32-wasi': 4.1.17 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 - - '@tailwindcss/vite@4.1.17(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@tailwindcss/node': 4.1.17 - '@tailwindcss/oxide': 4.1.17 - tailwindcss: 4.1.17 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': + dependencies: + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + tailwindcss: 4.1.18 + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) '@textlint/ast-node-types@15.2.3': {} @@ -18814,16 +18811,15 @@ snapshots: '@types/node': 18.19.130 optional: true - '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 eslint: 9.39.1(jiti@2.6.1) - graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -18831,41 +18827,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.48.1': + '@typescript-eslint/scope-manager@8.49.0': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 - '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.1(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -18873,14 +18869,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.48.1': {} + '@typescript-eslint/types@8.49.0': {} - '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 9.0.5 semver: 7.7.3 @@ -18890,20 +18886,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.48.1': + '@typescript-eslint/visitor-keys@8.49.0': dependencies: - '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/types': 8.49.0 eslint-visitor-keys: 4.2.1 '@typescript/twoslash@3.1.0': @@ -18936,10 +18932,10 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vercel/analytics@1.5.0(react@19.2.0)(svelte@5.45.5)(vue@3.5.25(typescript@5.9.3))': + '@vercel/analytics@1.5.0(react@19.2.0)(svelte@5.45.10)(vue@3.5.25(typescript@5.9.3))': optionalDependencies: react: 19.2.0 - svelte: 5.45.5 + svelte: 5.45.10 vue: 3.5.25(typescript@5.9.3) '@vercel/functions@2.2.13': @@ -18996,7 +18992,7 @@ snapshots: optionalDependencies: ajv: 6.12.6 - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -19004,24 +19000,24 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.9-commit.d91dfb5 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.25(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': dependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.25(typescript@5.9.3) '@vitest/expect@3.2.4': @@ -19032,13 +19028,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -19318,14 +19314,14 @@ snapshots: '@vue/compiler-dom': 3.5.25 '@vue/shared': 3.5.25 - '@vue/devtools-core@7.7.9(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': + '@vue/devtools-core@7.7.9(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + vite-hot-client: 2.1.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) vue: 3.5.25(typescript@5.9.3) transitivePeerDependencies: - vite @@ -20306,7 +20302,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.9.3): dependencies: - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.9.3 @@ -20332,7 +20328,7 @@ snapshots: dettle@1.0.5: {} - devalue@5.5.0: {} + devalue@5.6.1: {} devlop@1.1.0: dependencies: @@ -20825,7 +20821,7 @@ snapshots: expand-template@2.0.3: optional: true - expect-type@1.2.2: {} + expect-type@1.3.0: {} express@4.21.2: dependencies: @@ -21217,8 +21213,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - h3@1.15.4: dependencies: cookie-es: 1.2.2 @@ -23590,7 +23584,7 @@ snapshots: proxy-from-env@1.1.0: {} - publint@0.3.15: + publint@0.3.16: dependencies: '@publint/pack': 0.1.2 package-manager-detector: 1.6.0 @@ -24080,7 +24074,7 @@ snapshots: dependencies: suf-log: 2.5.3 - sass@1.94.2: + sass@1.96.0: dependencies: chokidar: 4.0.3 immutable: 5.1.4 @@ -24577,11 +24571,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte2tsx@0.7.45(svelte@5.45.5)(typescript@5.9.3): + svelte2tsx@0.7.45(svelte@5.45.10)(typescript@5.9.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.45.5 + svelte: 5.45.10 typescript: 5.9.3 svelte@4.2.20: @@ -24618,7 +24612,7 @@ snapshots: magic-string: 0.30.21 zimmerframe: 1.1.4 - svelte@5.45.5: + svelte@5.45.10: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -24628,7 +24622,7 @@ snapshots: aria-query: 5.3.2 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.5.0 + devalue: 5.6.1 esm-env: 1.2.2 esrap: 2.2.1 is-reference: 3.0.3 @@ -24666,7 +24660,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@4.1.17: {} + tailwindcss@4.1.18: {} tapable@2.3.0: {} @@ -24864,12 +24858,12 @@ snapshots: dependencies: semver: 7.7.3 - typescript-eslint@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -25108,17 +25102,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-hot-client@2.1.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -25133,7 +25127,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@0.8.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-inspect@0.8.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.3.0(rollup@4.53.3) @@ -25144,12 +25138,12 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.2 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.5 '@types/babel__core': 7.20.5 @@ -25157,28 +25151,28 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.10 solid-refresh: 0.6.3(solid-js@1.9.10) - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vitefu: 1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.7.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)): + vite-plugin-vue-devtools@7.7.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 7.7.9(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) + '@vue/devtools-core': 7.7.9(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3)) '@vue/devtools-kit': 7.7.9 '@vue/devtools-shared': 7.7.9 execa: 9.6.0 sirv: 3.0.2 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-inspect: 0.8.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) - vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-inspect: 0.8.9(rollup@4.53.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.5 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -25189,11 +25183,11 @@ snapshots: '@vue/compiler-dom': 3.5.25 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vite-prerender-plugin@0.5.12(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -25201,14 +25195,14 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) vite-svg-loader@5.1.0(vue@3.5.25(typescript@5.9.3)): dependencies: svgo: 3.3.2 vue: 3.5.25(typescript@5.9.3) - vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1): + vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.5 fdir: 6.5.0(picomatch@4.0.3) @@ -25221,19 +25215,19 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - sass: 1.94.2 + sass: 1.96.0 tsx: 4.20.6 yaml: 2.8.1 - vitefu@1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)): + vitefu@1.1.1(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -25241,7 +25235,7 @@ snapshots: '@vitest/utils': 3.2.4 chai: 5.3.3 debug: 4.4.3(supports-color@8.1.1) - expect-type: 1.2.2 + expect-type: 1.3.0 magic-string: 0.30.21 pathe: 2.0.3 picomatch: 4.0.3 @@ -25251,8 +25245,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.94.2)(tsx@4.20.6)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.96.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 From a178422484ed62a76b227515a798e192fdcba3b9 Mon Sep 17 00:00:00 2001 From: Chris Swithinbank Date: Mon, 15 Dec 2025 22:01:53 +0100 Subject: [PATCH 08/18] Support extending the image API props type (#15014) --- .changeset/smooth-zoos-say.md | 5 +++++ packages/astro/src/assets/types.ts | 5 +++-- packages/astro/src/types/public/extendables.ts | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/smooth-zoos-say.md diff --git a/.changeset/smooth-zoos-say.md b/.changeset/smooth-zoos-say.md new file mode 100644 index 000000000000..402e598b5b69 --- /dev/null +++ b/.changeset/smooth-zoos-say.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Adds support for extending the type of the props accepted by Astro’s `` component, `` component, and `getImage()` API. diff --git a/packages/astro/src/assets/types.ts b/packages/astro/src/assets/types.ts index 6f14e6163b65..820988ec7e91 100644 --- a/packages/astro/src/assets/types.ts +++ b/packages/astro/src/assets/types.ts @@ -90,7 +90,7 @@ export type ImageTransform = { fit?: ImageFit | undefined; position?: string | undefined; [key: string]: any; -}; +} & Astro.CustomImageProps; export interface GetImageResult { rawOptions: ImageTransform; @@ -231,7 +231,8 @@ type ImageSharedProps = T & { fit?: never; position?: never; } - ); + ) & + Astro.CustomImageProps; export type LocalImageProps = ImageSharedProps & { /** diff --git a/packages/astro/src/types/public/extendables.ts b/packages/astro/src/types/public/extendables.ts index b78777cbd904..8281328ef27b 100644 --- a/packages/astro/src/types/public/extendables.ts +++ b/packages/astro/src/types/public/extendables.ts @@ -20,6 +20,7 @@ declare global { namespace Astro { export interface IntegrationHooks extends BaseIntegrationHooks {} export interface ClientDirectives extends AstroClientDirectives {} + export interface CustomImageProps {} } } From 03439933124f91c6b9f68f5c4226f550cd027c92 Mon Sep 17 00:00:00 2001 From: "Houston (Bot)" <108291165+astrobot-houston@users.noreply.github.com> Date: Tue, 16 Dec 2025 03:32:24 -0800 Subject: [PATCH 09/18] [ci] release (#14997) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/every-birds-relax.md | 5 -- .changeset/odd-windows-serve.md | 5 -- .changeset/smooth-zoos-say.md | 5 -- .changeset/wicked-parts-mix.md | 5 -- examples/basics/package.json | 2 +- examples/blog/package.json | 2 +- examples/component/package.json | 2 +- examples/container-with-vitest/package.json | 2 +- examples/framework-alpine/package.json | 2 +- examples/framework-multiple/package.json | 4 +- examples/framework-preact/package.json | 2 +- examples/framework-react/package.json | 2 +- examples/framework-solid/package.json | 2 +- examples/framework-svelte/package.json | 4 +- examples/framework-vue/package.json | 2 +- examples/hackernews/package.json | 2 +- examples/integration/package.json | 2 +- examples/minimal/package.json | 2 +- examples/portfolio/package.json | 2 +- examples/ssr/package.json | 4 +- examples/starlog/package.json | 2 +- examples/toolbar-app/package.json | 2 +- examples/with-markdoc/package.json | 2 +- examples/with-mdx/package.json | 2 +- examples/with-nanostores/package.json | 2 +- examples/with-tailwindcss/package.json | 2 +- examples/with-vitest/package.json | 2 +- packages/astro/CHANGELOG.md | 10 ++++ packages/astro/package.json | 2 +- packages/integrations/svelte/CHANGELOG.md | 6 +++ packages/integrations/svelte/package.json | 2 +- pnpm-lock.yaml | 52 ++++++++++----------- 32 files changed, 70 insertions(+), 74 deletions(-) delete mode 100644 .changeset/every-birds-relax.md delete mode 100644 .changeset/odd-windows-serve.md delete mode 100644 .changeset/smooth-zoos-say.md delete mode 100644 .changeset/wicked-parts-mix.md diff --git a/.changeset/every-birds-relax.md b/.changeset/every-birds-relax.md deleted file mode 100644 index 2dec90e4db22..000000000000 --- a/.changeset/every-birds-relax.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fixes images outside the project directory not working when using astro:assets in development mode diff --git a/.changeset/odd-windows-serve.md b/.changeset/odd-windows-serve.md deleted file mode 100644 index afc4a0ff7403..000000000000 --- a/.changeset/odd-windows-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fixes SVGs not working in dev mode when using the passthrough image service diff --git a/.changeset/smooth-zoos-say.md b/.changeset/smooth-zoos-say.md deleted file mode 100644 index 402e598b5b69..000000000000 --- a/.changeset/smooth-zoos-say.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Adds support for extending the type of the props accepted by Astro’s `` component, `` component, and `getImage()` API. diff --git a/.changeset/wicked-parts-mix.md b/.changeset/wicked-parts-mix.md deleted file mode 100644 index 4ec69cbd95dd..000000000000 --- a/.changeset/wicked-parts-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@astrojs/svelte': patch ---- - -Fixes an issue where Svelte components used in Astro files would incorrectly report type errors when using `client:*` directives. diff --git a/examples/basics/package.json b/examples/basics/package.json index e0c24f3695d2..b21a34dfae1c 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/blog/package.json b/examples/blog/package.json index 0b848e8855ac..42ffe46ba1df 100644 --- a/examples/blog/package.json +++ b/examples/blog/package.json @@ -13,7 +13,7 @@ "@astrojs/mdx": "^4.3.13", "@astrojs/rss": "^4.0.14", "@astrojs/sitemap": "^3.6.0", - "astro": "^5.16.5", + "astro": "^5.16.6", "sharp": "^0.34.3" } } diff --git a/examples/component/package.json b/examples/component/package.json index fb21c4dff5a6..28f7a2ed7ff1 100644 --- a/examples/component/package.json +++ b/examples/component/package.json @@ -15,7 +15,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^5.16.5" + "astro": "^5.16.6" }, "peerDependencies": { "astro": "^4.0.0 || ^5.0.0" diff --git a/examples/container-with-vitest/package.json b/examples/container-with-vitest/package.json index fa4ae5eb3dba..c2afd5101f74 100644 --- a/examples/container-with-vitest/package.json +++ b/examples/container-with-vitest/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@astrojs/react": "^4.4.2", - "astro": "^5.16.5", + "astro": "^5.16.6", "react": "^18.3.1", "react-dom": "^18.3.1", "vitest": "^3.2.4" diff --git a/examples/framework-alpine/package.json b/examples/framework-alpine/package.json index 87e8595e2a18..894d8541e600 100644 --- a/examples/framework-alpine/package.json +++ b/examples/framework-alpine/package.json @@ -13,6 +13,6 @@ "@astrojs/alpinejs": "^0.4.9", "@types/alpinejs": "^3.13.11", "alpinejs": "^3.15.2", - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index af1bf8b6e2b8..ab8f681c3597 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -13,11 +13,11 @@ "@astrojs/preact": "^4.1.3", "@astrojs/react": "^4.4.2", "@astrojs/solid-js": "^5.1.3", - "@astrojs/svelte": "^7.2.3", + "@astrojs/svelte": "^7.2.4", "@astrojs/vue": "^5.1.3", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", - "astro": "^5.16.5", + "astro": "^5.16.6", "preact": "^10.28.0", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/examples/framework-preact/package.json b/examples/framework-preact/package.json index ed7dbe191e78..9b30cc5d4711 100644 --- a/examples/framework-preact/package.json +++ b/examples/framework-preact/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/preact": "^4.1.3", "@preact/signals": "^2.5.1", - "astro": "^5.16.5", + "astro": "^5.16.6", "preact": "^10.28.0" } } diff --git a/examples/framework-react/package.json b/examples/framework-react/package.json index 4c51f2669cff..e94a5b9ec7b0 100644 --- a/examples/framework-react/package.json +++ b/examples/framework-react/package.json @@ -13,7 +13,7 @@ "@astrojs/react": "^4.4.2", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", - "astro": "^5.16.5", + "astro": "^5.16.6", "react": "^18.3.1", "react-dom": "^18.3.1" } diff --git a/examples/framework-solid/package.json b/examples/framework-solid/package.json index 88d0aba2d5f4..3563fa348241 100644 --- a/examples/framework-solid/package.json +++ b/examples/framework-solid/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/solid-js": "^5.1.3", - "astro": "^5.16.5", + "astro": "^5.16.6", "solid-js": "^1.9.10" } } diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json index be6fd04d4f56..94e40c5e58b7 100644 --- a/examples/framework-svelte/package.json +++ b/examples/framework-svelte/package.json @@ -10,8 +10,8 @@ "astro": "astro" }, "dependencies": { - "@astrojs/svelte": "^7.2.3", - "astro": "^5.16.5", + "@astrojs/svelte": "^7.2.4", + "astro": "^5.16.6", "svelte": "^5.45.10" } } diff --git a/examples/framework-vue/package.json b/examples/framework-vue/package.json index 90b985785ccf..544cffbffb67 100644 --- a/examples/framework-vue/package.json +++ b/examples/framework-vue/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/vue": "^5.1.3", - "astro": "^5.16.5", + "astro": "^5.16.6", "vue": "^3.5.25" } } diff --git a/examples/hackernews/package.json b/examples/hackernews/package.json index 5d278a5ee0cc..97589ac18a65 100644 --- a/examples/hackernews/package.json +++ b/examples/hackernews/package.json @@ -11,6 +11,6 @@ }, "dependencies": { "@astrojs/node": "^9.5.1", - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/integration/package.json b/examples/integration/package.json index 5c883c07416e..76ab068fb44c 100644 --- a/examples/integration/package.json +++ b/examples/integration/package.json @@ -15,7 +15,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^5.16.5" + "astro": "^5.16.6" }, "peerDependencies": { "astro": "^4.0.0" diff --git a/examples/minimal/package.json b/examples/minimal/package.json index 4d6576656e67..73805a59d15e 100644 --- a/examples/minimal/package.json +++ b/examples/minimal/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/portfolio/package.json b/examples/portfolio/package.json index bc30e0b75aeb..0906d6a25371 100644 --- a/examples/portfolio/package.json +++ b/examples/portfolio/package.json @@ -10,6 +10,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/ssr/package.json b/examples/ssr/package.json index 474d2cfc3f3b..1cf9cb9866c8 100644 --- a/examples/ssr/package.json +++ b/examples/ssr/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@astrojs/node": "^9.5.1", - "@astrojs/svelte": "^7.2.3", - "astro": "^5.16.5", + "@astrojs/svelte": "^7.2.4", + "astro": "^5.16.6", "svelte": "^5.45.10" } } diff --git a/examples/starlog/package.json b/examples/starlog/package.json index ac3c47fba442..2d9ddd59fc3b 100644 --- a/examples/starlog/package.json +++ b/examples/starlog/package.json @@ -9,7 +9,7 @@ "astro": "astro" }, "dependencies": { - "astro": "^5.16.5", + "astro": "^5.16.6", "sass": "^1.96.0", "sharp": "^0.34.3" } diff --git a/examples/toolbar-app/package.json b/examples/toolbar-app/package.json index 40c4f0c92166..2294c8246a46 100644 --- a/examples/toolbar-app/package.json +++ b/examples/toolbar-app/package.json @@ -16,6 +16,6 @@ }, "devDependencies": { "@types/node": "^18.17.8", - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/with-markdoc/package.json b/examples/with-markdoc/package.json index 7d0c070c8055..fee81a7ddfae 100644 --- a/examples/with-markdoc/package.json +++ b/examples/with-markdoc/package.json @@ -11,6 +11,6 @@ }, "dependencies": { "@astrojs/markdoc": "^0.15.10", - "astro": "^5.16.5" + "astro": "^5.16.6" } } diff --git a/examples/with-mdx/package.json b/examples/with-mdx/package.json index c5f2a1e23f53..e7d7ef31f4a8 100644 --- a/examples/with-mdx/package.json +++ b/examples/with-mdx/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/mdx": "^4.3.13", "@astrojs/preact": "^4.1.3", - "astro": "^5.16.5", + "astro": "^5.16.6", "preact": "^10.28.0" } } diff --git a/examples/with-nanostores/package.json b/examples/with-nanostores/package.json index 851a9d71111f..c33c3ad79595 100644 --- a/examples/with-nanostores/package.json +++ b/examples/with-nanostores/package.json @@ -12,7 +12,7 @@ "dependencies": { "@astrojs/preact": "^4.1.3", "@nanostores/preact": "^0.5.2", - "astro": "^5.16.5", + "astro": "^5.16.6", "nanostores": "^0.11.4", "preact": "^10.28.0" } diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 30c2b1407560..4830f6dd58d7 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -13,7 +13,7 @@ "@astrojs/mdx": "^4.3.13", "@tailwindcss/vite": "^4.1.18", "@types/canvas-confetti": "^1.9.0", - "astro": "^5.16.5", + "astro": "^5.16.6", "canvas-confetti": "^1.9.4", "tailwindcss": "^4.1.18" } diff --git a/examples/with-vitest/package.json b/examples/with-vitest/package.json index ce987a770214..f01a65d626f9 100644 --- a/examples/with-vitest/package.json +++ b/examples/with-vitest/package.json @@ -11,7 +11,7 @@ "test": "vitest" }, "dependencies": { - "astro": "^5.16.5", + "astro": "^5.16.6", "vitest": "^3.2.4" } } diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index 79d05b55eae1..1fd8d361348e 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,15 @@ # astro +## 5.16.6 + +### Patch Changes + +- [#14982](https://github.com/withastro/astro/pull/14982) [`6849e38`](https://github.com/withastro/astro/commit/6849e3844d940f76b544822e7bd247641d61567d) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes images outside the project directory not working when using astro:assets in development mode + +- [#14987](https://github.com/withastro/astro/pull/14987) [`9dd9fca`](https://github.com/withastro/astro/commit/9dd9fca81e5ed3d0d55e0b1624c6515706963b1f) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes SVGs not working in dev mode when using the passthrough image service + +- [#15014](https://github.com/withastro/astro/pull/15014) [`a178422`](https://github.com/withastro/astro/commit/a178422484ed62a76b227515a798e192fdcba3b9) Thanks [@delucis](https://github.com/delucis)! - Adds support for extending the type of the props accepted by Astro’s `` component, `` component, and `getImage()` API. + ## 5.16.5 ### Patch Changes diff --git a/packages/astro/package.json b/packages/astro/package.json index 3dcde5b0b5fa..e05edd561597 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -1,6 +1,6 @@ { "name": "astro", - "version": "5.16.5", + "version": "5.16.6", "description": "Astro is a modern site builder with web best practices, performance, and DX front-of-mind.", "type": "module", "author": "withastro", diff --git a/packages/integrations/svelte/CHANGELOG.md b/packages/integrations/svelte/CHANGELOG.md index 9e793a5bff53..91793cea081f 100644 --- a/packages/integrations/svelte/CHANGELOG.md +++ b/packages/integrations/svelte/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/svelte +## 7.2.4 + +### Patch Changes + +- [#15004](https://github.com/withastro/astro/pull/15004) [`16f3994`](https://github.com/withastro/astro/commit/16f3994fdb83d1b3421491c00bfd5ac9f7e37a5c) Thanks [@antonyfaris](https://github.com/antonyfaris)! - Fixes an issue where Svelte components used in Astro files would incorrectly report type errors when using `client:*` directives. + ## 7.2.3 ### Patch Changes diff --git a/packages/integrations/svelte/package.json b/packages/integrations/svelte/package.json index bceb773de65b..cfef9f8c7c34 100644 --- a/packages/integrations/svelte/package.json +++ b/packages/integrations/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@astrojs/svelte", - "version": "7.2.3", + "version": "7.2.4", "description": "Use Svelte components within Astro", "type": "module", "types": "./dist/index.d.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e110562b85d..909ab9be4854 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,7 +149,7 @@ importers: examples/basics: dependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/blog: @@ -164,7 +164,7 @@ importers: specifier: ^3.6.0 version: link:../../packages/integrations/sitemap astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro sharp: specifier: ^0.34.3 @@ -173,7 +173,7 @@ importers: examples/component: devDependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/container-with-vitest: @@ -182,7 +182,7 @@ importers: specifier: ^4.4.2 version: link:../../packages/integrations/react astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -213,7 +213,7 @@ importers: specifier: ^3.15.2 version: 3.15.2 astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/framework-multiple: @@ -228,7 +228,7 @@ importers: specifier: ^5.1.3 version: link:../../packages/integrations/solid '@astrojs/svelte': - specifier: ^7.2.3 + specifier: ^7.2.4 version: link:../../packages/integrations/svelte '@astrojs/vue': specifier: ^5.1.3 @@ -240,7 +240,7 @@ importers: specifier: ^18.3.7 version: 18.3.7(@types/react@18.3.27) astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro preact: specifier: ^10.28.0 @@ -270,7 +270,7 @@ importers: specifier: ^2.5.1 version: 2.5.1(preact@10.28.0) astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro preact: specifier: ^10.28.0 @@ -288,7 +288,7 @@ importers: specifier: ^18.3.7 version: 18.3.7(@types/react@18.3.27) astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -303,7 +303,7 @@ importers: specifier: ^5.1.3 version: link:../../packages/integrations/solid astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro solid-js: specifier: ^1.9.10 @@ -312,10 +312,10 @@ importers: examples/framework-svelte: dependencies: '@astrojs/svelte': - specifier: ^7.2.3 + specifier: ^7.2.4 version: link:../../packages/integrations/svelte astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro svelte: specifier: ^5.45.10 @@ -327,7 +327,7 @@ importers: specifier: ^5.1.3 version: link:../../packages/integrations/vue astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro vue: specifier: ^3.5.25 @@ -339,25 +339,25 @@ importers: specifier: ^9.5.1 version: link:../../packages/integrations/node astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/integration: devDependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/minimal: dependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/portfolio: dependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/ssr: @@ -366,10 +366,10 @@ importers: specifier: ^9.5.1 version: link:../../packages/integrations/node '@astrojs/svelte': - specifier: ^7.2.3 + specifier: ^7.2.4 version: link:../../packages/integrations/svelte astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro svelte: specifier: ^5.45.10 @@ -378,7 +378,7 @@ importers: examples/starlog: dependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro sass: specifier: ^1.96.0 @@ -393,7 +393,7 @@ importers: specifier: ^18.17.8 version: 18.19.130 astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/with-markdoc: @@ -402,7 +402,7 @@ importers: specifier: ^0.15.10 version: link:../../packages/integrations/markdoc astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro examples/with-mdx: @@ -414,7 +414,7 @@ importers: specifier: ^4.1.3 version: link:../../packages/integrations/preact astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro preact: specifier: ^10.28.0 @@ -429,7 +429,7 @@ importers: specifier: ^0.5.2 version: 0.5.2(nanostores@0.11.4)(preact@10.28.0) astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro nanostores: specifier: ^0.11.4 @@ -450,7 +450,7 @@ importers: specifier: ^1.9.0 version: 1.9.0 astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro canvas-confetti: specifier: ^1.9.4 @@ -462,7 +462,7 @@ importers: examples/with-vitest: dependencies: astro: - specifier: ^5.16.5 + specifier: ^5.16.6 version: link:../../packages/astro vitest: specifier: ^3.2.4 From 87b19b8df49d08ee7a7a1855f3645fe7bebf1997 Mon Sep 17 00:00:00 2001 From: Erika <3019731+Princesseuh@users.noreply.github.com> Date: Tue, 16 Dec 2025 14:29:09 +0100 Subject: [PATCH 10/18] fix(content-layer): Try a smarter solution to normalize bare image paths in JSON (#15028) * fix(content-layer): Try a smarter solution to normalize bare image paths in JSON * chore: changeset --- .changeset/lovely-mice-sniff.md | 5 +++++ packages/astro/src/content/utils.ts | 33 ++++++++++++++++------------- 2 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 .changeset/lovely-mice-sniff.md diff --git a/.changeset/lovely-mice-sniff.md b/.changeset/lovely-mice-sniff.md new file mode 100644 index 000000000000..cd05f7343f12 --- /dev/null +++ b/.changeset/lovely-mice-sniff.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes certain aliases not working when using images in JSON files with the content layer diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 55e69042bb7e..53f40c2444ff 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -186,23 +186,26 @@ export async function getEntryDataAndImages< z.string().transform((val) => { // Normalize bare filenames to relative paths for consistent resolution // This ensures bare filenames like "cover.jpg" work the same way as in markdown frontmatter - // Skip normalization for: - // - Relative paths (./foo, ../foo) - // - Absolute paths (/foo) - // - URLs (http://...) - // - Aliases (~/, @/, etc.) let normalizedPath = val; - if ( - val && - !val.startsWith('./') && - !val.startsWith('../') && - !val.startsWith('/') && - !val.startsWith('~') && - !val.startsWith('@') && - !val.includes('://') - ) { - normalizedPath = `./${val}`; + + // Skip normalization for URLs, absolute paths, and already-relative paths + const isUrl = val.includes('://'); + const isAbsolute = val.startsWith('/'); + const isRelative = val.startsWith('.') + + if (val && !isUrl && !isAbsolute && !isRelative) { + // Check if this is a local file or an alias + // Resolve relative to the entry's directory + const entryDir = path.dirname(entry._internal.filePath); + const resolvedPath = path.resolve(entryDir, val); + + // If the file exists, normalize to relative path + // Otherwise keep as-is (likely a Vite alias) + if (fsMod.existsSync(resolvedPath)) { + normalizedPath = `./${val}`; + } } + imageImports.add(normalizedPath); return `${IMAGE_IMPORT_PREFIX}${normalizedPath}`; }), From ee0a0fca7e55fdbb909a44e26fe7548fb7993207 Mon Sep 17 00:00:00 2001 From: Erika Date: Tue, 16 Dec 2025 13:30:05 +0000 Subject: [PATCH 11/18] [ci] format --- packages/astro/src/content/utils.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 53f40c2444ff..6149e352ff9d 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -187,25 +187,25 @@ export async function getEntryDataAndImages< // Normalize bare filenames to relative paths for consistent resolution // This ensures bare filenames like "cover.jpg" work the same way as in markdown frontmatter let normalizedPath = val; - + // Skip normalization for URLs, absolute paths, and already-relative paths const isUrl = val.includes('://'); const isAbsolute = val.startsWith('/'); - const isRelative = val.startsWith('.') - + const isRelative = val.startsWith('.'); + if (val && !isUrl && !isAbsolute && !isRelative) { // Check if this is a local file or an alias // Resolve relative to the entry's directory const entryDir = path.dirname(entry._internal.filePath); const resolvedPath = path.resolve(entryDir, val); - + // If the file exists, normalize to relative path // Otherwise keep as-is (likely a Vite alias) if (fsMod.existsSync(resolvedPath)) { normalizedPath = `./${val}`; } } - + imageImports.add(normalizedPath); return `${IMAGE_IMPORT_PREFIX}${normalizedPath}`; }), From 44922de64e32e53baddc27d5147a4684523e24ea Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 14:56:58 +0100 Subject: [PATCH 12/18] chore: document core/infra architecture (#14815) Co-authored-by: Emanuele Stoppa Co-authored-by: Matt Kane Co-authored-by: Matthew Phillips Co-authored-by: Matthew Phillips --- CONTRIBUTING.md | 180 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fe897df45b59..555a677dfd89 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -333,6 +333,186 @@ There are 3 contexts in which code executes: Understanding in which environment code runs, and at which stage in the process, can help clarify thinking about what Astro is doing. It also helps with debugging, for instance, if you’re working within `src/core/`, you know that your code isn’t executing within Vite, so you don’t have to debug Vite’s setup. But you will have to debug vite inside `runtime/server/`. +### Making code testable + +To make it easier to test code, try decoupling **business logic** from **infrastructure**: + +- **Infrastucture** is code that depends on external systems and/or requires aspecial environment to run. For example: DB calls, file system, randomness etc... +- **Business logic** (or *core logic* or *domain*) is the rest. It's pure logic that's easy to run from anywhere. + +That means avoiding side-effects by making external dependencies explicit. This often means passing more things as arguments. + +In practice, that can take several shapes. Let's have a look at an example: + +```ts +// create-key.ts +import { logger, generateKey } from '../utils.js' +import { encodeBase64 } from '@oslojs/encoding'; + +export async function createKey() { + const encoded = encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey()))); + logger.info(`Key created: ${key}`) +} + +// main.ts +import { createKey } from './create-key.js' + +async function main() { + await createKey() +} +``` + +This function is very hard to test because it depends on: +- A global logger +- The `crypto` global +- The `@oslojs/encoding` package +- A `generateKey` utility function + +One way to refactor this function is to move many of these things to arguments: + +```ts +// create-key.ts +import type { Logger } from '../types.js'; + +interface Options { + generateKey: () => Promise; + logger: Logger; +} + +export async function createKey({ generateKey, logger }: Options) { + const key = await generateKey(); + logger.info(`Key created: ${key}`) +} + +// main.ts +import { createKey } from './create-key.js' +import { logger, generateKey } from '../utils.js' +import { encodeBase64 } from '@oslojs/encoding'; + +async function main() { + await createKey({ + logger, + async generateKey() { + return encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey()))) + } + }) +} +``` + +We could take this further by writing some custom abstractions, which can be useful when some of this logic needs to shared: + +```ts +// types.ts +export interface KeyGenerator { + generate: () => Promise; +} + +// create-key.ts +import type { KeyGenerator, Logger } from './types.js'; + +interface Options { + keyGenerator: KeyGenerator; + logger: Logger; +} + +export async function createKey({ keyGenerator, logger }: Options) { + const key = await keyGenerator.generate(); + logger.info(`Key created: ${key}`) +} + +// crypto-key-generator.ts +import type { KeyGenerator } from './types.js'; +import { encodeBase64 } from '@oslojs/encoding'; + +export class CryptoKeyGenerator implements KeyGenerator { + readonly #algorithm = 'AES-GCM'; + + async generate(): Promise { + const key = await crypto.subtle.generateKey( + { + name: this.#algorithm, + length: 256, + }, + true, + ['encrypt', 'decrypt'], + ); + const encoded = encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', key))); + return encoded; + } +} + +// main.ts +import { logger } from './utils.js' +import { createKey } from './create-key.js' +import { CryptoKeyGenerator } from '../crypto-key-generator.js' + +const keyGenerator = new CryptoKeyGenerator() + +async function main() { + await createKey({ logger, keyGenerator }) +} +``` + +The power of this structure is that it makes it easy to unit test. Because abstractions hold very specific responsibilities, we can easily mock them: + +```js +// @ts-check +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import { createKey } from '../../../dist/cli/create-key/core/create-key.js'; +import { SpyLogger } from '../test-utils.js'; +import { FakeKeyGenerator } from './utils.js'; + +describe('CLI create-key', () => { + describe('core', () => { + describe('createKey()', () => { + it('logs the generated key', async () => { + const logger = new SpyLogger(); + const keyGenerator = new FakeKeyGenerator('FOO'); + + await createKey({ logger, keyGenerator }); + + assert.equal(logger.logs[0].type, 'info'); + assert.equal(logger.logs[0].label, 'crypto'); + assert.match(logger.logs[0].message, /ASTRO_KEY=FOO/); + }); + }); + }); +}); +``` + +It can be useful to create test specific abstractions: + +```js +// @ts-check + +/** + * @import { KeyGenerator } from "../../../dist/cli/create-key/definitions.js" + */ + +/** @implements {KeyGenerator} */ +export class FakeKeyGenerator { + /** @type {string} */ + #key; + + /** + * @param {string} key + */ + constructor(key) { + this.#key = key; + } + + async generate() { + return this.#key; + } +} +``` + +Remember: + +- Try test all implementations. If an infrastructure implementation is just a wrapper around a NPM package, you may not need to test it and instead trust the package own tests +- Always test business logic + ## Branches ### `main` From 84a09b17a5f1e3bdff7ed5b7e074d3da1f2043d8 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 13:58:16 +0000 Subject: [PATCH 13/18] [ci] format --- CONTRIBUTING.md | 105 +++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 555a677dfd89..10e759f0a0a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -338,7 +338,7 @@ Understanding in which environment code runs, and at which stage in the process, To make it easier to test code, try decoupling **business logic** from **infrastructure**: - **Infrastucture** is code that depends on external systems and/or requires aspecial environment to run. For example: DB calls, file system, randomness etc... -- **Business logic** (or *core logic* or *domain*) is the rest. It's pure logic that's easy to run from anywhere. +- **Business logic** (or _core logic_ or _domain_) is the rest. It's pure logic that's easy to run from anywhere. That means avoiding side-effects by making external dependencies explicit. This often means passing more things as arguments. @@ -346,23 +346,26 @@ In practice, that can take several shapes. Let's have a look at an example: ```ts // create-key.ts -import { logger, generateKey } from '../utils.js' +import { logger, generateKey } from '../utils.js'; import { encodeBase64 } from '@oslojs/encoding'; export async function createKey() { - const encoded = encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey()))); - logger.info(`Key created: ${key}`) + const encoded = encodeBase64( + new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey())), + ); + logger.info(`Key created: ${key}`); } // main.ts -import { createKey } from './create-key.js' +import { createKey } from './create-key.js'; async function main() { - await createKey() + await createKey(); } ``` This function is very hard to test because it depends on: + - A global logger - The `crypto` global - The `@oslojs/encoding` package @@ -381,21 +384,23 @@ interface Options { export async function createKey({ generateKey, logger }: Options) { const key = await generateKey(); - logger.info(`Key created: ${key}`) + logger.info(`Key created: ${key}`); } // main.ts -import { createKey } from './create-key.js' -import { logger, generateKey } from '../utils.js' +import { createKey } from './create-key.js'; +import { logger, generateKey } from '../utils.js'; import { encodeBase64 } from '@oslojs/encoding'; async function main() { await createKey({ logger, async generateKey() { - return encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey()))) - } - }) + return encodeBase64( + new Uint8Array(await crypto.subtle.exportKey('raw', await generateKey())), + ); + }, + }); } ``` @@ -417,7 +422,7 @@ interface Options { export async function createKey({ keyGenerator, logger }: Options) { const key = await keyGenerator.generate(); - logger.info(`Key created: ${key}`) + logger.info(`Key created: ${key}`); } // crypto-key-generator.ts @@ -427,8 +432,8 @@ import { encodeBase64 } from '@oslojs/encoding'; export class CryptoKeyGenerator implements KeyGenerator { readonly #algorithm = 'AES-GCM'; - async generate(): Promise { - const key = await crypto.subtle.generateKey( + async generate(): Promise { + const key = await crypto.subtle.generateKey( { name: this.#algorithm, length: 256, @@ -436,20 +441,20 @@ export class CryptoKeyGenerator implements KeyGenerator { true, ['encrypt', 'decrypt'], ); - const encoded = encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', key))); - return encoded; - } + const encoded = encodeBase64(new Uint8Array(await crypto.subtle.exportKey('raw', key))); + return encoded; + } } // main.ts -import { logger } from './utils.js' -import { createKey } from './create-key.js' -import { CryptoKeyGenerator } from '../crypto-key-generator.js' +import { logger } from './utils.js'; +import { createKey } from './create-key.js'; +import { CryptoKeyGenerator } from '../crypto-key-generator.js'; -const keyGenerator = new CryptoKeyGenerator() +const keyGenerator = new CryptoKeyGenerator(); async function main() { - await createKey({ logger, keyGenerator }) + await createKey({ logger, keyGenerator }); } ``` @@ -464,20 +469,20 @@ import { SpyLogger } from '../test-utils.js'; import { FakeKeyGenerator } from './utils.js'; describe('CLI create-key', () => { - describe('core', () => { - describe('createKey()', () => { - it('logs the generated key', async () => { - const logger = new SpyLogger(); - const keyGenerator = new FakeKeyGenerator('FOO'); - - await createKey({ logger, keyGenerator }); - - assert.equal(logger.logs[0].type, 'info'); - assert.equal(logger.logs[0].label, 'crypto'); - assert.match(logger.logs[0].message, /ASTRO_KEY=FOO/); - }); - }); - }); + describe('core', () => { + describe('createKey()', () => { + it('logs the generated key', async () => { + const logger = new SpyLogger(); + const keyGenerator = new FakeKeyGenerator('FOO'); + + await createKey({ logger, keyGenerator }); + + assert.equal(logger.logs[0].type, 'info'); + assert.equal(logger.logs[0].label, 'crypto'); + assert.match(logger.logs[0].message, /ASTRO_KEY=FOO/); + }); + }); + }); }); ``` @@ -492,19 +497,19 @@ It can be useful to create test specific abstractions: /** @implements {KeyGenerator} */ export class FakeKeyGenerator { - /** @type {string} */ - #key; - - /** - * @param {string} key - */ - constructor(key) { - this.#key = key; - } - - async generate() { - return this.#key; - } + /** @type {string} */ + #key; + + /** + * @param {string} key + */ + constructor(key) { + this.#key = key; + } + + async generate() { + return this.#key; + } } ``` From 811575237d159ceac5d9f0a2ea3bf023df718759 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 16:10:06 +0100 Subject: [PATCH 14/18] fix(astro): assets vite build log (#15034) --- .changeset/tired-poems-shake.md | 5 +++++ packages/astro/src/assets/utils/index.ts | 18 +++++++++--------- .../astro/src/assets/utils/remotePattern.ts | 9 --------- packages/astro/src/core/app/index.ts | 2 +- 4 files changed, 15 insertions(+), 19 deletions(-) create mode 100644 .changeset/tired-poems-shake.md delete mode 100644 packages/astro/src/assets/utils/remotePattern.ts diff --git a/.changeset/tired-poems-shake.md b/.changeset/tired-poems-shake.md new file mode 100644 index 000000000000..891ca6fa9aba --- /dev/null +++ b/.changeset/tired-poems-shake.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a vite warning log during builds when using npm diff --git a/packages/astro/src/assets/utils/index.ts b/packages/astro/src/assets/utils/index.ts index 0960d01ecf2f..3e32f6b90b8e 100644 --- a/packages/astro/src/assets/utils/index.ts +++ b/packages/astro/src/assets/utils/index.ts @@ -5,6 +5,15 @@ * If some functions don't need to be exposed, just import the file that contains the functions. */ +export { + isRemoteAllowed, + matchHostname, + matchPathname, + matchPattern, + matchPort, + matchProtocol, + type RemotePattern, +} from '@astrojs/internal-helpers/remote'; export { isESMImportedImage, isRemoteImage, resolveSrc } from './imageKind.js'; export { imageMetadata } from './metadata.js'; export { @@ -15,14 +24,5 @@ export { emitImageMetadata, } from './node/emitAsset.js'; export { getOrigQueryParams } from './queryParams.js'; -export { - isRemoteAllowed, - matchHostname, - matchPathname, - matchPattern, - matchPort, - matchProtocol, - type RemotePattern, -} from './remotePattern.js'; export { inferRemoteSize } from './remoteProbe.js'; export { hashTransform, propsToFilename } from './transformToPath.js'; diff --git a/packages/astro/src/assets/utils/remotePattern.ts b/packages/astro/src/assets/utils/remotePattern.ts deleted file mode 100644 index 31f078b3bf8e..000000000000 --- a/packages/astro/src/assets/utils/remotePattern.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { - isRemoteAllowed, - matchHostname, - matchPathname, - matchPattern, - matchPort, - matchProtocol, - type RemotePattern, -} from '@astrojs/internal-helpers/remote'; diff --git a/packages/astro/src/core/app/index.ts b/packages/astro/src/core/app/index.ts index 5cda6183f67d..7a0d0ffeb66a 100644 --- a/packages/astro/src/core/app/index.ts +++ b/packages/astro/src/core/app/index.ts @@ -3,7 +3,7 @@ import { hasFileExtension, isInternalPath, } from '@astrojs/internal-helpers/path'; -import { matchPattern, type RemotePattern } from '../../assets/utils/remotePattern.js'; +import { matchPattern, type RemotePattern } from '@astrojs/internal-helpers/remote'; import { normalizeTheLocale } from '../../i18n/index.js'; import type { RoutesList } from '../../types/astro.js'; import type { RouteData, SSRManifest } from '../../types/public/internal.js'; From dd067798c02bff4968b23ce92670685a4e99ccdc Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 16:13:38 +0100 Subject: [PATCH 15/18] chore(sitemap): migrate to astro:routes:resolved (#15033) --- .changeset/icy-pigs-smile.md | 5 +++++ packages/integrations/sitemap/src/index.ts | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 .changeset/icy-pigs-smile.md diff --git a/.changeset/icy-pigs-smile.md b/.changeset/icy-pigs-smile.md new file mode 100644 index 000000000000..b3c753a3e46e --- /dev/null +++ b/.changeset/icy-pigs-smile.md @@ -0,0 +1,5 @@ +--- +'@astrojs/sitemap': patch +--- + +Updates how routes are retrieved to avoid relying on a deprecated API diff --git a/packages/integrations/sitemap/src/index.ts b/packages/integrations/sitemap/src/index.ts index e7b87ddc9b97..bb4c53e55c8d 100644 --- a/packages/integrations/sitemap/src/index.ts +++ b/packages/integrations/sitemap/src/index.ts @@ -1,6 +1,6 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import type { AstroConfig, AstroIntegration } from 'astro'; +import type { AstroConfig, AstroIntegration, IntegrationResolvedRoute } from 'astro'; import type { EnumChangefreq, LinkItem as LinkItemBase, SitemapItemLoose } from 'sitemap'; import { ZodError } from 'zod'; @@ -76,17 +76,22 @@ const isStatusCodePage = (locales: string[]) => { }; }; const createPlugin = (options?: SitemapOptions): AstroIntegration => { + let _routes: Array; let config: AstroConfig; return { name: PKG_NAME, hooks: { + 'astro:routes:resolved': ({ routes }) => { + _routes = routes; + }, + 'astro:config:done': async ({ config: cfg }) => { config = cfg; }, - 'astro:build:done': async ({ dir, routes, pages, logger }) => { + 'astro:build:done': async ({ dir, pages, logger }) => { try { if (!config.site) { logger.warn( @@ -112,7 +117,7 @@ const createPlugin = (options?: SitemapOptions): AstroIntegration => { return new URL(fullPath, finalSiteUrl).href; }); - const routeUrls = routes.reduce((urls, r) => { + const routeUrls = _routes.reduce((urls, r) => { // Only expose pages, not endpoints or redirects if (r.type !== 'page') return urls; @@ -120,7 +125,7 @@ const createPlugin = (options?: SitemapOptions): AstroIntegration => { * Dynamic URLs have entries with `undefined` pathnames */ if (r.pathname) { - if (shouldIgnoreStatus(r.pathname ?? r.route)) return urls; + if (shouldIgnoreStatus(r.pathname ?? r.pattern)) return urls; // `finalSiteUrl` may end with a trailing slash // or not because of base paths. From 25d99b286bce254e2221afd45d0880ee8e545eae Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 17:22:35 +0100 Subject: [PATCH 16/18] wip --- packages/astro/CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index eb3c864a7c5e..9fd3e0212cc6 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -183,13 +183,17 @@ No other changes to your project code are required as long as you have been keeping up with Astro 5.x patch releases, which contained breaking changes to this experimental feature. If you experience problems with your live collections after upgrading to Astro v6 and removing this flag, please review the [Astro CHANGELOG from 5.10.2](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md#5102) onwards for any potential updates you might have missed, or follow the [current v6 documentation for live collections](https://docs.astro.build/en/guides/content-collections/). +### Patch Changes + +- Updated dependencies [[`727b0a2`](https://github.com/withastro/astro/commit/727b0a205eb765f1c36f13a73dfc69e17e44df8f)]: + - @astrojs/markdown-remark@7.0.0-alpha.0 + ## 5.16.6 ### Patch Changes - [#14982](https://github.com/withastro/astro/pull/14982) [`6849e38`](https://github.com/withastro/astro/commit/6849e3844d940f76b544822e7bd247641d61567d) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes images outside the project directory not working when using astro:assets in development mode -- Updated dependencies [[`727b0a2`](https://github.com/withastro/astro/commit/727b0a205eb765f1c36f13a73dfc69e17e44df8f)]: - - @astrojs/markdown-remark@7.0.0-alpha.0 + - [#14987](https://github.com/withastro/astro/pull/14987) [`9dd9fca`](https://github.com/withastro/astro/commit/9dd9fca81e5ed3d0d55e0b1624c6515706963b1f) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes SVGs not working in dev mode when using the passthrough image service - [#15014](https://github.com/withastro/astro/pull/15014) [`a178422`](https://github.com/withastro/astro/commit/a178422484ed62a76b227515a798e192fdcba3b9) Thanks [@delucis](https://github.com/delucis)! - Adds support for extending the type of the props accepted by Astro’s `` component, `` component, and `getImage()` API. From f588c4c3f10390efc8b9436d2c5c7be4b26f0e3f Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 17:23:43 +0100 Subject: [PATCH 17/18] wip --- packages/astro/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index 9fd3e0212cc6..8faa74561b4b 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -58,8 +58,6 @@ }); ``` -### Patch Changes - - [#14946](https://github.com/withastro/astro/pull/14946) [`95c40f7`](https://github.com/withastro/astro/commit/95c40f7109ce240206c3951761a7bb439dd809cb) Thanks [@ematipico](https://github.com/ematipico)! - Removes the `experimental.csp` flag and replaces it with a new configuration option `security.csp` - ([v6 upgrade guidance](https://v6.docs.astro.build/en/guides/upgrade-to/v6/#experimental-flags)) ## 6.0.0-alpha.0 From 3ac4c035a31888b988d13373c0105193af8d38db Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Tue, 16 Dec 2025 17:25:40 +0100 Subject: [PATCH 18/18] wip --- packages/astro/src/core/app/validate-forwarded-headers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/core/app/validate-forwarded-headers.ts b/packages/astro/src/core/app/validate-forwarded-headers.ts index 412299224462..b8847acf88de 100644 --- a/packages/astro/src/core/app/validate-forwarded-headers.ts +++ b/packages/astro/src/core/app/validate-forwarded-headers.ts @@ -1,4 +1,4 @@ -import { matchPattern, type RemotePattern } from '../../assets/utils/remotePattern.js'; +import { matchPattern, type RemotePattern } from '@astrojs/internal-helpers/remote'; /** * Validate a hostname by rejecting any with path separators.